ممارسة استخدام شرط else/if مع منح النقاط

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

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

إعداد المشروع

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

تتبع النقاط

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

  1. أنشئ Script جديد في ServerScriptService باسم Leaderboard. انسخ ولصق الشيفرة أدناه في السكربت.


    --في ServerScriptService، أنشئ سكربت باسم PlayerSetup بمحتويات أدناه.
    local Players = game:GetService("Players")
    local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    -- مثال على IntValue
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- نفذ onPlayerJoin عندما يتم تشغيل حدث PlayerAdded
    Players.PlayerAdded:Connect(onPlayerJoin)

جزء تغيير اللون

ستقوم السكربت بالتبديل بين ثلاثة ألوان مختلفة للجزء. سيكون لكل لون متغير لتخزين قيم RGB الخاصة به، وهو نوع بيانات يتضمن مجموعة من ثلاثة أرقام (أحمر، أخضر، أزرق) التي تخلق الألوان.

  1. أنشئ جزء باسم PointPart مع سكربت مرفق باسم PointScript.

  2. في PointScript، استخدم script.Parent للإشارة إلى الجزء.


    local pointPart = script.Parent
  3. أنشئ متغيرات لتخزين الألوان المختلفة. يجب تعيين كل متغير إلى Color3.fromRGB(), الذي ينشئ قيمة لونية.

    • أزرق (بعض النقاط): (0، 0، 255)
    • أخضر (الكثير من النقاط): (0، 255، 0)
    • أحمر (فقدان النقاط): (255، 0، 0)

    local pointPart = script.Parent
    -- الألوان
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
  4. أضف متغيرات لمقدار صغير من النقاط، ومقدار أكبر من النقاط، وثالث لفقدان النقاط.


    -- الألوان
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
    -- قيم النقاط
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100

إضافة خدمة اللاعبين

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

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

  1. احصل على خدمة Players عن طريق كتابة:

    local Players = game:GetService("Players")


    -- قيم النقاط
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- الخدمات اللازمة
    local Players = game:GetService("Players")

الوظائف والأحداث

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

  1. أنشئ وظيفة جديدة باسم givePoints() وبارامتر باسم player. في الداخل، أضف عبارة طباعية لاستخدامها في الاختبار.


    local Players = game:GetService("Players")
    -- يمنح أو ينقص النقاط
    local function givePoints(player)
    print("يتم منح اللاعب النقاط")
    end
  2. أسفل ذلك، أنشئ وظيفة ثانية باسم partTouched() مع بارامتر باسم otherPart.


    -- يمنح أو ينقص النقاط
    local function givePoints(player)
    print("يتم منح اللاعب النقاط")
    end
    -- يتحقق مما إذا كان اللاعب قد لمس الجزء
    local function partTouched(otherPart)
    end
  3. داخل الوظيفة، استخدم الوظيفة GetPlayerFromCharacter() للتحقق مما إذا كان هناك لاعب في متغير otherPart.


    -- يتحقق مما إذا كان اللاعب قد لمس الجزء
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. إذا لمس اللاعب الجزء، فسيتم تخزينه داخل متغير اللاعب. إذا لم يكن، سيبقى المتغير فارغًا. بمفردك:

    • داخل الوظيفة، تحقق مما إذا كان لدى اللاعب قيمة. إذا كان هناك، فاستدعِ givePoints(player).
    • تحت الوظيفة، اربط partTouched() بحدث Touched الخاص بـ pointPart.

    -- يتحقق مما إذا كان اللاعب قد لمس الجزء
    local function partTouched(otherPart)
    -- يحصل على اللاعب إذا لمس أحدهم الجزء
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. قم بتشغيل المشروع. في كل مرة يلمس فيها لاعب الجزء، يجب أن ترى رسالة في نافذة الإخراج تقول: "يتم منح اللاعب النقاط"

نصائح لحل المشكلات:

  • تحقق من أن "Players" في game:GetService("Players") بحروف كبيرة وموجودة بين علامتي اقتباس.
  • يجب أن تكون partTouched() متصلة بحدث Touched الخاص بـ pointPart.

إنشاء ألوان متكررة

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

  1. في نهاية السكربت، أنشئ حلقة while جديدة حيث الشرط صحيح، مما يعني أن الحلقة دائماً تعمل.


    -- يتحقق مما إذا كان اللاعب قد لمس الجزء
    local function partTouched(otherPart)
    -- يحصل على اللاعب إذا لمس أحدهم الجزء
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- تتكرر الألوان
    while true do
    end
  2. بنفسك، قم ببرمجة حلقة while true do تغير pointPart إلى متغيرات اللون التي أنشأتها. لا تنسَ استخدام task.wait() بين الألوان. عند الانتهاء، تحقق من كودك مع الإصدار أدناه.


    -- تتكرر 3 ألوان، تنتظر بين كل لون
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. اختبر اللعبة وتحقق من أن جميع الألوان الثلاثة تتكرر بدون توقف.

نصائح لحل المشكلات

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

  • تحقق من أن حلقة while موجودة في أسفل السكربت، تحت حدث Touched. إذا لم تكن الحلقة في الأسفل، ستمنع أجزاء أخرى من السكربت من العمل بشكل صحيح.
  • تحقق من أن كل لون داخل Color3.fromRGB() مكتوب بشكل صحيح. يجب أن تكون هناك ثلاثة أرقام بين 0 و 255 مفصولة بفواصل، مثل (255, 50, 0).

