Menu
CoddyTech

Los montones vuelven

Lección 4 de 18 del curso Juego de Roblox: simulador de mascotas de Coddy.

Cuando se rompen todas las pilas, el juego se queda sin monedas. Una pila rota debería volver a aparecer en su lugar después de Settings.RespawnTime segundos.

La pila tiene que recordar su lugar. Una tabla cuya clave es la pila sirve para eso:

local pileSpot = {} -- cada pile -> el spot sobre el que se apoya
pileSpot[pile] = spot

task.delay(seconds, fn, ...) llama a una función más tarde, con argumentos, sin detener nada ahora:

task.delay(Settings.RespawnTime, spawnPile, spot)

Quita la pila de la tabla cuando se rompa, para que la tabla no conserve todas las pilas que hayan existido.

challenge icon

Desafío

Fácil
  1. Cerca de la parte superior: local pileSpot = {}.
  2. En spawnPile, guarda pileSpot[pile] = spot.
  3. En hitPile, cuando se rompe la pila: lee su posición, elimínala de pileSpot, destruye la pila y task.delay(Settings.RespawnTime, spawnPile, spot).

Las pilas de esta lección vuelven después de 1 segundo. Pulsa Play y después Check.

Pruébalo tú mismo

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)

local piles = workspace.Piles

print("A Meadow pile gives " .. Settings.PileValue .. " coins")

-- Cada jugador recibe Coins en la tabla de clasificación
Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local coins = Instance.new("IntValue")
	coins.Name = "Coins"
	coins.Parent = leaderstats
end)

-- El clic en una pila necesita hitPile, que se define después de spawnPile: decláralo
-- aquí, antes de cualquiera de las dos funciones
local hitPile

-- Una pila de monedas en una posición: una copia de ServerStorage.CoinPile con su salud
-- y su valor como atributos
local function spawnPile(spot)
	local pile = ServerStorage.CoinPile:Clone()
	pile.Position = spot.Position
	pile:SetAttribute("MaxHealth", Settings.PileHealth)
	pile:SetAttribute("Health", Settings.PileHealth)
	pile:SetAttribute("Value", Settings.PileValue)
	-- haz clic en ella para golpearla
	local detector = Instance.new("ClickDetector")
	detector.Parent = pile
	pile.Parent = piles
	detector.MouseClick:Connect(function(player)
		hitPile(player, pile)
	end)
	return pile
end

-- Un golpe reduce en 1 la salud de una pila;
-- al llegar a 0, la pila se rompe y entrega su valor
function hitPile(player, pile)
	local health = pile:GetAttribute("Health") - 1
	if health > 0 then
		pile:SetAttribute("Health", health)
		return
	end
	player.leaderstats.Coins.Value += pile:GetAttribute("Value")
	pile:Destroy()
end

-- Una pila en cada posición de Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
	spawnPile(spot)
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: simulador de mascotas