Menu
CoddyTech

Air yang Mengalahkan

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

Waktunya bencana pertama. Akan ada beberapa bencana dalam game, jadi semuanya dimasukkan ke dalam satu tabel, masing-masing berupa fungsi yang menerima peta. Fungsi yang disimpan dalam tabel dipanggil seperti fungsi lainnya:

local Disasters = {}

function Disasters.Flood(map)
	-- buat airnya
end

Disasters.Flood(map)

Banjir dimulai sebagai bagian biru lebar di bawah pulau. Bagian ini tidak boleh menahan pemain, jadi CanCollide bernilai false (Touched tetap terpicu), dan bagian ini tetap Anchored. Setiap bencana akan mengalahkan siapa pun yang disentuhnya, jadi tugas itu diberi nama:

local function defeat(hit)
	local humanoid = hit.Parent:FindFirstChild("Humanoid")
	if humanoid then
		humanoid.Health = 0
	end
end

lava.Touched:Connect(defeat)

hit adalah bagian yang tersentuh, seperti kaki. Parent-nya adalah karakter. Jadikan air sebagai bagian dari peta, sehingga saat peta dihancurkan di akhir ronde, air ikut terhapus.

challenge icon

Tantangan

Sedang

Tambahkan bencana pertama: air yang mengalahkan pemain.

  1. Tulis defeat(hit): jika hit.Parent memiliki Humanoid, atur Health-nya menjadi 0.
  2. Buat local Disasters = {} dan Disasters.Flood(map): sebuah part Water di dalam map, ditambatkan, CanCollide bernilai false, 10 studs lebih lebar dan lebih panjang daripada map.Base, 2 studs di bawahnya, dengan Touched terhubung ke defeat.
  3. Panggil Disasters.Flood(map) setelah teleportasi.

Tekan tombol “Main” dan berjalanlah dari tepi pulau: air di bawahnya akan mengalahkanmu. Lalu tekan tombol “Periksa”.

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

-- Pelajaran 10: Water That Defeats ditempatkan di sini

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

Semua pelajaran di Game Roblox: Bertahan dari Bencana

Latihan sendiri: Playground Roblox