Menu
CoddyTech
flag Ar iconالعربيةdown icon

صل إلى القاعدة

الدرس 3 من 18 في دورة لعبة Roblox: الدفاع عن الأبراج على Coddy.

العدو الذي يصل إلى نهاية المسار يُلحق الضرر بالقاعدة. يجب أن تكون صحة القاعدة على الخادم، لكن شاشة كل لاعب ستعرضها، لذا اجعلها سمة لمساحة العمل: فالسمة التي تُضبط على الخادم يراها كل عميل.

workspace:SetAttribute("BaseHealth", Settings.BaseHealth)
print(workspace:GetAttribute("BaseHealth")) --> 20

تُخفّض damageBase(amount) قيمتها، من دون أن تنخفض أبدًا عن 0 (math.max). بعد نقطة المسار الأخيرة، يستدعيها العدو ويغادر اللعبة باستخدام Destroy.

challenge icon

التحدي

سهل
  1. بعد ترتيب نقاط المسار، عيّن سمة مساحة العمل BaseHealth إلى Settings.BaseHealth.
  2. اكتب damageBase(amount)، التي تُنقص BaseHealth بمقدار amount، من دون أن تقل عن 0.
  3. في نهاية walkPath، بعد آخر نقطة مسار، استدعِ damageBase(1) ودمّر العدو.

اضغط على Play، ثم Check.

جرّب بنفسك

local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local Settings = require(game.ReplicatedStorage.Settings)

local enemies = workspace.Enemies

print("The base can take " .. Settings.BaseHealth .. " hits")

-- نقاط المسار بالترتيب (أسماؤها 1، 2، 3...)
local waypoints = workspace.Path.Waypoints:GetChildren()
table.sort(waypoints, function(a, b)
	return tonumber(a.Name) < tonumber(b.Name)
end)

-- يحصل كل لاعب على Money في لوحة المتصدرين
Players.PlayerAdded:Connect(function(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local money = Instance.new("IntValue")
	money.Name = "Money"
	money.Value = Settings.StartMoney
	money.Parent = leaderstats
end)

-- حرّك عدوًا على طول المسار. يتوقف MoveTo عن المحاولة بعد 8 ثوانٍ ويشير إلى ذلك
-- (MoveToFinished بقيمة false)، لذا يُعاد توجيه العدو البطيء حتى يصل.
local function walkPath(enemy)
	local humanoid = enemy.Humanoid
	for i = 2, #waypoints do
		repeat
			humanoid:MoveTo(waypoints[i].Position)
		until humanoid.MoveToFinished:Wait() or not enemy.Parent
		if not enemy.Parent then
			return
		end
	end
end

-- عدو جديد عند البوابة يسير على طول المسار
local function spawnEnemy(kind)
	local enemy = ServerStorage.Enemies[kind]:Clone()
	-- يوضع مباشرةً فوق أول نقطة في المسار
	enemy:PivotTo(waypoints[1].CFrame + Vector3.new(0, 5, 0))
	enemy.Parent = enemies
	task.spawn(walkPath, enemy)
	return enemy
end

-- عدو واحد في الوقت الحالي
spawnEnemy("Zombie")
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس لعبة Roblox: الدفاع عن الأبراج