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

Покупка конвейера и касса

Здание пустое: конвейер появляется после покупки кнопкой. Деньги из кассы забираются кнопкой в кошелёк.

Структура

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

ServerStorage
├─ ItemsToDrop (Folder)
└─ Conveyors (Folder)
   └─ CandyDropper (Model) — перенесён из Owned_Items
Workspace
└─ IndustryModel (Model)
   ├─ Buttons (Folder)
   │  ├─ BuyButtons (Folder)
   │  │  ├─ CandyDropperButton (Part) — кнопка на месте конвейера
   │  │  │  ├─ ClickDetector — CursorIcon — id картинки курсора
   │  │  │  ├─ Price (NumberValue) — цена
   │  │  │  ├─ Conveyor (ObjectValue) — → ServerStorage.Conveyors.CandyDropper
   │  │  │  ├─ Lines (Part) — разметка места на полу
   │  │  │  └─ CostGui (BillboardGui) — MaxDistance ≈ 30
   │  │  │     └─ CostFrame (Frame)
   │  │  │        ├─ Name (TextLabel) — что покупаем
   │  │  │        └─ Cost (TextLabel) — цена
   │  │  └─ BuyScript (Script) — один на все кнопки
   │  └─ GainButtons (Folder)
   │     └─ CollectGainButton (Model)
   │        ├─ GainScreen (Part) — экран на стене
   │        │  └─ GainScreenGui (SurfaceGui)
   │        │     └─ GainText (TextLabel)
   │        └─ GainButton (Part)
   │           ├─ ClickDetector
   │           │  └─ CollectGainScript (Script)
   │           └─ TakeGui (BillboardGui)
   │              └─ TakeFrame (Frame)
   │                 └─ Action (TextLabel) — «Забрать деньги»
   └─ Owned_Items (Folder) — пусто до покупки

Шаги

  1. CandyDropper перенеси в ServerStorage → Conveyors.
  2. На его месте — кнопка CandyDropperButton, собери её по схеме.
  3. Курсор: Toolbox → «Click cursor», id картинки → ClickDetector.CursorIcon.
  4. Новую кнопку покупки делай по тому же шаблону — скрипт не нужен, BuyScript обработает все.

Скрипты

BuyScript

Где: Workspace → IndustryModel → Buttons → BuyButtons · Script
Зачем: Нажатие владельца с достаточными деньгами: списывает цену, ставит конвейер, убирает кнопку.

-- папка BuyButtons
local buttons = script.Parent
-- папка Values: BuyButtons → Buttons → IndustryModel
local valuesFolder = buttons.Parent.Parent.Values
-- куда ставим купленные конвейеры
local ownedFolder = valuesFolder.Parent.Owned_Items

-- перебираем всё, что лежит в папке
for _, button in pairs(buttons:GetChildren()) do
    -- берём только парты-кнопки, сам скрипт пропускаем
    if button:IsA("BasePart") then
        -- на кнопку нажали
        button.ClickDetector.MouseClick:Connect(function(player)
            -- нажал владелец здания
            if valuesFolder.Owner.Value == player then
                -- денег хватает
                if player.leaderstats.Money.Value >= button.Price.Value then
                    -- списываем цену
                    player.leaderstats.Money.Value -= button.Price.Value
                    -- копируем конвейер из ServerStorage
                    local conveyor = button.Conveyor.Value:Clone()
                    -- ставим его на карту
                    conveyor.Parent = ownedFolder
                    -- убираем кнопку вместе с разметкой
                    button:Destroy()
                -- конец проверки денег
                end
            -- конец проверки владельца
            end
        -- конец обработчика нажатия
        end)
    -- конец проверки типа
    end
-- конец перебора
end

CollectGainScript

Где: … → GainButtons → CollectGainButton → GainButton → ClickDetector · Script
Зачем: Кнопка переводит деньги из кассы в кошелёк; экран показывает сумму в кассе.

-- ClickDetector кнопки кассы
local clicker = script.Parent
-- экран: ClickDetector → GainButton → CollectGainButton
local screen = clicker.Parent.Parent.GainScreen
-- Values: CollectGainButton → GainButtons → Buttons → IndustryModel
local valuesFolder = screen.Parent.Parent.Parent.Parent.Values

-- нажали на кнопку кассы
clicker.MouseClick:Connect(function(player)
    -- нажал владелец
    if valuesFolder.Owner.Value == player then
        -- сколько в кассе
        local gain = valuesFolder.Gain.Value
        -- сначала обнуляем — двойной клик не удвоит деньги
        valuesFolder.Gain.Value = 0
        -- переводим деньги в кошелёк
        player.leaderstats.Money.Value += gain
    -- конец проверки
    end
-- конец обработчика нажатия
end)

-- сумма в кассе изменилась
valuesFolder.Gain.Changed:Connect(function(newGain)
    -- показываем её на экране
    screen.GainScreenGui.GainText.Text = newGain .. " $"
-- конец обработчика
end)

Проверка

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