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

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




من المهم ملاحظة الاسم الدقيق لـ BrickColor لخاصية Team.Color لأن التجربة تستخدم هذا الاسم عبر العديد من النصوص البرمجية في التجربة لمتابعة اللاعبين أثناء فرزهم إلى فرق، وزيادة النقاط عندما يقوم اللاعبون بوسم اللاعبين الأعداء خلال جولة، وتحديث عناصر واجهة المستخدم المخصصة. على سبيل المثال، عندما تبدأ الجولة، يتطلب ReplicatedStorage ⟩ HUDGuiSetup startSyncingTeamColor وstartSyncingTeamPoints التي تشير كلاهما إلى Team.Color لتنفيذ إجراءات فريدة لكل فريق.
startSyncingTeamColor يشير إلى Team.Color بحيث يمكنه تخصيص اللون الصحيح والأيقونة لمؤشر فريق اللاعب في الزاوية السفلى اليسرى من شاشتهم.


local function setPlayerTeamIcon(gui: ScreenGui)
for _, teamColorIcon in gui.PlayerDisplay.TeamIcons:GetChildren() do
local iconTeamColor = teamColorIcon:GetAttribute(GuiAttribute.teamColor)
teamColorIcon.Visible = localPlayer.TeamColor == iconTeamColor
end
end
local function startSyncingTeamColor(gui: ScreenGui)
setPlayerTeamIcon(gui)
localPlayer:GetPropertyChangedSignal("Team"):Connect(function()
setPlayerTeamIcon(gui)
end)
end
عرض مؤشرات الفريق
بمجرد أن يتم فرز اللاعب في فريق، يحتاج إلى أن يكون قادرًا على فهم سريع لما ينتمي إليه من فريق، والتمييز بين حلفائهم وأعضاء الفريق المعادي. هذه القدرة مهمة لأن طريقة لعب تجربة التصويب من منظور الشخص الأول تتطلب من اللاعبين اتخاذ قرارات استراتيجية سريعة أثناء وجودهم في مناطق القتال حتى لا يتم وسومهم وخسارة الجولة.
لتهيئة اللاعبين للنجاح، توفر تجربة وسم الليزر النموذجية مؤشرات فريق متعددة على الشاشة وفي الفضاء ثلاثي الأبعاد:
- مؤشر اللاعب – واجهة مستخدم مخصصة على الشاشة تعرض لون الفريق وأيقونة اللاعب.
- مؤشر الفريق – واجهة مستخدم مخصصة في التجربة تعرض لون الفريق للاعب.
- مؤشر لوحة المتصدرين – واجهة مستخدم افتراضية لخدمة الفرق تعرض مجموعة اللاعبين تحت لون فريقهم.
- تلوين الاسم – واجهة مستخدم افتراضية لخدمة الفرق التي تلوّن اسم اللاعب فوق رأسه بلون فريقه.




لا تحتاج إلى القيام بأي عمل إضافي لمؤشر لوحة المتصدرين أو تلوين الاسم بخلاف تخصيص ألوان الفرق من القسم السابق من البرنامج التعليمي، ولكن مؤشرات واجهة المستخدم الخاصة بالفريق تتطلب المزيد من الجهد البرمجي لكل من عرض المؤشرات وحجب مؤشرات الأعداء عندما يكونون خلف الجدران. لمزيد من الشرح حول النصوص البرمجية التي تتحكم في سلوك واجهة المستخدم المخصصة، بالإضافة إلى كيفية تنفيذ كل عنصر واجهة مستخدم بنفسه، راجع مؤشر اللاعب ومؤشر الفريق من منهج واجهة المستخدم.
تعطيل إطلاق النار على الزملاء
بينما تحظر بعض تجارب التصويب من منظور الشخص الأول اللاعبين الذين يطلقون النار على زملائهم، تسمح تجربة وسم الليزر النموذجية بطريقة لعب أكثر تساهلاً من خلال تعطيل إطلاق النار على الزملاء. يسمح هذا القرار التصميمي للجميع بزيادة نقاط الفريق فقط، وليس تقليصها بسبب حوادث اللعب.
لفهم كيف تنفذ العينة هذه الوظيفة، تحقق من كيفية تعامل ServerScriptService ⟩ LaserBlastHandler ⟩ processTaggedPlayers ⟩ onPlayerTagged مع إلحاق الضرر باللاعبين الموسومين. عندما يكتشف الخادم تصادمًا بين رشقة لاعب ولاعب آخر، يستدعي onPlayerTagged لفهم أي لاعب أطلق الرشقة، وأي لاعب تم إصابته بالرشقة، وكمية الضرر التي ينبغي إزالتها من صحة اللاعب وفقًا لنوع الرشاش.
local function onPlayerTagged(playerBlasted: Player, playerTagged: Player, damageAmount: number)
قبل تقليل الصحة، يتحقق النص البرمجي أولاً مما إذا كان اللاعب الموسوم على نفس الفريق كوسيلة اللاعب الذي أطلق الرشقة. إذا كانوا في نفس الفريق، يتجاهل النص البرمجي بيانات الرشقة تمامًا.
local character = playerTagged.Characterlocal isFriendly = playerBlasted.Team == playerTagged.Team-- يمنع إطلاق النار على الزملاءif isFriendly thenreturnend
ومع ذلك، إذا كان اللاعب الموسوم هو من الفريق المعادي، فإنه يتعرض للضرر المناسب وفقًا لنوع الرشاش. بالإضافة إلى ذلك، إذا تعرض اللاعب لضرر يكفي لوسمه، يكافئ النص البرمجي فريق اللاعب الذي أطلق الرشقة بنقطة. لمزيد من المعلومات حول كيفية تتبع العينة للنقاط، راجع إضافة جولات لاحقًا في البرنامج التعليمي.
local humanoid = character and character:FindFirstChild("Humanoid")if humanoid and humanoid.Health > 0 thenlocal damage = math.min(damageAmount, humanoid.Health)humanoid:TakeDamage(damage)if humanoid.Health <= 0 thenScoring.incrementScore(playerBlasted, 1)endendendreturn onPlayerTagged
إذا كنت ستختبر التجربة الآن، سيظهر جميع اللاعبين بشكل عشوائي في أي من مناطق الظهور عند طرفي الساحة بغض النظر عن الفريق الذي ينتمون إليه، مما يعني أن كل فريق سيظهر بجانب بعضه البعض.
لمعالجة هذه المشكلة، يعلمك القسم التالي من البرنامج التعليمي عن المنطق المخصص وراء تقييد ظهور الفرق في مواقع ظهور معينة، والتعامل مع حالة العميل أثناء مغادرة اللاعبين لمنطقة الظهور بعد اختيار رشاشهم، وإعادة ظهور اللاعبين إلى منطقة ظهورهم أو منطقة الردهة عندما تصل صحتهم إلى صفر.