← Все практические скрипты
Персонаж · Уверенный · 20 мин

Случайный бонус: скорость, прыжок или лечение

Один объект выдаёт случайное усиление при касании.

Иллюстрация: Случайный бонус: скорость, прыжок или лечение
🎯 Что получится

Игрок получает случайное лечение, ускорение на 8 секунд или высокий прыжок на 8 секунд. Для каждого игрока действует собственная перезарядка.

1. Подготовьте объект

Где разместить: Обычный Script в ServerScriptService

Создайте Part BonusPart, включите Anchored и CanTouch, добавьте обычный Script и вставьте код.
При касании игрок получает один случайный бонус: лечение (+40 здоровья), скорость (+12 на 8 секунд) или высоту прыжка (+8 на 8 секунд). Повторное получение — через 10 секунд для каждого игрока.
Скрипт старается не отменять эффекты других скриптов, но при объединении нескольких бонусов лучше создать единый контроллер характеристик персонажа.

2. Вставьте код

Script
-- Script внутри BonusPart (Part): случайный бонус
local Players = game:GetService("Players")
local part = script.Parent
local COOLDOWN = 10
local DURATION = 8
local active = {}
local rng = Random.new()

part.Touched:Connect(function(hit)
    local character = hit:FindFirstAncestorOfClass("Model")
    local player = character and Players:GetPlayerFromCharacter(character)
    local humanoid = character and character:FindFirstChildOfClass("Humanoid")
    if not player or not humanoid or humanoid.Health <= 0 then return end
    local now = os.clock()
    if (active[player] or 0) > now then return end
    active[player] = now + COOLDOWN
    local choice = rng:NextInteger(1, 3)
    if choice == 1 then
        humanoid.Health = math.min(humanoid.MaxHealth, humanoid.Health + 40)
    elseif choice == 2 then
        local previous = humanoid.WalkSpeed
        local boosted = previous + 12
        humanoid.WalkSpeed = boosted
        task.delay(DURATION, function()
            if humanoid.Parent and math.abs(humanoid.WalkSpeed - boosted) < 0.01 then
                humanoid.WalkSpeed = previous
            end
        end)
    else
        -- Сохраняем прежний способ прыжка и не отменяем чужие изменения.
        local previousMode = humanoid.UseJumpPower
        local previousHeight = humanoid.JumpHeight
        local boosted = previousHeight + 8
        humanoid.UseJumpPower = false
        humanoid.JumpHeight = boosted
        task.delay(DURATION, function()
            if humanoid.Parent and not humanoid.UseJumpPower and math.abs(humanoid.JumpHeight - boosted) < 0.01 then
                humanoid.JumpHeight = previousHeight
                humanoid.UseJumpPower = previousMode
            end
        end)
    end
end)
Players.PlayerRemoving:Connect(function(player) active[player] = nil end)

3. Проверьте в игре

Нажмите Play в Roblox Studio и проверьте действие механики. Если механика не работает, откройте окно Output и проверьте тип скрипта, его расположение и названия объектов.

Ваш прогресс

Когда проверите механику в Roblox Studio, отметьте практику как выполненную. Отметка хранится только в этом браузере, не в личном кабинете.

Если объединяете несколько скриптов

Добавляйте механики по одной и проверяйте окно Output. Не создавайте несколько одинаковых систем монет или интерфейсов; скрипты, меняющие WalkSpeed, прыжок или освещение, могут влиять друг на друга.

⭐ Три шага к собственной игре
1. Повторите и измените

Измените COOLDOWN на 5 секунд.

2. Улучшите

Создайте три бонуса и задайте каждому свой цвет.

3. Придумайте своё

Постройте арену с бонусами и препятствиями: кто быстрее пройдёт дистанцию?

4. Проверьте себя

Какой бонус может случайно выпасть игроку?

🛠 Если не работает

Если эффект не срабатывает, проверьте CanTouch, тип Script и наличие Humanoid. Бонус выбирается случайно: иногда это лечение, которое не видно при полном здоровье. Если скорость или прыжок после бонуса не восстановились, возможно, другой скрипт изменил эти свойства.