Menu
CoddyTech

Табличка

Урок 7 из 22 курса Игра в Roblox: Тайкун фабрики на Coddy.

Знак над фабрикой указывает, кому она принадлежит. Текст на поверхности детали — это SurfaceGui внутри детали, содержащий TextLabel. Именованные надписи легко найти снова, а небольшая функция позволяет вносить все изменения в знак в одном месте:

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) растягивает надпись на всю поверхность, а TextScaled подгоняет под неё размер текста.

challenge icon

Задание

Средне

Размести над фабрикой табличку с именем её владельца.

  1. В tycoon.Sign добавь SurfaceGui с TextLabel с именем Status, который занимает всю его поверхность, и масштабируемым текстом Step on the green pad to claim this factory.
  2. Напиши setSign(text), которая задаёт свойство Text этой метки.
  3. Когда фабрику захватят, вызови setSign(player.Name .. "'s Factory").

Нажми «Играть» и наступи на зелёную площадку: на табличке появится твоё имя. Затем нажми «Проверить».

Попробуйте сами

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

-- Каждый игрок получает Cash в таблице лидеров
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)

-- Урок 7: здесь размещается Sign

-- Ore: небольшая деталь, за которую дают Cash; она выпадает из-под 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

-- Конвейер перемещает всё, что на нём лежит
tycoon.Conveyor.AssemblyLinearVelocity = Vector3.new(Settings.BeltSpeed, 0, 0)

-- Сборщик превращает руду в 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)

-- Захват: фабрика достаётся первому игроку, наступившему на площадку
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)

Все уроки раздела Игра в Roblox: Тайкун фабрики

Потренируйтесь самостоятельно: Песочница Roblox