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) — из раздела «Системы»
Где: 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) и убедись: