Menu
CoddyTech

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
end

Mỗ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.

challenge icon

Thử thách

Trung bình

Biến pad màu xanh đầu tiên thành nơi mua một máy thả vật thứ hai.

  1. Ở gần đầu: local items = ServerStorage.TycoonItems.
  2. Khi tycoon.Buttons.Dropper2Pad kích hoạt Touched, thoát hàm nếu người chơi không phải là owner hoặc pad không nằm trong tycoon.Buttons.
  3. 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ển items.Dropper2 vào tycoon.Built rồ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