local Players = game:GetService("Players")
-- Настройки времени (в секундах)
local INTERMISSION_TIME = 30 -- Время отдыха/кликов на спавне (пока оставим 30 сек для быстрых тестов)
local RACE_TIME = 90 -- Время гонки (1.5 минуты)
local flyZone = workspace:FindFirstChild("FlyZone")
local isRaceActive = false
local flyingPlayers = {}
-- Создаем глобальный таймер для отображения времени (понадобится для текста на экране)
local gameTime = Instance.new("IntValue")
gameTime.Name = "GameTime"
gameTime.Value = INTERMISSION_TIME
gameTime.Parent = game.ReplicatedStorage
-- Основной игровой цикл
task.spawn(function()
while true do
-- === ЭТАП 1: КЛИКАЕМ НА СПАВНЕ ===
isRaceActive = false
for i = INTERMISSION_TIME, 0, -1 do
gameTime.Value = i
task.wait(1)
end
-- === ЭТАП 2: ТЕЛЕПОРТ И СТАРТ ГОНКИ ===
isRaceActive = true
-- Берем всех игроков со спавна и переносим в самое начало трубы (FlyZone)
for _, player in pairs(Players:GetPlayers()) do
local char = player.Character
if char and char:FindFirstChild("HumanoidRootPart") and flyZone then
-- Телепортируем в нижнюю точку нашей зоны полета
char.HumanoidRootPart.Position = flyZone.Position - Vector3.new(0, flyZone.Size.Y/2 - 5, 0)
end
end
-- Идет гонка
for i = RACE_TIME, 0, -1 do
gameTime.Value = i
task.wait(1)
end
-- === ЭТАП 3: КОНЕЦ ГОНКИ ===
isRaceActive = false
flyingPlayers = {}
-- Возвращаем всех игроков обратно на спавн (просто перезагружаем персонажа)
for _, player in pairs(Players:GetPlayers()) do
player:LoadCharacter()
end
end
end)
-- Логика полета внутри трубы при касании зоны
if flyZone then
flyZone.Touched:Connect(function(hit)
if not isRaceActive then return end -- Если гонка не активна, полет не работает
local character = hit.Parent
local player = Players:GetPlayerFromCharacter(character)
if player and not flyingPlayers[player.UserId] then
local leaderstats = player:WaitForChild("leaderstats")
local speed = leaderstats:WaitForChild("Speed")
local stamina = leaderstats:WaitForChild("Stamina")
local coins = leaderstats:WaitForChild("Coins")
if stamina.Value <= 0 then return end
flyingPlayers[player.UserId] = true
local hrp = character:WaitForChild("HumanoidRootPart")
local startY = hrp.Position.Y
-- Включаем полет вверх
local bodyVelocity = Instance.new("BodyVelocity")
bodyVelocity.MaxForce = Vector3.new(0, 400000, 0)
bodyVelocity.Velocity = Vector3.new(0, speed.Value * 10, 0)
bodyVelocity.Parent = hrp
-- Летим, пока идет гонка и есть выносливость
while isRaceActive and flyingPlayers[player.UserId] and stamina.Value > 0 do
task.wait(1)
stamina.Value = stamina.Value - 1
bodyVelocity.Velocity = Vector3.new(0, speed.Value * 10, 0)
end
-- Стамина кончилась или гонка завершена — убираем силу полета
bodyVelocity:Destroy()
-- Начисляем монеты за высоту (10 studs = 1 монета)
local endY = hrp.Position.Y
local distance = math.max(0, endY - startY)
local earnedCoins = math.floor(distance / 10)
if earnedCoins > 0 then
coins.Value = coins.Value + earnedCoins
end
end
end)
end