Monedas en pantalla
Lección 5 de 18 del curso Juego de Roblox: simulador de mascotas de Coddy.
Ahora, el cliente. PetClient es un LocalScript dentro del HUD, una ScreenGui que Roblox copia de StarterGui a la pantalla de cada jugador cuando aparece. Un LocalScript se ejecuta en el dispositivo del propio jugador y puede identificar al jugador para el que se ejecuta:
local me = game:GetService("Players").LocalPlayerEl servidor agrega leaderstats al jugador un momento después de que se une, así que el cliente espera a que aparezca con WaitForChild. Después muestra las monedas en la etiqueta Coins del HUD y vuelve a hacerlo cada vez que cambian: el evento Changed de un IntValue se activa con el nuevo valor.
La etiqueta solo muestra lo que decidió el servidor. Cambiar Coins.Value en un LocalScript cambiaría la vista de este jugador y nada en el servidor.
Desafío
IntermedioEn PetClient:
- Obtén
Players,local me = Players.LocalPlayerylocal hud = script.Parent. - Espera a
leaderstatsy a susCoins. - Escribe
showCoins(), que establecehud.Coins.TextenCoins: 5(el valor), llámala una vez y conéctala aCoins.Changed.
Pulsa Play y rompe una pila. Después, pulsa 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
local pileSpot = {} -- cada pila -> el lugar donde está
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 ambas funciones
local hitPile
-- 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)
-- haz clic en ella para golpearla
local detector = Instance.new("ClickDetector")
detector.Parent = pile
pileSpot[pile] = spot
pile.Parent = piles
detector.MouseClick:Connect(function(player)
hitPile(player, pile)
end)
return pile
end
-- Un golpe le quita 1 punto de salud a 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")
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
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
2Cliente y servidor
Monedas en pantalla