
Key Required VerifiedUniversal

local function detectMobilePlatform()
local UserInputService = game:GetService("UserInputService")
local hasTouchScreen = UserInputService.TouchEnabled
local camera = workspace.CurrentCamera
local viewportSize = camera and camera.ViewportSize or Vector2.new(0, 0)
local isSmallScreen = viewportSize.X <= 1024 or viewportSize.Y <= 768
local hasGyroscope = UserInputService.GyroscopeEnabled or UserInputService.AccelerometerEnabled
local noKeyboard = not UserInputService.KeyboardEnabled
local executorName = identifyexecutor and identifyexecutor() or "Unknown"
local isMobileExecutor = executorName:lower():find("delta") or
executorName:lower():find("arceus") or
executorName:lower():find("fluxus") or
executorName:lower():find("krnl")
local isMobile = hasTouchScreen and (noKeyboard or isSmallScreen or hasGyroscope or isMobileExecutor)
if hasTouchScreen and isMobileExecutor then
isMobile = true
end
return isMobile
end
local isMobile = detectMobilePlatform()
local executorName = identifyexecutor and identifyexecutor() or "Unknown"
print("=== Violence District v2.2 Mobile Compatible ===")
print("Platform: " .. (isMobile and "Mobile" or "PC"))
print("Executor: " .. executorName)
print("============================================")
local function safeHttpGet(url)
local success, result
if game.HttpGet then
success, result = pcall(function()
return game:HttpGet(url)
end)
if success then return result end
end
if syn and syn.request then
success, result = pcall(function()
return syn.request({Url = url, Method = "GET"}).Body
end)
if success then return result end
end
if http and http.request then
success, result = pcall(function()
return http.request({Url = url, Method = "GET"}).Body
end)
if success then return result end
end
if http_request then
success, result = pcall(function()
return http_request({Url = url, Method = "GET"}).Body
end)
if success then return result end
end
if request then
success, result = pcall(function()
return request({Url = url, Method = "GET"}).Body
end)
if success then return result end
end
error("Failed to load URL: " .. url)
end
local Rayfield
local loadSuccess, loadError = pcall(function()
Rayfield = loadstring(safeHttpGet('https://sirius.menu/rayfield'))()
end)
if not loadSuccess then
warn("Failed to load Rayfield from sirius.menu, trying backup...")
pcall(function()
Rayfield = loadstring(safeHttpGet('https://raw.githubusercontent.com/shlexware/Rayfield/main/source'))()
end)
if not Rayfield then
error("CRITICAL: Could not load Rayfield UI Library. Please check your internet connection or executor compatibility.")
end
end
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local Config = {
ESP = {
Killer = false,
Survivor = false,
Generator = false,
Gate = false,
Hook = false,
Pallet = false,
Window = false,
Pumpkin = false,
ClosestHook = false,
ShowOnlyClosestHook = false,
ShowDistance = true,
MaxDistance = 500
},
AutoFeatures = {
AutoGenerator = false,
GeneratorMode = "great",
AutoLeaveGenerator = false,
LeaveDistance = 15,
LeaveKeybind = Enum.KeyCode.Q,
AutoAttack = false,
AttackRange = 10
},
Teleportation = {
TeleportOffset = 3,
SafeTeleport = true,
TeleportDelay = 0.1
},
Performance = {
UpdateRate = 0.5,
UseDistanceCulling = true,
MaxESPObjects = isMobile and 50 or 100,
DisableParticles = false,
LowerGraphics = false,
DisableShadows = false,
ReduceRenderDistance = false
},
Mobile = {
TouchControlsEnabled = isMobile,
ButtonSize = 80,
ButtonTransparency = 0.3,
AutoOptimize = true,
AggressiveOptimization = false
}
}
local Highlights = {}
local BillboardGuis = {}
local LastUpdate = 0
local UpdateConnection = nil
local LeaveGeneratorConnection = nil
local AutoAttackConnection = nil
local ClosestHookHighlight = nil
local MobileUI = nil
local FPSCounterEnabled = false
local FPSCounterUI = nil
local function notify(title, content, duration)
local success = pcall(function()
Rayfield:Notify({
Title = title,
Content = content,
Duration = duration or 3,
Image = 4483362458
})
end)
if not success then
warn(string.format("[%s] %s", title, content))
end
end
local function safeCall(func, ...)
local success, result = pcall(func, ...)
if not success then
return nil
end
return result
end
local function validateInstance(instance)
return instance and typeof(instance) == "Instance" and instance.Parent ~= nil
end
local function isKiller()
return LocalPlayer.Team and LocalPlayer.Team.Name == "Killer"
end
local function isSurvivor()
return LocalPlayer.Team and LocalPlayer.Team.Name == "Survivors"
end
local function applyMobileOptimizations()
if not isMobile then return end
local lighting = game:GetService("Lighting")
local workspace = Workspace
safeCall(function()
settings().Rendering.QualityLevel = Enum.QualityLevel.Level01
lighting.GlobalShadows = false
lighting.FogEnd = 100
lighting.Brightness = 2
for _, effect in ipairs(lighting:GetChildren()) do
if effect:IsA("PostEffect") then
effect.Enabled = false
end
end
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("ParticleEmitter") then
obj.Enabled = false
elseif obj:IsA("Trail") then
obj.Enabled = false
elseif obj:IsA("Beam") then
obj.Enabled = false
elseif obj:IsA("Fire") or obj:IsA("Smoke") or obj:IsA("Sparkles") then
obj.Enabled = false
end
end
workspace.StreamingEnabled = true
workspace.StreamingMinRadius = 32
workspace.StreamingTargetRadius = 64
if workspace:FindFirstChild("Terrain") then
workspace.Terrain.Decoration = false
end
game:GetService("RunService"):Set3dRenderingEnabled(true)
end)
end
local function applyAggressiveMobileOptimizations()
if not isMobile then return end
applyMobileOptimizations()
safeCall(function()
local workspace = Workspace
settings().Rendering.QualityLevel = Enum.QualityLevel.Level01
settings().Rendering.MeshPartDetailLevel = Enum.MeshPartDetailLevel.Level01
settings().Rendering.EnableFRM = false
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("Texture") or obj:IsA("Decal") then
obj.Transparency = 1
elseif obj:IsA("SurfaceAppearance") then
obj.Parent = nil
end
end
safeCall(function()
for _, sound in ipairs(workspace:GetDescendants()) do
if sound:IsA("Sound") and sound.Name ~= "Music" then
sound.Volume = 0
end
end
end)
Config.Performance.UpdateRate = 1.0
Config.Performance.MaxESPObjects = 25
end)
end
local function applyPerformanceSettings()
local lighting = game:GetService("Lighting")
local workspace = Workspace
if Config.Performance.DisableParticles then
safeCall(function()
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("ParticleEmitter") or obj:IsA("Trail") or obj:IsA("Beam") then
obj.Enabled = false
end
end
end)
end
if Config.Performance.LowerGraphics then
safeCall(function()
settings().Rendering.QualityLevel = Enum.QualityLevel.Level01
end)
end
if Config.Performance.DisableShadows then
safeCall(function()
lighting.GlobalShadows = false
lighting.FogEnd = 100
end)
end
if Config.Performance.ReduceRenderDistance then
safeCall(function()
workspace.StreamingEnabled = true
workspace.StreamingMinRadius = 32
workspace.StreamingTargetRadius = 64
end)
end
end
local function resetPerformanceSettings()
local lighting = game:GetService("Lighting")
local workspace = Workspace
safeCall(function()
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("ParticleEmitter") or obj:IsA("Trail") or obj:IsA("Beam") then
obj.Enabled = true
end
end
settings().Rendering.QualityLevel = Enum.QualityLevel.Automatic
lighting.GlobalShadows = true
lighting.FogEnd = 100000
for _, effect in ipairs(lighting:GetChildren()) do
if effect:IsA("PostEffect") then
effect.Enabled = true
end
end
for _, obj in ipairs(workspace:GetDescendants()) do
if obj:IsA("Texture") or obj:IsA("Decal") then
obj.Transparency = 0
end
end
end)
end
local function createMobileControls()
if not isMobile then return end
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "MobileControls"
screenGui.ResetOnSpawn = false
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
local leaveButton = Instance.new("TextButton")
leaveButton.Name = "LeaveGenerator"
leaveButton.Size = UDim2.new(0, Config.Mobile.ButtonSize, 0, Config.Mobile.ButtonSize)
leaveButton.Position = UDim2.new(1, -100, 0.5, -40)
leaveButton.BackgroundColor3 = Color3.fromRGB(255, 100, 100)
leaveButton.BackgroundTransparency = Config.Mobile.ButtonTransparency
leaveButton.Text = "LEAVE"
leaveButton.TextColor3 = Color3.new(1, 1, 1)
leaveButton.TextScaled = true
leaveButton.Font = Enum.Font.GothamBold
leaveButton.Parent = screenGui
local leaveCorner = Instance.new("UICorner")
leaveCorner.CornerRadius = UDim.new(0, 10)
leaveCorner.Parent = leaveButton
leaveButton.MouseButton1Click:Connect(function()
leaveGenerator()
end)
local tpButton = Instance.new("TextButton")
tpButton.Name = "TeleportGen"
tpButton.Size = UDim2.new(0, Config.Mobile.ButtonSize, 0, Config.Mobile.ButtonSize)
tpButton.Position = UDim2.new(1, -100, 0.5, 60)
tpButton.BackgroundColor3 = Color3.fromRGB(100, 150, 255)
tpButton.BackgroundTransparency = Config.Mobile.ButtonTransparency
tpButton.Text = "TP GEN"
tpButton.TextColor3 = Color3.new(1, 1, 1)
tpButton.TextScaled = true
tpButton.Font = Enum.Font.GothamBold
tpButton.Parent = screenGui
local tpCorner = Instance.new("UICorner")
tpCorner.CornerRadius = UDim.new(0, 10)
tpCorner.Parent = tpButton
tpButton.MouseButton1Click:Connect(function()
local generators = getGeneratorsByDistance()
if #generators > 0 then
safeTeleport(generators[1].part.CFrame)
notify("Teleported!", "Moved to closest generator", 2)
end
end)
local success = pcall(function()
screenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
end)
if success then
notify("Mobile Controls", "Touch controls enabled!", 3)
MobileUI = screenGui
end
end
local function createFPSCounter()
if FPSCounterUI then return end
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "FPSCounter"
screenGui.ResetOnSpawn = false
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
local frame = Instance.new("Frame")
frame.Name = "FPSFrame"
frame.Size = UDim2.new(0, 120, 0, 50)
frame.Position = UDim2.new(0, 10, 0, 10)
frame.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
frame.BackgroundTransparency = 0.3
frame.BorderSizePixel = 0
frame.Parent = screenGui
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 8)
corner.Parent = frame
local fpsLabel = Instance.new("TextLabel")
fpsLabel.Name = "FPSLabel"
fpsLabel.Size = UDim2.new(1, 0, 1, 0)
fpsLabel.BackgroundTransparency = 1
fpsLabel.Text = "FPS: 0"
fpsLabel.TextColor3 = Color3.fromRGB(0, 255, 0)
fpsLabel.TextStrokeTransparency = 0
fpsLabel.TextStrokeColor3 = Color3.new(0, 0, 0)
fpsLabel.Font = Enum.Font.GothamBold
fpsLabel.TextSize = 18
fpsLabel.Parent = frame
local dragging = false
local dragInput, mousePos, framePos
frame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
mousePos = input.Position
framePos = frame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
frame.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
dragInput = input
end
end)
UserInputService.InputChanged:Connect(function(input)
if input == dragInput and dragging then
local delta = input.Position - mousePos
frame.Position = UDim2.new(
framePos.X.Scale,
framePos.X.Offset + delta.X,
framePos.Y.Scale,
framePos.Y.Offset + delta.Y
)
end
end)
local lastTime = tick()
local frameCount = 0
local fps = 0
RunService.Heartbeat:Connect(function()
if not FPSCounterEnabled then return end
frameCount = frameCount + 1
local currentTime = tick()
local deltaTime = currentTime - lastTime
if deltaTime >= 1.5 then
fps = math.floor(frameCount / deltaTime)
frameCount = 0
lastTime = currentTime
if fps >= 60 then
fpsLabel.TextColor3 = Color3.fromRGB(0, 255, 0)
elseif fps >= 30 then
fpsLabel.TextColor3 = Color3.fromRGB(255, 255, 0)
else
fpsLabel.TextColor3 = Color3.fromRGB(255, 0, 0)
end
fpsLabel.Text = string.format("FPS: %d", fps)
end
end)
local success = pcall(function()
screenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
end)
if success then
FPSCounterUI = screenGui
FPSCounterEnabled = true
notify("FPS Counter", "Enabled - Drag to move!", 3)
end
end
local function removeFPSCounter()
if FPSCounterUI then
FPSCounterUI:Destroy()
FPSCounterUI = nil
FPSCounterEnabled = false
end
end
local function getCharacterRootPart()
if not LocalPlayer.Character then return nil end
return LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
end
local function isNearGenerator()
local hrp = getCharacterRootPart()
if not hrp then return false, nil end
local map = Workspace:FindFirstChild("Map")
if not map then return false, nil end
local nearestGen = nil
local nearestDist = math.huge
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Generator" then
local genPart = obj:FindFirstChildWhichIsA("BasePart")
if genPart then
local distance = (genPart.Position - hrp.Position).Magnitude
if distance < nearestDist then
nearestDist = distance
nearestGen = obj
end
end
end
end
if nearestGen and nearestDist <= Config.AutoFeatures.LeaveDistance then
return true, nearestGen, nearestDist
end
return false, nil, nil
end
function leaveGenerator()
local hrp = getCharacterRootPart()
if not hrp then return false end
local isNear, nearestGen, distance = isNearGenerator()
if not isNear then
notify("Not Near", "You're not near any generator", 2)
return false
end
local genPart = nearestGen:FindFirstChildWhichIsA("BasePart")
if genPart then
local direction = (hrp.Position - genPart.Position).Unit
local escapeDistance = Config.AutoFeatures.LeaveDistance + 15
local escapePosition = hrp.Position + (direction * escapeDistance)
local escapeCFrame = CFrame.new(escapePosition, escapePosition + hrp.CFrame.LookVector)
if safeTeleport(escapeCFrame, Vector3.new(0, 2, 0)) then
notify("Escaped!", string.format("Moved %.0f studs away", escapeDistance), 2)
return true
end
end
return false
end
local function startAutoLeaveGenerator()
if LeaveGeneratorConnection then return end
if not isMobile then
LeaveGeneratorConnection = UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode == Config.AutoFeatures.LeaveKeybind then
leaveGenerator()
end
end)
notify("Auto Leave Enabled", string.format("Press %s to leave generator", Config.AutoFeatures.LeaveKeybind.Name), 3)
else
notify("Mobile Mode", "Use the LEAVE button to escape generators", 3)
end
end
local function stopAutoLeaveGenerator()
if LeaveGeneratorConnection then
LeaveGeneratorConnection:Disconnect()
LeaveGeneratorConnection = nil
end
notify("Auto Leave Disabled", "Keybind disabled", 2)
end
local function findClosestSurvivor()
if not isKiller() then return nil, nil end
local hrp = getCharacterRootPart()
if not hrp then return nil, nil end
local closestPlayer = nil
local closestDist = math.huge
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Team and player.Team.Name == "Survivors" and player.Character then
local targetHRP = player.Character:FindFirstChild("HumanoidRootPart")
if targetHRP then
local dist = (targetHRP.Position - hrp.Position).Magnitude
if dist < closestDist and dist <= Config.AutoFeatures.AttackRange then
closestDist = dist
closestPlayer = player
end
end
end
end
return closestPlayer, closestDist
end
local function performAutoAttack()
if not isKiller() then return end
local target, distance = findClosestSurvivor()
if not target then return end
safeCall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if remotes then
local attacks = remotes:FindFirstChild("Attacks")
if attacks then
local basicAttack = attacks:FindFirstChild("BasicAttack")
if basicAttack then
basicAttack:FireServer(false)
end
end
end
end)
end
local function startAutoAttack()
if AutoAttackConnection then return end
if not isKiller() then
notify("Error", "You must be the Killer to use Auto Attack!", 3)
return
end
AutoAttackConnection = RunService.Heartbeat:Connect(function()
if Config.AutoFeatures.AutoAttack then
performAutoAttack()
end
end)
notify("Auto Attack Enabled", string.format("Range: %d studs", Config.AutoFeatures.AttackRange), 3)
end
local function stopAutoAttack()
if AutoAttackConnection then
AutoAttackConnection:Disconnect()
AutoAttackConnection = nil
end
notify("Auto Attack Disabled", "Auto attack stopped", 2)
end
local function getAllGenerators()
local generators = {}
local map = Workspace:FindFirstChild("Map")
if not map then return generators end
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Generator" then
local genPart = obj:FindFirstChildWhichIsA("BasePart")
if genPart then
table.insert(generators, {
model = obj,
part = genPart,
position = genPart.Position
})
end
end
end
return generators
end
function getGeneratorsByDistance()
local hrp = getCharacterRootPart()
if not hrp then return {} end
local generators = getAllGenerators()
for _, gen in ipairs(generators) do
gen.distance = (gen.position - hrp.Position).Magnitude
end
table.sort(generators, function(a, b)
return a.distance < b.distance
end)
return generators
end
function safeTeleport(targetCFrame, offset)
local hrp = getCharacterRootPart()
if not hrp then
notify("Error", "Character not found", 3)
return false
end
offset = offset or Vector3.new(0, Config.Teleportation.TeleportOffset, 0)
if Config.Teleportation.SafeTeleport then
safeCall(function()
for _, part in ipairs(LocalPlayer.Character:GetDescendants()) do
if part:IsA("BasePart") then
part.CanCollide = false
end
end
end)
end
hrp.CFrame = targetCFrame + offset
if Config.Teleportation.SafeTeleport then
task.delay(0.5, function()
safeCall(function()
for _, part in ipairs(LocalPlayer.Character:GetDescendants()) do
if part:IsA("BasePart") and part.Name ~= "HumanoidRootPart" then
part.CanCollide = true
end
end
end)
end)
end
return true
end
local function createHighlight(obj, color)
if not validateInstance(obj) then return end
if obj:FindFirstChild("H") then return end
safeCall(function()
local h = Instance.new("Highlight")
h.Name = "H"
h.Adornee = obj
h.FillColor = color
h.OutlineColor = color
h.FillTransparency = 0.5
h.OutlineTransparency = 0
h.Parent = obj
Highlights[obj] = h
end)
end
local function removeHighlight(obj)
if Highlights[obj] then
safeCall(function()
if validateInstance(Highlights[obj]) then
Highlights[obj]:Destroy()
end
end)
Highlights[obj] = nil
end
local existingH = obj:FindFirstChild("H")
if existingH then
existingH:Destroy()
end
end
local function createLabel(obj, text, color)
if not validateInstance(obj) then return end
if not LocalPlayer.Character or not LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then return end
local rootPart = obj:IsA("Model") and obj:FindFirstChildWhichIsA("BasePart") or (obj:IsA("BasePart") and obj or nil)
if not rootPart then return end
local playerRoot = LocalPlayer.Character.HumanoidRootPart
local distance = (playerRoot.Position - rootPart.Position).Magnitude
if Config.Performance.UseDistanceCulling and distance > Config.ESP.MaxDistance then
if BillboardGuis[obj] then
safeCall(function()
if validateInstance(BillboardGuis[obj]) then
BillboardGuis[obj]:Destroy()
end
end)
BillboardGuis[obj] = nil
end
return
end
if BillboardGuis[obj] and validateInstance(BillboardGuis[obj]) then
local textLabel = BillboardGuis[obj]:FindFirstChild("TextLabel")
if textLabel and Config.ESP.ShowDistance then
textLabel.Text = string.format("%s\n%.0fm", text, distance)
elseif textLabel then
textLabel.Text = text
end
return
end
safeCall(function()
local billboard = Instance.new("BillboardGui")
billboard.Size = UDim2.new(0, 200, 0, 50)
billboard.AlwaysOnTop = true
billboard.StudsOffset = Vector3.new(0, 3, 0)
billboard.Adornee = rootPart
billboard.Parent = obj
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0)
textLabel.BackgroundTransparency = 1
textLabel.TextColor3 = color
textLabel.TextStrokeColor3 = Color3.new(0, 0, 0)
textLabel.TextStrokeTransparency = 0
textLabel.Font = Enum.Font.GothamBold
textLabel.TextScaled = true
textLabel.Text = Config.ESP.ShowDistance and string.format("%s\n%.0fm", text, distance) or text
textLabel.Parent = billboard
BillboardGuis[obj] = billboard
end)
end
local function removeLabel(obj)
if BillboardGuis[obj] then
safeCall(function()
if validateInstance(BillboardGuis[obj]) then
BillboardGuis[obj]:Destroy()
end
end)
BillboardGuis[obj] = nil
end
end
local function clearAllESP()
for obj, h in pairs(Highlights) do
removeHighlight(obj)
end
for obj, gui in pairs(BillboardGuis) do
removeLabel(obj)
end
Highlights = {}
BillboardGuis = {}
end
local function updatePlayerESP()
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character and player.Team then
local teamName = player.Team.Name
if teamName == "Killer" and Config.ESP.Killer then
createHighlight(player.Character, Color3.fromRGB(255, 0, 0))
createLabel(player.Character, player.Name .. "\n[KILLER]", Color3.fromRGB(255, 0, 0))
elseif teamName == "Survivors" and Config.ESP.Survivor then
createHighlight(player.Character, Color3.fromRGB(0, 255, 0))
createLabel(player.Character, player.Name .. "\n[SURVIVOR]", Color3.fromRGB(0, 255, 0))
else
removeHighlight(player.Character)
removeLabel(player.Character)
end
end
end
end
local function updateGeneratorESP()
if not Config.ESP.Generator then return end
safeCall(function()
local map = Workspace:FindFirstChild("Map")
if not map then return end
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Generator" then
createHighlight(obj, Color3.fromRGB(203, 132, 66))
createLabel(obj, "Generator", Color3.fromRGB(203, 132, 66))
end
end
end)
end
local function updateGateESP()
if not Config.ESP.Gate then return end
safeCall(function()
local map = Workspace:FindFirstChild("Map")
if not map then return end
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Gate" then
createHighlight(obj, Color3.fromRGB(255, 255, 255))
createLabel(obj, "Gate", Color3.fromRGB(255, 255, 255))
end
end
end)
end
local function updateHookESP()
if not Config.ESP.Hook then return end
safeCall(function()
local map = Workspace:FindFirstChild("Map")
if not map then return end
if Config.ESP.ShowOnlyClosestHook then
local hrp = getCharacterRootPart()
if not hrp then return end
local closestHook = nil
local closestDist = math.huge
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Hook" then
local hookPart = obj:FindFirstChildWhichIsA("BasePart")
if hookPart then
local dist = (hookPart.Position - hrp.Position).Magnitude
if dist < closestDist then
closestDist = dist
closestHook = obj
end
end
end
end
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Hook" then
removeHighlight(obj)
removeLabel(obj)
end
end
if closestHook then
if closestHook:FindFirstChild("Model") then
for _, part in ipairs(closestHook.Model:GetDescendants()) do
if part:IsA("MeshPart") then
createHighlight(part, Color3.fromRGB(255, 255, 0))
end
end
end
createLabel(closestHook, "CLOSEST HOOK", Color3.fromRGB(255, 255, 0))
end
else
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Hook" then
if obj:FindFirstChild("Model") then
for _, part in ipairs(obj.Model:GetDescendants()) do
if part:IsA("MeshPart") then
createHighlight(part, Color3.fromRGB(255, 0, 0))
end
end
end
createLabel(obj, "Hook", Color3.fromRGB(255, 0, 0))
end
end
end
end)
end
local function updatePalletESP()
if not Config.ESP.Pallet then return end
safeCall(function()
local map = Workspace:FindFirstChild("Map")
if not map then return end
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Palletwrong" then
createHighlight(obj, Color3.fromRGB(255, 255, 0))
createLabel(obj, "Pallet", Color3.fromRGB(255, 255, 0))
end
end
end)
end
local function updateWindowESP()
if not Config.ESP.Window then return end
safeCall(function()
for _, obj in ipairs(Workspace:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Window" then
createHighlight(obj, Color3.fromRGB(173, 216, 230))
createLabel(obj, "Window", Color3.fromRGB(173, 216, 230))
end
end
end)
end
local function updatePumpkinESP()
if not Config.ESP.Pumpkin then return end
safeCall(function()
local map = Workspace:FindFirstChild("Map")
if not map then return end
local pumpkins = map:FindFirstChild("Pumpkins")
if not pumpkins then return end
for _, obj in ipairs(pumpkins:GetDescendants()) do
if obj:IsA("Model") and obj.Name:find("Pumpkin") then
createHighlight(obj, Color3.fromRGB(255, 140, 0))
createLabel(obj, "Pumpkin", Color3.fromRGB(255, 140, 0))
end
end
end)
end
local function updateAllESP()
local currentTime = tick()
if currentTime - LastUpdate < Config.Performance.UpdateRate then return end
LastUpdate = currentTime
local espCount = 0
local maxObjects = Config.Performance.MaxESPObjects
for obj, h in pairs(Highlights) do
if not validateInstance(obj) or not validateInstance(h) then
Highlights[obj] = nil
else
espCount = espCount + 1
end
end
for obj, gui in pairs(BillboardGuis) do
if not validateInstance(obj) or not validateInstance(gui) then
BillboardGuis[obj] = nil
end
end
if espCount >= maxObjects then
return
end
updatePlayerESP()
updateGeneratorESP()
updateGateESP()
updateHookESP()
updatePalletESP()
updateWindowESP()
updatePumpkinESP()
end
local function startESP()
if UpdateConnection then return end
UpdateConnection = RunService.Heartbeat:Connect(updateAllESP)
notify("ESP Started", "All ESP features activated", 2)
end
local function stopESP()
if UpdateConnection then
UpdateConnection:Disconnect()
UpdateConnection = nil
end
clearAllESP()
notify("ESP Stopped", "All ESP disabled", 2)
end
local Window = Rayfield:CreateWindow({
Name = "🎮 Golds Easy Hub - Violence District v2.2",
LoadingTitle = "Loading Mobile-Compatible Script",
LoadingSubtitle = "by goldgoldgoldblazn | " .. (isMobile and "Mobile Mode" or "PC Mode"),
ConfigurationSaving = {
Enabled = true,
FolderName = nil,
FileName = "ViolenceDistrictConfig"
},
Discord = {
Enabled = false,
Invite = "CnNqEVFxh6",
RememberJoins = false
},
KeySystem = false
})
local CreditsTab = Window:CreateTab("ℹ️ Credits & Info", 4483362458)
CreditsTab:CreateSection("👤 Main Developer")
CreditsTab:CreateLabel("Created by: goldgoldgoldblazn")
CreditsTab:CreateLabel("Version: 2.2 (Mobile Compatible)")
CreditsTab:CreateLabel("")
CreditsTab:CreateLabel("🌟 Thank you for using my script!")
CreditsTab:CreateSection("💬 Discord Community")
CreditsTab:CreateLabel("Join for updates, support & more!")
CreditsTab:CreateLabel("Discord: discord.gg/CnNqEVFxh6")
CreditsTab:CreateButton({
Name = "📋 Copy Discord Invite Link",
Callback = function()
local inviteLink = "https://discord.gg/CnNqEVFxh6"
local success = pcall(function()
setclipboard(inviteLink)
end)
if success then
notify("Discord Link Copied!", "discord.gg/CnNqEVFxh6 copied to clipboard!", 4)
else
notify("Discord Server", "discord.gg/CnNqEVFxh6 - Copy this manually!", 5)
end
end
})
if isMobile then
CreditsTab:CreateLabel("")
CreditsTab:CreateLabel("📱 Mobile Tip: Link copied!")
CreditsTab:CreateLabel("Paste in Discord app or browser")
end
CreditsTab:CreateSection("📊 Script Information")
CreditsTab:CreateLabel("Game: Violence District")
CreditsTab:CreateLabel("Platform: " .. (isMobile and "📱 Mobile" or "💻 PC"))
CreditsTab:CreateLabel("Executor: " .. executorName)
CreditsTab:CreateLabel("UI Library: Rayfield by Sirius")
CreditsTab:CreateSection("✨ What's New in v2.2")
CreditsTab:CreateParagraph({
Title = "Mobile Support Added!",
Content = "✅ Delta & KRNL Support\n✅ Touch Controls\n✅ Better Performance\n✅ iOS/Android Compatible\n✅ Smart Auto-Attack\n✅ Draggable FPS Counter\n✅ Mobile Optimizations"
})
CreditsTab:CreateParagraph({
Title = "All Features",
Content = "• Player & Object ESP\n• Auto-Complete Generators\n• Smart Auto Attack (Killer)\n• Quick Leave Generator\n• Advanced Teleportation\n• Performance Boost (Mobile)\n• Killer Powers\n• Touch Controls"
})
local ESPTab = Window:CreateTab("👁️ ESP", 4483362458)
ESPTab:CreateSection("Player ESP")
ESPTab:CreateToggle({
Name = "Killer ESP (Red)",
CurrentValue = false,
Flag = "KillerESP",
Callback = function(Value)
Config.ESP.Killer = Value
if Value then
startESP()
else
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character and player.Team and player.Team.Name == "Killer" then
removeHighlight(player.Character)
removeLabel(player.Character)
end
end
end
end
})
ESPTab:CreateToggle({
Name = "Survivor ESP (Green)",
CurrentValue = false,
Flag = "SurvivorESP",
Callback = function(Value)
Config.ESP.Survivor = Value
if Value then
startESP()
else
for _, player in ipairs(Players:GetPlayers()) do
if player ~= LocalPlayer and player.Character and player.Team and player.Team.Name == "Survivors" then
removeHighlight(player.Character)
removeLabel(player.Character)
end
end
end
end
})
ESPTab:CreateSection("Object ESP")
ESPTab:CreateToggle({
Name = "Generator ESP (Orange)",
CurrentValue = false,
Flag = "GeneratorESP",
Callback = function(Value)
Config.ESP.Generator = Value
if Value then
startESP()
else
local map = Workspace:FindFirstChild("Map")
if map then
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Generator" then
removeHighlight(obj)
removeLabel(obj)
end
end
end
end
end
})
ESPTab:CreateToggle({
Name = "Gate ESP (White)",
CurrentValue = false,
Flag = "GateESP",
Callback = function(Value)
Config.ESP.Gate = Value
if Value then
startESP()
end
end
})
ESPTab:CreateToggle({
Name = "Hook ESP (Red)",
CurrentValue = false,
Flag = "HookESP",
Callback = function(Value)
Config.ESP.Hook = Value
if Value then
startESP()
else
local map = Workspace:FindFirstChild("Map")
if map then
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Hook" then
removeHighlight(obj)
removeLabel(obj)
end
end
end
end
end
})
ESPTab:CreateToggle({
Name = "Show Only Closest Hook",
CurrentValue = false,
Flag = "ShowOnlyClosestHook",
Callback = function(Value)
Config.ESP.ShowOnlyClosestHook = Value
local map = Workspace:FindFirstChild("Map")
if map then
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Hook" then
removeHighlight(obj)
removeLabel(obj)
end
end
end
if Config.ESP.Hook then
updateHookESP()
end
notify("Hook ESP", Value and "Showing only closest hook" or "Showing all hooks", 2)
end
})
ESPTab:CreateToggle({
Name = "Pallet ESP (Yellow)",
CurrentValue = false,
Flag = "PalletESP",
Callback = function(Value)
Config.ESP.Pallet = Value
if Value then
startESP()
end
end
})
ESPTab:CreateToggle({
Name = "Window ESP (Light Blue)",
CurrentValue = false,
Flag = "WindowESP",
Callback = function(Value)
Config.ESP.Window = Value
if Value then
startESP()
end
end
})
ESPTab:CreateToggle({
Name = "Pumpkin ESP (Orange)",
CurrentValue = false,
Flag = "PumpkinESP",
Callback = function(Value)
Config.ESP.Pumpkin = Value
if Value then
startESP()
end
end
})
ESPTab:CreateSection("Settings")
ESPTab:CreateToggle({
Name = "Show Distance",
CurrentValue = true,
Flag = "ShowDistance",
Callback = function(Value)
Config.ESP.ShowDistance = Value
end
})
ESPTab:CreateSlider({
Name = "Max Distance",
Range = {100, 1000},
Increment = 50,
CurrentValue = 500,
Flag = "MaxDistance",
Callback = function(Value)
Config.ESP.MaxDistance = Value
end
})
ESPTab:CreateSlider({
Name = "Update Rate (seconds)",
Range = {0.1, 2},
Increment = 0.1,
CurrentValue = 0.5,
Flag = "UpdateRate",
Callback = function(Value)
Config.Performance.UpdateRate = Value
end
})
ESPTab:CreateSlider({
Name = "Max ESP Objects",
Range = {25, 500},
Increment = 25,
CurrentValue = isMobile and 50 or 100,
Flag = "MaxESPObjects",
Callback = function(Value)
Config.Performance.MaxESPObjects = Value
end
})
local GameplayTab = Window:CreateTab("🎮 Gameplay", 4483362458)
local GameplayTab = Window:CreateTab("🎮 Gameplay", 4483362458)
GameplayTab:CreateSection("Auto Features")
GameplayTab:CreateToggle({
Name = "Auto Complete Generators",
CurrentValue = false,
Flag = "AutoGenerator",
Callback = function(Value)
Config.AutoFeatures.AutoGenerator = Value
if Value then
notify("Auto Generator", "Enabled - Generators will auto-complete", 3)
else
notify("Auto Generator", "Disabled", 2)
end
end
})
GameplayTab:CreateDropdown({
Name = "Generator Mode",
Options = {"Great (Fast)", "Normal (Slow)"},
CurrentOption = "Great (Fast)",
Flag = "GeneratorMode",
Callback = function(Option)
if Option == "Great (Fast)" then
Config.AutoFeatures.GeneratorMode = "great"
else
Config.AutoFeatures.GeneratorMode = "normal"
end
end
})
GameplayTab:CreateSection("Quick Escape")
GameplayTab:CreateToggle({
Name = "Enable Quick Leave Generator",
CurrentValue = false,
Flag = "AutoLeaveGenerator",
Callback = function(Value)
Config.AutoFeatures.AutoLeaveGenerator = Value
if Value then
startAutoLeaveGenerator()
else
stopAutoLeaveGenerator()
end
end
})
if not isMobile then
GameplayTab:CreateDropdown({
Name = "Leave Generator Keybind",
Options = {"Q", "E", "F", "G", "X", "Z", "V", "B"},
CurrentOption = "Q",
Flag = "LeaveKeybind",
Callback = function(Option)
local keyMap = {
["Q"] = Enum.KeyCode.Q,
["E"] = Enum.KeyCode.E,
["F"] = Enum.KeyCode.F,
["G"] = Enum.KeyCode.G,
["X"] = Enum.KeyCode.X,
["Z"] = Enum.KeyCode.Z,
["V"] = Enum.KeyCode.V,
["B"] = Enum.KeyCode.B
}
Config.AutoFeatures.LeaveKeybind = keyMap[Option]
if Config.AutoFeatures.AutoLeaveGenerator then
stopAutoLeaveGenerator()
startAutoLeaveGenerator()
end
notify("Keybind Changed", "Leave generator key set to: " .. Option, 2)
end
})
end
GameplayTab:CreateSlider({
Name = "Detection Range (studs)",
Range = {5, 30},
Increment = 1,
CurrentValue = 15,
Flag = "LeaveDistance",
Callback = function(Value)
Config.AutoFeatures.LeaveDistance = Value
end
})
GameplayTab:CreateButton({
Name = "Leave Generator Now",
Callback = function()
leaveGenerator()
end
})
GameplayTab:CreateSection("Manual Actions")
GameplayTab:CreateButton({
Name = "Complete All Generators (Instant)",
Callback = function()
local map = Workspace:FindFirstChild("Map")
if not map then
notify("Error", "Map not found", 3)
return
end
local completed = 0
safeCall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if not remotes then return end
local genRemotes = remotes:FindFirstChild("Generator")
if not genRemotes then return end
local repairEvent = genRemotes:FindFirstChild("RepairEvent")
local skillCheckEvent = genRemotes:FindFirstChild("SkillCheckResultEvent")
if not repairEvent or not skillCheckEvent then return end
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Generator" then
for _, point in ipairs(obj:GetChildren()) do
if point.Name:find("GeneratorPoint") then
pcall(function()
for i = 1, 10 do
repairEvent:FireServer(point, true)
skillCheckEvent:FireServer("success", 1, obj, point)
end
completed = completed + 1
end)
end
end
end
end
end)
if completed > 0 then
notify("Complete!", string.format("Completed %d generator(s)", completed), 4)
else
notify("Failed", "Could not find generators", 3)
end
end
})
GameplayTab:CreateSection("Killer Powers")
GameplayTab:CreateToggle({
Name = "Auto Attack Nearby Survivors",
CurrentValue = false,
Flag = "AutoAttack",
Callback = function(Value)
Config.AutoFeatures.AutoAttack = Value
if Value then
startAutoAttack()
else
stopAutoAttack()
end
end
})
GameplayTab:CreateSlider({
Name = "Auto Attack Range (studs)",
Range = {5, 20},
Increment = 1,
CurrentValue = 10,
Flag = "AttackRange",
Callback = function(Value)
Config.AutoFeatures.AttackRange = Value
end
})
GameplayTab:CreateButton({
Name = "Activate Killer Power",
Callback = function()
safeCall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if remotes then
local killerRemotes = remotes:FindFirstChild("Killers")
if killerRemotes then
local killerFolder = killerRemotes:FindFirstChild("Killer")
if killerFolder then
local activatePower = killerFolder:FindFirstChild("ActivatePower")
if activatePower then
activatePower:FireServer()
notify("Power Activated", "Killer power triggered", 2)
end
end
end
end
end)
end
})
GameplayTab:CreateButton({
Name = "Basic Attack (Killer)",
Callback = function()
safeCall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if remotes then
local attacks = remotes:FindFirstChild("Attacks")
if attacks then
local basicAttack = attacks:FindFirstChild("BasicAttack")
if basicAttack then
basicAttack:FireServer(false)
notify("Attack", "Basic attack executed", 2)
end
end
end
end)
end
})
local TeleportTab = Window:CreateTab("🚀 Teleport", 4483362458)
local TeleportTab = Window:CreateTab("🚀 Teleport", 4483362458)
TeleportTab:CreateSection("Generator Teleportation")
TeleportTab:CreateButton({
Name = "Teleport to Closest Generator",
Callback = function()
local generators = getGeneratorsByDistance()
if #generators == 0 then
notify("Not Found", "No generators found on the map", 3)
return
end
local closest = generators[1]
if safeTeleport(closest.part.CFrame) then
notify("Teleported!", string.format("Teleported to closest generator (%.0fm)", closest.distance), 3)
end
end
})
TeleportTab:CreateButton({
Name = "Teleport to Farthest Generator",
Callback = function()
local generators = getGeneratorsByDistance()
if #generators == 0 then
notify("Not Found", "No generators found on the map", 3)
return
end
local farthest = generators[#generators]
if safeTeleport(farthest.part.CFrame) then
notify("Teleported!", string.format("Teleported to farthest generator (%.0fm)", farthest.distance), 3)
end
end
})
TeleportTab:CreateButton({
Name = "Teleport Through All Generators",
Callback = function()
local generators = getGeneratorsByDistance()
if #generators == 0 then
notify("Not Found", "No generators found on the map", 3)
return
end
notify("Starting", string.format("Teleporting through %d generators...", #generators), 3)
task.spawn(function()
for i, gen in ipairs(generators) do
if not getCharacterRootPart() then break end
safeTeleport(gen.part.CFrame)
notify("Generator " .. i, string.format("At generator %d/%d (%.0fm)", i, #generators, gen.distance), 2)
task.wait(Config.Teleportation.TeleportDelay)
end
notify("Complete!", "Visited all generators", 3)
end)
end
})
TeleportTab:CreateButton({
Name = "Show Generator List (Console)",
Callback = function()
local generators = getGeneratorsByDistance()
if #generators == 0 then
notify("Not Found", "No generators found", 3)
print("No generators found on the map")
return
end
print("\n=== GENERATOR LIST ===")
for i, gen in ipairs(generators) do
print(string.format("%d. Generator at %.0fm - Position: %s",
i, gen.distance, tostring(gen.position)))
end
print("======================\n")
notify("List Printed", string.format("Found %d generators - Check console (F9)", #generators), 3)
end
})
TeleportTab:CreateSection("Other Teleports")
TeleportTab:CreateButton({
Name = "Teleport to Nearest Gate",
Callback = function()
local hrp = getCharacterRootPart()
if not hrp then
notify("Error", "Character not found", 3)
return
end
local map = Workspace:FindFirstChild("Map")
if not map then
notify("Error", "Map not found", 3)
return
end
local nearestGate = nil
local nearestDist = math.huge
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Gate" then
local gatePart = obj:FindFirstChildWhichIsA("BasePart")
if gatePart then
local dist = (gatePart.Position - hrp.Position).Magnitude
if dist < nearestDist then
nearestGate = gatePart
nearestDist = dist
end
end
end
end
if nearestGate then
safeTeleport(nearestGate.CFrame)
notify("Teleported", string.format("Teleported to gate (%.0fm)", nearestDist), 3)
else
notify("Not Found", "No gates found", 3)
end
end
})
TeleportTab:CreateSection("Survivor Win")
TeleportTab:CreateButton({
Name = "Escape Game (Survivor Only)",
Callback = function()
if not isSurvivor() then
notify("Error", "You must be a Survivor to use this!", 3)
return
end
local hrp = getCharacterRootPart()
if not hrp then
notify("Error", "Character not found", 3)
return
end
local map = Workspace:FindFirstChild("Map")
if not map then
notify("Error", "Map not found", 3)
return
end
local gate = nil
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Gate" then
gate = obj
break
end
end
if not gate then
notify("Error", "No gates found on map", 3)
return
end
local escapeZone = gate:FindFirstChild("Escape") or gate:FindFirstChildWhichIsA("BasePart")
if escapeZone then
safeTeleport(escapeZone.CFrame, Vector3.new(0, 5, 0))
task.wait(0.5)
safeCall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if remotes then
local gateRemote = remotes:FindFirstChild("Gate")
if gateRemote then
local escapeEvent = gateRemote:FindFirstChild("Escape")
if escapeEvent then
escapeEvent:FireServer()
end
end
end
end)
notify("Escape!", "Teleported to exit gate - Walk through to escape!", 4)
else
notify("Error", "Could not find escape zone", 3)
end
end
})
TeleportTab:CreateSection("Teleport Settings")
TeleportTab:CreateSlider({
Name = "Teleport Height Offset",
Range = {0, 10},
Increment = 1,
CurrentValue = 3,
Flag = "TeleportOffset",
Callback = function(Value)
Config.Teleportation.TeleportOffset = Value
end
})
TeleportTab:CreateSlider({
Name = "Multi-Teleport Delay (seconds)",
Range = {0.1, 5},
Increment = 0.1,
CurrentValue = 0.1,
Flag = "TeleportDelay",
Callback = function(Value)
Config.Teleportation.TeleportDelay = Value
end
})
TeleportTab:CreateToggle({
Name = "Safe Teleport (Disable Collision)",
CurrentValue = true,
Flag = "SafeTeleport",
Callback = function(Value)
Config.Teleportation.SafeTeleport = Value
end
})
local SettingsTab = Window:CreateTab("⚙️ Settings", 4483362458)
local SettingsTab = Window:CreateTab("⚙️ Settings", 4483362458)
SettingsTab:CreateSection("Performance Options")
SettingsTab:CreateToggle({
Name = "Disable Particles & Effects",
CurrentValue = false,
Flag = "DisableParticles",
Callback = function(Value)
Config.Performance.DisableParticles = Value
applyPerformanceSettings()
notify("Performance", Value and "Particles disabled" or "Particles enabled", 2)
end
})
SettingsTab:CreateToggle({
Name = "Lower Graphics Quality",
CurrentValue = false,
Flag = "LowerGraphics",
Callback = function(Value)
Config.Performance.LowerGraphics = Value
applyPerformanceSettings()
notify("Performance", Value and "Graphics lowered" or "Graphics reset", 2)
end
})
SettingsTab:CreateToggle({
Name = "Disable Shadows",
CurrentValue = false,
Flag = "DisableShadows",
Callback = function(Value)
Config.Performance.DisableShadows = Value
applyPerformanceSettings()
notify("Performance", Value and "Shadows disabled" or "Shadows enabled", 2)
end
})
SettingsTab:CreateToggle({
Name = "Reduce Render Distance",
CurrentValue = false,
Flag = "ReduceRenderDistance",
Callback = function(Value)
Config.Performance.ReduceRenderDistance = Value
applyPerformanceSettings()
notify("Performance", Value and "Render distance reduced" or "Render distance normal", 2)
end
})
SettingsTab:CreateToggle({
Name = "Use Distance Culling (ESP)",
CurrentValue = true,
Flag = "UseDistanceCulling",
Callback = function(Value)
Config.Performance.UseDistanceCulling = Value
notify("Performance", Value and "Distance culling enabled" or "Distance culling disabled", 2)
end
})
SettingsTab:CreateButton({
Name = "Apply All Performance Boosts",
Callback = function()
Config.Performance.DisableParticles = true
Config.Performance.LowerGraphics = true
Config.Performance.DisableShadows = true
Config.Performance.ReduceRenderDistance = true
Config.Performance.UseDistanceCulling = true
applyPerformanceSettings()
notify("Performance", "All performance boosts applied!", 3)
end
})
SettingsTab:CreateButton({
Name = "Reset Performance Settings",
Callback = function()
Config.Performance.DisableParticles = false
Config.Performance.LowerGraphics = false
Config.Performance.DisableShadows = false
Config.Performance.ReduceRenderDistance = false
resetPerformanceSettings()
notify("Performance", "Settings reset to default", 2)
end
})
if isMobile then
SettingsTab:CreateSection("Mobile Controls")
SettingsTab:CreateToggle({
Name = "Enable Touch Controls",
CurrentValue = true,
Flag = "TouchControls",
Callback = function(Value)
Config.Mobile.TouchControlsEnabled = Value
if Value and not MobileUI then
createMobileControls()
elseif not Value and MobileUI then
MobileUI:Destroy()
MobileUI = nil
end
end
})
SettingsTab:CreateSlider({
Name = "Button Size",
Range = {60, 120},
Increment = 10,
CurrentValue = 80,
Flag = "ButtonSize",
Callback = function(Value)
Config.Mobile.ButtonSize = Value
if MobileUI then
MobileUI:Destroy()
createMobileControls()
end
end
})
SettingsTab:CreateSlider({
Name = "Button Transparency",
Range = {0, 0.8},
Increment = 0.1,
CurrentValue = 0.3,
Flag = "ButtonTransparency",
Callback = function(Value)
Config.Mobile.ButtonTransparency = Value
if MobileUI then
for _, button in ipairs(MobileUI:GetChildren()) do
if button:IsA("TextButton") then
button.BackgroundTransparency = Value
end
end
end
end
})
SettingsTab:CreateSection("📱 Mobile Performance Boost")
SettingsTab:CreateToggle({
Name = "Auto Mobile Optimization",
CurrentValue = true,
Flag = "AutoOptimize",
Callback = function(Value)
Config.Mobile.AutoOptimize = Value
if Value then
applyMobileOptimizations()
notify("Mobile Optimization", "Basic optimizations applied!", 3)
else
resetPerformanceSettings()
notify("Mobile Optimization", "Optimizations reset", 2)
end
end
})
SettingsTab:CreateToggle({
Name = "🔥 ULTRA Performance Mode (Aggressive)",
CurrentValue = false,
Flag = "AggressiveOptimization",
Callback = function(Value)
Config.Mobile.AggressiveOptimization = Value
if Value then
applyAggressiveMobileOptimizations()
notify("ULTRA MODE", "Maximum FPS boost! (Lower graphics)", 4)
else
resetPerformanceSettings()
if Config.Mobile.AutoOptimize then
applyMobileOptimizations()
end
notify("ULTRA MODE", "Disabled - Graphics restored", 2)
end
end
})
SettingsTab:CreateButton({
Name = "🚀 Apply All Mobile Optimizations NOW",
Callback = function()
Config.Performance.DisableParticles = true
Config.Performance.LowerGraphics = true
Config.Performance.DisableShadows = true
Config.Performance.ReduceRenderDistance = true
Config.Performance.UseDistanceCulling = true
Config.Performance.UpdateRate = 1.0
Config.Performance.MaxESPObjects = 25
applyAggressiveMobileOptimizations()
notify("ALL OPTIMIZATIONS", "Maximum mobile performance applied! 🚀", 5)
end
})
SettingsTab:CreateButton({
Name = "Reset All Optimizations",
Callback = function()
Config.Performance.DisableParticles = false
Config.Performance.LowerGraphics = false
Config.Performance.DisableShadows = false
Config.Performance.ReduceRenderDistance = false
Config.Performance.UpdateRate = 0.5
Config.Performance.MaxESPObjects = 50
Config.Mobile.AutoOptimize = false
Config.Mobile.AggressiveOptimization = false
resetPerformanceSettings()
notify("Reset Complete", "All settings restored to default", 3)
end
})
end
SettingsTab:CreateSection("Display Options")
SettingsTab:CreateToggle({
Name = "Show FPS Counter",
CurrentValue = false,
Flag = "FPSCounter",
Callback = function(Value)
if Value then
createFPSCounter()
else
removeFPSCounter()
notify("FPS Counter", "Disabled", 2)
end
end
})
SettingsTab:CreateSection("Script Controls")
SettingsTab:CreateButton({
Name = "Clear All ESP",
Callback = function()
clearAllESP()
notify("Cleared", "All ESP cleared", 2)
end
})
SettingsTab:CreateButton({
Name = "Refresh ESP",
Callback = function()
clearAllESP()
updateAllESP()
notify("Refreshed", "ESP refreshed", 2)
end
})
SettingsTab:CreateButton({
Name = "Unload Script",
Callback = function()
stopESP()
clearAllESP()
stopAutoLeaveGenerator()
stopAutoAttack()
resetPerformanceSettings()
removeFPSCounter()
if MobileUI then
MobileUI:Destroy()
end
Rayfield:Destroy()
notify("Unloaded", "Script unloaded", 2)
end
})
task.spawn(function()
while task.wait(0.2) do
if Config.AutoFeatures.AutoGenerator then
safeCall(function()
local remotes = ReplicatedStorage:FindFirstChild("Remotes")
if not remotes then return end
local genRemotes = remotes:FindFirstChild("Generator")
if not genRemotes then return end
local repairEvent = genRemotes:FindFirstChild("RepairEvent")
local skillCheckEvent = genRemotes:FindFirstChild("SkillCheckResultEvent")
if not repairEvent or not skillCheckEvent then return end
local map = Workspace:FindFirstChild("Map")
if not map then return end
for _, obj in ipairs(map:GetDescendants()) do
if obj:IsA("Model") and obj.Name == "Generator" then
for _, point in ipairs(obj:GetChildren()) do
if point.Name:find("GeneratorPoint") then
pcall(function()
repairEvent:FireServer(point, true)
local result = Config.AutoFeatures.GeneratorMode == "great" and "success" or "neutral"
local value = Config.AutoFeatures.GeneratorMode == "great" and 1 or 0
skillCheckEvent:FireServer(result, value, obj, point)
end)
end
end
end
end
end)
end
end
end)
if isMobile then
task.wait(1)
createMobileControls()
if Config.Mobile.AutoOptimize then
task.wait(0.5)
applyMobileOptimizations()
notify("Mobile Mode", "Auto-optimizations applied for better FPS!", 4)
end
end
notify("Script Loaded!", "Violence District v2.2 by goldgoldgoldblazn", 4)
print("=== Violence District Golds Easy Hub v2.2 ===")
print("Developer: goldgoldgoldblazn")
print("Discord: https://discord.gg/CnNqEVFxh6")
print("Platform: " .. (isMobile and "Mobile" or "PC"))
print("Executor: " .. executorName)
print("")
print("v2.2 Changes:")
print("- ✅ Fixed Delta executor compatibility")
print("- ✅ Fixed KRNL execution issues")
print("- ✅ Added mobile/touch controls")
print("- ✅ Better HTTP request handling")
print("- ✅ iOS/Android support")
print("- ✅ Performance optimizations for mobile")
print("- ✅ Fixed notification errors")
print("- ✅ Disabled config saving to prevent errors")
print("=========================================")



Let me know if there are any ISSUES Fully updated btw!! 2025!! Nov+
It doesn't start
@markus4 Show me what you mean by that, so I can help you. First, what executor are you using?
@Blazngold Delta is not working.
@3080153830 I will be fixing this! One moment!
@3080153830 Fully fixed and tested and updated!
@3080153830 Should Now Work!!! :D
@Blazngold doesn't execute on krnl
@zakowhirr One moment, I will be fixing this. Thank you for letting me know. May I see the errors you have in the console by doing/console?
Fully fixed and tested and updated!
@zakowhirr Fully fixed and tested and updated!
@zakowhirr Done!
@zakowhirr FIXED!
@Blazngold YES OMG BROTHER YOU PINGED ME THRICE!!
@markus4 Fully fixed and tested and updated!
It wont work on delta when you execute it
@Scipter_User I fixed it! Try now!
All of it works now Check my new script!
I fixed all ISSUES AS OF NOV 12!!!
fixed!
🤖 detectMobilePlatform() 🤖 all im seeing is AI bro, get back for your people bro 🥱🥱
@Experienced_Coder ? Is someone mad I see haha.
@Blazngold Someones upset because they got cooked in a recent argument... because they are too scared to get out of their bas3(me)nt, it seems... stop projecting already Blazn, you gotta grow up man, your mother won't be around for that long to baby you your entire life 🤣🤣, just because you can use ChatGPT, doesn't mean you're gonna make it anywhere, nbdy hires someone who can't even teach themselves a basic education surrounding coding 💀, calling me mad at this point and beyond just shows all you're doing now is projecting because you now realize everyone sees through anything and everything you do because the world and the internet as we know it is clearly advancing, you got deep fried and boiled so badly that not even yourself could respond to all the comments you seen, I even second guessed you in third person because I know you snorkled when you said to yourself "my stuff isn't chatgpt, he just can't see that 🤓🤓", knowing so well that it is 😂😂😭
@Blazngold nbdy uses this lil bro💀💀🙏 supports 2 executors and 2 executors only: Solara and JJSploit, cuz bro can't use a paid executor cuz he's too busy having his data stolen from nordvpn😭
Best! Works!
works on solara. but the esp off opt wont work, i need to reset all esp so the esp is off
And believe me, when you go down, I'm gonna be laughing as I severely surp(a)ss you in life, knowing good well you're gonna keep at this instead of living a real life, so, between me and you, stay in your mothers house your whole life, see where that gets you😂😂, while you do that, I'll be enjoying life 😊, and you can rot away your years moderating servers that nbdy cares about, and to be completely fair with you, not a single person is gonna know you in the next 2 years, i mean maybe the two friends you claim to have, but even then, it's gone man, so while you project and act like a manchild over the internet, I'll be eating good, sleeping well, and living an enjoyable and normal life, which you most likely don't have the funds to do 😂😂.
I mean, which imbecile actually posts the code from ChatGPT WITH the comments in it?😂😂, what are you, born yesterday?💀🥀, it is quite upsetting how you'll forever be trying to claim to be someone you're clearly not, time and time again you prove that it's all fake, so, while you rot away your years, I'll be living good, I mean, it took me 3 days to even notice you responded still trying to say I'm mad, just give it up bro, you haven't done anything, you never will, and that's it 😂😂, as much as you ball your fists up, you know you'll never be able to do anything what so ever 🙂🙂
Ahoj, prosím je někde tutorial jak to v telefonu spus* a dat do souboru?