Mọi bệ
Bài học 10 trên 22 trong khóa học Game Roblox: nhà máy tycoon của Coddy.
Còn bốn bệ nữa đang chờ, và sao chép code mua đồ bốn lần đồng nghĩa với việc phải sửa từng bug bốn lần. Một hàm xử lý mọi bệ: thuộc tính Item của mỗi bệ cho biết món đồ mà bệ đó mua, còn items:FindFirstChild(name) tìm món đồ đó.
local function buy(pad, player)
-- các bước kiểm tra và giá, như trước
build(items:FindFirstChild(pad:GetAttribute("Item")))
endHàm thứ hai, build(item), đặt một món đồ vào nhà máy và khởi động món đồ đó nếu nó là một máy thả đồ (có thẻ Dropper). Tường, tượng và máy nâng cấp đều được dựng theo cùng một cách; chỉ máy thả đồ mới khởi động.
Thử thách
Trung bìnhCho mọi pad hoạt động thông qua một hàm.
- Viết
build(item): chuyển vật phẩm vàotycoon.Builtvà khởi động vật phẩm nếuitem:HasTag("Dropper"). - Viết
buy(pad, player): thực hiện các bước kiểm tra và kiểm tra giá như trước, sau đó chuyển pad vào ServerStorage và xây dựng vật phẩm có tên trong thuộc tínhItemcủa pad. - Thay vì dùng code Dropper2Pad, hãy kết nối sự kiện Touched của mọi pad trong
tycoon.Buttonsvớibuy.
Nhấn Chơi: mỗi pad bạn có đủ tiền mua sẽ xây dựng vật phẩm tương ứng. 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 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 vật thể nhỏ có giá trị Cash, rơi ra bên dưới máy thả
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ứ đặt trê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ệ mua máy thả thứ hai
local pad = tycoon.Buttons.Dropper2Pad
pad.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if not player or 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
cash.Value -= price
pad.Parent = ServerStorage
local dropper = items.Dropper2
dropper.Parent = tycoon.Built
startDropper(dropper)
end
-- Bài học 10: Mọi Pad đều đặt ở đây
end)
-- Nhãn giá lơ lửng 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
-- Nhận quyền sở hữu: người chơi đầu tiên bước lên bệ 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)
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Game Roblox: nhà máy tycoon
Tự luyện tập: Playground Roblox