ماء لا يُقاوَم
الدرس 10 من 20 في دورة لعبة Roblox: النجاة من الكوارث على Coddy.
حان وقت الكارثة الأولى. ستضم اللعبة عدة كوارث، لذا ستوضع في جدول واحد، وتكون كل واحدة منها دالة تأخذ الخريطة. تُستدعى الدالة المخزنة في جدول مثل أي دالة أخرى:
local Disasters = {}
function Disasters.Flood(map)
-- أنشئ الماء
end
Disasters.Flood(map)يبدأ الفيضان كجزء أزرق عريض أسفل الجزيرة. يجب ألا يحمل اللاعبين، لذا تكون CanCollide قيمته false (ويظل الحدث Touched يُطلق)، وتبقى Anchored. ستقضي كل كارثة على من تلمسه، لذا سنعطي هذه المهمة اسمًا:
local function defeat(hit)
local humanoid = hit.Parent:FindFirstChild("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
lava.Touched:Connect(defeat)يمثل hit الجزء الذي لامس، مثل القدم؛ أما Parent فهو الشخصية. اجعل الماء تابعًا للخريطة، لكي يؤدي تدمير الخريطة في نهاية الجولة إلى إزالة الماء معها.
التحدي
متوسطأضف الكارثة الأولى: ماء يقضي على اللاعبين.
- اكتب
defeat(hit): إذا كان لدىhit.Parentكائن Humanoid، فاضبط خاصية Health لديه على 0. - أنشئ
local Disasters = {}وDisasters.Flood(map): جزءًا باسمWaterفي الخريطة، مثبتًا، وCanCollide لديه false، وأعرض وأطول بمقدار 10 studs منmap.Base، وأسفله بمقدار 2 studs، مع توصيل Touched بـdefeat. - استدعِ
Disasters.Flood(map)بعد الانتقال الآني.
اضغط «العب» وامشِ بعيدًا عن الجزيرة: الماء تحتها يقضي عليك. ثم اضغط «تحقق».
جرّب بنفسك
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")
-- يحصل كل لاعب على Wins في لوحة المتصدرين
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)
-- لوحة الحالة في الردهة
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
-- يوضع درس 10: الماء الذي يهزم هنا
-- حلقة الجولات
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
جميع دروس لعبة Roblox: النجاة من الكوارث
تدرّب بنفسك: Playground لـ Roblox