Roblox · Тайкун · урок 2

Конвейер, который приносит деньги

Лента везёт предметы в корзину, каждый предмет добавляет деньги в кассу производства.

Структура

Синим — что добавляем на этом уроке.

ServerStorage
└─ ItemsToDrop (Folder)
   └─ Candy (Part) — Anchored выкл.
      └─ Gain (NumberValue) — сколько $ приносит предмет
Workspace
└─ IndustryModel (Model)
   ├─ Values (Folder)
   │  ├─ Owner (ObjectValue)
   │  └─ Gain (NumberValue) — деньги в кассе
   ├─ Dropped_Items (Folder) — сюда падают предметы
   └─ Owned_Items (Folder) — купленное оборудование
      └─ CandyDropper (Model)
         ├─ Conveyor (Part) — лента
         ├─ SpawnPart (Part) — невидимый, CanCollide выкл.
         ├─ Catcher (Part) — корзина в конце ленты
         └─ CandyDropperScript (Script)

Шаги

  1. Conveyor: Anchored вкл., в свойстве AssemblyLinearVelocity задай скорость по оси ленты (например, 0, 0, −10).
  2. Запусти игру и проверь направление — предмет должен ехать к корзине.
  3. Над лентой — модель-раздатчик, под ней SpawnPart.
  4. Предмет Candy с контейнером Gain положи в ServerStorage → ItemsToDrop.

Скрипты

CandyDropperScript

Где: Workspace → IndustryModel → Owned_Items → CandyDropper · Script
Зачем: Каждые 5 с создаёт предмет над лентой; когда предмет падает в корзину, добавляет его цену в кассу.

-- модель конвейера
local candyDropper = script.Parent
-- производство: CandyDropper → Owned_Items → IndustryModel
local tycoon = candyDropper.Parent.Parent
-- папка для упавших предметов
local droppedFolder = tycoon.Dropped_Items
-- касса производства
local gainValue = tycoon.Values.Gain
-- точка, где появляется предмет
local spawnPart = candyDropper.SpawnPart
-- корзина в конце ленты
local catcher = candyDropper:WaitForChild("Catcher")
-- серверное хранилище
local SS = game:GetService("ServerStorage")
-- образец предмета
local candy = SS.ItemsToDrop:WaitForChild("Candy")
-- удаление по таймеру
local Debris = game:GetService("Debris")

-- каждые 5 секунд
while task.wait(5) do
    -- копируем предмет
    local candyClone = candy:Clone()
    -- ставим над лентой
    candyClone.Position = spawnPart.Position
    -- кладём в мир
    candyClone.Parent = droppedFolder
    -- упал мимо ленты — сам исчезнет через 30 с
    Debris:AddItem(candyClone, 30)
    -- за этот предмет ещё не платили
    local paid = false
    -- следим за касаниями предмета
    candyClone.Touched:Connect(function(otherPart)
        -- предмет в корзине, оплаты ещё не было
        if otherPart == catcher and not paid then
            -- платим один раз
            paid = true
            -- цена предмета — в кассу
            gainValue.Value += candyClone.Gain.Value
            -- пауза 1 секунда
            task.wait(1)
            -- удаляем предмет
            candyClone:Destroy()
        -- конец проверки
        end
    -- конец обработчика касания
    end)
-- следующий предмет
end

Проверка

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