local flyZone = script.Parent
-- Таблица для отслеживания игроков, которые сейчас летят
local flyingPlayers = {}
-- Функция, которая срабатывает, когда кто-то касается зоны
flyZone.Touched:Connect(function(hit)
local character = hit.Parent
local player = game.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 flyingPlayers[player.UserId] and stamina.Value > 0 do
task.wait(1) -- Проверка каждую секунду
-- Тратим 1 единицу стамины в секунду
stamina.Value = stamina.Value - 1
-- На всякий случай обновляем скорость, если игрок кликает в полете
bodyVelocity.Velocity = Vector3.new(0, speed.Value * 10, 0)
end
-- Стамина кончилась! Падаем вниз
bodyVelocity:Destroy()
-- Считаем пройденные метры (высоту)
local endY = hrp.Position.Y
local distance = math.max(0, endY - startY) -- Сколько studs пролетел вверх
-- Твоя формула: 10 метров = +1 монета
local earnedCoins = math.floor(distance / 10)
if earnedCoins > 0 then
coins.Value = coins.Value + earnedCoins
end
-- Ждем, пока игрок упадет на землю, и разрешаем лететь снова через 3 секунды
task.wait(3)
stamina.Value = 10 -- Восстанавливаем базовую стамину для следующего раза
flyingPlayers[player.UserId] = nil
end
end)