Menu
CoddyTech

Qui est en vie

Leçon 7 sur 20 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.

challenge icon

Défi

Moyen

Garde une trace des joueurs encore en vie pendant la manche.

  1. Au début de la manche, crée local survivors = {}.
  2. Téléporte uniquement les joueurs dont le personnage a une valeur de Humanoid.Health supérieure à 0, et ajoute chacun d’eux à survivors.
  3. Connecte le Humanoid.Died de chacun à survivors[player] = nil.
  4. À la fin de la manche, téléporte uniquement les survivants au point de départ, puis affiche "Survivors: " .. count.

Appuie sur « Jouer » : à la fin de la manche, l’Output affiche Survivors: 1. Puis appuie sur « Vérifier ».

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 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
		-- Leçon 7 : Who Is Alive va ici
		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

Toutes les leçons de Jeu Roblox : Survivre aux catastrophes

Entraînez-vous par vous-même : Playground Roblox