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

Здание и кошелёк

Тайкун — симулятор бизнеса: зарабатываешь, покупаешь, производство приносит доход само. Сегодня: здание, которое достаётся первому вошедшему, и кошелёк с экраном денег.

Структура

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

Workspace
└─ IndustryModel (Model) — всё производство
   ├─ Decoration_Items (Folder) — стены, пол
   │  └─ Door (Part) — полупрозрачная, CanCollide выкл.
   │     ├─ OwnerGui (SurfaceGui)
   │     │  ├─ OwnedBy (TextLabel) — «Владелец:»
   │     │  └─ Owner (TextLabel) — имя игрока
   │     └─ OwnerScript (Script)
   └─ Values (Folder)
      └─ Owner (ObjectValue) — ссылка на игрока-владельца
ServerScriptService
└─ Stats (Script)
StarterGui
└─ MoneyGui (ScreenGui)
   └─ MoneyFrame (Frame)
      └─ Money (TextLabel)
         └─ UpdateMoneyLocal (LocalScript)

Шаги

  1. Новое место из шаблона, построй здание.
  2. Дверь Door: прозрачность ~0.5, CanCollide выключен.
  3. Собери всё по схеме выше.
  4. ObjectValue хранит ссылку на объект — здесь на игрока.

Скрипты

OwnerScript

Где: Workspace → IndustryModel → Decoration_Items → Door · Script
Зачем: Первый, кто коснулся двери, становится владельцем; его имя появляется на двери.

-- дверь, в которой лежит скрипт
local door = script.Parent
-- папка Values: Door → Decoration_Items → IndustryModel
local valuesFolder = door.Parent.Parent.Values

-- срабатывает, когда что-то касается двери
door.Touched:Connect(function(otherPart: BasePart)
    -- коснулся персонаж, а владельца у здания ещё нет
    if otherPart.Parent:FindFirstChildOfClass("Humanoid") and valuesFolder.Owner.Value == nil then
        -- находим игрока по персонажу
        local player = game.Players:GetPlayerFromCharacter(otherPart.Parent)
        -- записываем игрока во владельцы
        valuesFolder.Owner.Value = player
        -- пишем имя владельца на двери
        door.OwnerGui.Owner.Text = player.Name
    -- конец проверки
    end
-- конец обработчика касания
end)

Stats

Где: ServerScriptService · Script
Зачем: Создаёт каждому игроку кошелёк leaderstats → Money.

-- срабатывает, когда игрок заходит в игру
game.Players.PlayerAdded:Connect(function(player)
    -- создаём папку внутри игрока
    local leaderstats = Instance.new("Folder", player)
    -- с таким именем Roblox показывает её в таблице лидеров
    leaderstats.Name = "leaderstats"
    -- числовой контейнер для денег
    local money = Instance.new("NumberValue", leaderstats)
    -- называем его Money
    money.Name = "Money"
    -- стартовый баланс
    money.Value = 0
-- конец обработчика
end)

UpdateMoneyLocal

Где: StarterGui → MoneyGui → MoneyFrame → Money · LocalScript
Зачем: Показывает на экране, сколько у игрока денег.

-- текстовое поле Money
local moneyText = script.Parent
-- игрок, у которого открыт этот экран
local player = game.Players.LocalPlayer
-- ждём, пока сервер создаст кошелёк
local money = player:WaitForChild("leaderstats"):WaitForChild("Money")

-- функция обновления надписи
local function UpdateMoney(newMoney)
    -- показываем сумму со знаком $
    moneyText.Text = newMoney .. " $"
-- конец функции
end

-- сразу показываем текущий баланс
UpdateMoney(money.Value)
-- обновляем надпись при каждом изменении денег
money.Changed:Connect(UpdateMoney)

Проверка

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