Menu
CoddyTech

Una plataforma de compra

Lección 7 de 18 del curso Juego de Roblox: Magnate de fábrica de Coddy.

El dinero está para gastarlo. Cada plataforma azul delante de la cinta transportadora compra algo; la primera compra un segundo cuentagotas. Una plataforma conoce su precio a partir de un atributo, Price, establecido cuando se construyó el mundo.

El elemento que compra espera en ServerStorage.TycoonItems, ya en el lugar correcto. Al comprarlo, se mueve a la carpeta Built de la fábrica, lo que lo coloca en el mundo, y la plataforma se mueve a ServerStorage, donde nadie puede pisarla. Se mueve, no se destruye: una lección posterior devuelve las plataformas.

if cash.Value >= price then
	cash.Value -= price
	pad.Parent = ServerStorage
	items.Dropper2.Parent = tycoon.Built
end

Cada extremidad que toca la plataforma activa Touched varias veces en el mismo instante. Después de que la primera compra, la plataforma ya no está en tycoon.Buttons, así que comprobarlo primero evita una compra duplicada.

challenge icon

Desafío

Intermedio

Haz que la primera plataforma funcione:

  1. Obtén ServerStorage y mantén local items = ServerStorage.TycoonItems cerca del principio.
  2. Cuando un jugador toque tycoon.Buttons.Dropper2Pad: no hagas nada a menos que sea el propietario y la plataforma siga en tycoon.Buttons. Si su Cash es al menos igual al atributo Price de la plataforma, cobra el precio, mueve la plataforma a ServerStorage, mueve items.Dropper2 a tycoon.Built y ponla en marcha.

Pulsa Jugar, gana 30 Cash y cómprala; después, pulsa Comprobar.

Pruébalo tú mismo

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

-- Cada jugador recibe Cash en la tabla de clasificación
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)

-- El letrero sobre la fábrica
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: una pieza pequeña que vale Cash y cae debajo de un 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

-- Un dropper ejecuta un solo bucle, sin importar cuántas veces se inicie
local function startDropper(dropper)
	if dropper:GetAttribute("Running") then
		return
	end
	dropper:SetAttribute("Running", true)
	task.spawn(function()
		while dropper:IsDescendantOf(workspace) do
			dropOre(dropper)
			task.wait(Settings.DropInterval)
		end
		dropper:SetAttribute("Running", nil)
	end)
end

-- La cinta transportadora mueve todo lo que se posa sobre ella
tycoon.Conveyor.AssemblyLinearVelocity = Vector3.new(Settings.BeltSpeed, 0, 0)

-- El recolector convierte Ore en 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)

-- Reclamación: el primer jugador que pisa la plataforma se convierte en dueño de la fábrica
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)
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Juego de Roblox: Magnate de fábrica