منح النقاط للاعبين

سيتم منح اللاعبين نقاط بناءً على اللون الحالي للجزء عندما يلمسونه.

العثور على اللون الحالي

كلما لمس لاعب الجزء، ستحتاج السكربت إلى معرفة اللون الحالي للجزء لمنح النقاط في وقت لاحق.

  1. ابحث عن givePoints(). استبدل رسالتك الاختبارية بمتغير للون الحالي لـ pointPart. سيحدد هذا المتغير عدد النقاط التي يحصل عليها اللاعب (أو loses).


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. لتأثير نقاط اللاعب، تحتاج هذه الوظيفة إلى الوصول إلى لوحة المتصدرين الخاصة باللاعب. أنشئ متغيرًا لتخزينها.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. الآن أضف متغيرًا للحصول على قيمة نقاط اللاعب، والتي هي فرع من لوحة المتصدرين الخاصة بهم.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    end

منح أو خصم النقاط

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

  1. داخل givePoints(), تحت المتغيرات، استخدم عبارة if للتحقق مما إذا كان اللون الحالي أزرقًا وإذا كان الأمر كذلك، أضف smallPoints إلى قيمة النقاط الحالية للاعب.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    if currentColor == blue then
    playerPoints.Value += smallPoints
    end
    end
  2. للتحقق من الأخضر، أضف شرط else if. إذا كان اللون أخضرًا، أضف متغير largePoints إلى نقاط اللاعب.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. استخدم عبارة else لخصم النقاط إذا كان pointsPart ليس أزرق أو أخضر.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. أخيرًا، دمر الجزء بعد عبارة if حتى لا تستطيع السكربت الاستمرار في منح النقاط.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. اختبر اللعبة وتحقق من أن كل لون يمنح النقاط كما هو متوقع. تأكد من اختبار جميع الثلاث حالات.

منح اللاعبين ملاحظات

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

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

إنشاء تأثير جسيمات

سيكون تأثير الجسيمات بنفس لون الجزء عند لمسه. نظرًا لأن الألوان تم تخزينها في متغيرات، فسهل إعادة استخدامها.

  1. في givePoints() في الأسفل، أنشئ مثيل ParticleEmitter جديد. تأكد من أن اسم المثيل مكتوب تمامًا كما هو موضح.


    local particle = Instance.new("ParticleEmitter")
    end
  2. تستخدم ParticleEmitters تسلسلات الألوان للتحكم في خاصية اللون الخاصة بهم. أنشئ ColorSequence جديدة ومرر فيها اللون الحالي للجزء.


    -- دمر الجزء
    pointPart:Destroy()
    -- أنشئ الجسيمات
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. ستحتاج الجسيمات إلى أن تكون مرفقة بالشخصية التي لمستها. أنشئ متغيرًا للحصول على نموذج شخصية اللاعب. ثم، اجعل الجسيمات تابعة لرأس اللاعب.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. استخدم task.wait() لمدة ثانية سريعة، ثم دمر الجسيمات.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
    task.wait(1)
    particle:Destroy()
  5. اختبر اللعبة وتأكد من أن الجسيمات تتبع اللاعب لفترة وجيزة بعد لمس كل لون.

نصائح لحل المشكلات

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

  • تأكد من أن عند إنشاء مثيل جديد أن ParticleEmitter مكتوب بالضبط كما هو موضح وداخل علامات الاقتباس.
  • عند إرفاق الجسيمات، تأكد من استخدام : بين playerCharacter وWaitForChild() بدون فواصل بينهما.

Complete PointScript

يمكن الإشارة إلى نسخة منتهية من السكربت أدناه.


local pointPart = script.Parent
--local storage = game:GetService("ServerStorage")
-- يمنح بعض النقاط
local blue = Color3.fromRGB(0, 0, 255)
-- يمنح المزيد من النقاط
local green = Color3.fromRGB(0, 255, 0)
-- يجعل اللاعبين يفقدون النقاط
local red = Color3.fromRGB(255, 0, 0)
-- النقاط المعطاة للاعبين
local smallPoints = 10
local largePoints = 50
local losePoints = 100
local Players = game:GetService("Players")
local function givePoints(player)
local currentColor = pointPart.Color
local playerStats = player:WaitForChild("leaderstats")
local playerPoints = playerStats:WaitForChild("Points")
-- يمنح اللاعب النقاط بناءً على لون الجزء
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- دمر الجزء، انتظر ثانية، ثم دمر الجسيمات
pointPart:Destroy()
-- أنشئ تأثير شرر ودمّره
local playerCharacter = player.Character
local particle = Instance.new("ParticleEmitter")
particle.Color = ColorSequence.new(currentColor)
particle.Parent = playerCharacter:WaitForChild("Head")
task.wait(1)
particle:Destroy()
end
local function partTouched(otherPart)
local player = Players:GetPlayerFromCharacter(otherPart.Parent)
if player then
givePoints(player)
end
end
pointPart.Touched:Connect(partTouched)
-- يغير لون الجزء بناءً على المتغيرات. يجب أن يكون في أسفل السكربت.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.