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

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

انقر على مربع حزمة الميزات Core، ثم على مربع حزمة ميزات المهام. يعرض كلا مجلدي الحزمة في نافذة المستكشف.
قم بسحب مجلدي الحزمة إلى ReplicatedStorage.
تعريف المهام
تشمل كل مهمة قابلة للإكمال مجموعة من المهام التي يجب إنهاؤها لإكمال المهمة، وخيارات تكوين، وبيانات وصفية اختيارية، والتي يمكن تحديدها جميعًا ضمن ReplicatedStorage.Missions.Configs.Missions، مع أنواع مصدرة من نص Types في نفس المجلد.
الحقول المطلوبة
تتطلب الحقول التالية لكل مهمة.
| الاسم | النوع | الوصف |
|---|---|---|
| missionId | string | المفتاح الرئيسي في جدول المهام. يتم التعرف على جميع المهام بواسطة سلسلة فريدة خاصة بها. |
| categoryId | string | يجب أن تنتمي المهام إلى فئة، ويتم تجميعها حسب الفئة في واجهة المستخدم. |
| tasks | table | قائمة من المهام التي يجب على اللاعب إنهاؤها لإكمال المهمة. |
شروط الفتح
بشكل افتراضي، يتم فتح المهام للاعبين تلقائيًا ويمكن إكمالها مرة واحدة فقط. ومع ذلك، يمكنك استخدام خيارات التكوين الاختيارية التالية لتغيير هذا السلوك.
| الاسم | النوع | الوصف |
|---|---|---|
| prerequisites | table | قائمة من معرفات المهام الأخرى التي يجب إكمالها قبل فتح المهمة. |
| manualOnly | bool | تعطيل الفتح التلقائي للمهمة. بدلاً من ذلك، يجب استدعاء دالة لفك قفل المهمة. يجب أن تُلبى أي شروط أخرى للفتح أيضًا. |
| availableAfterUtc | bool | لا يمكن فتح المهمة قبل الوقت المحدد بتوقيت UTC. |
| availableBeforeUtc | bool | لا يمكن فتح المهمة بعد الوقت المحدد بتوقيت UTC. إذا تم فتحها ولكن لم تكتمل قبل هذا الوقت، ستفشل المهمة. |
| repeatable | bool | تُفتح المهمة مرة أخرى بعد إكمالها. |
| repeatLimit | number | إذا كانت المهمة قابلة للتكرار، فلا يمكن تكرارها أكثر من هذا العدد من المرات. |
| repeatCooldownSeconds | number | إذا كانت المهمة قابلة للتكرار، فهناك تأخير قبل أن تصبح مفتوحة. |
| expireSeconds | number | إذا كانت المهمة مفتوحة ولم تُكمل في غضون عدد الثواني المحدد، فسوف تفشل بدلاً من ذلك. |
| expireCountOffline | bool | إذا كانت المهمة تحتوي على expireSeconds وكان expireCountOffline مضبوطًا على true، فسيتم احتساب الوقت أثناء عدم وجود اللاعب فعليًا في التجربة نحو انتهاء المهمة. |
بيانات وصفية
تمتلك المهام بيانات وصفية تحدد كيف سيتم عرضها في واجهة المستخدم للمهام. يمكنك استخدام الحقول الاختيارية التالية لتخصيص بياناتها الوصفية.
| الاسم | النوع | الوصف |
|---|---|---|
| displayName | string | اسم يتم عرضه للمهمة في واجهة المستخدم بدلاً من missionId. |
| description | string | كتلة نصية أطول توفر معلومات أو سياق إضافي حول المهمة. |
| visibleAfterComplete | bool | إذا تم تعيينه على true، ستظهر المهمة في قائمة المهام حتى بعد إكمالها ولكن ستظل محددة كمكتملة. |
| visibleAfterFailed | bool | إذا تم تعيينه على true، ستظهر المهمة في قائمة المهام حتى بعد فشلها ولكن ستظل محددة كفاشلة. |
| visibleBeforeUnlocked | bool | إذا تم تعيينه على true، ستكون المهمة مرئية ولكن مقفلة في قائمة المهام قبل أن تتاح للإكمال. |
| invisibleWhileActive | bool | إذا تم تعيينه على true، ستكون المهمة غير مرئية حتى أثناء النشاط الفعلي. |
| rewards | table | قائمة من معلومات عرض المكافآت.
|
تعريف المهام
يمكن أن تحتوي كل مهمة على صفر أو أكثر من المهام. إذا كانت المهمة تحتوي على صفر من المهام، يمكن المطالبة بها على الفور بعد فتحها؛ إذا كانت المهمة تحتوي على مهمة واحدة أو أكثر، فبمجرد إكمال المهام، يمكن للاعب جمع أي مكافآت مرتبطة بالمهمة. تحتوي كل مهمة على taskId، وهو المفتاح المرتبط بالمهمة لمهمة معينة.
تأتي المهام في نوعين:
- المهام الزمنية - يسمح لك ببدء وإيقاف المهمة في نقاط زمنية مختلفة. يجب أن تمر فترة معينة من الوقت بينما يكون مؤقت المهمة قيد التشغيل، ثم تصبح المهمة مكتملة.
- المهام العديدة - يسمح لك بإضافة إلى أو تعيين تقدم المهمة. عندما يصل التقدم إلى قيمة محددة، تصبح المهمة مكتملة.
تشارك كلا النوعين من المهام الحقول التالية:
| الاسم | النوع | الوصف |
|---|---|---|
| taskType | string | يحدد ما إذا كان نوع المهمة عددي أو زمني. |
| counter | object | (اختياري) العداد الذي تتبعه هذه المهمة. تعد العدادات تخزينًا دائمًا محددًا للاعب لرقم أو مؤقت. يمكن أن تتتبع مهام متعددة عدادًا واحدًا؛ على سبيل المثال، إذا كان هناك أكثر من مهمة تتبع عدد العملات التي جمعها اللاعب، فيمكنهم جميعًا مشاركة نفس "عداد العملات". يمكن لهذه المهام تتبع العملات الجديدة المستخرجة بشكل مستقل، بدءًا من الصفر، أو الاستمرار في العد من قيمة العداد (جميع العملات التي تم جمعها بالفعل).
|
| metadata | object | (اختياري) معلومات حول كيفية عرض المهمة في واجهة المستخدم.
|
| callToAction | object | (اختياري) زر يقوم بتفعيل وظيفة رد الاتصال.
|
حقول المهام العديدة
تتطلب المهام العديدة قيمة محددة. عندما يحقق تقدم المهمة هذا المبلغ، تصبح المهمة مكتملة.
| الاسم | النوع | الوصف |
|---|---|---|
| goalCount | number | (اختياري) التقدم المطلوب لإكمال المهمة. |
حقول المهام الزمنية
تحتوي المهام الزمنية على مدة مستهدفة من الوقت المنقضي، ويتم بدءها وإيقافها. عندما يتم استيفاء المدة المستهدفة من الوقت، تصبح المهمة مكتملة.
| الاسم | النوع | الوصف |
|---|---|---|
| goalSeconds | number | عدد الثواني التي يجب أن تمر لإكمال المهمة. |
| startImmediately | bool | إذا كان يجب أن يبدأ العداد في احتساب الوقت بمجرد فتحه، بدلاً من فقط بعد أن يتم بدءه. |
| includesOfflineTime | bool | إذا كان يجب أن تتضمن المهمة الوقت المنقضي أثناء عدم وجود اللاعب بشكل نشط في التجربة. |
تكوين الفئات
لا يتعين تعريف الفئات بشكل صريح لاستخدامها، حيث تحتوي الفئة لمهمة على قيم افتراضية سيتم استخدامها. ومع ذلك، يمكنك تكوين هذه القيم ضمن ReplicatedStorage.Missions.Configs.Categories لإضافة تأثيرات إضافية على الفئة. يتم التعرف على الفئات من خلال CategoryIds الفريدة، وهي نفسها المشار إليها في تكوين المهام.
| الاسم | النوع | الوصف |
|---|---|---|
| repeatDelaySeconds | number | (اختياري) إذا تم تعيينه، يتم إعادة تعيين جميع المهام في الفئة كلما مرت المدة المحددة، ويمكن فتحها وإكمالها ومطالبة مكافآتها مرة أخرى. هذا يختلف عن المهام القابلة للتكرار، التي يمكن تكرارها ضمن تصنيف الفئات المحدد. |
دمج منطق الخادم
ألق نظرة على ReplicatedStorage.Missions.Server.Examples.MissionsExample، الذي يوضح كيف سيتفاعل خادمك مع حزمة ميزات المهام.
تحتاج عادةً إلى توصيل أربعة أشياء بمجرد سحب حزمة ميزات المهام إلى تجربتك:
تعريف المهام في تكوين المهام الخاص بك.
إضافة منطق إلى تجربتك لتحديث تقدم المهام أو العدادات المرتبط بها.
README-- يزيد التقدم في مهمة القفز مع مهمة القفزMissions.addProgressToTask(player, "Jumping", "Jumps", 1)-- يبدأ المؤقت في مهمة وقت المعركة مع مهمة الزمن في المعركةMissions.startTimedTask(player, "BattlingTime", "TimeInBattle")-- يوقف المؤقت في مهمة وقت المعركة مع مهمة الزمن في المعركةMissions.stopTimedTask(player, "BattlingTime", "TimeInBattle")-- يزيد التقدم في جميع المهام المرتبطة بعداد القفزاتCounterSystem.addCounter(player, "Jumps", 1)-- يبدأ المؤقت في جميع المهام الزمنية المرتبطة بعداد الزمن في المعركةCounterSystem.startTimer(player, "TimeInBattle")-- يوقف المؤقت في جميع المهام الزمنية المرتبطة بعداد الزمن في المعركةCounterSystem.stopTimer(player, "TimeInBattle")تعيين معالجات إكمال المهام، وأيضًا معالجات فك القفل أو الفشل إذا لزم الأمر. استخدم معالج الإكمال لمكافأة اللاعبين بمكافآت المهمة في تجربتك.
READMElocal function completeHandler(player: Player, missionId: Types.MissionId)print(`{player} اكتمل المهمة {missionId}`)-- منح اللاعب مكافآتهم.endMissions.setCompletionHandler(missionId, completeHandler)فتح المهام التي لم يتم فتحها تلقائيًا. يضمن منطق حزمة ميزات المهام تلبية جميع متطلبات المهمة قبل إكمال المهمة، ويمكن جمع مكافآتها.
READMEMissions.unlockMission(player, "Manual")
تكوين الثوابت
تعيش الثوابت لحزمة Core في موقعين:
توجد الثوابت المشتركة في ReplicatedStorage.FeaturePackagesCore.Configs.SharedConstants.
الثوابت المرتبطة بالحزمة، في هذه الحالة حزمة ميزات المهام، تعيش في ReplicatedStorage.Missions.Configs.Constants.
بالإضافة إلى ذلك، يمكنك العثور على السلاسل لترجمة تتوزع في مكان واحد: ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings.
تخصيص عناصر واجهة المستخدم
من خلال تعديل كائنات الحزمة، مثل الألوان، الخط، والشفافية، يمكنك تعديل العرض المرئي لواجهة مهامك. على سبيل المثال، في ReplicatedStorage.Missions.Configs.Constants، يمكنك تمكين SingleTaskMode لعرض شريط تقدم لمهمة مباشرة على المهمة نفسها للمهام التي تحتوي فقط على مهمة واحدة.
بالإضافة إلى ذلك، إذا كانت تجربتك تحتوي بالفعل على واجهة مستخدم قائمة ترغب في دمجها مع حزمة ميزات المهام، فإن نص ModuleScript MissionsClient يتضمن جميع الوظائف اللازمة للحصول على معلومات حول مهام اللاعب المرسلة من الخادم.