Menu
CoddyTech

Pièces à l’écran

Leçon 5 sur 18 du cours Jeu Roblox : Simulateur d’animaux de Coddy.

Maintenant, le client. PetClient est un LocalScript à l'intérieur du HUD, un ScreenGui que Roblox copie depuis StarterGui sur l'écran de chaque joueur quand il apparaît. Un LocalScript s'exécute sur l'appareil du joueur concerné et peut nommer le joueur pour lequel il s'exécute :

local me = game:GetService("Players").LocalPlayer

Le serveur ajoute leaderstats au joueur un instant après son arrivée, le client attend donc sa présence avec WaitForChild. Il affiche ensuite les pièces dans le libellé Coins du HUD, puis de nouveau chaque fois qu'elles changent : l'événement Changed d'un IntValue se déclenche avec la nouvelle valeur.

Le libellé affiche uniquement ce que le serveur a décidé. Modifier Coins.Value dans un LocalScript ne changerait que ce que ce joueur voit, sans rien changer sur le serveur.

challenge icon

Défi

Moyen

Dans PetClient :

  1. Récupère Players, local me = Players.LocalPlayer et local hud = script.Parent.
  2. Attends leaderstats et son Coins.
  3. Écris showCoins(), qui définit hud.Coins.Text sur Coins: 5 (la valeur), appelle-la une fois et connecte-la à Coins.Changed.

Appuie sur Play et casse un tas. Puis Check.

Essayez vous-même

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

local piles = workspace.Piles
local pileSpot = {} -- chaque tas -> l'emplacement sur lequel il se trouve

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

-- Chaque joueur reçoit Coins dans le classement
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)

-- Le clic sur un tas nécessite hitPile, défini après spawnPile : déclarez-le
-- ici, avant les deux fonctions
local hitPile

-- Un tas de pièces sur un emplacement : une copie de ServerStorage.CoinPile avec sa santé
-- et sa valeur comme attributs
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)
	-- cliquez dessus pour le frapper
	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 coup retire 1 point de santé au tas ;
-- à 0, le tas se brise et rapporte sa valeur
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()
	-- un nouveau tas apparaît au même emplacement quelques secondes plus tard
	task.delay(Settings.RespawnTime, spawnPile, spot)
end

-- Un tas à chaque emplacement de Meadow
for _, spot in workspace.Zones.Meadow.Spawns:GetChildren() do
	spawnPile(spot)
end
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Jeu Roblox : Simulateur d’animaux