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

Дождь из предметов

Наступил на кнопку — с неба на тебя сыплются разноцветные мячи. Кнопка краснеет до конца дождя и перезарядки, мячи исчезают сами через 8 секунд.

Структура

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

Workspace
└─ ItemRain (Model)
   ├─ Button (Part) — кнопка на полу
   ├─ Configuration (Configuration) — Count, Radius, Height, Cooldown
   └─ RainServer (Script)

Шаги

  1. Кнопка «Button» — плоская неоновая деталь на полу, Anchored.
  2. Configuration: Count — сколько мячей, Radius — разброс вокруг игрока, Height — с какой высоты, Cooldown — перезарядка.
  3. Debris:AddItem(мяч, 8) удаляет мяч через 8 секунд — иначе после пары дождей на карте тысячи деталей и игра тормозит.
  4. В Алгоритмике кнопка снова срабатывала прямо во время дождя (сброс стоял внутри цикла) — здесь только после перезарядки.
  5. Вместо мячей можно ронять монеты (Системы → «Монеты») или образцы из ServerStorage: копия:Clone() вместо Instance.new.

Скрипты

RainServer

Где: Workspace → ItemRain · Script
Зачем: Мячи с неба.

-- игроки
local Players = game:GetService("Players")
-- удаление по таймеру
local Debris = game:GetService("Debris")
-- модель ItemRain
local model = script.Parent
-- кнопка на полу
local button = model:WaitForChild("Button")
-- Count, Radius, Height, Cooldown
local config = model:WaitForChild("Configuration")
-- кнопка готова
local ready = true

-- наступили
button.Touched:Connect(function(hit)
    -- центр персонажа
    local root = hit.Parent:FindFirstChild("HumanoidRootPart")
    -- не готова или не игрок
    if not ready or not Players:GetPlayerFromCharacter(hit.Parent) or not root then return end
    -- до конца дождя и перезарядки кнопка не работает (в оригинале сбрасывалось внутри цикла)
    ready = false
    -- кнопка красная
    button.Color = Color3.fromRGB(200, 60, 60)
    -- радиус
    local r = config.Radius.Value
    -- столько предметов
    for i = 1, config.Count.Value do
        -- мяч
        local ball = Instance.new("Part")
        -- шар
        ball.Shape = Enum.PartType.Ball
        -- случайный размер
        local size = 1 + math.random() * 2
        -- размер
        ball.Size = Vector3.new(size, size, size)
        -- случайный яркий цвет
        ball.Color = Color3.fromHSV(math.random(), 0.7, 1)
        -- высоко над игроком
        ball.Position = root.Position + Vector3.new(math.random(-r, r), config.Height.Value, math.random(-r, r))
        -- падает
        ball.Parent = workspace
        -- через 8 секунд исчезнет — без лагов
        Debris:AddItem(ball, 8)
        -- по одному
        task.wait(0.05)
    -- конец цикла
    end
    -- перезарядка
    task.wait(config.Cooldown.Value)
    -- снова зелёная
    button.Color = Color3.fromRGB(80, 200, 90)
    -- можно снова
    ready = true
-- конец функции
end)

Проверка

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

Собрать кнопку дождя одной командой