Roblox · Усиления

Невидимость

Клик — персонаж, его одежда и имя над головой исчезают на 10 секунд, потом всё возвращается как было.

Структура

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

StarterPack — или копии на карте для подбора
└─ Invisibility (Tool)
   ├─ Handle (Part) — модель; CanCollide выкл.
   │  └─ Use (Sound)
   ├─ Configuration (Configuration)
   │  ├─ Duration (NumberValue) — секунд невидимости, 10
   │  ├─ Uses (NumberValue) — сколько раз можно использовать, 1
   │  └─ Cooldown (NumberValue) — секунд между использованиями, 1
   └─ InvisibilityServer (Script)

Шаги

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

Скрипты

InvisibilityServer

Где: 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) и убедись:

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