Menu
CoddyTech

Kto żyje?

Lekcja 7 z 18 w kursie Gra Roblox: Przetrwanie w katastrofach 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ź ocalałych w każdej rundzie:

  1. Gdy runda się rozpocznie, utwórz pustą tablicę survivors.
  2. Teleportuj tylko graczy, których postać istnieje i których Humanoid.Health jest większe niż 0; dodaj każdego z nich do survivors i usuń go, gdy jego Humanoid zginie.
  3. Gdy runda się zakończy, teleportuj z powrotem do lobby tylko ocalałych i wypisz, ilu ich było: Survivors: 1.

Naciśnij Play, a następnie w drugiej rundzie zejdź z wyspy i sprawdź Output. Następnie naciśnij Check.

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
		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
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Gra Roblox: Przetrwanie w katastrofach