هذا المشروع سيستخدم الجمل الشرطية لإنشاء جزء يعطي أو ينقص النقاط على لوحة المتصدرين اعتمادًا على لون الجزء عندما يتم لمسه. إذا كان لونه أزرق، فإنه سيمنح اللاعبين بعض النقاط. إذا كان لونه أخضر، فإنه سيمنح نقاطًا كثيرة. أخيرًا، إذا كان لونه أحمر، فإنه سيأخذ نقاطًا.
إعداد المشروع
يمكن إضافة الجزء الذي يمنح النقاط إلى أي مشروع تكون فيه النقاط ذات صلة. على سبيل المثال، لعبة مغامرة حيث يقوم اللاعبون بجمع النقاط.
تتبع النقاط
لإعداد هذا المشروع، ستحتاج إلى لوحة متصدرين لتتبع النقاط وجزء يتغير لونه. سيتم توفير الشيفرة الخاصة بلوحة المتصدرين.
أنشئ 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-- مثال على IntValuelocal points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- نفذ onPlayerJoin عندما يتم تشغيل حدث PlayerAddedPlayers.PlayerAdded:Connect(onPlayerJoin)
جزء تغيير اللون
ستقوم السكربت بالتبديل بين ثلاثة ألوان مختلفة للجزء. سيكون لكل لون متغير لتخزين قيم RGB الخاصة به، وهو نوع بيانات يتضمن مجموعة من ثلاثة أرقام (أحمر، أخضر، أزرق) التي تخلق الألوان.
أنشئ جزء باسم PointPart مع سكربت مرفق باسم PointScript.
في PointScript، استخدم script.Parent للإشارة إلى الجزء.
local pointPart = script.Parentأنشئ متغيرات لتخزين الألوان المختلفة. يجب تعيين كل متغير إلى 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)أضف متغيرات لمقدار صغير من النقاط، ومقدار أكبر من النقاط، وثالث لفقدان النقاط.
-- الألوانlocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)-- قيم النقاطlocal smallPoints = 10local largePoints = 50local losePoints = 100
إضافة خدمة اللاعبين
لمنح النقاط، ستحتاج إلى الوصول إلى معلومات اللاعب التي يتم تخزينها في مستعرض اللعبة تحت اللاعبين، وهي منفصلة عن كائن الشخصية. هنا يمكنك العثور على معلومات مثل إحصائيات لوحة المتصدرين.
يمكنك القيام بذلك عن طريق إضافة خدمة Players إلى سكربتك. الخدمات هي مجموعات إضافية من الوظائف المعدة مسبقًا التي أنشأها مهندسو روبلوكس لتوفير الوقت عليك.
احصل على خدمة Players عن طريق كتابة:
local Players = game:GetService("Players")
-- قيم النقاطlocal smallPoints = 10local largePoints = 50local losePoints = 100-- الخدمات اللازمةlocal Players = game:GetService("Players")
الوظائف والأحداث
ستحتاج PointsScript إلى وظيفتين. الوظيفة الأولى ستعطي وتنقص النقاط. الوظيفة الثانية ستتحقق مما إذا كان اللاعب قد لمس الجزء. سيتم ربط هذه الوظائف بعد ذلك بحدث اللمس، والذي يعمل كلما تم لمس هذا الجزء.
أنشئ وظيفة جديدة باسم givePoints() وبارامتر باسم player. في الداخل، أضف عبارة طباعية لاستخدامها في الاختبار.
local Players = game:GetService("Players")-- يمنح أو ينقص النقاطlocal function givePoints(player)print("يتم منح اللاعب النقاط")endأسفل ذلك، أنشئ وظيفة ثانية باسم partTouched() مع بارامتر باسم otherPart.
-- يمنح أو ينقص النقاطlocal function givePoints(player)print("يتم منح اللاعب النقاط")end-- يتحقق مما إذا كان اللاعب قد لمس الجزءlocal function partTouched(otherPart)endداخل الوظيفة، استخدم الوظيفة GetPlayerFromCharacter() للتحقق مما إذا كان هناك لاعب في متغير otherPart.
-- يتحقق مما إذا كان اللاعب قد لمس الجزءlocal function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)endإذا لمس اللاعب الجزء، فسيتم تخزينه داخل متغير اللاعب. إذا لم يكن، سيبقى المتغير فارغًا. بمفردك:
- داخل الوظيفة، تحقق مما إذا كان لدى اللاعب قيمة. إذا كان هناك، فاستدعِ givePoints(player).
- تحت الوظيفة، اربط partTouched() بحدث Touched الخاص بـ pointPart.
-- يتحقق مما إذا كان اللاعب قد لمس الجزءlocal function partTouched(otherPart)-- يحصل على اللاعب إذا لمس أحدهم الجزءlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)قم بتشغيل المشروع. في كل مرة يلمس فيها لاعب الجزء، يجب أن ترى رسالة في نافذة الإخراج تقول: "يتم منح اللاعب النقاط"
نصائح لحل المشكلات:
- تحقق من أن "Players" في game:GetService("Players") بحروف كبيرة وموجودة بين علامتي اقتباس.
- يجب أن تكون partTouched() متصلة بحدث Touched الخاص بـ pointPart.
إنشاء ألوان متكررة
لتبديل الألوان، ستستخدم السكربت حلقة while تقوم بتغيير لون الجزء كل بضع ثواني. شرط هذه الحلقة سيكون صحيحًا، مما يعني أن الحلقة تعمل بدون توقف.
في نهاية السكربت، أنشئ حلقة while جديدة حيث الشرط صحيح، مما يعني أن الحلقة دائماً تعمل.
-- يتحقق مما إذا كان اللاعب قد لمس الجزءlocal function partTouched(otherPart)-- يحصل على اللاعب إذا لمس أحدهم الجزءlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- تتكرر الألوانwhile true doendبنفسك، قم ببرمجة حلقة while true do تغير pointPart إلى متغيرات اللون التي أنشأتها. لا تنسَ استخدام task.wait() بين الألوان. عند الانتهاء، تحقق من كودك مع الإصدار أدناه.
-- تتكرر 3 ألوان، تنتظر بين كل لونwhile true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)endاختبر اللعبة وتحقق من أن جميع الألوان الثلاثة تتكرر بدون توقف.

