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


local entity = script.Parent

-- // ТАБЛИЦА НАСТРОЕК
local Config = {
	DistancePerStep = 8,      -- На сколько стадов прыгает за шаг
	
	-- Фаза 1 (Обычная)
	NormalSteps = 6,          -- Кол-во шагов
	NormalInterval = 1,       -- Интервал между шагами (сек)
	
	-- Фаза 2 (Замирание)
	PauseDuration = 2,        -- Длительность паузы (сек)
	
	-- Фаза 3 (Комбо)
	ComboSteps = 6,           -- Кол-во шагов в комбо
	ComboInterval = 0.5,      -- Интервал в комбо (сек)
	
	-- Ссылки на объекты (имена внутри парта/модели)
	Anims = {
		Move = "MoveAnim",
	},
	Sounds = {
		Step = "MoveSound",
		Stop = "StopSound",
	}
}

-- // Инициализация компонентов
local animator = entity:FindFirstChildOfClass("Animator") or entity:FindFirstChild("Humanoid") and entity.Humanoid:FindFirstChildOfClass("Animator")
local moveAnim = entity:FindFirstChild(Config.Anims.Move)
local stepSound = entity:FindFirstChild(Config.Sounds.Step)
local stopSound = entity:FindFirstChild(Config.Sounds.Stop)

local moveTrack
if animator and moveAnim then
	moveTrack = animator:LoadAnimation(moveAnim)
end

-- // Функция перемещения
local function performMove()
	-- Движение вперёд (по вектору LookVector)
	entity.CFrame = entity.CFrame * CFrame.new(0, 0, -Config.DistancePerStep)
	
	-- Эффекты
	if moveTrack then moveTrack:Play() end
	if stepSound then stepSound:Play() end
end

-- // ГЛАВНЫЙ ЦИКЛ
while true do
	-- 1. Обычное преследование
	for i = 1, Config.NormalSteps do
		performMove()
		task.wait(Config.NormalInterval)
	end

	-- 2. Пауза
	if stopSound then stopSound:Play() end
	task.wait(Config.PauseDuration)

	-- 3. Комбо-рывок
	for i = 1, Config.ComboSteps do
		performMove()
		task.wait(Config.ComboInterval)
	end
end