Menu
CoddyTech

Banjir yang Meningkat

Pelajaran 10 dari 18 dalam kursus Game Roblox: Bertahan dari Bencana di Coddy.

Waktunya bencana pertama. Game ini akan memiliki beberapa bencana, jadi semuanya dimasukkan ke dalam satu tabel, masing-masing berupa fungsi yang menerima map. Fungsi yang disimpan dalam tabel dipanggil seperti fungsi lainnya:

local Disasters = {}

function Disasters.Flood(map)
	-- buat air lalu naikkan permukaannya
end

Disasters.Flood(map)

Banjir berupa bagian biru lebar yang dimulai di bawah pulau dan naik, tetapi tidak sampai ke atas: bebatuan di Island dan atap-atap di Rooftops tetap kering, jadi pemain yang memanjat tepat waktu akan selamat. Bencana yang tidak bisa diselamatkan oleh siapa pun bukanlah game. TweenService mengubah property dengan mulus seiring waktu: tentukan durasinya dengan TweenInfo, berikan nilai tujuan, lalu panggil Play.

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

Air tidak boleh menahan pemain, jadi CanCollide bernilai false dan air tetap Anchored. Mengalahkan siapa pun yang menyentuhnya sama seperti tugas lava di kursus pertama; game ini memberinya nama, defeat(hit), karena setiap bencana akan menggunakannya.

Jadikan map sebagai parent air, sehingga saat map dihancurkan di akhir ronde, air ikut terhapus.

challenge icon

Tantangan

Sedang

Tambahkan banjir:

  1. Dapatkan TweenService di bagian atas.
  2. Tulis defeat(hit): jika hit.Parent memiliki Humanoid, atur Health-nya ke 0.
  3. Buat local Disasters = {} dan function Disasters.Flood(map): sebuah part bernama Water di dalam map, tertambat, CanCollide dinonaktifkan, berwarna biru dan tembus pandang (Transparency 0.3), 10 studs lebih lebar daripada map.Base ke setiap arah, dimulai 2 studs di bawahnya. Sentuhannya akan mengalahkan pemain. Tween Position-nya naik 8 studs selama Settings.RoundLength * 0.8 detik, dengan kecepatan tetap (Enum.EasingStyle.Linear), sehingga berhenti di bawah puncak bebatuan.
  4. Panggil Disasters.Flood(map) tepat setelah para pemain diteleportasi.

Tekan Play dan berlombalah melawan air pasang: lompatlah menaiki bebatuan di sebelah kiri spawn. Lalu tekan Check.

Coba sendiri

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")

-- Setiap pemain mendapat Wins di papan peringkat
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)

-- Papan status di lobi
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

-- Perulangan ronde
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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Roblox: Bertahan dari Bencana

Latihan sendiri: Playground Roblox