Menu
CoddyTech

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").LocalPlayer

El 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.

challenge icon

Desafío

Intermedio

En PetClient:

  1. Obtén Players, local me = Players.LocalPlayer y local hud = script.Parent.
  2. Espera a leaderstats y a sus Coins.
  3. Escribe showCoins(), que establece hud.Coins.Text en Coins: 5 (el valor), llámala una vez y conéctala a Coins.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
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