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.
Wyzwanie
ŚredniŚledź, kto nadal żyje w rundzie.
- Gdy rozpocznie się runda, utwórz
local survivors = {}. - Teleportuj tylko graczy, których postać ma
Humanoid.Healthwiększe od 0, i dodaj każdego z nich dosurvivors. - Połącz
Humanoid.Diedkażdego gracza zsurvivors[player] = nil. - 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