Roblox · Тайкун · урок 4
Три вида улучшений: конвейер работает быстрее и дороже, рамка на ленте повышает цену каждого предмета, покупка украшений. Кнопки устроены так же, как кнопка покупки конвейера.
Синим — что добавляем на этом уроке.
ServerStorage └─ Conveyors (Folder) ├─ CandyDropper (Model) │ ├─ Upgrade (Model) — детали улучшения: Transparency 1, CanCollide выкл. │ └─ CandyDropperScript (Script) │ ├─ Rate (NumberValue) — 5 — секунд между предметами │ └─ GainBonus (NumberValue) — 0 — надбавка к цене ├─ CandyUpgrader (Model) — рамка над лентой │ └─ Upgrader (Part) — Anchored, CanCollide выкл. │ └─ UpgradeCandyScript (Script) └─ Garland (Model) — гирлянда на стене Workspace └─ IndustryModel (Model) └─ Buttons (Folder) ├─ BuyButtons (Folder) │ ├─ CandyUpgrader (Part) — кнопка; Conveyor → Conveyors.CandyUpgrader │ ├─ Garland (Part) — кнопка; Conveyor → Conveyors.Garland │ └─ BuyScript (Script) — без изменений └─ UpgradeButtons (Folder) └─ CandyDropperUpgrade (Part) — Price, Conveyor → Conveyors.CandyDropper, CostGui └─ ClickDetector └─ UpgradeDropperScript (Script)
Где: ServerStorage → Conveyors → CandyDropper · Script
Зачем: Частота и надбавка берутся из Rate и GainBonus — их меняет улучшение.
-- модель конвейера
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")
-- секунд между предметами
local rate = script.Rate
-- надбавка к цене каждого предмета
local gainBonus = script.GainBonus
-- каждые Rate секунд (меняется улучшением)
while task.wait(rate.Value) 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 + gainBonus.Value
-- пауза 1 секунда
task.wait(1)
-- удаляем предмет
candyClone:Destroy()
-- конец проверки
end
-- конец обработчика касания
end)
-- следующий предмет
endГде: … → UpgradeButtons → CandyDropperUpgrade → ClickDetector · Script
Зачем: Улучшает купленный конвейер: Rate 3, +5 к цене, показывает детали Upgrade.
-- ClickDetector кнопки улучшения
local clicker = script.Parent
-- сама кнопка
local button = clicker.Parent
-- производство: UpgradeButtons → Buttons → IndustryModel
local tycoon = button.Parent.Parent.Parent
-- владелец и касса
local valuesFolder = tycoon.Values
-- купленное оборудование
local ownedFolder = tycoon.Owned_Items
-- нажали на кнопку улучшения
clicker.MouseClick:Connect(function(player)
-- ищем купленный конвейер с этим именем
local conveyor = ownedFolder:FindFirstChild(button.Conveyor.Value.Name)
-- конвейер ещё не куплен — улучшать нечего
if not conveyor then return end
-- нажал не владелец
if valuesFolder.Owner.Value ~= player then return end
-- денег не хватает
if player.leaderstats.Money.Value < button.Price.Value then return end
-- списываем цену
player.leaderstats.Money.Value -= button.Price.Value
-- предметы чаще: раз в 3 секунды
conveyor.CandyDropperScript.Rate.Value = 3
-- каждый предмет дороже на 5
conveyor.CandyDropperScript.GainBonus.Value += 5
-- все детали визуального улучшения
for _, part in pairs(conveyor.Upgrade:GetDescendants()) do
-- только физические
if part:IsA("BasePart") then
-- делаем видимыми
part.Transparency = 0
-- конец проверки
end
-- конец перебора
end
-- улучшение куплено — кнопка больше не нужна
button:Destroy()
-- конец обработчика
end)Где: ServerStorage → Conveyors → CandyUpgrader → Upgrader · Script
Зачем: Каждая конфета, проехавшая через рамку, дорожает на 5 — один раз.
-- рамка, через которую проезжает предмет
local upgrader = script.Parent
-- рамки что-то коснулось
upgrader.Touched:Connect(function(otherPart)
-- это конфета, и её ещё не улучшали
if otherPart.Name == "Candy" and not otherPart:GetAttribute("Upgraded") then
-- метка на самой конфете: второй раз не улучшим
otherPart:SetAttribute("Upgraded", true)
-- конфета стала дороже на 5
otherPart.Gain.Value += 5
-- конец проверки
end
-- конец обработчика
end)Запусти Play (или Run) и убедись: