إضافة بونص جديد في ماتين2 هي أكثر تعديل يطلبه أصحاب السيرفرات: تبي أداتك تعطي «ضرر إضافي ضد الزعماء» أو «مقاومة خاصة» أو أي خاصية ما هي موجودة في اللعبة الأصلية. في هذا الدليل نشرح إضافة بونص جديد من الصفر وبكل التفاصيل: كيف يمر البونص (APPLY) من السيرفر إلى الكلاينت إلى نص التلميح، وأي رقم تختاره، وكيف تجرّبه، وكل خطأ ممكن يصادفك. فحصنا ملفات سورس حقيقية (length.h وItemData.h وuitooltip.py وlocaleinfo.py) ونقلنا منها الأرقام والأسطر كما هي، وما كان يختلف من سورس لآخر نبّهنا عليه ووضحنا لك كيف تتأكد منه بنفسك.

الخلاصة في سطر: اختر رقمًا فاضيًا (مثل 96) ثم عرّفه في السيرفر والكلاينت بنفس الرقم، واربطه بتأثير، وصدّره لبايثون، وأضفه إلى
AFFECT_DICT، واكتب نصه في ملف اللغة، واستخدمه في البروتو، وجرّب.
محتويات المقالة:
- ما المقصود بإضافة بونص جديد في ماتين2؟
- أنواع البونصات التي تستفيد من نفس النظام
- متطلبات إضافة بونص جديد قبل ما تبدأ
- خريطة الملفات اللي بتعدلها
- خطوات إضافة بونص جديد بالتفصيل
- كيف تختبر إضافة بونص جديد؟
- مثال تطبيقي كامل
- أخطاء إضافة بونص جديد وحلولها
- أمور متقدمة تحتاج انتباه
- جدول أرقام البونصات في ملفاتنا
- أسئلة شائعة عن إضافة بونص جديد
ما المقصود بإضافة بونص جديد في ماتين2؟
البونص في السورس اسمه APPLY: رقم يدل على نوع الخاصية، وبجانبه قيمة. كل أداة في ملف البروتو تحمل ثلاثة بونصات كحد أقصى، لأن الثابت ITEM_APPLY_MAX_NUM = 3 في ملف ItemData.h.
لما يلبس اللاعب الأداة، يحوّل السيرفر كل APPLY إلى خاصية في اللاعب اسمها POINT (مثل الحياة القصوى أو الضرر)، ومنها يحسب الضرر والدفاع. أما الكلاينت فما يهمه التأثير نفسه، يهمه يعرف اسم البونص ليكتب جملته في التلميح.
لهذا تمر إضافة بونص جديد على ثلاث جهات لازم تتفق على نفس الرقم:
- السيرفر: الرقم في
length.hوالتأثير الفعلي في الحسابات. - الكلاينت (C++): الرقم في
ItemData.hوتصديره لبايثون. - الكلاينت (بايثون): السطر في
AFFECT_DICTداخلuitooltip.pyونص الجملة في ملف اللغة.
أنواع البونصات التي تستفيد من نفس النظام
الميزة الحلوة: إذا أنجزت إضافة بونص جديد مرة واحدة، يشتغل في كل الأماكن التالية بدون شغل إضافي في الواجهة، لأن كلها تستدعي نفس الدالة __GetAffectString:
- بونصات الأداة الثابتة: الثلاثة المكتوبة في البروتو.
- البونصات العشوائية (الصفات الإضافية): اللي تظهر على الأداة بعد إضافة أو تبديل البونص.
- بونص الإكسسوارات بعد الصقل بالمعادن: الكلاينت يحسب الزيادة من البونص الأساسي (10% و20% و40%) ويعرضها بنفس الدالة.
- بونص الأزياء: ملفاتنا فيها
APPLY_COSTUME_ATTR_BONUSللأزياء.
متطلبات إضافة بونص جديد قبل ما تبدأ
- سورس السيرفر وأنت قادر تعدله وتعيد بناءه، راجع .
- سورس الكلاينت (UserInterface) لإعادة بناء الـ exe، راجع .
- ملفات الكلاينت (root) وكلاينتك على بايثون 2.7: ملفاتنا تستخدم
xrangeوhas_keyوصيغةraise X, "..."، فاكتب الكود بصيغة بايثون 2. - أداة لتعديل البروتو مثل .
- برنامج بحث داخل الملفات (grep أو بحث VS Code في المجلد كله).
- نسخة احتياطية كاملة وسيرفر تجريبي: تعديل الأرقام خطأ واحد فيه يخرب بونصات اللاعبين.
خريطة الملفات اللي بتعدلها
| الملف | المشروع | وش تعدل فيه |
|---|---|---|
length.h |
السيرفر | تعريف الثابت برقمه |
ملف قائمة POINT وجدول aApplyInfo |
السيرفر | ربط البونص بخاصية وتطبيق التأثير (تُعرف بالبحث) |
ItemData.h |
الكلاينت C++ | تعريف نفس الثابت بنفس الرقم |
| ملف تصدير ثوابت وحدة item | الكلاينت C++ | إضافة سطر PyModule_AddIntConstant |
uitooltip.py |
الكلاينت root | سطر في AFFECT_DICT |
locale_game.txt أو locale_game_ex.txt |
الكلاينت locale | نص التلميح |
| ملف البروتو (item_proto) | السيرفر والكلاينت | استخدام البونص في أداة |
خطوات إضافة بونص جديد بالتفصيل
الخطوة 1: اختيار رقم البونص (انتبه لهذا الفخ)
قائمة البونصات في ملفاتنا تنتهي بأرقام صريحة:
APPLY_ACCEDRAIN_RATE = 91,
APPLY_RESIST_MAGIC_REDUCTION = 92,
APPLY_RESIST_MOUNT_FALL = 93,
APPLY_MOUNT = 95,
MAX_APPLY_NUM = 127,
يعني الأرقام من 0 إلى 93 والرقم 95 مستخدمة، و94 فاضي، والأرقام من 96 إلى 126 فاضية. والفخ في إضافة بونص جديد بدون رقم صريح: الثابت بعد APPLY_ANTI_PENETRATE_PCT (رقمه 90) يأخذ تلقائيًا 91، وهذا نفس رقم APPLY_ACCEDRAIN_RATE. المترجم ما ينبّه لأن تكرار القيمة في enum مسموح، لكن البونصين يختلطان في اللعبة. لهذا أعطِ بونصك رقمًا صريحًا دائمًا، وفي مثالنا نستخدم 96.
الخطوة 2: تعريف البونص في السيرفر
في length.h قبل MAX_APPLY_NUM:
APPLY_MOUNT = 95,
APPLY_BOSS_DAMAGE_BONUS = 96,
MAX_APPLY_NUM = 127,
لا تتجاوز MAX_APPLY_NUM. ولا تغيّر أرقام البونصات الموجودة أبدًا لأن بيانات اللاعبين المخزنة تعتمد عليها.
الخطوة 3: ربط البونص بتأثير فعلي في السيرفر
تعريف الرقم لوحده ما يسوي شي. السيرفر يحوّل كل APPLY إلى POINT عبر جدول يسمى عادة aApplyInfo ودالة تطبّق البونص عند لبس الأداة. الأسماء تختلف بين السورسات، فلا تعتمد على اسم ملف، ابحث بنفسك:
grep -rn "aApplyInfo" game/
grep -rn "POINT_MAX_NUM" common/ game/
grep -rn "APPLY_ANTI_PENETRATE_PCT" .
عندك طريقتان حسب نوع البونص:
- الطريقة الأسهل: بونص يرفع خاصية موجودة أصلًا (مثل الحياة القصوى). اربط رقمك الجديد في جدول التحويل بنقطة POINT موجودة، ويشتغل فورًا لأن معادلات اللعبة تستخدم هذه النقطة.
- بونص بتأثير جديد: أضف نقطة POINT جديدة، واستخدمها في المعادلة اللي تبيها.
إذا اخترت الثانية فخذ التالي بالاعتبار: في ملفاتنا POINT_MAX_NUM = 255، يعني رقم النقطة الجديدة لازم يكون أقل من 255 وغير مستخدم، وأضفه في آخر القائمة بدون ما تحرك الأرقام الموجودة. وإذا كان جدول aApplyInfo مصفوفة مرتبة بالأرقام، تأكد أن عدد الأسطر قبل سطر بونصك يساوي 96 بالضبط، واملأ الموضع الفارغ (رقم 94) بسطر POINT_NONE. مثال توضيحي (الأسماء والصيغة تختلف حسب سورسك):
// في ملف قائمة POINT، في آخرها وبرقم غير مستخدم
POINT_BOSS_DAMAGE_BONUS,
// في جدول aApplyInfo (الموضع 96)
{ POINT_BOSS_DAMAGE_BONUS },
// في دالة حساب الضرر (ابحث عن CalcMeleeDamage)
if (pVictim->IsMonster() && pVictim->GetMobRank() >= MOB_RANK_BOSS)
iDam += iDam * GetPoint(POINT_BOSS_DAMAGE_BONUS) / 100;
البونصات تُحسب من الأدوات اللي يلبسها اللاعب، فغالبًا ما تحتاج تخزين النقطة الجديدة في قاعدة البيانات.
الخطوة 4: تعريف البونص في الكلاينت وتصديره لبايثون
في ItemData.h أضف الثابت بنفس الرقم تمامًا:
APPLY_MOUNT = 95,
APPLY_BOSS_DAMAGE_BONUS = 96,
MAX_APPLY_NUM = 127,
الأسماء قد تختلف بين الطرفين (في السيرفر APPLY_ATTBONUS_WARRIOR وفي الكلاينت APPLY_ATT_BONUS_TO_WARRIOR)، والمهم أن الرقم يتطابق.
بعدها صدّر الثابت لبايثون، لأن uitooltip.py يقرأ البونصات من وحدة item باسم مثل item.APPLY_MAX_HP. ملف التصدير هو الذي فيه أسطر PyModule_AddIntConstant، وهو ليس PythonItem.cpp (هذا خاص بالأدوات الساقطة على الأرض). للوصول إليه ابحث:
grep -rn "APPLY_ANTI_PENETRATE_PCT" UserInterface/
وأضف سطرًا مثل جيرانه (اسم المتغير poModule يتبع الملف عندك):
PyModule_AddIntConstant(poModule, "APPLY_BOSS_DAMAGE_BONUS", CItemData::APPLY_BOSS_DAMAGE_BONUS);
إذا نسيت هذه الخطوة يتعطل uitooltip.py عند فتح اللعبة بخطأ AttributeError، وتجده في ملف syserr، راجع .
الخطوة 5: إظهار البونص في التلميح (AFFECT_DICT)
دالة __GetAffectString تبحث عن نوع البونص في AFFECT_DICT وتستدعي الجملة المرتبطة به. القاموس في ملفاتنا فيه نحو 87 بونصًا. أضف سطرك في آخره:
item.APPLY_RESIST_MOUNT_FALL : localeInfo.TOOLTIP_APPLY_RESIST_MOUNT_FALL,
item.APPLY_BOSS_DAMAGE_BONUS : localeInfo.TOOLTIP_APPLY_BOSS_DAMAGE_BONUS,
}
الدالة نفسها تعطيك تشخيصًا جاهزًا: لو الرقم غير موجود في القاموس تعرض اللعبة UNKNOWN_TYPE[96] 10، ولو الجملة ما تقبل القيمة تعرض UNKNOWN_VALUE.
نصائح إضافية في هذه الخطوة:
- عرض التلميح: لون السطر يتحدد حسب القيمة، فالقيمة الموجبة تظهر بلون الزيادة (دالة
GetChangeTextLineColor). - التلميح الضيق: إذا كانت جملتك طويلة، أضف رقم البونص في قاموس
ATTRIBUTE_NEED_WIDTHبعرض أكبر، وهو يعمل مع البونصات العشوائية ذات القيمة الموجبة:ATTRIBUTE_NEED_WIDTH = { ... 96 : 240, } - إخفاء بونص تقني: دالة
__AppendAffectInformationتتجاوز بونص التقاط الأجنحةAPPLY_ACCEDRAIN_RATEوبونص المركبAPPLY_MOUNTفلا يظهران في قائمة البونصات. إذا كان بونصك تقنيًا ولا تبيه ظاهرًا، أضف له شرطcontinueمثلهما.
الخطوة 6: كتابة نص البونص في ملف اللغة
نصوص TOOLTIP_* ما هي مكتوبة في localeinfo.py. هذا الملف يقرأها وقت التشغيل من locale_game.txt عبر دالة LoadLocaleFile. كل سطر ثلاثة حقول مفصولة بمسافة Tab: الاسم، ثم النص، ثم النوع. النوع SA يمرر القيمة للنص، وSNA نص ثابت بلا قيمة. أضف (كلمة [TAB] تعني ضغطة Tab حقيقية):
TOOLTIP_APPLY_BOSS_DAMAGE_BONUS[TAB]ضرر إضافي ضد الزعماء +%d%%[TAB]SA
TOOLTIP_APPLY_EXAMPLE_FIXED[TAB]مقاومة خاصة[TAB]SNA
لاحظ %%: النوع SA يمرر النص عبر عملية % في بايثون، فلو كتبت % مفردة يحدث خطأ في بايثون. والأفضل وضع الأسطر في locale_game_ex.txt إن كان كلاينتك يفعّل app.ENABLE_LOCALE_COMMON، لأن الملف يُحمَّل إضافيًا بعد الأساسي من locale/common/ ومن مجلد لغتك، فما تلمس الملف الكبير. واحفظ الملف بنفس ترميز locale_game.txt الموجود عندك.
الخطوة 7: استخدام البونص في أداة
في البروتو اكتب نوع البونص (الاسم أو رقمه بحسب أداتك) وقيمته في أحد الأزواج الثلاثة، ثم أعد توليد ملفات البروتو للسيرفر والكلاينت. للتفاصيل راجع واستخدم . وابحث عن اسم بونص قياسي في سورس السيرفر (grep -rn "APPLY_ANTI_PENETRATE_PCT" .) لتعرف الأماكن اللي تقرأ اسم البونص من الملف النصي وتحتاج سطرًا لبونصك.
الخطوة 8 (اختيارية): إدخاله في البونصات العشوائية
التلميح يعمل للبونصات العشوائية تلقائيًا (نفس القاموس). لكن أن يخرج بونصك كاحتمال عند إضافة البونص أو تبديله، تحتاج إدخاله في جدول البونصات العشوائية في السيرفر (ملف الصفات، يسمى عادة item_attr) بنفس صيغة الأسطر المجاورة. اختر قيمًا معقولة للمستويات حتى لا يخل بتوازن سيرفرك.
كيف تختبر إضافة بونص جديد؟
- أعد بناء السيرفر والكلاينت.
- أنشئ أداة تجريبية بالبونص الجديد في البروتو وأعد توليده.
- أعطِ نفسك الأداة بأمر المشرف
/item. - مرّر الماوس عليها وتأكد من جملة التلميح ولونها.
- البسها وتحقق أن التأثير فعليًا اشتغل (مثلًا زاد الضرر ضد الزعيم).
- اخلعها وتأكد أن التأثير رجع كما كان.
- جرّب بقيمة سالبة وقيمة كبيرة ليظهر لك أي خلل مبكرًا.
- راقب ملفي syserr على السيرفر والكلاينت أثناء الاختبار.
مثال تطبيقي كامل: ضرر إضافي ضد الزعماء
| الطبقة | وش تضيف |
|---|---|
| الرقم | 96 |
| length.h (السيرفر) | APPLY_BOSS_DAMAGE_BONUS = 96, |
| ربط التأثير | سطر في aApplyInfo + نقطة POINT_BOSS_DAMAGE_BONUS + شرط الزعيم في حساب الضرر |
| ItemData.h (الكلاينت) | APPLY_BOSS_DAMAGE_BONUS = 96, |
| تصدير بايثون | سطر PyModule_AddIntConstant |
| uitooltip.py | سطر في AFFECT_DICT (+ عرض في ATTRIBUTE_NEED_WIDTH عند الحاجة) |
| ملف اللغة | TOOLTIP_APPLY_BOSS_DAMAGE_BONUS بنوع SA |
| البروتو | أداة بنوع البونص وقيمة (مثلًا 10) |
أخطاء إضافة بونص جديد وحلولها
| العَرَض | السبب | الحل |
|---|---|---|
يظهر UNKNOWN_TYPE[96] 10 في التلميح |
الرقم غير موجود في AFFECT_DICT |
أضف السطر (الخطوة 5) |
يظهر UNKNOWN_VALUE |
الجملة لم تُطبَّق على القيمة: غالبًا نسيت العمود الثالث SA أو نسيت %d |
صحّح سطر ملف اللغة (الخطوة 6) |
| خطأ بايثون يظهر في syserr عند عرض التلميح | كتبت % مفردة بدل %% |
اكتب %% |
| الكلاينت يتعطل عند الإقلاع (AttributeError) | الثابت غير مصدَّر لبايثون | أضف PyModule_AddIntConstant (الخطوة 4) |
| بونصان مختلطان | رقم مكرر في enum (الفخ في الخطوة 1) | أعطِ كل ثابت رقمًا صريحًا مختلفًا |
| تظهر جمل خاطئة على الأدوات | الرقم مختلف بين السيرفر والكلاينت | طابق الرقمين في الملفين |
| البونص يظهر لكن بلا تأثير | لم يُربط بتأثير في السيرفر | راجع الخطوة 3 (جدول التحويل والمعادلة) |
| التلميح ضيق والنص مقطوع | الجملة أطول من عرض التلميح | أضف رقمك في ATTRIBUTE_NEED_WIDTH |
| خطأ عند قراءة البروتو | أداة أو كود قراءة البروتو لا يعرف الاسم الجديد | ابحث عن اسم بونص قياسي وانسخ مواضعه |
| كود بايثون لا يشتغل | كتبته بصيغة بايثون 3 والكلاينت 2.7 | اكتبه بصيغة بايثون 2 |
لأي خطأ في الإقلاع راجع .
أمور متقدمة تحتاج انتباه
- أكثر من ثلاثة بونصات على الأداة: الحد 3 مربوط ببنية البروتو والحزم والجداول، وتغييره يحتاج تعديلات واسعة وليس للمبتدئين.
- القيم العشرية: البونص يحمل أعدادًا صحيحة، فإذا تحتاج نسبة بكسور استخدم قيمة أكبر (مثل الألف) واقسمها في المعادلة.
- القيم السالبة: تدعمها دالة اللون، لكن اختبرها في الحساب حتى لا ينقص الضرر عن الصفر.
- الحدود: نوع البونص يُخزَّن عادة في بايت واحد، فلا يزيد عن 255، والحد المعتمد عندك 127.
- التوثيق: سجّل أرقامك الخاصة في ملف (96 لهذا، 97 لذاك) حتى لا تُستخدم مرتين.
- إدارة النسخ: استخدم Git على السورس، فيسهل عليك الرجوع وقت يتعطل شي.
جدول أرقام البونصات في ملفاتنا
هذه القائمة الكاملة كما خرجت من ملف length.h الذي فحصناه (الرقم 94 غير مستخدم):
| الرقم | البونص | الرقم | البونص | الرقم | البونص |
|---|---|---|---|---|---|
| 0 | APPLY_NONE | 1 | APPLY_MAX_HP | 2 | APPLY_MAX_SP |
| 3 | APPLY_CON | 4 | APPLY_INT | 5 | APPLY_STR |
| 6 | APPLY_DEX | 7 | APPLY_ATT_SPEED | 8 | APPLY_MOV_SPEED |
| 9 | APPLY_CAST_SPEED | 10 | APPLY_HP_REGEN | 11 | APPLY_SP_REGEN |
| 12 | APPLY_POISON_PCT | 13 | APPLY_STUN_PCT | 14 | APPLY_SLOW_PCT |
| 15 | APPLY_CRITICAL_PCT | 16 | APPLY_PENETRATE_PCT | 17 | APPLY_ATTBONUS_HUMAN |
| 18 | APPLY_ATTBONUS_ANIMAL | 19 | APPLY_ATTBONUS_ORC | 20 | APPLY_ATTBONUS_MILGYO |
| 21 | APPLY_ATTBONUS_UNDEAD | 22 | APPLY_ATTBONUS_DEVIL | 23 | APPLY_STEAL_HP |
| 24 | APPLY_STEAL_SP | 25 | APPLY_MANA_BURN_PCT | 26 | APPLY_DAMAGE_SP_RECOVER |
| 27 | APPLY_BLOCK | 28 | APPLY_DODGE | 29 | APPLY_RESIST_SWORD |
| 30 | APPLY_RESIST_TWOHAND | 31 | APPLY_RESIST_DAGGER | 32 | APPLY_RESIST_BELL |
| 33 | APPLY_RESIST_FAN | 34 | APPLY_RESIST_BOW | 35 | APPLY_RESIST_FIRE |
| 36 | APPLY_RESIST_ELEC | 37 | APPLY_RESIST_MAGIC | 38 | APPLY_RESIST_WIND |
| 39 | APPLY_REFLECT_MELEE | 40 | APPLY_REFLECT_CURSE | 41 | APPLY_POISON_REDUCE |
| 42 | APPLY_KILL_SP_RECOVER | 43 | APPLY_EXP_DOUBLE_BONUS | 44 | APPLY_GOLD_DOUBLE_BONUS |
| 45 | APPLY_ITEM_DROP_BONUS | 46 | APPLY_POTION_BONUS | 47 | APPLY_KILL_HP_RECOVER |
| 48 | APPLY_IMMUNE_STUN | 49 | APPLY_IMMUNE_SLOW | 50 | APPLY_IMMUNE_FALL |
| 51 | APPLY_SKILL | 52 | APPLY_BOW_DISTANCE | 53 | APPLY_ATT_GRADE_BONUS |
| 54 | APPLY_DEF_GRADE_BONUS | 55 | APPLY_MAGIC_ATT_GRADE | 56 | APPLY_MAGIC_DEF_GRADE |
| 57 | APPLY_CURSE_PCT | 58 | APPLY_MAX_STAMINA | 59 | APPLY_ATTBONUS_WARRIOR |
| 60 | APPLY_ATTBONUS_ASSASSIN | 61 | APPLY_ATTBONUS_SURA | 62 | APPLY_ATTBONUS_SHAMAN |
| 63 | APPLY_ATTBONUS_MONSTER | 64 | APPLY_MALL_ATTBONUS | 65 | APPLY_MALL_DEFBONUS |
| 66 | APPLY_MALL_EXPBONUS | 67 | APPLY_MALL_ITEMBONUS | 68 | APPLY_MALL_GOLDBONUS |
| 69 | APPLY_MAX_HP_PCT | 70 | APPLY_MAX_SP_PCT | 71 | APPLY_SKILL_DAMAGE_BONUS |
| 72 | APPLY_NORMAL_HIT_DAMAGE_BONUS | 73 | APPLY_SKILL_DEFEND_BONUS | 74 | APPLY_NORMAL_HIT_DEFEND_BONUS |
| 75 | APPLY_PC_BANG_EXP_BONUS | 76 | APPLY_PC_BANG_DROP_BONUS | 77 | APPLY_EXTRACT_HP_PCT |
| 78 | APPLY_RESIST_WARRIOR | 79 | APPLY_RESIST_ASSASSIN | 80 | APPLY_RESIST_SURA |
| 81 | APPLY_RESIST_SHAMAN | 82 | APPLY_DEF_GRADE | 83 | APPLY_COSTUME_ATTR_BONUS |
| 84 | APPLY_MAGIC_ATTBONUS_PER | 85 | APPLY_MELEE_MAGIC_ATTBONUS_PER | 86 | APPLY_RESIST_ICE |
| 87 | APPLY_RESIST_EARTH | 88 | APPLY_RESIST_DARK | 89 | APPLY_ANTI_CRITICAL_PCT |
| 90 | APPLY_ANTI_PENETRATE_PCT | 91 | APPLY_ACCEDRAIN_RATE | 92 | APPLY_RESIST_MAGIC_REDUCTION |
| 93 | APPLY_RESIST_MOUNT_FALL | 95 | APPLY_MOUNT |
أسئلة شائعة عن إضافة بونص جديد
كم بونص جديد أقدر أضيف؟
في ملفاتنا الأرقام الفاضية 94 و96 إلى 126، يعني 32 رقمًا قبل MAX_APPLY_NUM. تأكد بالبحث أن إضافاتك الأخرى ما تستخدمها.
هل إضافة بونص جديد تحتاج تعديل قاعدة البيانات؟
عادةً لا، لأن البونص يُخزَّن نوعًا وقيمة داخل بيانات الأداة. لكن تأكد من سورسك.
هل يعمل على بايثون 3؟
الملفات التي فحصناها بايثون 2.7. وإذا كان كلاينتك بايثون 3 فخطواته نفسها مع اختلاف في صياغة الكود.
هل يظهر البونص في الصفات العشوائية للأداة؟
التلميح نعم، لأن القاموس نفسه يخدم النوعين. وأن يخرج كاحتمال عشوائي يحتاج إدخاله في جدول البونصات العشوائية بالسيرفر (الخطوة 8).
كيف أخفي بونصًا تقنيًا من التلميح؟
أضف شرط continue له في __AppendAffectInformation مثل ما يحصل مع APPLY_ACCEDRAIN_RATE وAPPLY_MOUNT.
كيف أضمن أن الرقم نفسه في السيرفر والكلاينت؟
قارن القائمتين بأداة مقارنة ملفات (diff) أو استعمل الجدول أعلاه كمرجع، وراجع كل مرة تضيف فيها بونصًا.
أحتاج مساعدة في تطبيق بونص مخصص على سيرفري؟
اسأل فريق AZO ONE عبر ونساعدك.
الخلاصة
إضافة بونص جديد في ماتين2 ليست صعبة إذا فهمت ثلاثة أشياء: الرقم الصريح، والتصدير لبايثون، وربط التأثير في السيرفر. اتبع الخطوات الثمان بالترتيب، واختبر على سيرفر تجريبي، وستحصل على بونصات تميّز سيرفرك.
مواضيع تهمك
تبي أحد يضيف لك بونصات مخصصة على سيرفرك بتأثيراتها كاملة؟ فريق AZO ONE يسوي لك ذلك ضمن على ديسكورد.