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


-- Скрипт: Плавное следование к игроку tiaufs2 с Noclip
-- Каждые 5 секунд персонаж плавно двигается к цели
-- При достижении цели Noclip отключается
-- Работает после респавна

local player = game.Players.LocalPlayer
local TARGET_USERNAME = "tiaufs2" -- Имя целевого игрока
local MOVE_INTERVAL = 5 -- Интервал между перемещениями (секунды)
local MOVE_DURATION = 1.5 -- Длительность перемещения (секунды)

local targetPlayer = nil
local isMoving = false
local noclipEnabled = false
local noclipConnection = nil
local moveConnection = nil
local character = nil
local hrp = nil

-- Функция для поиска целевого игрока
local function findTargetPlayer()
    for _, plr in ipairs(game.Players:GetPlayers()) do
        if string.lower(plr.Name) == string.lower(TARGET_USERNAME) then
            return plr
        end
    end
    return nil
end

-- Функция включения Noclip
local function enableNoclip()
    if noclipEnabled then return end
    noclipEnabled = true
    
    -- Отключаем коллизии для всех частей персонажа
    local function disableCollisions(char)
        if not char then return end
        for _, part in ipairs(char:GetDescendants()) do
            if part:IsA("BasePart") then
                part.CanCollide = false
            end
        end
    end
    
    -- Включаем ноклип для текущего персонажа
    if character then
        disableCollisions(character)
    end
    
    -- Подключаем событие на новые части
    if noclipConnection then
        noclipConnection:Disconnect()
    end
    
    noclipConnection = game:GetService("RunService").RenderStepped:Connect(function()
        if not character then return end
        for _, part in ipairs(character:GetDescendants()) do
            if part:IsA("BasePart") and part.CanCollide == true then
                part.CanCollide = false
            end
        end
    end)
    
    print("[NOCLIP] Включён")
end

-- Функция отключения Noclip
local function disableNoclip()
    if not noclipEnabled then return end
    noclipEnabled = false
    
    if noclipConnection then
        noclipConnection:Disconnect()
        noclipConnection = nil
    end
    
    -- Восстанавливаем коллизии для всех частей персонажа
    if character then
        for _, part in ipairs(character:GetDescendants()) do
            if part:IsA("BasePart") then
                part.CanCollide = true
            end
        end
    end
    
    print("[NOCLIP] Отключён")
end

-- Функция плавного перемещения к цели
local function moveToTarget()
    if isMoving then return end
    if not character or not hrp then return end
    
    -- Обновляем цель
    targetPlayer = findTargetPlayer()
    if not targetPlayer then
        print("[ОШИБКА] Игрок " .. TARGET_USERNAME .. " не найден!")
        return
    end
    
    local targetChar = targetPlayer.Character
    if not targetChar then
        print("[ОШИБКА] У игрока " .. TARGET_USERNAME .. " нет персонажа!")
        return
    end
    
    local targetHRP = targetChar:FindFirstChild("HumanoidRootPart")
    if not targetHRP then
        print("[ОШИБКА] У цели нет HumanoidRootPart!")
        return
    end
    
    -- Включаем Noclip перед движением
    enableNoclip()
    
    isMoving = true
    
    -- Получаем текущую позицию и позицию цели
    local startPos = hrp.Position
    local targetPos = targetHRP.Position + Vector3.new(0, 3, 0) -- Немного выше, чтобы не застрять
    
    -- Создаём Tween для плавного перемещения
    local tweenInfo = TweenInfo.new(
        MOVE_DURATION,           -- Время перемещения
        Enum.EasingStyle.Linear, -- Тип анимации (линейный для равномерного движения)
        Enum.EasingDirection.Out
    )
    
    local tween = game:GetService("TweenService"):Create(hrp, tweenInfo, {
        CFrame = CFrame.new(targetPos)
    })
    
    tween:Play()
    
    -- Ждём завершения движения
    tween.Completed:Wait()
    
    isMoving = false
    
    -- Отключаем Noclip после достижения цели
    disableNoclip()
    
    print("[ДВИЖЕНИЕ] Достигнут игрок: " .. targetPlayer.Name)
end

-- Функция обновления персонажа
local function setupCharacter(newChar)
    character = newChar
    hrp = character:WaitForChild("HumanoidRootPart")
    
    -- Если Noclip был включён, восстанавливаем его
    if noclipEnabled then
        enableNoclip()
    end
    
    print("[СИСТЕМА] Персонаж обновлён")
end

-- Функция запуска цикла перемещения
local function startMovementLoop()
    if moveConnection then
        moveConnection:Disconnect()
    end
    
    -- Запускаем бесконечный цикл
    moveConnection = game:GetService("RunService").Heartbeat:Connect(function()
        -- Ждём, пока персонаж загрузится
        if not player.Character or not player.Character:FindFirstChild("HumanoidRootPart") then
            return
        end
        
        -- Проверяем, не двигаемся ли мы уже
        if isMoving then return end
        
        -- Запускаем перемещение
        moveToTarget()
        
        -- Ждём интервал перед следующим перемещением
        task.wait(MOVE_INTERVAL)
    end)
end

-- Инициализация
local function init()
    -- Проверяем, есть ли персонаж
    character = player.Character
    if character then
        hrp = character:FindFirstChild("HumanoidRootPart")
        if hrp then
            -- Ждём загрузки
            task.wait(1)
            -- Запускаем цикл
            startMovementLoop()
        end
    end
    
    -- Подписываемся на событие респавна
    player.CharacterAdded:Connect(function(newChar)
        task.wait(0.5) -- Ждём загрузки
        setupCharacter(newChar)
        
        -- Если цикл не запущен, запускаем
        if not moveConnection then
            startMovementLoop()
        end
    end)
end

-- Запуск
init()

print("========================================")
print("[СЛЕДОВАНИЕ] Скрипт активирован!")
print("Цель: " .. TARGET_USERNAME)
print("Интервал: " .. MOVE_INTERVAL .. " секунд")
print("Noclip включается во время движения")
print("========================================")

-- Горячая клавиша для ручного перезапуска (R)
game:GetService("UserInputService").InputBegan:Connect(function(input)
    if input.KeyCode == Enum.KeyCode.R then
        print("[СИСТЕМА] Ручной перезапуск...")
        if moveConnection then
            moveConnection:Disconnect()
            moveConnection = nil
        end
        disableNoclip()
        isMoving = false
        task.wait(0.5)
        startMovementLoop()
        print("[СИСТЕМА] Перезапущено!")
    end
end)

-- Остановка при нажатии на X (аварийная остановка)
game:GetService("UserInputService").InputBegan:Connect(function(input)
    if input.KeyCode == Enum.KeyCode.X then
        print("[СИСТЕМА] Аварийная остановка!")
        if moveConnection then
            moveConnection:Disconnect()
            moveConnection = nil
        end
        disableNoclip()
        isMoving = false
        print("[СИСТЕМА] Остановлено. Нажмите R для перезапуска.")
    end
end)