Menu
CoddyTech

Wer lebt?

Lektion 7 von 20 im Kurs Roblox-Spiel: Katastrophen überleben von Coddy.

Um zu wissen, wer gewonnen hat, muss das Spiel wissen, wer noch am Leben ist. Eine nach Spielern indizierte Tabelle funktioniert wie eine Menge: survivors[player] = true fügt einen Spieler hinzu, survivors[player] = nil entfernt einen, und for player in survivors do durchläuft alle, die noch übrig sind.

Ein Humanoid löst Died aus, wenn seine Gesundheit 0 erreicht. Wenn du dich zu Rundenbeginn damit verbindest, wird ein Spieler genau dann aus der Menge entfernt, wenn er ausscheidet:

survivors[player] = true
character.Humanoid.Died:Connect(function()
	survivors[player] = nil
end)

Nur Spieler, die zu Rundenbeginn am Leben sind, nehmen an der Runde teil: Wer auf einen Respawn wartet, hat einen toten Charakter mit Health 0, und wenn du ihn teleportierst, würde ein toter Spieler als Überlebender zählen.

challenge icon

Aufgabe

Mittel

Behalte im Blick, wer in der Runde noch am Leben ist.

  1. Erstelle beim Start der Runde local survivors = {}.
  2. Teleportiere nur Spieler, deren Charakter einen Humanoid.Health-Wert über 0 hat, und füge jeden zu survivors hinzu.
  3. Verbinde für jeden Spieler Humanoid.Died mit survivors[player] = nil.
  4. Teleportiere am Ende der Runde nur die Überlebenden zurück und gib dann "Survivors: " .. count aus.

Drücke auf „Spielen“: Wenn die Runde endet, zeigt die Ausgabe Survivors: 1 an. Drücke dann auf „Prüfen“.

Probier es selbst

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

-- Jeder Spieler erhält Wins auf der Bestenliste
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)

-- Die Statusanzeige in der Lobby
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

-- Die Rundenschleife
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
		-- Lektion 7: Who Is Alive kommt hierhin
		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

Alle Lektionen in Roblox-Spiel: Katastrophen überleben

Übe selbstständig: Roblox-Playground