Roblox · Усиления

Магнит монет

15 секунд все монеты в радиусе 20 studs сами собираются в кошелёк — бежать к каждой не нужно. Вокруг персонажа золотое свечение.

Структура

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

StarterPack — или копии на карте для подбора
└─ Magnet (Tool)
   ├─ Handle (Part) — модель; CanCollide выкл.
   │  └─ Use (Sound)
   ├─ Configuration (Configuration)
   │  ├─ Duration (NumberValue) — секунд работы, 15
   │  ├─ Radius (NumberValue) — радиус притяжения в studs, 20
   │  ├─ Uses (NumberValue) — сколько раз можно использовать, 1
   │  └─ Cooldown (NumberValue) — секунд между использованиями, 1
   └─ MagnetServer (Script)
ServerScriptService
└─ Coins (ModuleScript) — из раздела «Системы»

Шаги

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

Скрипты

MagnetServer

Где: StarterPack → Magnet · Script
Зачем: Собирает монеты в радиусе через модуль Coins.

-- магнит (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 Coins = require(game:GetService("ServerScriptService"):WaitForChild("Coins"))
-- монеты на карте
local coinsFolder = workspace:WaitForChild("Coins")
-- время прошлого использования
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 root = character:FindFirstChild("HumanoidRootPart")
    -- до какого момента работает
    local untilTime = os.clock() + config.Duration.Value
    -- отдельный поток
    task.spawn(function()
        -- свечение, пока магнит работает
        local glow = Instance.new("PointLight")
        -- золотое
        glow.Color = Color3.fromRGB(255, 210, 60)
        -- на весь радиус
        glow.Range = config.Radius.Value
        -- на персонажа
        glow.Parent = root
        -- пока жив и время не вышло
        while root.Parent and humanoid.Health > 0 and os.clock() < untilTime do
            -- каждая монета
            for _, coin in ipairs(coinsFolder:GetChildren()) do
                -- видимая и рядом
                if coin:IsA("BasePart") and coin.CanTouch and (coin.Position - root.Position).Magnitude <= config.Radius.Value then
                    -- подбираем, будто коснулся
                    Coins.Collect(player, coin)
                -- конец проверки
                end
            -- конец перебора
            end
            -- 10 раз в секунду
            task.wait(0.1)
        -- конец цикла
        end
        -- свечение гаснет
        glow:Destroy()
    -- конец потока
    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) и убедись:

Собрать магнит одной командой