Roblox · Усиления
Клик — вокруг персонажа светящаяся сфера, 8 секунд никакой урон не проходит. Работает со всем, что ранит через TakeDamage: оружие, капкан, лава, ловушки.
Синим — что нужно создать.
StarterPack — или копии на карте для подбора └─ Shield (Tool) ├─ Handle (Part) — модель; CanCollide выкл. │ └─ Use (Sound) ├─ Configuration (Configuration) │ ├─ Duration (NumberValue) — секунд защиты, 8 │ ├─ Uses (NumberValue) — сколько раз можно использовать, 1 │ └─ Cooldown (NumberValue) — секунд между использованиями, 1 └─ ShieldServer (Script)
Где: StarterPack → Shield · Script
Зачем: Ставит силовое поле на Duration секунд.
-- щит (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 Debris = game:GetService("Debris")
-- время прошлого использования
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 character:FindFirstChild("Shield") then return end
-- откат ещё не прошёл
if os.clock() - lastUse < config.Cooldown.Value then return end
-- запоминаем
lastUse = os.clock()
-- звук
useSound:Play()
-- силовое поле Roblox
local shield = Instance.new("ForceField")
-- имя — чтобы не поставить второй
shield.Name = "Shield"
-- светящаяся сфера вокруг персонажа
shield.Visible = true
-- на персонажа: TakeDamage больше не ранит
shield.Parent = character
-- через Duration секунд исчезнет само
Debris:AddItem(shield, config.Duration.Value)
-- минус одно использование
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) и убедись: