Wasser, das alles besiegt
Lektion 10 von 20 im Kurs Roblox-Spiel: Katastrophen überleben von Coddy.
Es ist Zeit für die erste Katastrophe. Im Spiel wird es mehrere geben, also kommen sie in eine Tabelle, jeweils als Funktion, die die Karte entgegennimmt. Eine in einer Tabelle gespeicherte Funktion wird wie jede andere aufgerufen:
local Disasters = {}
function Disasters.Flood(map)
-- Erzeuge das Wasser
end
Disasters.Flood(map)Die Flut beginnt als breites blaues Teil unter der Insel. Sie darf die Spieler nicht oben halten, daher ist CanCollide false (Touched wird weiterhin ausgelöst), und sie bleibt Anchored. Jede Katastrophe besiegt alle, die sie berührt, also bekommt diese Aufgabe einen Namen:
local function defeat(hit)
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
lava.Touched:Connect(defeat)hit ist das Teil, das etwas berührt hat, zum Beispiel ein Fuß; sein Parent ist der Charakter. Ordne das Wasser der Karte unter, damit das Zerstören der Karte am Ende der Runde das Wasser mitnimmt.
Aufgabe
MittelFüge die erste Katastrophe hinzu: Wasser, das dich besiegt.
- Schreibe
defeat(hit): Wennhit.Parenteinen Humanoid hat, setze dessen Health auf 0. - Erstelle
local Disasters = {}undDisasters.Flood(map): ein PartWaterin der Karte, verankert, CanCollide false, 10 Studs breiter und länger alsmap.Base, 2 Studs darunter, Touched verbunden mitdefeat. - Rufe
Disasters.Flood(map)nach dem Teleport auf.
Drücke „Spielen“ und geh von der Insel herunter: Das Wasser darunter besiegt dich. Drücke dann „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
-- Lektion 10: Water That Defeats kommt hierhin
-- 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
local survivors = {}
for _, player in Players:GetPlayers() do
local character = player.Character
if character and character.Humanoid.Health > 0 then
teleport(player, map.Spawn)
survivors[player] = true
character.Humanoid.Died:Connect(function()
survivors[player] = nil
end)
end
end
for seconds = Settings.RoundLength, 1, -1 do
setStatus("Time left: " .. seconds)
task.wait(1)
end
local names = {}
for player in survivors do
player.leaderstats.Wins.Value += 1
teleport(player, lobbySpawn)
table.insert(names, player.Name)
end
map:Destroy()
if #names > 0 then
setStatus("Winners: " .. table.concat(names, ", "))
else
setStatus("Nobody survived!")
end
task.wait(3)
end
Alle Lektionen in Roblox-Spiel: Katastrophen überleben
4Mach ein Spiel daraus
Zwei Maps3Katastrophen
Wasser, das alles besiegtÜbe selbstständig: Roblox-Playground