Menu
CoddyTech

ماء لا يُقاوَم

الدرس 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 فهو الشخصية. اجعل الماء تابعًا للخريطة، لكي يؤدي تدمير الخريطة في نهاية الجولة إلى إزالة الماء معها.

challenge icon

التحدي

متوسط

أضف الكارثة الأولى: ماء يقضي على اللاعبين.

  1. اكتب defeat(hit): إذا كان لدى hit.Parent كائن Humanoid، فاضبط خاصية Health لديه على 0.
  2. أنشئ local Disasters = {} وDisasters.Flood(map): جزءًا باسم Water في الخريطة، مثبتًا، وCanCollide لديه false، وأعرض وأطول بمقدار 10 studs من map.Base، وأسفله بمقدار 2 studs، مع توصيل Touched بـ defeat.
  3. استدعِ 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