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.
Wyzwanie
ŚredniŚledź ocalałych w każdej rundzie:
- Gdy runda się rozpocznie, utwórz pustą tablicę
survivors. - Teleportuj tylko graczy, których postać istnieje i których
Humanoid.Healthjest większe niż 0; dodaj każdego z nich dosurvivorsi usuń go, gdy jego Humanoid zginie. - 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
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.