Загрузка данных


-- Настройки аимлока
local Settings = {
    Key = Enum.KeyCode.X,           -- Клавиша для зажатия
    TargetPart = "Head"             -- Куда целиться ("Head" или "HumanoidRootPart")
}

-- Сервисы игры
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Mouse = LocalPlayer:GetMouse()
local Camera = workspace.CurrentCamera
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")

-- Переменные состояния
local IsHoldingKey = false
local CurrentTarget = nil

-- Функция поиска БЛИЖАЙШЕГО к прицелу игрока (вызывается только один раз в момент нажатия)
local function GetClosestPlayerToMouse()
    local ClosestTarget = nil
    local MaxDistance = math.huge -- Ищет по всему экрану без ограничений FOV

    for _, player in ipairs(Players:GetPlayers()) do
        if player ~= LocalPlayer and player.Character then
            local Character = player.Character
            local TargetPart = Character:FindFirstChild(Settings.TargetPart)
            local Humanoid = Character:FindFirstChildOfClass("Humanoid")
            
            -- Проверка: жив ли игрок
            if TargetPart and Humanoid and Humanoid.Health > 0 then
                local ScreenPosition, OnScreen = Camera:WorldToViewportPoint(TargetPart.Position)
                
                if OnScreen then
                    local MousePosition = Vector2.new(Mouse.X, Mouse.Y)
                    local Distance = (Vector2.new(ScreenPosition.X, ScreenPosition.Y) - MousePosition).Magnitude
                    
                    -- Находим того, кто ближе всего к центру экрана/курсору
                    if Distance < MaxDistance then
                        MaxDistance = Distance
                        ClosestTarget = TargetPart
                    end
                end
            end
        end
    end
    return ClosestTarget
end

-- Отслеживание нажатия клавиши X
UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if gameProcessed then return end
    if input.KeyCode == Settings.Key then
        IsHoldingKey = true
        -- Выбираем цель ОДИН раз в момент зажатия кнопки
        CurrentTarget = GetClosestPlayerToMouse()
    end
end)

-- Отслеживание отпускания клавиши X
UserInputService.InputEnded:Connect(function(input)
    if input.KeyCode == Settings.Key then
        IsHoldingKey = false
        CurrentTarget = nil -- Сбрасываем цель при отпускании
    end
end)

-- Основной цикл наводки
RunService.RenderStepped:Connect(function()
    if IsHoldingKey and CurrentTarget then
        -- Проверяем, существует ли еще цель и жив ли персонаж
        if CurrentTarget.Parent and CurrentTarget.Parent:FindFirstChildOfClass("Humanoid") then
            local Humanoid = CurrentTarget.Parent:FindFirstChildOfClass("Humanoid")
            
            if Humanoid.Health > 0 then
                -- Жестко удерживаем камеру на выбранной цели
                Camera.CFrame = CFrame.new(Camera.CFrame.Position, CurrentTarget.Position)
            else
                -- Если цель умерла пока мы держали кнопку, сбрасываем её
                CurrentTarget = nil
            end
        else
            -- Если цель вышла из игры или деспавнилась
            CurrentTarget = nil
        end
    end
end)