نقاط التسجيل

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

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

الإعداد

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

يمكنك أيضًا استخدام الحمم القاتلة لقتل المستخدمين عندما يسقطون من المنصات، أو فقط دعهم يسقطون إلى مصيرهم. تأكد من وضع SpawnLocation في مكان يمكن للمستخدمين القفز إلى المنصات للبدء في اللعب.

نقطة ظهور فوق شبكة من المنصات المتلاشية، فوق أرضية من الحمم

نقاط اللاعب

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

لوحة المتصدرين مع اسم المستخدم والنقاط المعروضة

ستتعلم المزيد من الطرق القابلة للتخصيص لعرض المعلومات في الدروس اللاحقة، لكن لوحة المتصدرين هي أبسط طريقة لإنشاء نظام تسجيل نقاط مرئي في Roblox.

من الأفضل وضع السكربتات التي تعدل حالة اللعبة في ServerScriptService لأنها ستعمل تلقائيًا عند بدء اللعبة. في ServerScriptService، أنشئ سكربتًا يسمى SetupPoints.

سكربت SetupPoints في مكانه في ServerScriptService في نافذة المستكشف

الاستماع للاعبين

في Roblox، الخدمة هي كائن يقوم بمجموعة من الوظائف المفيدة. تحتوي خدمة Players على حدث يسمى PlayerAdded يمكنك استخدامه لإعداد النقاط لكل مستخدم ينضم إلى اللعبة.

يمكنك الوصول إلى الخدمات باستخدام دالة GetService في كائن game. game هو متغير يمكن الوصول إليه من أي مكان يحتوي على كل شيء في لعبتك.

  1. أنشئ متغيرًا لخدمة اللاعبين باستخدام game:GetService("Players").

  2. أنشئ دالة تسمى onPlayerAdded مع معلمة للاعب القادم.

  3. قم بتوصيل دالة onPlayerAdded بحدث PlayerAdded.

    local Players = game:GetService("Players")
    local function onPlayerAdded(player)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

إنشاء مجلد الإحصائيات

لجعل نقاط المستخدم تظهر في لوحة المتصدرين، كل ما تحتاجه هو إنشاء Folder جديدة في كائن Player الخاص بهم يسمى "leaderstats" ووضع نقاطهم هناك. يمكن إنشاء كائنات جديدة من داخل سكربت عبر دالة Instance.new().

  1. أنشئ كائن Folder جديد باستخدام Instance.new("Folder")، وقم بتخزين النتيجة في متغير جديد يسمى leaderstats.

    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    end
  2. قم بتعيين خاصية الاسم لـ leaderstats إلى "leaderstats".

  3. اجعل leaderstats تابعًا لـ player.

    local Players = game:GetService("Players")
    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

إنشاء النقاط

يقرأ نظام لوحة المتصدرين أي قيم في مجلد leaderstats ويعرض ما يجده.

لإضافة إحصائية ستتبع نقاط اللاعب، يمكن ربط كائن IntValue جديد بمجلد leaderstats. سيتم عرض اسم كائن القيمة بجانب قيمته الحالية.

  1. استخدم متغيرًا يسمى points لإنشاء كائن IntValue جديد باستخدام Instance.new().
  2. قم بتعيين Name إلى "Points".
  3. قم بتعيين Value إلى 0؛ هذا ما ستعرضه لوحة المتصدرين في البداية للاعب.
  4. اجعل كائن points تابعًا لمجلد leaderstats.
local Players = game:GetService("Players")
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
end
Players.PlayerAdded:Connect(onPlayerAdded)

اختبر لعبتك ويجب أن ترى لوحة المتصدرين تظهر في الزاوية العليا مع أسماء مستخدميك ونقاط بجانبهم.

حساب الوقت

يجب أن يكسب كل مستخدم نقطة عن كل ثانية يكون فيها على قيد الحياة. يمكن استخدام حلقة while ودالة task.wait() لتحديث قيمة النقاط كل ثانية.

  1. في نهاية السكربت، أنشئ حلقة while مع true كشرط.
  2. في الحلقة، task.wait() لمدة 1 ثانية.
Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
end

قائمة اللاعبين

لتشغيل الكود لكل مستخدم في اللعبة، تحتاج إلى التكرار عبر المصفوفة من المستخدمين التي تعيدها دالة GetPlayers.

المصفوفة هي قائمة من العناصر المخزنة بالترتيب. يمكن الوصول إلى كل عنصر من خلال موضع الفهرس الخاص به، بدءًا من 1. يمكنك الحصول على طول المصفوفة عن طريق وضع علامة # قبلها.

  1. قم بتخزين نتيجة Players:GetPlayers() في متغير playerList.
  2. أنشئ حلقة for بقيمة بدء من 1 وقيمة نهاية هي #playerList، بحيث تحصل على تكرار واحد من الحلقة لكل لاعب.
while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
-- أضف منطقك هنا لكل لاعب في playerList
end
end

منح النقاط

لمنح نقطة لكل مستخدم في حلقة for، ستحتاج إلى الحصول على المستخدم من المصفوفة وإضافة 1 إلى كائن Points المخزن في مجلد leaderstats الخاص بهم.

يمكن الوصول إلى الكائنات المخزنة في مصفوفة باستخدام الأقواس المربعة - على سبيل المثال، يمكن الوصول إلى العنصر الأول في مصفوفة playerList باستخدام playerList[1]. إذا كتبت playerList[currentPlayer] في حلقة for، يمكنك الانتقال عبر كل مستخدم في القائمة مع كل تكرار للحلقة.

  1. قم بتخزين المستخدم في playerList[currentPlayer] في متغير يسمى player.
  2. قم بتخزين كائن Points الخاص بالمستخدم في متغير يسمى points.
  3. قم بتعيين خاصية Value لـ points إلى points.Value + 1.
