Menu
CoddyTech

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.

challenge icon

Desafío

Intermedio

Haz tuya la fábrica al pisar la plataforma verde.

  1. Elimina la línea startDropper(tycoon.Dropper). Cerca de la parte superior, obtén CollectionService y agrega local owner = nil.
  2. Cuando un jugador toque tycoon.ClaimPad y no haya ningún propietario: conviértelo en el propietario y pon en marcha cada dispensador de CollectionService:GetTagged("Dropper") que esté en workspace.
  3. 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

Practica por tu cuenta: Playground de Roblox