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").LocalPlayerLe 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.
Défi
MoyenDans PetClient :
- Récupère
Players,local me = Players.LocalPlayeretlocal hud = script.Parent. - Attends
leaderstatset sonCoins. - Écris
showCoins(), qui définithud.Coins.TextsurCoins: 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
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
2Client et serveur
Pièces à l’écran