while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
local player = playerList[currentPlayer]
local points = player.leaderstats.Points
points.Value += 1
end
end

اختبر لعبتك ويجب أن تجد أن لوحة المتصدرين تظهر نقاط اللاعب تتزايد بمقدار 1 كل ثانية.

الاستماع للشخصيات

هدف اللعبة هو رؤية من يمكنه البقاء على قيد الحياة لأطول فترة، لذا يجب أن يتم إعادة تعيين نقاط المستخدمين الذين يموتون إلى 0.

ستحتاج إلى الحصول على نموذج Character للمستخدم من أجل اكتشاف متى مات. يتم إضافة هذا النموذج فقط إلى اللعبة بعد تحميل كائن Player ويمكنك استخدام حدث CharacterAdded للاستماع عندما تكون الشخصية جاهزة للاستخدام. أنشئ دالة تسمى onCharacterAdded مع معلمين: واحد للشخصية، وآخر للاعب.

local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")

على الرغم من أنك قمت بتضمين المستخدم في معلمات دالة onCharacterAdded، إلا أن حدث CharacterAdded الفعلي يعيد فقط الشخصية، وليس المستخدم المرتبط. لتمرير كائن player أيضًا، استخدم دالة مجهولة لتوصيل الحدث.

local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end

إعادة تعيين النقاط

عندما يموت مستخدم، يقوم Humanoid تلقائيًا بإطلاق حدث Died. يمكنك استخدام هذا الحدث لمعرفة متى يجب إعادة تعيين نقاطهم.

يتم العثور على Humanoid داخل نموذج الشخصية، لكن محتويات هذا النموذج يتم تجميعها فقط عندما يظهر المستخدم. لجعل الكود الخاص بك ينتظر بأمان حتى يتم تحميل كائن Humanoid، استخدم دالة WaitForChild(). يمكنك استدعاؤها على أي كائن أب، مع تمرير اسم السلسلة للطفل الذي تنتظر من أجله. أنشئ متغيرًا للانتظار من أجل Humanoid باستخدام character:WaitForChild("Humanoid").

local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
end

الدالة التي تحتاج إلى توصيلها بحدث Died قصيرة جدًا ولن تحتاج إليها إلا هنا، لذا يمكنك استخدام دالة مجهولة مرة أخرى.

  1. قم بتوصيل دالة مجهولة جديدة بحدث Died الخاص بـ Humanoid.
  2. في الدالة المجهولة، أنشئ متغيرًا يسمى points لكائن Points الخاص باللاعب.
  3. قم بتعيين خاصية Value لـ points إلى 0.
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
end)
end

اختبر ذلك وسترى أن نقاط المستخدم تعيد تعيينها عندما يموت.

التحقق من اللاعب

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

تحتاج إلى البدء بتعريف خاصية في دالة onPlayerAdded يمكن استخدامها للتحقق مما إذا كان المستخدم على قيد الحياة. في هذه المرحلة، لا يزال المستخدم غير حي ولم يظهر، حيث لا يزال نموذج شخصيته بحاجة إلى أن يتم إضافته.

تسمح لك الخصائص بتخصيص الكائنات في Roblox ببياناتك الخاصة. تتكون الخاصية من اسم وقيمة. يمكنك إنشاء واحدة على أي كائن باستخدام دالة SetAttribute. استدعِ SetAttribute على player لإنشاء خاصية جديدة تسمى "IsAlive" بقيمة false.

local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end

بمجرد أن يظهر نموذج شخصية المستخدم، يجب تغيير قيمة IsAlive إلى true حتى يتمكن المستخدم من البدء في كسب النقاط مرة أخرى.

  1. في onCharacterAdded، قم بتعيين خاصية IsAlive لـ player إلى true.
  2. في onCharacterDied، قم بتعيين خاصية IsAlive لـ player إلى false.
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end

أخيرًا، يجب التحقق من IsAlive قبل منح أي نقطة في حلقة while في نهاية السكربت. تأخذ دالة GetAttribute اسم خاصية وتعيد القيمة. في حلقة while، قم بتغليف الكود لمنح نقطة في عبارة if مع الشرط player:GetAttribute("IsAlive").

while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
local player = playerList[currentPlayer]
if player:GetAttribute("IsAlive") then
local points = player.leaderstats.Points
points.Value += 1
end
end
end

اختبر لعبتك الآن ويجب أن تجد أن المستخدم يكسب نقاطًا كل ثانية يكون فيها على قيد الحياة، وتبقى عند 0 عندما لا يكون على قيد الحياة. اجعل أصدقائك يلعبون معك وانظر من يمكنه الحصول على أعلى نقاط.

هذه مجرد البداية: يمكنك الاستمرار في تحسين لعبتك لمستخدميك. إليك بعض النصائح:

  • ضع كود جميع المنصات في سكربت واحد، مما يجعل من السهل تحديثه.
  • أنشئ منطقة لوبي حيث ينتظر المستخدمون ليتم نقلهم إلى منطقة اللعبة، مما يسمح للمستخدمين بالبدء في نفس الوقت.
  • أعلن عن الفائزين في كل جولة.

الكود النهائي

local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
local playerList = Players:GetPlayers()
for i = 1, #playerList do
local player = playerList[i]
if player:GetAttribute("IsAlive") then
local points = player.leaderstats.Points
points.Value += 1
end
end
end
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.