Biển báo thu nhập
Bài học 13 trên 22 trong khóa học Game Roblox: nhà máy tycoon của Coddy.
Chủ xưởng thích thấy con số tăng lên. Bảng hiệu sẽ hiển thị số tiền nhà máy kiếm được mỗi giây, bên dưới tên chủ xưởng. Bộ đếm cộng mỗi khoản thanh toán vào biến (variable) earned; cứ mỗi 5 giây, vòng lặp (loop) hiển thị earned / 5 rồi bắt đầu đếm lại.
Đếm số tiền bộ đếm đã trả thay vì theo dõi Cash thay đổi thế nào sẽ không tính các khoản mua sắm vào đó: mua thứ gì đó không nên trông như thu nhập âm.
Dòng đầu tiên trên bảng hiệu là headline của nhà máy, một biến: tên chủ xưởng hiện tại, và những tin tức khác sau này. Vòng lặp ghi headline, một dòng mới (\n), rồi đến thu nhập.
setSign(headline .. "\n$" .. math.floor(earned / 5) .. " a second")Thử thách
Trung bìnhHiển thị thu nhập trên biển báo.
- Gần đầu:
local earned = 0vàlocal headline. Bộ thu gom cộng vàoearned. - Khi người chơi nhận nhà máy, đặt
headlinethành dòng tên rồi hiển thị dòng đó. - Cứ mỗi 5 giây, trong
task.spawn: nếu có chủ sở hữu,setSign(headline .. "\n$" .. math.floor(earned / 5) .. " a second"); sau đó đặtearned = 0.
Nhấn Chơi rồi nhận nhà máy: thu nhập của bạn sẽ hiển thị bên dưới tên. Sau đó nhấn Kiểm tra.
Tự làm thử
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local CollectionService = game:GetService("CollectionService")
local TweenService = game:GetService("TweenService")
local Debris = game:GetService("Debris")
local Settings = require(game.ReplicatedStorage.Settings)
local tycoon = workspace.Tycoon
local items = ServerStorage.TycoonItems
local owner = nil
print("Ore is worth " .. Settings.OreValue .. " Cash")
-- Mỗi người chơi có Cash trên bảng xếp hạng
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local cash = Instance.new("IntValue")
cash.Name = "Cash"
cash.Parent = leaderstats
end)
-- Biển hiệu phía trên nhà máy
local gui = Instance.new("SurfaceGui")
gui.Parent = tycoon.Sign
local signLabel = Instance.new("TextLabel")
signLabel.Name = "Status"
signLabel.Size = UDim2.fromScale(1, 1)
signLabel.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
signLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
signLabel.TextScaled = true
signLabel.Text = "Step on the green pad to claim this factory"
signLabel.Parent = gui
local function setSign(text)
signLabel.Text = text
end
-- Ore: một bộ phận nhỏ có giá trị Cash, rơi xuống từ dropper
local function dropOre(dropper)
local ore = Instance.new("Part")
ore.Name = "Ore"
ore.Size = Vector3.new(1, 1, 1)
ore.Color = Color3.fromRGB(150, 150, 160)
ore.Position = dropper.Position - Vector3.new(0, 2.5, 0)
ore:SetAttribute("Value", Settings.OreValue)
if math.random() < Settings.GoldChance then
ore.Color = Color3.fromRGB(255, 200, 40)
ore.Material = Enum.Material.Neon
ore:SetAttribute("Value", Settings.OreValue * 5)
end
ore.Parent = workspace
Debris:AddItem(ore, 20)
end
local function startDropper(dropper)
task.spawn(function()
while dropper:IsDescendantOf(workspace) do
dropOre(dropper)
task.wait(Settings.DropInterval)
end
end)
end
-- Băng chuyền vận chuyển mọi thứ nằm trên nó
tycoon.Conveyor.AssemblyLinearVelocity = Vector3.new(Settings.BeltSpeed, 0, 0)
-- Bộ thu gom chuyển quặng thành Cash
tycoon.Collector.Touched:Connect(function(hit)
if hit.Name == "Ore" then
local value = hit:GetAttribute("Value")
hit:Destroy()
if owner then
owner.leaderstats.Cash.Value += value
end
end
end)
-- Bộ nâng cấp nhân đôi giá trị mỗi quặng đi qua, chỉ một lần
items.Upgrader.Touched:Connect(function(hit)
if hit.Name == "Ore" and not hit:GetAttribute("Upgraded") then
hit:SetAttribute("Upgraded", true)
hit:SetAttribute("Value", hit:GetAttribute("Value") * 2)
hit.Color = Color3.fromRGB(155, 89, 182)
end
end)
-- Một bộ phận mới nhô lên đúng vị trí
local function riseIn(part)
local goal = part.Position
local transparency = part.Transparency
part.Position = goal - Vector3.new(0, 8, 0)
part.Transparency = 1
TweenService:Create(part, TweenInfo.new(1), { Position = goal, Transparency = transparency }):Play()
end
-- Đưa vật phẩm đã mua vào nhà máy
local function build(item)
item.Parent = tycoon.Built
if item:IsA("BasePart") then
riseIn(item)
end
for _, part in item:GetDescendants() do
if part:IsA("BasePart") then
riseIn(part)
end
end
if item:HasTag("Dropper") then
-- Bắt đầu thả quặng khi đã vào đúng vị trí
task.delay(1, startDropper, item)
end
end
-- Mua vật phẩm: bệ biến mất và vật phẩm được lắp vào nhà máy
local function buy(pad, player)
if player ~= owner or pad.Parent ~= tycoon.Buttons then
return
end
local cash = player.leaderstats.Cash
local price = pad:GetAttribute("Price")
if cash.Value < price then
return
end
cash.Value -= price
pad.Parent = ServerStorage
build(items:FindFirstChild(pad:GetAttribute("Item")))
end
for _, pad in tycoon.Buttons:GetChildren() do
pad.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player then
buy(pad, player)
end
end)
end
-- Nhãn giá lơ lửng phía trên mỗi bệ
for _, pad in tycoon.Buttons:GetChildren() do
local tag = Instance.new("BillboardGui")
tag.Name = "PriceTag"
tag.Size = UDim2.fromOffset(160, 40)
tag.StudsOffset = Vector3.new(0, 3, 0)
tag.Parent = pad
local label = Instance.new("TextLabel")
label.Size = UDim2.fromScale(1, 1)
label.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
label.BackgroundTransparency = 0.2
label.TextColor3 = Color3.fromRGB(255, 255, 255)
label.TextScaled = true
label.Text = pad:GetAttribute("Label") .. ": $" .. pad:GetAttribute("Price")
label.Parent = tag
end
-- Bài học 13: Đặt biển thu nhập ở đây
-- Nhận quyền sở hữu: người chơi đầu tiên bước lên tấm đệm sẽ sở hữu nhà máy
local claimPad = tycoon.ClaimPad
claimPad.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player and not owner then
owner = player
claimPad.Color = Color3.fromRGB(120, 120, 120)
claimPad.Material = Enum.Material.SmoothPlastic
setSign(player.Name .. "'s Factory")
for _, dropper in CollectionService:GetTagged("Dropper") do
if dropper:IsDescendantOf(workspace) then
startDropper(dropper)
end
end
end
end)
Tất cả bài học trong Game Roblox: nhà máy tycoon
Tự luyện tập: Playground Roblox