صل إلى القاعدة
الدرس 3 من 18 في دورة لعبة Roblox: الدفاع عن الأبراج على Coddy.
العدو الذي يصل إلى نهاية المسار يُلحق الضرر بالقاعدة. يجب أن تكون صحة القاعدة على الخادم، لكن شاشة كل لاعب ستعرضها، لذا اجعلها سمة لمساحة العمل: فالسمة التي تُضبط على الخادم يراها كل عميل.
workspace:SetAttribute("BaseHealth", Settings.BaseHealth)
print(workspace:GetAttribute("BaseHealth")) --> 20تُخفّض damageBase(amount) قيمتها، من دون أن تنخفض أبدًا عن 0 (math.max). بعد نقطة المسار الأخيرة، يستدعيها العدو ويغادر اللعبة باستخدام Destroy.
التحدي
سهل- بعد ترتيب نقاط المسار، عيّن سمة مساحة العمل
BaseHealthإلىSettings.BaseHealth. - اكتب
damageBase(amount)، التي تُنقصBaseHealthبمقدارamount، من دون أن تقل عن 0. - في نهاية
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")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.