Hujan Meteor
Pelajaran 11 dari 18 dalam kursus Game Roblox: Bertahan dari Bencana di Coddy.
Bencana kedua menjatuhkan meteor yang menyala setiap setengah detik sepanjang ronde. Perulangan yang menunggu akan menahan hitung mundur ronde, jadi perulangan ini berjalan bersamaan dengan hitung mundur menggunakan task.spawn:
task.spawn(function()
while map.Parent do
-- jatuhkan meteor
task.wait(0.5)
end
end)while map.Parent do berhenti dengan sendirinya: saat ronde menghancurkan map, Parent-nya menjadi nil. Setiap meteor mendarat di titik acak, sejauh math.random(-15, 15) stud dari pusat pulau, lalu Debris:AddItem(meteor, 4) menghapusnya 4 detik kemudian agar meteor tidak menumpuk.
Dengan dua bencana, ronde harus memilih. Fungsi di dalam tabel bisa dicari berdasarkan namanya sebagai string, Disasters["Meteors"], sehingga ronde bisa menjalankan bencana apa pun yang namanya tercantum di Settings.Disaster. Pengaturan pelajaran ini mencantumkan meteor.
Tantangan
SedangTambahkan hujan meteor:
- Dapatkan layanan
Debrisdi bagian atas. - Tulis
Disasters.Meteors(map): di dalamtask.spawn, selama map berada di dalam game, buat part berbentuk bola bernamaMeteor(3 kali 3 kali 3, oranye, Neon) pada koordinat X dan Z acak dalam jarak 15 studs darimap.Base, setinggi 40 studs, di dalam map. Sentuhannya mengalahkan pemain; Debris menghapusnya setelah 4 detik; tunggu 0.5 detik sebelum meteor berikutnya. - Ganti
Disasters.Flood(map)denganDisasters[Settings.Disaster](map).
Tekan Play dan hindari meteor, lalu tekan Check.
Coba sendiri
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local TweenService = game:GetService("TweenService")
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
local function defeat(hit)
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
-- Daftar bencana berdasarkan nama
local Disasters = {}
function Disasters.Flood(map)
local base = map.Base
local water = Instance.new("Part")
water.Name = "Water"
water.Anchored = true
water.CanCollide = false
water.Transparency = 0.3
water.Color = Color3.fromRGB(40, 120, 255)
water.Size = Vector3.new(base.Size.X + 10, 1, base.Size.Z + 10)
water.Position = base.Position - Vector3.new(0, 2, 0)
water.Parent = map
water.Touched:Connect(defeat)
local rise = TweenInfo.new(Settings.RoundLength * 0.8, Enum.EasingStyle.Linear)
TweenService:Create(water, rise, { Position = water.Position + Vector3.new(0, 8, 0) }):Play()
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
Disasters.Flood(map)
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
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