Menu
CoddyTech

Incuba un huevo

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

El huevo blanco cerca del punto de aparición tiene un ProximityPrompt: acércate a él y Roblox muestra «Eclosionar» con una tecla que debes mantener pulsada (E, o un toque en un teléfono). Cuando el jugador la mantiene pulsada el tiempo suficiente, el aviso activa Triggered en el servidor, con el jugador:

workspace.Egg.ProximityPrompt.Triggered:Connect(function(player)
end)

El servidor comprueba el precio, cobra las monedas y entrega una mascota. Una mascota es un StringValue que contiene su nombre, dentro de una carpeta Pets en el jugador. Todo lo que el servidor pone dentro de un jugador se replica en el cliente de ese jugador; así es como la lista de mascotas de una lección posterior sabe qué mostrar.

challenge icon

Desafío

Intermedio
  1. Cuando un jugador se una, dale también un Folder llamado Pets.
  2. Escribe givePet(player, name): un StringValue llamado Pet, con Value igual al nombre, dentro de Pets del jugador; devuélvelo.
  3. Conecta workspace.Egg.ProximityPrompt.Triggered: si el jugador tiene menos monedas que Settings.EggPrice, detente; de lo contrario, réstale el precio, dale un Cat e imprime Player1 hatched a Cat (su Name).

Pulsa Jugar, gana 25 monedas y mantén pulsada la tecla E junto al huevo. Después, pulsa Comprobar.

Pruébalo tú mismo

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

local remotes = game.ReplicatedStorage.Remotes
local piles = workspace.Piles
local pileSpot = {} -- cada pila -> el lugar donde se encuentra
local lastHit = {} -- cada jugador -> cuándo golpeó por última vez

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)

-- Una pila de monedas en un lugar: 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)
	pile.HealthGui.Label.Text = pile:GetAttribute("Health") .. "/" .. pile:GetAttribute("MaxHealth")
	pileSpot[pile] = spot
	pile.Parent = piles
	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
local function hitPile(player, pile)
	local health = pile:GetAttribute("Health") - 1
	if health > 0 then
		pile:SetAttribute("Health", health)
		pile.HealthGui.Label.Text = health .. "/" .. pile:GetAttribute("MaxHealth")
		return
	end
	player.leaderstats.Coins.Value += pile:GetAttribute("Value")
	local spot = pileSpot[pile]
	pileSpot[pile] = nil
	pile:Destroy()
	-- una nueva pila en el mismo lugar, unos segundos después
	task.delay(Settings.RespawnTime, spawnPile, spot)
end

-- Una pila en cada lugar de Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
	spawnPile(spot)
end

-- El cliente solicita golpear una pila. Nunca confíes en el cliente: cualquiera puede activar
-- este evento remoto con cualquier cosa, desde cualquier lugar y tan rápido como quiera.
remotes.Hit.OnServerEvent:Connect(function(player, pile)
	-- una pila real
	if typeof(pile) ~= "Instance" or pile.Parent ~= piles then
		return
	end
	-- al alcance
	local character = player.Character
	local root = character and character:FindFirstChild("HumanoidRootPart")
	if not root or (root.Position - pile.Position).Magnitude > Settings.Reach then
		return
	end
	-- no demasiado rápido
	local now = time()
	if lastHit[player] and now - lastHit[player] < Settings.HitCooldown then
		return
	end
	lastHit[player] = now
	hitPile(player, pile)
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