Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel

Füge die erste Katastrophe hinzu: Wasser, das dich besiegt.

  1. Schreibe defeat(hit): Wenn hit.Parent einen Humanoid hat, setze dessen Health auf 0.
  2. Erstelle local Disasters = {} und Disasters.Flood(map): ein Part Water in der Karte, verankert, CanCollide false, 10 Studs breiter und länger als map.Base, 2 Studs darunter, Touched verbunden mit defeat.
  3. 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

Übe selbstständig: Roblox-Playground