Menu
CoddyTech

Tấm biển

Bài học 7 trên 22 trong khóa học Game Roblox: nhà máy tycoon của Coddy.

Biển hiệu phía trên nhà máy cho biết nhà máy thuộc về ai. Chữ trên mặt của một bộ phận là một SurfaceGui bên trong bộ phận đó, chứa một TextLabel. Đặt tên cho các nhãn giúp bạn dễ tìm lại, còn một hàm nhỏ gom mọi thay đổi đối với biển hiệu vào một chỗ:

local gui = Instance.new("SurfaceGui")
gui.Parent = tycoon.Sign

local signLabel = Instance.new("TextLabel")
signLabel.Name = "Status"
signLabel.Size = UDim2.fromScale(1, 1)
signLabel.TextScaled = true
signLabel.Text = "Opening soon"
signLabel.Parent = gui

UDim2.fromScale(1, 1) giúp nhãn phủ kín toàn bộ mặt, còn TextScaled điều chỉnh kích thước chữ cho vừa với mặt đó.

challenge icon

Thử thách

Trung bình

Đặt một biển báo phía trên nhà máy để cho biết nhà máy thuộc về ai.

  1. Trong tycoon.Sign, thêm một SurfaceGui chứa TextLabel có tên Status và chiếm toàn bộ khung, với văn bản được phóng to có nội dung Step on the green pad to claim this factory.
  2. Viết setSign(text) để đặt Text của nhãn đó.
  3. Khi có người nhận nhà máy, gọi setSign(player.Name .. "'s Factory").

Nhấn Chơi rồi bước lên ô màu xanh lá: biển báo sẽ hiển thị tên bạ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 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)

-- Bài học 7: Đặt Sign ở đây

-- Ore: một khối nhỏ có giá trị Cash, rơi từ dropper xuố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 vận chuyển mọi thứ nằm trên đó
tycoon.Conveyor.AssemblyLinearVelocity = Vector3.new(Settings.BeltSpeed, 0, 0)

-- Bộ thu gom biến Ore 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)

-- 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
		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