Bệ mua hàng
Bài học 8 trên 22 trong khóa học Game Roblox: nhà máy tycoon của Coddy.
Tiền dùng để chi tiêu. Mỗi bệ màu xanh trước băng chuyền sẽ mua một món đồ; bệ đầu tiên mua một ống thả đồ thứ hai. Bệ lấy giá từ thuộc tính Price, được thiết lập khi thế giới được tạo.
Món đồ mà bệ mua đang chờ trong ServerStorage.TycoonItems, ở đúng vị trí cần thiết. Khi mua, món đồ được chuyển vào thư mục Built của nhà máy, nhờ đó nó xuất hiện trong thế giới, còn bệ được chuyển vào ServerStorage, nơi không ai có thể giẫm lên. Bệ được chuyển đi chứ không bị phá hủy: một bài học sau sẽ đưa các bệ trở lại.
if cash.Value >= price then
cash.Value -= price
pad.Parent = ServerStorage
items.Dropper2.Parent = tycoon.Built
endMỗi chi chạm vào bệ đều kích hoạt Touched vài lần trong cùng một khoảnh khắc. Sau khi lần chạm đầu tiên mua món đồ, bệ không còn nằm trong tycoon.Buttons, nên kiểm tra điều đó trước sẽ ngăn việc mua hai lần.
Thử thách
Trung bìnhBiến pad màu xanh đầu tiên thành nơi mua một máy thả vật thứ hai.
- Ở gần đầu:
local items = ServerStorage.TycoonItems. - Khi
tycoon.Buttons.Dropper2Padkích hoạt Touched, thoát hàm nếu người chơi không phải làownerhoặc pad không nằm trongtycoon.Buttons. - Nếu Cash của người chơi ít nhất bằng thuộc tính
Price: trừ khoản tiền đó, chuyển pad vào ServerStorage, chuyểnitems.Dropper2vàotycoon.Builtrồi khởi động máy.
Nhấn Chơi, kiếm 30 Cash rồi bước lên pad: một máy thả vật thứ hai sẽ xuất hiện. Sau đó nhấn Kiểm tra.
Tự làm thử
local Players = game:GetService("Players")
local CollectionService = game:GetService("CollectionService")
local Debris = game:GetService("Debris")
local Settings = require(game.ReplicatedStorage.Settings)
local tycoon = workspace.Tycoon
local owner = nil
print("Ore is worth " .. Settings.OreValue .. " Cash")
-- Mỗi người chơi đều 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 khối nhỏ có giá trị Cash, rơi xuống dưới máy thả quặng
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 chở mọi thứ nằm trên nó
tycoon.Conveyor.AssemblyLinearVelocity = Vector3.new(Settings.BeltSpeed, 0, 0)
-- Máy thu gom biế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ài học 8: Đặt Buy Pad ở đây
-- Nhận nhà máy: 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