local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Workspace = game:GetService("Workspace") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local Camera = Workspace.CurrentCamera -- State Variables local AIM_LOCK_ENABLED = false local MAX_DISTANCE = 500 -- ========================================== -- 1. CREATE CLEAN MOBILE GUI -- ========================================== local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "AimlockGui" ScreenGui.ResetOnSpawn = false ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui") local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.Size = UDim2.new(0, 160, 0, 60) MainFrame.Position = UDim2.new(0.5, -80, 0.2, 0) MainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30) MainFrame.BorderSizePixel = 0 MainFrame.Active = true MainFrame.Parent = ScreenGui local FrameCorner = Instance.new("UICorner") FrameCorner.CornerRadius = UDim.new(0, 10) FrameCorner.Parent = MainFrame local UIStroke = Instance.new("UIStroke") UIStroke.Color = Color3.fromRGB(60, 60, 60) UIStroke.Thickness = 2 UIStroke.Parent = MainFrame local ToggleButton = Instance.new("TextButton") ToggleButton.Name = "ToggleButton" ToggleButton.Size = UDim2.new(1, -20, 1, -20) ToggleButton.Position = UDim2.new(0, 10, 0, 10) ToggleButton.BackgroundColor3 = Color3.fromRGB(180, 50, 50) ToggleButton.Text = "AIMLOCK: OFF" ToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) ToggleButton.Font = Enum.Font.GothamBold ToggleButton.TextSize = 14 ToggleButton.BorderSizePixel = 0 ToggleButton.Parent = MainFrame local ButtonCorner = Instance.new("UICorner") ButtonCorner.CornerRadius = UDim.new(0, 8) ButtonCorner.Parent = ToggleButton -- ========================================== -- 2. MAKE GUI DRAGGABLE -- ========================================== local dragging, dragInput, dragStart, startPos local function update(input) local delta = input.Position - dragStart MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end MainFrame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = MainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) MainFrame.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 update(input) end end) ToggleButton.MouseButton1Click:Connect(function() AIM_LOCK_ENABLED = not AIM_LOCK_ENABLED if AIM_LOCK_ENABLED then ToggleButton.Text = "AIMLOCK: ON" ToggleButton.BackgroundColor3 = Color3.fromRGB(50, 180, 50) else ToggleButton.Text = "AIMLOCK: OFF" ToggleButton.BackgroundColor3 = Color3.fromRGB(180, 50, 50) end end) -- ========================================== -- 3. WALL CHECK (RAYCASTING) FUNCTION -- ========================================== local function isVisible(targetPart) local localCharacter = LocalPlayer.Character if not localCharacter or not localCharacter:FindFirstChild("Head") then return false end local startPos = localCharacter.Head.Position local targetPos = targetPart.Position local direction = targetPos - startPos -- Setup raycast parameters local raycastParams = RaycastParams.new() -- Ignore your own character so the laser doesn't hit your own body parts raycastParams.FilterDescendantsInstances = {localCharacter} raycastParams.FilterType = Enum.RaycastFilterType.Exclude -- Fire the raycast local raycastResult = Workspace:Raycast(startPos, direction, raycastParams) -- If it didn't hit anything, the line of sight is clear if not raycastResult then return true end -- If it hit something, check if what it hit belongs to our target player if raycastResult.Instance:IsDescendantOf(targetPart.Parent) then return true end -- If it hit a wall, tree, or ground first, return false return false end -- ========================================== -- 4. AIMLOCK CORE ENGINE -- ========================================== local function getClosestPlayer() local closestPlayer = nil local shortestDistance = math.huge local localCharacter = LocalPlayer.Character if not localCharacter or not localCharacter:FindFirstChild("HumanoidRootPart") then return nil end local localPos = localCharacter.HumanoidRootPart.Position for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then local character = player.Character if character and character:FindFirstChild("Head") and character:FindFirstChild("Humanoid") then if character.Humanoid.Health > 0 then local head = character.Head local distance = (head.Position - localPos).Magnitude -- Added the isVisible(head) check here if distance < shortestDistance and distance <= MAX_DISTANCE and isVisible(head) then shortestDistance = distance closestPlayer = player end end end end end return closestPlayer end RunService.RenderStepped:Connect(function() if not AIM_LOCK_ENABLED then return end local targetPlayer = getClosestPlayer() if targetPlayer and targetPlayer.Character and targetPlayer.Character:FindFirstChild("Head") then local head = targetPlayer.Character.Head Camera.CFrame = CFrame.lookAt(Camera.CFrame.Position, head.Position) end end)