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
endCada 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.
Desafío
IntermedioHaz que la primera plataforma funcione:
- Obtén
ServerStoragey manténlocal items = ServerStorage.TycoonItemscerca del principio. - Cuando un jugador toque
tycoon.Buttons.Dropper2Pad: no hagas nada a menos que sea el propietario y la plataforma siga entycoon.Buttons. Si su Cash es al menos igual al atributoPricede la plataforma, cobra el precio, mueve la plataforma a ServerStorage, mueveitems.Dropper2atycoon.Builty 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)
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
4Conviértelo en un juego
Fábrica completada