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.
Tantangan
SedangTambahkan bencana pertama: air yang mengalahkan pemain.
- Tulis
defeat(hit): jikahit.Parentmemiliki Humanoid, atur Health-nya menjadi 0. - Buat
local Disasters = {}danDisasters.Flood(map): sebuah partWaterdi dalam map, ditambatkan, CanCollide bernilai false, 10 studs lebih lebar dan lebih panjang daripadamap.Base, 2 studs di bawahnya, dengan Touched terhubung kedefeat. - 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
3Bencana
Air yang MengalahkanLatihan sendiri: Playground Roblox