Qui est encore en vie
Leçon 7 sur 18 du cours Jeu Roblox : Survivre aux catastrophes de Coddy.
Pour savoir qui a gagné, le jeu doit savoir qui est encore en vie. Une table indexée par joueur fonctionne comme un ensemble : survivors[player] = true ajoute un joueur, survivors[player] = nil en supprime un, et for player in survivors do parcourt les joueurs restants.
Un Humanoid déclenche Died lorsque sa santé atteint 0. S’y connecter au début de la manche retire un joueur de l’ensemble dès qu’il tombe :
survivors[player] = true
character.Humanoid.Died:Connect(function()
survivors[player] = nil
end)Seuls les joueurs en vie au début de la manche la rejoignent : quelqu’un qui attend de réapparaître a un personnage mort dont la Health est égale à 0, et le téléporter ferait compter un joueur mort comme un survivant.
Défi
MoyenSuivez les survivants de chaque manche :
- Au début de la manche, créez une table vide
survivors. - Téléportez uniquement les joueurs dont le personnage existe et dont
Humanoid.Healthest supérieur à 0 ; ajoutez chacun àsurvivors, et retirez-les lorsque leur Humanoid meurt. - À la fin de la manche, téléportez uniquement les survivants dans le lobby, et affichez combien ils étaient :
Survivors: 1.
Appuyez sur Play, puis tombez de l’île lors de la deuxième manche et lisez la fenêtre Output. Ensuite, cliquez sur Check.
Essayez vous-même
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)
local lobbySpawn = workspace.LobbySpawn
print("Rounds last " .. Settings.RoundLength .. " seconds")
-- Chaque joueur reçoit des Wins dans le classement
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local wins = Instance.new("IntValue")
wins.Name = "Wins"
wins.Parent = leaderstats
end)
-- Le panneau d’état dans le hall
local gui = Instance.new("SurfaceGui")
gui.Parent = workspace.StatusBoard
local status = Instance.new("TextLabel")
status.Name = "Status"
status.Size = UDim2.fromScale(1, 1)
status.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
status.TextColor3 = Color3.fromRGB(255, 255, 255)
status.TextScaled = true
status.Text = "Welcome to Disaster Survival!"
status.Parent = gui
local function setStatus(text)
status.Text = text
end
local function teleport(player, target)
local character = player.Character
if character then
character:PivotTo(target.CFrame + Vector3.new(0, 4, 0))
end
end
-- La boucle des manches
while true do
for seconds = Settings.Intermission, 1, -1 do
setStatus("Intermission: " .. seconds)
task.wait(1)
end
local map = ServerStorage.Maps.Island:Clone()
map.Name = "Map"
map.Parent = workspace
for _, player in Players:GetPlayers() do
teleport(player, map.Spawn)
end
for seconds = Settings.RoundLength, 1, -1 do
setStatus("Time left: " .. seconds)
task.wait(1)
end
for _, player in Players:GetPlayers() do
teleport(player, lobbySpawn)
end
map:Destroy()
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 : Survivre aux catastrophes
2Cartes et joueurs
Charger une carte