Roblox · Усиления

Двойные монеты

Минуту все монеты — с карты, из сундуков, за цели — приходят в двойном размере. На счётчике горит «×2».

Структура

Синим — что нужно создать.

StarterPack — или копии на карте для подбора
└─ DoubleCoins (Tool)
   ├─ Handle (Part) — модель; CanCollide выкл.
   │  └─ Use (Sound)
   ├─ Configuration (Configuration)
   │  ├─ Duration (NumberValue) — секунд действия, 60
   │  ├─ Multiplier (NumberValue) — во сколько раз больше монет, 2
   │  ├─ Uses (NumberValue) — сколько раз можно использовать, 1
   │  └─ Cooldown (NumberValue) — секунд между использованиями, 1
   └─ DoubleCoinsServer (Script)
ServerScriptService
└─ Coins (ModuleScript) — умножает награды на CoinMultiplier

Шаги

  1. Нужна система монет (раздел «Системы» → «Монеты»): модуль Coins и папка Workspace → Coins. Сборщик поставит её сам, если её нет.
  2. Предмет — Tool с деталью Handle (CanCollide выкл.), в Handle — Sound «Use». Configuration — папка настроек: наведи на Tool → «+» → Configuration, внутри NumberValue (имена и числа — в «Структуре»).
  3. Предмет ставит игроку атрибут CoinMultiplier = 2. Модуль Coins умножает на него каждую награду (Coins.Add), поэтому «×2» работает для всех источников монет сразу. Счётчик CoinsLocal показывает «×2».
  4. Повторный приём продлевает действие с этой минуты.
  5. На последнем использовании предмет исчезает из рук, но удаляется чуть позже, когда эффект кончится: если удалить скрипт сразу, Roblox остановит все его таймеры — и эффект не выключится.

Скрипты

DoubleCoinsServer

Где: StarterPack → DoubleCoins · Script
Зачем: Включает множитель монет на минуту.

-- двойные монеты (Tool)
local tool = script.Parent
-- модель
local handle = tool:WaitForChild("Handle")
-- настройки
local config = tool:WaitForChild("Configuration")
-- звук использования
local useSound = handle:WaitForChild("Use")
-- все игроки
local Players = game:GetService("Players")
-- время прошлого использования
local lastUse = 0
-- сколько раз ещё можно
local uses = config.Uses.Value
-- подсказка на панели предметов
tool.ToolTip = "Двойные монеты: " .. uses

-- клик, пока предмет в руках (событие приходит и на сервер)
tool.Activated:Connect(function()
    -- кто держит
    local humanoid = tool.Parent:FindFirstChildOfClass("Humanoid")
    -- нет персонажа или он мёртв
    if not humanoid or humanoid.Health <= 0 then return end
    -- его персонаж
    local character = humanoid.Parent
    -- и игрок
    local player = Players:GetPlayerFromCharacter(character)
    -- держит не игрок
    if not player then return end
    -- откат ещё не прошёл
    if os.clock() - lastUse < config.Cooldown.Value then return end
    -- запоминаем
    lastUse = os.clock()
    -- звук
    useSound:Play()
    -- до какого момента
    local untilTime = os.clock() + config.Duration.Value
    -- запоминаем (повторный приём — с этой минуты)
    player:SetAttribute("DoubleUntil", untilTime)
    -- модуль Coins умножает все награды
    player:SetAttribute("CoinMultiplier", config.Multiplier.Value)
    -- когда время выйдет
    task.delay(config.Duration.Value + 0.05, function()
        -- не продлили новым приёмом
        if os.clock() >= (player:GetAttribute("DoubleUntil") or 0) then
            -- снова обычные монеты
            player:SetAttribute("CoinMultiplier", nil)
        -- конец проверки
        end
    -- конец отложенной функции
    end)
    -- минус одно использование
    uses -= 1
    -- обновляем подсказку
    tool.ToolTip = "Двойные монеты: " .. uses
    -- использования кончились
    if uses <= 0 then
        -- убираем из рук; здесь скрипт продолжит работать
        tool.Parent = game:GetService("ServerScriptService")
        -- ждём конца эффекта — иначе его таймер остановится
        task.wait(config.Duration.Value + 1)
        -- теперь удаляем совсем
        tool:Destroy()
    -- конец проверки
    end
-- конец обработчика
end)

Проверка

Запусти Play (или Run) и убедись:

Собрать двойные монеты одной командой