Reclama la fábrica
Lección 6 de 22 del curso Juego de Roblox: Tycoon de fábrica de Coddy.
Un tycoon pertenece a alguien. La plataforma verde junto a la entrada lo reclama: el primer jugador que la pisa se convierte en el propietario, la fábrica se pone en marcha y solo se paga al propietario. El propietario es una variable en la parte superior del script, nil hasta que alguien la reclame:
local owner = nil
tycoon.ClaimPad.Touched:Connect(function(hit)
local player = Players:GetPlayerFromCharacter(hit.Parent)
if player and not owner then
owner = player
end
end)Cuando se reclama la fábrica, todos los droppers que contiene se ponen en marcha. Los droppers llevan una etiqueta, Dropper, así que CollectionService:GetTagged("Dropper") los encuentra a todos, estén donde estén. Los droppers comprados esperarán en ServerStorage, así que solo se ponen en marcha los que están en el espacio de trabajo.
Desafío
IntermedioHaz tuya la fábrica al pisar la plataforma verde.
- Elimina la línea
startDropper(tycoon.Dropper). Cerca de la parte superior, obténCollectionServicey agregalocal owner = nil. - Cuando un jugador toque
tycoon.ClaimPady no haya ningún propietario: conviértelo en el propietario y pon en marcha cada dispensador deCollectionService:GetTagged("Dropper")que esté en workspace. - En el recolector, paga solo a
owner.
Pulsa «Jugar»: no caerá nada hasta que pises la plataforma verde. Después, pulsa «Comprobar».
Pruébalo tú mismo
local Players = game:GetService("Players")
local Debris = game:GetService("Debris")
local Settings = require(game.ReplicatedStorage.Settings)
local tycoon = workspace.Tycoon
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)
-- Ore: una pieza pequeña que vale Cash y cae debajo de un dispensador
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
startDropper(tycoon.Dropper)
-- La cinta transportadora mueve todo lo que se apoya 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()
for _, player in Players:GetPlayers() do
player.leaderstats.Cash.Value += value
end
end
end)
-- Lección 6: aquí va Claim the Factory
Todas las lecciones de Juego de Roblox: Tycoon de fábrica
2Tu imperio
Reclama la fábricaPractica por tu cuenta: Playground de Roblox