Menu
CoddyTech

Steigende Flut

Lektion 10 von 18 im Kurs Roblox-Spiel: Katastrophen überleben von Coddy.

Es ist Zeit für die erste Katastrophe. Im Spiel gibt es mehrere, 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 und lass es steigen
end

Disasters.Flood(map)

Die Flut besteht aus einem breiten blauen Teil, der unter der Insel beginnt und ansteigt, aber nicht bis ganz nach oben: Die Felsen auf der Insel und die Dächer auf den Dächern bleiben trocken, sodass ein Spieler, der rechtzeitig hinaufklettert, überlebt. Eine Katastrophe, die niemand überleben kann, ist kein Spiel. TweenService ändert eine Eigenschaft im Laufe der Zeit gleichmäßig: Gib mit einem TweenInfo an, wie lange es dauern soll, lege die Zielwerte fest und rufe Play auf.

local rise = TweenInfo.new(12, Enum.EasingStyle.Linear)
TweenService:Create(water, rise, { Position = water.Position + Vector3.new(0, 8, 0) }):Play()

Das Wasser darf Spieler nicht tragen, also ist CanCollide false und es bleibt Anchored. Wer es berührt, auszuschalten, ist dieselbe Aufgabe, die im ersten Kurs die Lava übernommen hat; in diesem Spiel bekommt die Funktion einen Namen: defeat(hit), denn jede Katastrophe wird sie verwenden.

Ordne das Wasser der Karte unter, damit es zusammen mit der Karte entfernt wird, wenn die Runde endet.

challenge icon

Aufgabe

Mittel

Füge die Flut hinzu:

  1. Hole dir oben TweenService.
  2. Schreibe defeat(hit): Wenn hit.Parent ein Humanoid enthält, setze dessen Health auf 0.
  3. Erstelle local Disasters = {} und function Disasters.Flood(map): ein Part namens Water in der Map, verankert, CanCollide deaktiviert, blau und durchsichtig (Transparency 0.3), in jeder Richtung 10 Studs breiter als map.Base und beginnend 2 Studs darunter. Bei Berührung wird man besiegt. Tweene seine Position über Settings.RoundLength * 0.8 Sekunden um 8 Studs nach oben, mit gleichbleibender Geschwindigkeit (Enum.EasingStyle.Linear), sodass es unter den Spitzen der Felsen stoppt.
  4. Rufe Disasters.Flood(map) direkt nach dem Teleportieren der Spieler auf.

Drücke Play und kämpfe gegen die Flut: Springe auf die Felsen links vom Spawn. Klicke dann auf Check.

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 Statustafel 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

-- 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
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Roblox-Spiel: Katastrophen überleben