نصائح لحل المشكلات
في هذه المرحلة، إذا لم تعمل حلقة الألوان كما هو مقصود، جرب أحد الخيارات التالية أدناه.
- تحقق من أن حلقة while موجودة في أسفل السكربت، تحت حدث Touched. إذا لم تكن الحلقة في الأسفل، ستمنع أجزاء أخرى من السكربت من العمل بشكل صحيح.
- تحقق من أن كل لون داخل Color3.fromRGB() مكتوب بشكل صحيح. يجب أن تكون هناك ثلاثة أرقام بين 0 و 255 مفصولة بفواصل، مثل (255, 50, 0).
منح النقاط للاعبين
سيتم منح اللاعبين نقاط بناءً على اللون الحالي للجزء عندما يلمسونه.
العثور على اللون الحالي
كلما لمس لاعب الجزء، ستحتاج السكربت إلى معرفة اللون الحالي للجزء لمنح النقاط في وقت لاحق.
ابحث عن givePoints(). استبدل رسالتك الاختبارية بمتغير للون الحالي لـ pointPart. سيحدد هذا المتغير عدد النقاط التي يحصل عليها اللاعب (أو loses).
local function givePoints(player)local currentColor = pointPart.Colorendلتأثير نقاط اللاعب، تحتاج هذه الوظيفة إلى الوصول إلى لوحة المتصدرين الخاصة باللاعب. أنشئ متغيرًا لتخزينها.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")endالآن أضف متغيرًا للحصول على قيمة نقاط اللاعب، والتي هي فرع من لوحة المتصدرين الخاصة بهم.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")end
منح أو خصم النقاط
بعد ذلك، ستستخدم if و elseif لمنح أو خصم النقاط اعتمادًا على لون الجزء عند لمسه. تذكر أن الأزرق يوفر كمية صغيرة، والأخضر يوفر الكثير، والأحمر يخصم النقاط.
داخل givePoints(), تحت المتغيرات، استخدم عبارة if للتحقق مما إذا كان اللون الحالي أزرقًا وإذا كان الأمر كذلك، أضف smallPoints إلى قيمة النقاط الحالية للاعب.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")if currentColor == blue thenplayerPoints.Value += smallPointsendendللتحقق من الأخضر، أضف شرط else if. إذا كان اللون أخضرًا، أضف متغير largePoints إلى نقاط اللاعب.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendاستخدم عبارة else لخصم النقاط إذا كان pointsPart ليس أزرق أو أخضر.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendأخيرًا، دمر الجزء بعد عبارة if حتى لا تستطيع السكربت الاستمرار في منح النقاط.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()اختبر اللعبة وتحقق من أن كل لون يمنح النقاط كما هو متوقع. تأكد من اختبار جميع الثلاث حالات.
منح اللاعبين ملاحظات
يعمل PointPart، لكن قد لا يلاحظ اللاعبون حدوث شيء ما إلا إذا كانوا ينظرون إلى لوحة المتصدرين الخاصة بهم. أصلح ذلك عن طريق إنشاء جسيمات عند تدمير PointPart.
إن إضافة ملاحظات عندما يستخدم اللاعبون جزءًا، مثل الأصوات، الاهتزازات، أو الجسيمات، يجعل التفاعلات مع الأشياء أكثر إرضاءً للاعبين.
إنشاء تأثير جسيمات
سيكون تأثير الجسيمات بنفس لون الجزء عند لمسه. نظرًا لأن الألوان تم تخزينها في متغيرات، فسهل إعادة استخدامها.
في givePoints() في الأسفل، أنشئ مثيل ParticleEmitter جديد. تأكد من أن اسم المثيل مكتوب تمامًا كما هو موضح.
local particle = Instance.new("ParticleEmitter")endتستخدم ParticleEmitters تسلسلات الألوان للتحكم في خاصية اللون الخاصة بهم. أنشئ ColorSequence جديدة ومرر فيها اللون الحالي للجزء.
-- دمر الجزءpointPart:Destroy()-- أنشئ الجسيماتlocal particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)ستحتاج الجسيمات إلى أن تكون مرفقة بالشخصية التي لمستها. أنشئ متغيرًا للحصول على نموذج شخصية اللاعب. ثم، اجعل الجسيمات تابعة لرأس اللاعب.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")استخدم task.wait() لمدة ثانية سريعة، ثم دمر الجسيمات.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")task.wait(1)particle:Destroy()اختبر اللعبة وتأكد من أن الجسيمات تتبع اللاعب لفترة وجيزة بعد لمس كل لون.
نصائح لحل المشكلات
في هذه المرحلة، إذا لم تعمل الجسيمات كما هو مقصود، جرب أحد الخيارات التالية أدناه.
- تأكد من أن عند إنشاء مثيل جديد أن 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