local aimbotActive = false
local lockedPlayer = nil
local maxLockDistance = 200 -- Set the maximum lock distance here
local playerTeamNames = {
    "TOC",
    "TBC",
    "TYC",
    "TRC",
    "TPC",
    "TGC"
}

local function isVisible(targetPosition)
    local camera = game.Workspace.CurrentCamera
    local viewportPosition = camera:WorldToViewportPoint(targetPosition)

    return viewportPosition.Z > 0
end

game:GetService("UserInputService").InputBegan:Connect(function(input, gameProcessed)
    if not gameProcessed then
        if input.KeyCode == Enum.KeyCode.E then
            aimbotActive = not aimbotActive
            if aimbotActive then
                local closestPlayer = nil
                local closestDistance = math.huge

                local myCharacter = game.Players.LocalPlayer.Character
                local myPosition = myCharacter and myCharacter.PrimaryPart and myCharacter.PrimaryPart.Position

                if myPosition then
                    for _, player in pairs(game.Players:GetPlayers()) do
                        local character = player.Character
                        local characterPosition = character and character.PrimaryPart and character.PrimaryPart.Position

                        if characterPosition and player ~= game.Players.LocalPlayer and isVisible(characterPosition) and not isSameTeam(player) then
                            local distance = (myPosition - characterPosition).Magnitude
                            if distance < closestDistance and distance <= maxLockDistance then
                                closestDistance = distance
                                closestPlayer = player
                            end
                        end
                    end

                    if closestPlayer then
                        lockedPlayer = closestPlayer
                    end
                end
            else
                lockedPlayer = nil
            end
        elseif input.KeyCode == Enum.KeyCode.O then
            aimbotActive = false
            lockedPlayer = nil
        end
    end
end)

function isSameTeam(player)
    local myPlayer = game.Players.LocalPlayer
    local myTeam = myPlayer.Team

    if myTeam and player.Team then
        return myTeam.Name == player.Team.Name
    end

    return false
end

game:GetService("Players").PlayerRemoving:Connect(function(player)
    if lockedPlayer == player then
        lockedPlayer = nil
    end
end)

game:GetService("RunService").Heartbeat:Connect(function()
    if lockedPlayer and (not lockedPlayer.Character or not lockedPlayer.Character:FindFirstChild("Humanoid") or lockedPlayer.Character.Humanoid.Health <= 0) then
        lockedPlayer = nil
    end

    if aimbotActive and lockedPlayer then
        local myCharacter = game.Players.LocalPlayer.Character
        local myPosition = myCharacter and myCharacter.PrimaryPart and myCharacter.PrimaryPart.Position

        if myPosition then
            local targetPosition = lockedPlayer.Character.PrimaryPart.Position
            game:GetService("VirtualUser"):CaptureController()
            mousemoveabs(targetPosition.X, targetPosition.Y)

            local camera = game.Workspace.CurrentCamera
            camera.CFrame = CFrame.new(camera.CFrame.Position, targetPosition)
        end
    end
end)