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.
Desafío
Intermedio- Cuando un jugador se una, dale también un Folder llamado
Pets. - Escribe
givePet(player, name): un StringValue llamadoPet, con Value igual al nombre, dentro de Pets del jugador; devuélvelo. - Conecta
workspace.Egg.ProximityPrompt.Triggered: si el jugador tiene menos monedas queSettings.EggPrice, detente; de lo contrario, réstale el precio, dale unCate imprimePlayer1 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)
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
3Huevos y mascotas
Incuba un huevo