Roblox · Дополнительное

Лава

Светящийся пол, который обжигает: касание — урон (по умолчанию сразу смерть). Один скрипт на всю папку — любой кусок лавы можно сделать любой формы.

Структура

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

Workspace
└─ Lava (Folder)
   ├─ Lava (Part) — Anchored, Material Neon, оранжевый
   └─ LavaServer (Script)

Шаги

  1. Workspace → «+» → Folder, переименуй в Lava.
  2. В Lava: «+» → Part. Anchored — вкл.; Material — Neon; цвет — оранжево-красный. Размер и форму — любые: пол, ручей, кубики на трассе. Кусков может быть сколько угодно — все в папке Lava.
  3. Для красоты (по желанию): в парт «+» → Fire или ParticleEmitter.
  4. В Lava: «+» → Script, переименуй в LavaServer, вставь текст из «Скриптов».
  5. Как работает: касание персонажа — урон DAMAGE; атрибут BurnedAt не даёт обжигать чаще раза в INTERVAL секунд.
  6. Не убивать сразу: DAMAGE = 10 — стоя в лаве, теряешь 20 здоровья в секунду. Кислота — то же самое с зелёным цветом.

Скрипты

LavaServer

Где: Workspace → Lava · Script
Зачем: Каждый кусок лавы в папке обжигает касающихся.

-- папка с лавой
local folder = script.Parent
-- урон за касание: 100 — сразу смерть, 10 — понемногу
local DAMAGE = 100
-- не чаще раза в полсекунды для одного персонажа
local INTERVAL = 0.5

-- включает один кусок лавы
local function Setup(part)
    -- лавы что-то коснулось
    part.Touched:Connect(function(otherPart)
        -- модель, которой принадлежит деталь
        local model = otherPart:FindFirstAncestorOfClass("Model")
        -- живая?
        local humanoid = model and model:FindFirstChildOfClass("Humanoid")
        -- не живая — пропускаем
        if not humanoid or humanoid.Health <= 0 then return end
        -- только что обжёгся — ждём
        if os.clock() - (model:GetAttribute("BurnedAt") or 0) < INTERVAL then return end
        -- запоминаем время
        model:SetAttribute("BurnedAt", os.clock())
        -- урон
        humanoid:TakeDamage(DAMAGE)
    -- конец обработчика
    end)
-- конец функции
end

-- всё в папке
for _, part in pairs(folder:GetChildren()) do
    -- только парты
    if part:IsA("BasePart") then
        -- включаем
        Setup(part)
    -- конец проверки
    end
-- конец перебора
end

Проверка

Запусти Play (или Run) и убедись:

Собрать лаву одной командой