Menu
CoddyTech

Kto żyje

Lekcja 7 z 20 w kursie Gra Roblox: Przetrwanie katastrof w Coddy.

Aby wiedzieć, kto wygrał, gra musi wiedzieć, kto jeszcze żyje. Tablica indeksowana przez gracza działa jak zbiór: survivors[player] = true dodaje gracza, survivors[player] = nil usuwa gracza, a for player in survivors do odwiedza każdego, kto pozostał.

Humanoid wywołuje zdarzenie Died, gdy jego zdrowie spadnie do 0. Podłączenie się do tego zdarzenia na początku rundy usuwa gracza ze zbioru w chwili, gdy odpadnie:

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

Do rundy dołączają tylko gracze, którzy żyją w chwili jej rozpoczęcia: osoba czekająca na odrodzenie ma martwą postać z wartością Health równą 0, a teleportowanie jej oznaczałoby uznanie martwego gracza za ocalałego.

challenge icon

Wyzwanie

Średni

Śledź, kto nadal żyje w rundzie.

  1. Gdy rozpocznie się runda, utwórz local survivors = {}.
  2. Teleportuj tylko graczy, których postać ma Humanoid.Health większe od 0, i dodaj każdego z nich do survivors.
  3. Połącz Humanoid.Died każdego gracza z survivors[player] = nil.
  4. Gdy runda się skończy, teleportuj z powrotem tylko ocalałych, a następnie wypisz "Survivors: " .. count.

Naciśnij „Graj”: gdy runda się skończy, w oknie Output pojawi się Survivors: 1. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

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

-- Każdy gracz otrzymuje Wins w tabeli wyników
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)

-- Tablica statusu w 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

-- Pętla rund
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
		-- Tutaj należy dodać lekcję 7: Who Is Alive
		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

Wszystkie lekcje w sekcji Gra Roblox: Przetrwanie katastrof

Poćwicz samodzielnie: Edytor online Roblox