local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local Camera = workspace.CurrentCamera local trackingEnabled = false local ignoredPlayers = {} -- Dictionary to keep track of "teammates" -- 1. Create the Main UI Container local screenGui = Instance.new("ScreenGui") screenGui.Name = "TeamHeadLockGui" screenGui.ResetOnSpawn = false screenGui.Parent = LocalPlayer:WaitForChild("PlayerGui") local mainFrame = Instance.new("Frame") mainFrame.Size = UDim2.new(0, 220, 0, 300) mainFrame.Position = UDim2.new(0.04, 0, 0.45, -150) mainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) mainFrame.BorderSizePixel = 0 mainFrame.Active = true -- Required for dragging mainFrame.Parent = screenGui local toggleBtn = Instance.new("TextButton") toggleBtn.Name = "Toggle" toggleBtn.Size = UDim2.new(1, 0, 0, 45) toggleBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 20) toggleBtn.TextColor3 = Color3.fromRGB(255, 255, 255) toggleBtn.TextScaled = true toggleBtn.Font = Enum.Font.GothamBold toggleBtn.Text = "HEAD LOCK: OFF" toggleBtn.Parent = mainFrame -- Scrollable Player List local scrollFrame = Instance.new("ScrollingFrame") scrollFrame.Size = UDim2.new(1, 0, 1, -45) scrollFrame.Position = UDim2.new(0, 0, 0, 45) scrollFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35) scrollFrame.ScrollBarThickness = 6 scrollFrame.Parent = mainFrame local listLayout = Instance.new("UIListLayout") listLayout.Parent = scrollFrame listLayout.SortOrder = Enum.SortOrder.LayoutOrder listLayout.Padding = UDim.new(0, 5) -- 2. Make the UI Draggable local dragging, dragInput, dragStart, startPos local function updateInput(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 updateInput(input) end end) -- 3. Toggle Aim Assist Button toggleBtn.MouseButton1Click:Connect(function() trackingEnabled = not trackingEnabled toggleBtn.Text = trackingEnabled and "HEAD LOCK: ON" or "HEAD LOCK: OFF" toggleBtn.BackgroundColor3 = trackingEnabled and Color3.fromRGB(180, 0, 0) or Color3.fromRGB(20, 20, 20) end) -- 4. Dynamic Player List & Avatar Fetching local function refreshPlayerList() for _, child in ipairs(scrollFrame:GetChildren()) do if child:IsA("Frame") then child:Destroy() end end local yOffset = 0 for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer then local pFrame = Instance.new("Frame") pFrame.Size = UDim2.new(1, -10, 0, 40) pFrame.BackgroundColor3 = ignoredPlayers[player.UserId] and Color3.fromRGB(0, 100, 180) or Color3.fromRGB(50, 50, 50) pFrame.Parent = scrollFrame local avatar = Instance.new("ImageLabel") avatar.Size = UDim2.new(0, 40, 0, 40) avatar.BackgroundTransparency = 1 local thumb, isReady = Players:GetUserThumbnailAsync(player.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size48x48) avatar.Image = thumb avatar.Parent = pFrame local nameBtn = Instance.new("TextButton") nameBtn.Size = UDim2.new(1, -45, 1, 0) nameBtn.Position = UDim2.new(0, 45, 0, 0) nameBtn.BackgroundTransparency = 1 nameBtn.TextColor3 = Color3.fromRGB(255, 255, 255) nameBtn.TextXAlignment = Enum.TextXAlignment.Left nameBtn.Font = Enum.Font.SourceSansBold nameBtn.TextSize = 16 nameBtn.Text = ignoredPlayers[player.UserId] and player.Name .. " [TEAM]" or player.Name nameBtn.Parent = pFrame nameBtn.MouseButton1Click:Connect(function() if ignoredPlayers[player.UserId] then ignoredPlayers[player.UserId] = nil pFrame.BackgroundColor3 = Color3.fromRGB(50, 50, 50) nameBtn.Text = player.Name else ignoredPlayers[player.UserId] = true pFrame.BackgroundColor3 = Color3.fromRGB(0, 100, 180) nameBtn.Text = player.Name .. " [TEAM]" end end) yOffset = yOffset + 45 end end scrollFrame.CanvasSize = UDim2.new(0, 0, 0, yOffset) end Players.PlayerAdded:Connect(refreshPlayerList) Players.PlayerRemoving:Connect(refreshPlayerList) refreshPlayerList() -- 5. Target Selection (Ignoring Whitelisted Players) local function getHeadTarget() local bestTarget = nil local shortestDist = 600 for _, player in ipairs(Players:GetPlayers()) do if player ~= LocalPlayer and not ignoredPlayers[player.UserId] and player.Character then local targetHead = player.Character:FindFirstChild("Head") local humanoid = player.Character:FindFirstChildOfClass("Humanoid") if targetHead and humanoid and humanoid.Health > 0 then local dist = (targetHead.Position - Camera.CFrame.Position).Magnitude if dist < shortestDist then shortestDist = dist bestTarget = targetHead end end end end return bestTarget end -- 6. Priority Brute Force Camera RunService:BindToRenderStep("AbsoluteCameraForce", 3000, function() if not trackingEnabled then return end local target = getHeadTarget() if target then Camera.CFrame = CFrame.new(Camera.CFrame.Position, target.Position) end end)