local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local Lighting = game:GetService("Lighting") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera -- CONFIGURATION / TOGGLE SETTINGS local Settings = { Fullbright = true, ESP_Outlines = true, ESP_TextUI = true, Aimbot = true, HeadSizeMod = true, TargetPlayers = true, TargetNPCs = false, } local HEAD_ADD = 2 local MAX_FOV = 150 local desktopAiming = false local mobileAimEnabled = false local targetedHeads = {} local resizedHeads = {} local npcTargets = {} local originalLightingSettings = { Ambient = Lighting.Ambient, OutdoorAmbient = Lighting.OutdoorAmbient, Brightness = Lighting.Brightness, ClockTime = Lighting.ClockTime, GlobalShadows = Lighting.GlobalShadows } -- LIGHTING local function updateLighting() if Settings.Fullbright then Lighting.Ambient = Color3.fromRGB(255,255,255) Lighting.OutdoorAmbient = Color3.fromRGB(255,255,255) Lighting.Brightness = 1 Lighting.ClockTime = 14 Lighting.GlobalShadows = false if Lighting:FindFirstChildOfClass("Atmosphere") then Lighting:FindFirstChildOfClass("Atmosphere").Density = 0 end Lighting.FogEnd = 100000 else Lighting.Ambient = originalLightingSettings.Ambient Lighting.OutdoorAmbient = originalLightingSettings.OutdoorAmbient Lighting.Brightness = originalLightingSettings.Brightness Lighting.ClockTime = originalLightingSettings.ClockTime Lighting.GlobalShadows = originalLightingSettings.GlobalShadows end end updateLighting() Lighting.Changed:Connect(updateLighting) -- TARGET HANDLER local function processHeadTarget(head) if not head:IsA("BasePart") then return end if LocalPlayer.Character and head:IsDescendantOf(LocalPlayer.Character) then return end local targetModel = head:FindFirstAncestorOfClass("Model") or head.Parent local isRealPlayer = Players:GetPlayerFromCharacter(targetModel) -- HEAD SIZE if Settings.HeadSizeMod and not resizedHeads[head] then resizedHeads[head] = head.Size head.Size = head.Size + Vector3.new(HEAD_ADD, HEAD_ADD, HEAD_ADD) head.CanCollide = false head.Massless = true elseif not Settings.HeadSizeMod and resizedHeads[head] then head.Size = resizedHeads[head] resizedHeads[head] = nil end targetedHeads[head] = true -- OUTLINE local highlight = targetModel:FindFirstChild("TrueHighlightESP") if Settings.ESP_Outlines then if not highlight then highlight = Instance.new("Highlight") highlight.Name = "TrueHighlightESP" highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop highlight.FillTransparency = 1 highlight.OutlineTransparency = 0 highlight.OutlineColor = isRealPlayer and Color3.new(1,1,1) or Color3.new(1,0,0) highlight.Parent = targetModel end else if highlight then highlight:Destroy() end end -- TEXT ESP local gui = head:FindFirstChild("ESPDisplay") if Settings.ESP_TextUI then if not gui then gui = Instance.new("BillboardGui") gui.Name = "ESPDisplay" gui.Size = UDim2.new(5,0,2,0) gui.StudsOffset = Vector3.new(0,4,0) gui.AlwaysOnTop = true gui.Adornee = head local txt = Instance.new("TextLabel") txt.Name = "TextLabel" txt.Size = UDim2.new(1,0,1,0) txt.BackgroundTransparency = 1 txt.TextScaled = true txt.TextStrokeTransparency = 0 txt.TextColor3 = Color3.new(1,1,1) txt.TextStrokeColor3 = Color3.new(0,0,0) txt.Parent = gui gui.Parent = head end local displayName = isRealPlayer and isRealPlayer.Name or targetModel.Name local hum = targetModel:FindFirstChildOfClass("Humanoid") if hum then gui.TextLabel.Text = displayName .. "\nHP: " .. math.floor(hum.Health) local conn conn = hum.HealthChanged:Connect(function(health) if not gui or not gui.Parent then conn:Disconnect() return end if health <= 0 then if highlight then highlight:Destroy() end gui:Destroy() targetedHeads[head] = nil else gui.TextLabel.Text = displayName .. "\nHP: " .. math.floor(health) end end) else gui.TextLabel.Text = displayName end else if gui then gui:Destroy() end end end -- NPC CHECKER local function checkAndRegisterNPC(model) if not model:IsA("Model") or npcTargets[model] then return end if Players:GetPlayerFromCharacter(model) then return end local parent = model.Parent local isAllowedLocation = (parent == workspace) or (parent and parent.Name == "AiZones") if not isAllowedLocation then return end local isValidNPC = false if model:FindFirstChildOfClass("Humanoid") then isValidNPC = true else for _, child in ipairs(model:GetChildren()) do if child:IsA("BasePart") then local name = child.Name:lower() if name:find("torso") or name:find("root") or name:find("arm") or name:find("leg") or name:find("head") then isValidNPC = true break end end end end if isValidNPC then npcTargets[model] = true local trackingPart = model:FindFirstChild("Head") or model:FindFirstChild("HumanoidRootPart") or model:FindFirstChildOfClass("BasePart") if trackingPart then processHeadTarget(trackingPart) end end end for _, child in ipairs(workspace:GetChildren()) do if child:IsA("Model") then checkAndRegisterNPC(child) elseif child.Name == "AiZones" then for _, zoneChild in ipairs(child:GetChildren()) do if zoneChild:IsA("Model") then checkAndRegisterNPC(zoneChild) end end end end workspace.ChildAdded:Connect(function(child) if child:IsA("Model") then task.wait(0.1) checkAndRegisterNPC(child) elseif child.Name == "AiZones" then child.ChildAdded:Connect(function(zoneChild) if zoneChild:IsA("Model") then task.wait(0.1) checkAndRegisterNPC(zoneChild) end end) end end) RunService.Heartbeat:Connect(function() for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer and player.Character then local head = player.Character:FindFirstChild("Head") if head then processHeadTarget(head) end end end for model, _ in pairs(npcTargets) do if model and model.Parent then local trackingPart = model:FindFirstChild("Head") or model:FindFirstChild("HumanoidRootPart") or model:FindFirstChildOfClass("BasePart") if trackingPart then processHeadTarget(trackingPart) end end end end) -- AIMBOT local function getClosest() if not Settings.Aimbot then return nil end if not Settings.TargetPlayers and not Settings.TargetNPCs then return nil end local isMobile = not UserInputService.KeyboardEnabled local mousePos if isMobile then mousePos = Vector2.new( Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2 ) else mousePos = UserInputService:GetMouseLocation() end local closest = nil local closestDist = MAX_FOV for head, _ in pairs(targetedHeads) do if head and head.Parent then local targetModel = head.Parent local isRealPlayer = Players:GetPlayerFromCharacter(targetModel) local allowed = false if isRealPlayer and Settings.TargetPlayers then allowed = true end if not isRealPlayer and Settings.TargetNPCs then allowed = true end if allowed then local hum = targetModel:FindFirstChildOfClass("Humanoid") if not hum or hum.Health > 0 then local pos, vis = Camera:WorldToViewportPoint(head.Position) if vis then local dist = (Vector2.new(pos.X, pos.Y) - mousePos).Magnitude if dist < closestDist then closestDist = dist closest = head end end end end else targetedHeads[head] = nil end end return closest end UserInputService.InputBegan:Connect(function(input, gp) if gp then return end if input.UserInputType == Enum.UserInputType.MouseButton2 then desktopAiming = true end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton2 then desktopAiming = false end end) RunService.RenderStepped:Connect(function() local isMobile = not UserInputService.KeyboardEnabled local shouldLock = false if isMobile then shouldLock = mobileAimEnabled else shouldLock = desktopAiming and Settings.Aimbot end if not shouldLock then return end local target = getClosest() if target then Camera.CFrame = CFrame.lookAt( Camera.CFrame.Position, target.Position ) end end) -- MOBILE UI local function buildMobileMenu() local screenGui = Instance.new("ScreenGui") screenGui.Name = "TouchAimbotConfig" screenGui.ResetOnSpawn = false screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling screenGui.IgnoreGuiInset = true local container = Instance.new("Frame") container.Name = "ButtonHolder" container.Size = UDim2.new(0, 360, 0, 36) container.Position = UDim2.new(0.5, -180, 0, 0) container.BackgroundTransparency = 1 container.Parent = screenGui local layout = Instance.new("UIListLayout") layout.FillDirection = Enum.FillDirection.Horizontal layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Padding = UDim.new(0, 6) layout.Parent = container local function formatButton(btn, text, isActive) btn.Size = UDim2.new(0, 116, 1, 0) btn.Font = Enum.Font.SourceSansBold btn.TextSize = 12 btn.Text = text btn.TextStrokeTransparency = 0 local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 4) corner.Parent = btn if isActive then btn.BackgroundColor3 = Color3.fromRGB(0,180,50) btn.TextColor3 = Color3.new(1,1,1) else btn.BackgroundColor3 = Color3.fromRGB(30,30,30) btn.TextColor3 = Color3.fromRGB(140,140,140) end end -- AIM BUTTON local btnAim = Instance.new("TextButton") btnAim.Name = "ToggleAim" formatButton(btnAim, "AIM: OFF", false) btnAim.Parent = container -- PLAYERS BUTTON local btnPlayers = Instance.new("TextButton") btnPlayers.Name = "TogglePlayers" formatButton(btnPlayers, "PLAYERS: ON", Settings.TargetPlayers) btnPlayers.Parent = container -- NPC BUTTON local btnNPCs = Instance.new("TextButton") btnNPCs.Name = "ToggleNPCs" formatButton(btnNPCs, "NPCs: OFF", Settings.TargetNPCs) btnNPCs.Parent = container btnAim.MouseButton1Click:Connect(function() mobileAimEnabled = not mobileAimEnabled formatButton( btnAim, mobileAimEnabled and "AIM: ON" or "AIM: OFF", mobileAimEnabled ) end) btnPlayers.MouseButton1Click:Connect(function() Settings.TargetPlayers = not Settings.TargetPlayers if Settings.TargetPlayers then Settings.TargetNPCs = false end formatButton( btnPlayers, Settings.TargetPlayers and "PLAYERS: ON" or "PLAYERS: OFF", Settings.TargetPlayers ) formatButton( btnNPCs, Settings.TargetNPCs and "NPCs: ON" or "NPCs: OFF", Settings.TargetNPCs ) end) btnNPCs.MouseButton1Click:Connect(function() Settings.TargetNPCs = not Settings.TargetNPCs if Settings.TargetNPCs then Settings.TargetPlayers = false end formatButton( btnPlayers, Settings.TargetPlayers and "PLAYERS: