Roblox · Усиления
Клик — персонаж, его одежда и имя над головой исчезают на 10 секунд, потом всё возвращается как было.
Синим — что нужно создать.
StarterPack — или копии на карте для подбора └─ Invisibility (Tool) ├─ Handle (Part) — модель; CanCollide выкл. │ └─ Use (Sound) ├─ Configuration (Configuration) │ ├─ Duration (NumberValue) — секунд невидимости, 10 │ ├─ Uses (NumberValue) — сколько раз можно использовать, 1 │ └─ Cooldown (NumberValue) — секунд между использованиями, 1 └─ InvisibilityServer (Script)
Где: StarterPack → Invisibility · 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 character:GetAttribute("Invisible") then return end
-- откат ещё не прошёл
if os.clock() - lastUse < config.Cooldown.Value then return end
-- запоминаем
lastUse = os.clock()
-- звук
useSound:Play()
-- отмечаем
character:SetAttribute("Invisible", true)
-- что спрятали и какой была прозрачность
local hidden = {}
-- все части персонажа, одежда, лицо
for _, obj in ipairs(character:GetDescendants()) do
-- видимая деталь или картинка
if (obj:IsA("BasePart") or obj:IsA("Decal")) and obj.Transparency < 1 then
-- запоминаем
hidden[obj] = obj.Transparency
-- прячем
obj.Transparency = 1
-- конец проверки
end
-- конец перебора
end
-- прячем имя над головой
humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
-- через Duration секунд
task.delay(config.Duration.Value, function()
-- всё спрятанное
for obj, transparency in pairs(hidden) do
-- возвращаем как было
if obj.Parent then obj.Transparency = transparency end
-- конец перебора
end
-- имя снова видно
humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.Viewer
-- снова видим
character:SetAttribute("Invisible", nil)
-- конец отложенной функции
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) и убедись: