القلب (Core)

إعدادات عامة تضبط طريقة المحاكاة والمستوى وتوزيع النقاط.

المفتاحالقيمةالوحدةالشرح
combat_modesimultaneousتعدادأسلوب محاكاة القتال (مثال: متزامن/دُفعات).
hp_modebase_plus_formulaتعدادطريقة اشتقاق نقاط الصحة الأساسية قبل الإضافات.
level1رقم ثابتالمستوى الحالي للمقاتل/اللاعب.
unassigned_points0رقم ثابتنقاط لم تُوزّع بعد على الصفات الأساسية.

الصفات الأساسية (Attributes)

الصفات الأساسية؛ تبنى عليها الإحصاءات المشتقة.

المفتاحالقيمةالوحدةالشرح
agility5رقم ثابتالرشاقة: ترفع الدقة والتفادي وسرعة الهجوم عادةً.
intelligence5رقم ثابتالذكاء: يُستعمل عادةً لمهارات/سحر (قد يؤثّر لاحقًا).
luck5رقم ثابتالحظ: يؤثّر على الأحداث العشوائية (نِسَب حرج/إسقاطات).
strength5رقم ثابتالقوة: تزيد الهجوم ونقاط الصحة المشتقة.
vitality5رقم ثابتالحيوية: تزيد الدفاع ونقاط الصحة المشتقة.

القيم الابتدائية (Base Stats)

قيم ابتدائية تُستخدم كنقطة انطلاق لكل الحسابات.

المفتاحالقيمةالوحدةالشرح
attack20رقم ثابتالهجوم الابتدائي قبل المعاملات/الزيادات.
defense10رقم ثابتالدفاع الابتدائي قبل نموذج التحويل.
hp900رقم ثابتالصحة الأساسية قبل المعادلات الإضافية.
accuracy0.6نسبةالدقة الابتدائية (احتمال إصابة الهدف).
evasion0.2نسبةالتفادي الابتدائي (احتمال تفادي الضربات).
attack_speed0.25هجمة/ثسرعة الهجوم (عدد الهجمات/ث).

الحدود القصوى (Caps)

سقوف لحماية التوازن ومنع تجاوزات القيم.

المفتاحالقيمةالوحدةالشرح
accuracy_max0.95نسبةسقف الدقة حتى لا تتجاوز حدًا منطقيًا.
attack_speed_max2.5هجمة/ثسقف سرعة الهجوم (هجمة/ث).
evasion_max0.6نسبةسقف التفادي.
level_max140رقم ثابتأقصى مستوى مسموح.

المعاملات (Coefficients)

ثوابت تحويل تربط الصفات بالمخرجات النهائية.

المفتاحالقيمةالوحدةالشرح
accuracy_per_agility0.003نسبة لكل نقطةزيادة الدقة لكل نقطة رشاقة.
attack_per_strength4ثابت لكل نقطةزيادة الهجوم لكل نقطة قوة.
attack_speed_per_agility0.006هجمة/ث لكل نقطةزيادة سرعة الهجوم لكل نقطة رشاقة.
defense_per_vitality2ثابت لكل نقطةزيادة الدفاع لكل نقطة حيوية.
evasion_per_agility0.002نسبة لكل نقطةزيادة التفادي لكل نقطة رشاقة.

نموذج الدفاع (Defense Model)

تحويل DEF الخام إلى فاعلية دفاعية مع تناقص العائد. الصيغة الموصى بها لوغاريتمية. كل زيادة في DEF تُفيد لكن بشكل أبطأ كلما ارتفعت القيمة.

المفتاحالقيمةالوحدةالشرح
typelogتعدادنوع تحويل الدفاع (لوغاريتمي لتناقص العائد).
K200.0رقم ثابتثابت يضبط انحناء التحويل لضبط الإحساس بالصلابة.
formulaDEF_eff = K * ln(1 + defense / K)نصالصيغة: DEF_eff = K · ln(1 + DEF / K).

معادلة نقاط الصحة (HP Formula)

اشتقاق الصحة النهائية من HP الأساسي + زيادات ثابتة/نسبية + مساهمة STR وVIT.

المفتاحالقيمةالوحدةالشرح
hp_flat_bonus0رقم ثابتزيادة ثابتة تضاف مباشرة للصحة.
hp_bonus0نسبةزيادة نسبية تُضرب في الصحة الأساسية.
hp_per_strength10ثابت لكل نقطةمقدار ما تضيفه كل نقطة قوة للصحة.
hp_per_vitality75ثابت لكل نقطةمقدار ما تضيفه كل نقطة حيوية للصحة.
formulaHP_total = bases.hp * (1 + hp_bonus) + hp_flat_bonus + strength*hp_per_strength + vitality*hp_per_vitalityنصالصيغة: HP_total = (HP_base · (1 + hp_bonus)) + hp_flat + STR·hp/STR + VIT·hp/VIT.

الرتب (Ranks)

تقسيم المستويات إلى فئات واضحة لتأثير الضبط والتوازن.

المفتاحالقيمةالوحدةالشرح
Eمن 1 إلى 5رقم ثابت – رقم ثابتفئة للمستويات المبتدئة.
Dمن 6 إلى 15رقم ثابت – رقم ثابتفئة أعلى قليلًا من E.
Cمن 16 إلى 30رقم ثابت – رقم ثابتفئة متوسطة أدنى.
Bمن 31 إلى 50رقم ثابت – رقم ثابتفئة متوسطة.
Aمن 51 إلى 75رقم ثابت – رقم ثابتفئة متقدمة.
Sمن 76 إلى 105رقم ثابت – رقم ثابتفئة خبيرة.
SSمن 106 إلى 140رقم ثابت – رقم ثابتفئة نخبة.

التقدّم (Progression)

قِيَم زيادة المستوى: نقاط تلقائية/حرّة ومكافآت موارد لكل مستوى.

المفتاحالقيمةالوحدةالشرح
auto_points_each_attr_per_level1ثابت لكل مستوىنقاط تلقائية تُضاف لكل صفة عند كل مستوى (بدون تدخل اللاعب).
free_points_per_level3ثابت لكل مستوىنقاط حرّة يمنحها كل مستوى ليقوم اللاعب بتوزيعها كما يشاء.
gold1000رقم ثابتذهب يُكتسب ضمن مسار التقدّم لكل مستوى (إن كان مفعّلًا).
mana_stone100رقم ثابتأحجار مانا تُمنح ضمن مسار التقدّم.
jewels20رقم ثابتجواهر تُمنح ضمن مسار التقدّم.
keys1رقم ثابتمفاتيح تُمنح ضمن مسار التقدّم.

الموارد الابتدائية (Starting Resources)

ما يبدأ به اللاعب من عملات/موارد عند إنشاء الشخصية/الموسم.

المفتاحالقيمةالوحدةالشرح
gold2500رقم ثابتالذهب الابتدائي عند بدء اللعبة/الموسم.
mana_stone500رقم ثابتأحجار المانا الابتدائية.
keys10رقم ثابتعدد المفاتيح الابتدائي.
jewels100رقم ثابتالجواهر الابتدائية.

الأسماء المختصرة (Aliases)

تطبيع الأسماء: اختصار ↔ الاسم الكامل.

المفتاحالاسم الكاملالوحدةالشرح
ATKattackاختصار الهجوم (attack).
DEFdefenseاختصار الدفاع (defense).
HPhpاختصار نقاط الصحة (hp).
ACCaccuracyاختصار الدقة (accuracy).
EVAevasionاختصار التفادي (evasion).
ASattack_speedاختصار سرعة الهجوم (attack_speed).
STRstrengthالقوة.
VITvitalityالحيوية.
AGIagilityالرشاقة.
INTintelligenceالذكاء.
LCKluckالحظ.

المرحلة 1 — نموذج البيانات وهيكلة التخزين

1) نموذج البيانات (Schematics)

أ. BattleConfig (إعدادات المعركة العامة)

مبدأ رياضي مرجعي داخل BattleConfig:

ب. Entity (النموذج الموحّد للكيان Hunter/Monster)

ملاحظات محاكاة يجب أن تنعكس في صحة البيانات:

ج. Swarm (ضمن الكيان أو السيناريو)

2) قواعد تحقق (Validation Rules)

3) قرارات التخزين (WordPress)

لا يوجد خيار أ – تم رفضه

الخيار (ب): جداول مخصصة للأداء الكبير

توصيتي للانطلاق: نبدأ بـ الخيار (أ) (CPT + Options). عند ثبات النموذج وظهور حاجة لأداء أعلى، نوفّر مسار ترقية إلى الخيار (ب) دون تغيير تنسيق JSON (Backward-compatible).

4) الاستيراد/التصدير والإصدارات

5) مخرجات هذه المرحلة (جاهزة لاعتمادك)

  1. وثيقة نهائية لمخطط JSON (BattleConfig + Entity + Swarm) مع أمثلة قياسية من المرجع.
  2. مصفوفة قواعد تحقق (i18n، عدم تكرار K، صحة نوافذ التأثيرات…).
  3. قرار تخزين مفصل (CPT + Options) مع خطة ترقية لاحقة للجداول المخصصة.

6) معايير القبول (Acceptance)

المرحلة 3: واجهة الإدارة ثنائية اللغة

الهدف هنا وضع مواصفة UX/UI كاملة لشاشات لوحة التحكم، التدفّقات، الرسائل، والتحقق—لتصبح مرجع التنفيذ لاحقًا.

1) الهيكلة العامة (Information Architecture)

2) شاشات Battle Configs

2.1 قائمة Battle Configs

2.2 نموذج إنشاء/تحرير Battle Config

تبويبات:

  1. Basics
    • Title (ar)، Title (en)
    • Objective (قائمة منسدلة: kill_boss / survive_T / clear_all / …)
    • Time origin (t=0) (رقمي اختياري، الافتراضي 0)
  2. Balance
    • K (decimal) مع وصف مختصر لصيغة تحويل DEF→DEF_eff كمرجع للمدير.
    • تنبيه: «ممنوع تكرار K في الكيانات.»
  3. Environment (اختياري)
    • محرر JSON مبسّط (قواعد ضرر بيئي/مفاتيح زمنية)، مع زر تحقق.
  4. Win Condition
    • خيارات جاهزة (إيقاف فوري عند HP=0 لأي طرف، حدود زمن…)، أو JSON مبسّط.

التحقق ورسائل الأخطاء:

نجاح الحفظ (توسّط):

3) شاشات Entities

3.1 قائمة Entities

3.2 نموذج إنشاء/تحرير Entity

تبويبات منظمة:

A) Basics

B) Stats

C) Behavior

D) Abilities

D-1) محرر Effects (نافذة منبثقة)

E) Swarm (اختياري)

F) i18n

G) Meta

رسائل التحقق الشائعة (نماذج)

نجاح الحفظ

4) Test Runs (تشغيل تجريبي)

4.1 إعداد التشغيل

تحقق قبل التشغيل

4.2 عرض النتائج

A) الملخّص (Result)

B) نوافذ الأحداث (Windows)

C) سجل المعركة (Log)

رسائل

5) Import / Export

6) Settings (واجهة عامة فقط)

7) الأذونات والأدوار (WP Capabilities)

8) حالات الحافة (Edge Cases) ومعالجات UX

9) نصوص جاهزة للرسائل (عينات مختصرة)

10) معايير القبول لهذه المرحلة

المرحلة 4: محرّر Battle Config

الغاية: توثيق شاشة إدخال/تحرير الإعدادات العامة للمعركة بطريقة دقيقة، قابلة للتنفيذ لاحقًا كما هي.

1) بنية الشاشة (UX)

تبويبات الصفحة

  1. Basics
  2. Balance
  3. Objective & Win Condition
  4. Environment
  5. Validation & Preview (معاينة سريعة)
  6. Meta

2) الحقول والتفاصيل

(A) Basics

تحقق Basics

(B) Balance

تحقق Balance

(C) Objective & Win Condition

تحقق Objective & Win

(D) Environment

{
  "global_dot": { "type": "flat", "dps": 5.0, "start_s": 0, "duration_s": 9999 },
  "time_gates": [
    { "t": 30.0, "apply": [{ "target": "all_enemies", "affects": "stats.def", "op": "mul", "value": 0.9 }] }
  ],
  "zone": {
    "radius_m": 6.0,
    "penalty": { "target": "player", "affects": "stats.atk", "op": "mul", "value": 0.8 }
  }
}

تحقق Environment

(E) Validation & Preview

ملاحظة: Preview Cards لا تشغّل محاكاة ولا تعتمد أي كيان — هي توضيحية فقط لمعادلات الـConfig.

(F) Meta


3) التفاعلات والتدفّقات

إنشاء جديد

  1. يدخل المستخدم Basics ثم Balance (K).
  2. يختار Objective & Win Condition.
  3. يملأ Environment (اختياري) ويضغط تحقّق.
  4. ينتقل إلى Validation & Preview ويضغط Run All Checks.
  5. حفظ: إذا نجح الفحص، تُحفظ الإعدادات.

تحرير موجود

الاستيراد/التصدير


4) رسائل التحقق والأخطاء (عربية/إنجليزية)

نجاح

أخطاء إلزامية

أخطاء JSON

تحذيرات


5) قيود وقواعد مخفية (Business Rules)


6) الربط مع قاعدة البيانات (من دون كود)


7) حالات الحافة (Edge Cases)


8) أمثلة إدخالات جاهزة (Templates)

Template: Boss Kill

Template: Survival 60s + Zone Penalty

{
  "zone": {
    "radius_m": 5.0,
    "penalty": { "target": "player", "affects": "stats.atk", "op": "mul", "value": 0.85 }
  }
}

9) معايير القبول (Acceptance)

المرحلة 5: محرّر الكيانات (Entity Editor)

1) هدف الشاشة

تمكين المصمّم من إنشاء/تحرير بطاقة كيان موحّدة (Hunter/Monster) وفق المرجع: المفاتيح برمجيًا بالإنجليزية، وكل نص واجهاتي ثنائي اللغة، ولا ثوابت توازن داخل البطاقة.

2) تبويبات الشاشة

  1. Basics — النوع، الأسلوب، الدور، الرتبة، الوسوم. (تظهر الحقول كما في نموذج المسرد)
  2. Stats — الحقول العددية القياسية (hp_max, atk, def, rate, range_m, projectile_speed, eva, aim, resist{…}, mitigation_passive, regen_hps, HPS, mana{mc,mr}).
  3. Behavior — قاعدة الاستهداف + قواعد الطوارئ.
  4. Abilities — القدرات + محرّر التأثيرات Effects (target/affects/op/value/window/taunt/notes).
  5. Swarm (اختياري) — enabled, N0, λ، M وحد الاشتباك.
  6. i18n — كل النصوص الظاهرة للاعب (ar/en) إلزاميّة.
  7. Meta — version, author… (معلومة داخلية).

مذكّر أعلى الشاشة: «ثابت K مركزي في Battle Config فقط — يُحظر وضعه هنا.»


3) تفاصيل كل تبويب + التحقق

A) Basics

B) Stats

C) Behavior

D) Abilities

E) Swarm (اختياري)

F) i18n

G) Meta


4) مساعدات واجهة أساسية


5) عرض معاينات صغيرة (Preview Cards — للكيان فقط)

هذه المعاينات تعليمية، لا تُشغّل محاكاة ولا تُثبَّت في النتائج.


6) رسائل التحقق (نماذج)


7) حالات الحافة (Edge Cases)


8) ربط قاعدة البيانات (بدون كود)


9) معايير القبول (Acceptance)

المرحلة 6: نواة المحاكاة (الرياضيات الأساسية)

1) مبادئ رياضية ملزِمة

2) نموذج «نوافذ الأحداث» (Event Windows)

3) خوارزمية التشغيل (Pseudo-steps)

المدخلات: BattleConfig (يحتوي KKK, objective, environment)، مجموعتا كيانات (Player/Enemy) مع لقطات ثابتة، زمن البدء t0t_0t0​.

  1. تجهيز الخط الزمني للأحداث
    • اجمع كل نقاط البدء/الانتهاء من تأثيرات القدرات، نقاط وصول المقذوفات، تغيّرات السرب، وبوابات البيئة؛ فرُزها تصاعديًا لتوليد مقاطع [ti,ti+1)[t_i, t_{i+1})[ti​,ti+1​).
  2. لكل نافذة [ti,ti+1)[t_i,t_{i+1})[ti​,ti+1​):
    a) احسب DEFeffDEF_{eff}DEFeff​ لكل هدف، طبق penetrate_def (إن وُجد)، ثم mmm.
    b) طبّق تأثيرات نفس المقياس بترتيب set→add→mul.
    c) احسب FhitF_{hit}Fhit​ الحتمي ثم DPSrawDPS_{raw}DPSraw​. طبّق Resist/Mitigations ضربيًا لإخراج DPS_finalDPS\_{final}DPS_final.
    d) سرب/AoE: قسّم ناتج AoE على min⁡(N(ti),M)\min(N(t_i),M)min(N(ti​),M)، والضربة المفردة تتبع قاعدة الاستهداف.
    e) تكامل صحي: ΔHP=−DPS_final⋅Δt+HPS⋅ΔtΔHP = -DPS\_{final}\cdotΔt + HPS\cdotΔtΔHP=−DPS_final⋅Δt+HPS⋅Δt لكل كيان ضمن النافذة (مع تسجيل القيم المحسوبة في سجل النافذة).
    f) تحقق شرط النهاية لحظيًا: إذا HP≤0HP\le 0HP≤0 لأي طرف ⇒ نهاية فورية (تُسجَّل حالة فوز/تعادل حسب القاعدة العالمية).
  3. تحديث الاستهداف بنهاية النافذة (A3)، وكسر التعادل: الأقرب، ثم الأقل HP، ثم ID أصغر.
  4. الموارد والتبريد: خصم الكلفة لحظة التفعيل، يبدأ التبريد فورًا، ولا تفعيل دون موارد، والتأثير لا يعمل إلا داخل نافذته.
  5. إخراج النتائج: نتيجة موحّدة (حالة، زمن الحسم، HP/MC نهائية)، جدول النوافذ مع السبب، وسجلّ أحداث مختصر (hits/heals/apply/expire/death/objective).

ملحوظة: المنهج حتمي بالكامل—لا توليد عشوائي—ومتسق مع أمثلة الفصل 9 التي سنستخدمها كاختبارات قبول عددي.

4) تفاصيل حسابية دقيقة

5) الاستهداف والسلوك (ملخص تنفيذي)

6) بنية النتائج (Output Contract)

7) الاستقرار العددي وحالات الحافة

8) اختبارات مرجعية (Acceptance Tests)

نعتمد أمثلة الفصل 9 حرفيًا ونقارن بقيمهم:

9) معايير القبول لهذه المرحلة

  1. تطابق الخوارزمية مع A1/A2/A3/A4 (الترتيب، النوافذ، الاستهداف، الموارد) دون أي انحراف.
  2. احترام القاعدة العالمية للنهاية وهدف واحد للمعركة.
  3. دعم السرب وAoE وفق N(t)N(t)N(t) وMMM والتوزيع على min⁡(N,M)\min(N,M)min(N,M).
  4. إعادة إنتاج الأمثلة العددية لقسم 9 ضمن هامش خطأ عددي صغير جدًا (≤1e−3 للقيم المستقرة).

المرحلة 7: المقذوفات ونوافذ الأحداث

ما الذي نبنيه هنا؟

مولِّد «الخطّ الزمني» الذي يقسم المعركة إلى نوافذ أحداث ثابتة القيم ويأخذ بالاعتبار:


1) تعريف «نافذة الحدث»

نافذة [ti,ti+1)[t_i, t_{i+1})[ti​,ti+1​) هي فترة تكون خلالها قيم الحساب (مثل ATK، DEFeffDEF_{eff}DEFeff​، mmm، التفعيلات الجارية) ثابتة؛ نُجري التكامل الصحي داخلها ونوقف فور تحقّق الهدف أو شرط النهاية.

أسباب إنشاء/إنهاء نافذة:

  1. بداية/نهاية تأثير قدرة وفق نافذتها.
  2. لحظة وصول مقذوف (إن كان tarr>0t_{arr}>0tarr​>0).
  3. تغيّر حالة السرب (زيادة N(t)N(t)N(t) بوصول فرد جديد أو خروجه) أو تجاوز حدّ الاشتباك MMM.
  4. تبدّل الهدف (بفعل طارئ/قدرة مثل Taunt أو قواعد الهرمية).

2) جدول ترتيب الأحداث المتزامنة (Tie-breaking @ نفس الطابع الزمني)

عند تساوي الطابع الزمني لعدّة أحداث، يُطبّق هذا الترتيب داخل الطابع نفسه:

  1. انتهاء نوافذ التأثيرات القائمة.
  2. وصول المقذوفات المؤجلة (يصبح الضرر/الأثر قابلًا للتطبيق).
  3. بدء نوافذ التأثيرات الجديدة.
  4. تحديث السرب (تغيير NNN وفق λ\lambdaλ) وتثبيت min⁡(N,M)\min(N,M)min(N,M) لأغراض توزيع الـAoE.
  5. Resolve الاستهداف حسب الهرمية (قدرات نشطة > طوارئ > استراتيجية مسبقة > افتراضي)، وكسر التعادل: الأقرب ثم الأقل HP ثم ID أصغر.
  6. فحص شرط النهاية العالمي (إن هبطت HP لأي طرف إلى 0 ⇒ إيقاف فوري).

النتيجة: لا يحدث خلط حسابي؛ كل شيء يُرسَى قبل التكامل داخل النافذة التالية. والنهج كله «زمن مستمر بفترات ثابتة البارامترات».


3) خوارزمية توليد الخطّ الزمني (وصف تنفيذي)

المدخلات:

الخطوات:

  1. جمع نقاط المرشّحات الزمنية:
    • لكل Effect: أضف tstartt_{start}tstart​ وtend=tstart+durationt_{end}=t_{start}+durationtend​=tstart​+duration.
    • لكل قذيفة: احسب tarr=rangem/projectile_speedt_{arr}=range_m/projectile\_speedtarr​=rangem​/projectile_speed إن كانت السرعة > 0.
    • للسرب: أضف لحظات وصول/خروج الأفراد وفق λ\lambdaλ (أو تغيّرها إن كانت قطعة-قطعة) وحدّ MMM.
    • للبيئة: time_gates أو zone triggers (إن وُجدت ضمن الـEnvironment).
  2. فرز النقاط تصاعديًا، ودمج المتطابقة (مع حفظ «أنواع» الأحداث لكل طابع).
  3. توليد النوافذ كسلسلة فترات [ti,ti+1)[t_i, t_{i+1})[ti​,ti+1​). لكل نافذة:
    • طبّق حالة التأثيرات الجارية (داخل نوافذها)، واعتبر المقذوفات الواصلة فقط، وقِس min⁡(N,M)\min(N,M)min(N,M) للأذى المساحي.
    • ثبّت الهدف الحالي بعد حلّ الهرمية/الطوارئ.
    • احسب ثوابت النافذة (ATK, DEFeffDEF_{eff}DEFeff​, mmm, F_hit …) وسجّل لقطة constants_snapshot.
    • نفّذ التكامل الصحي: ΔHP=(−DPS+HPS)⋅ΔtΔHP = (-DPS + HPS)\cdot ΔtΔHP=(−DPS+HPS)⋅Δt لكل كيان.
    • فحص النهاية: إذا تحقّق شرط الهدف/النهاية ⇒ سجّل result وأوقف.
  4. الإخراج:
    • windows[] بعلّة كل نافذة (ability_window / projectile_arrival / swarm_change / target_switch / objective_hit / death).
    • log[] مختصر للأحداث داخل النوافذ (hits/heals/apply/expire/death/objective) مع الأرقام الفعلية بعد التخفيفات.

4) قواعد المقذوفات (Projectiles)


5) قواعد السرب وAoE


6) الارتباط بترتيب العمليات

داخل كل نافذة، تطبيق الترتيب الملزِم:
حساب DEFeffDEF_{eff}DEFeff​ → اختراق الدفاع (إن وُجد) → mmm → F_hit (حتمي) → DPSrawDPS_{raw}DPSraw​ → مقاومات/تخفيفات (ضربيًا) → توزيع AoE (إن وجد).


7) تسجيل النتيجة والسجلّ (Output Contract)


8) حالات حافة مهمّة


9) معايير القبول لهذه المرحلة

  1. توليد نوافذ يغطي كل الأسباب المذكورة (قدرات/مقذوف/سرب/استهداف/بيئة) ويوقف فور تحقق الهدف/النهاية.
  2. احترام ترتيب أحداث الطابع الزمني الواحد كما فُصِّل أعلاه.
  3. تطبيق توزيع AoE على min⁡(N,M)\min(N,M)min(N,M) داخل النافذة، والضربة المفردة وفق target_rule.
  4. توثيق constants_snapshot في كل نافذة (ATK/DEF_eff/m/F_hit/… ثابتة).

المرحلة 8: ترتيب الضربات والتطبيق الحتمي (Deterministic Hit)

1) جوهر «الضربة الحتمية»

تتقيد هذه الخطوات بقاعدة «النوافذ الزمنية الثابتة» وتُستخدم داخل كل نافذة [ti,ti+1)[t_i,t_{i+1})[ti​,ti+1​).

2) تعريف كل عملية (op) وكيف تُطبَّق

جميع الـops تُقاس على «مسارات» affects معروفة (مثال: attack.atk, stats.eva, resist.magic)، ضمن نافذة {start_s, duration_s} فقط.

  1. set
    يثبت قيمة الحقل مباشرة داخل النافذة قبل أي add/mul على نفس الحقل. مثال: stats.eva set 0.12 ثم إضافات/مضاعفات لاحقة.
  2. add
    جمع جبري فوق نتيجة set (إن وُجد)، مع السماح بالقيم السالبة لبعض الحقول (مثل تقليل EVA). مثال موثق: stats.eva add -0.06 ضمن نافذة قدرة.
  3. mul
    مضاعف نسبي يُطبق آخرًا على نفس الحقل. مثال موثق: تعزيز attack.atk mul 1.20 أو 1.25 ضمن نافذة قصيرة.
  4. penetrate_def
    يطبَّق قبل حساب mmm: يؤثر على الدفاع المُستخدم لاشتقاق DEFeffDEF_{eff}DEFeff​ ثم mmm. (المواصفة تنص أن اختراق الدفاع يسبق حساب معامل التخفيف).
  5. mitigate
    طبقة «بعد الضربة» تُطبَّق ضربيًا مع resist ثم mitigation_passive (بهذا الترتيب)، لتنتج DPSfinalDPS_{final}DPSfinal​.

3) كيفية دمج الطبقات (قبل/بعد الضربة)

4) مقذوفات ووقت الوصول

5) AoE مع السرب

6) أمثلة رقمية مصغّرة (داخل نافذة واحدة)

الهدف من الأمثلة: توحيد التفسير في الاختبارات، الأرقام مأخوذة من قواعد الوثيقة والأمثلة التوضيحية.

مثال A — تعزيز هجوم + خفض تفادي (Ground Shatter)

مثال B — اندفاعة سحرية قصيرة (Arc Bolt)

مثال C — طبقات ما بعد الضربة

7) قواعد التحقق الخاصة بالضربة الحتمية

8) مخرجات مُوحَّدة للتتبّع (داخل الـLog/Windows)

9) معايير القبول لهذه المرحلة

  1. التطبيق يطابق A1 حرفيًا (التسلسل، مواقع الاختراق، طبقات ما بعد الضربة، المقذوف، AoE).
  2. جميع الـops تعمل فقط داخل نوافذها الزمنية وبالمسارات المسموحة.
  3. F_hit حتمي ويُستخدم كما هو دون عشوائية.
  4. تسجيل لقطات ثابتة لكل نافذة مع أرقام واضحة لـ ATK,DEFeff,m,FhitATK, DEF_{eff}, m, F_{hit}ATK,DEFeff​,m,Fhit​.

المرحلة 9: محاكاة الأسراب وضرر المناطق (Swarm & AoE)

1) الهدف

تعريف سلوك «السرب» رياضيًا وبنيويًا ليعمل بانسجام مع نموذج «نوافذ الأحداث» وترتيب الضربة الحتمي، مع قواعد توزيع ضرر المناطق (AoE) وحدّ الاشتباك M، ودمج ذلك في النتائج (windows/log/result).


2) نموذج السرب (Mathematical Model)

أي تغيّر في NNN أو MMM أو min⁡(N,M)\min(N,M)min(N,M) يُنشئ نقطة قطع في الخط الزمني (Window Boundary).


3) قواعد الاشتباك والتوزيع

3.1 الضربات المفردة (Single-target)

3.2 ضرر المناطق (AoE)

3.3 تداخل AoE متعدد


4) إنشاء نقاط الزمن (Windows) الخاصة بالسرب

تُضاف إلى «قائمة المرشّحات الزمنية»:

  1. وصول أفراد جدد حسب تكامل λ\lambdaλ (أو جدول أزمنة محدد).
  2. انتهاء أفراد (عند موتهم داخل النافذة؛ ينعكس في نهاية النافذة التالية كنقطة قطع إن بدّل min⁡(N,M)\min(N,M)min(N,M)).
  3. تغيّر MMM إذا أثّرَت قدرة/بيئة على حدّ الاشتباك (نادر، لكن مدعوم).
  4. تغيّر حالة منطقة (دخول/خروج مجموعة ضمن نطاق AoE بيئي شبه ثابت).

5) اندماج السرب مع بقية القواعد


6) أمثلة تنفيذية صغيرة (Within one window)

مثال 1 — AoE بسيط

مثال 2 — Spawn أثناء AoE

مثال 3 — Death يُقلِّص NNN


7) التحقق (Validation)


8) الأداء وقابلية التوسع


9) مخرجات التقرير


10) حالات الحافة المهمّة


11) معايير القبول لهذه المرحلة

  1. تنفيذ N(t)N(t)N(t) وMMM كما هو مذكور، وإنشاء نقاط قطع عندما تتغيّر min⁡(N,M)\min(N,M)min(N,M).
  2. توزيع AoE بالتساوي على KengageK_{engage}Kengage​ داخل كل نافذة، مع احترام طبقات post-hit واختلاف مقاومات الأفراد.
  3. اندماج كامل مع «نوافذ الأحداث» (spawn/exit/تغيّر M/بوابات البيئة) وترتيب الطابع الزمني.
  4. إخراج واضح في windows/log لعدد المتأثرين، الضرر الإجمالي، الضرر للفرد، والوفيات الناتجة.

المرحلة 10: مُفسِّر السلوك والاستهداف (Behavior & Targeting Resolver)

1) الغرض

حلّ «مَن يهاجم مَن؟» بشكل حتمي داخل كل نافذة حدث، وفق الهرمية والقواعد المحدّدة في الوثيقة، مع كسر تعادل واضح، ودمج الطوارئ وTaunt و“الاستراتيجية المسبقة” مع القاعدة الافتراضية للكيان.

2) الهرمية الحاكمة (Priority)

ترتيب التطبيق داخل كل لحظة قرار (بداية نافذة أو عند حدث مؤثر على التهديف):
قدرات/تأثيرات نشطة (مثل Taunt) → طوارئ (emergency_rules) → استراتيجية مسبقة → القاعدة الافتراضية (target_rule). عند الحاجة، كسر التعادل: الأقرب ثم الأقل HP ثم ID أصغر.

3) تعريف القواعد المدعومة

ملحوظة: تعريف “boss” و“ranged” يُستمد من tags/style/meta في بطاقة الكيان طبق النموذج الموحّد.

4) متى نحلّ الاستهداف؟

نحلّ الاستهداف في بداية كل نافذة حدث [ti,ti+1)[t_i,t_{i+1})[ti​,ti+1​) وبعد ترتيب أحداث الطابع الزمني الواحد (انتهاء نوافذ ← وصول مقذوفات ← بدء نوافذ ← تحديث السرب)، ثم نثبّت الهدف للنافذة.

5) دمج الطوارئ (Emergency Rules)

كل قاعدة طوارئ تحوي: condition (مثال: self_hp_lte_pct, enemy_count_gte, time_lt_s …)، action (تبديل target_rule، تفعيل retreat/enable_kite، إلخ)، و until (شرط أو زمن إنهاء). إن طابقت condition ضمن الطابع الحالي، تُطبَّق قبل الاستراتيجية والقاعدة الافتراضية، وتستمر حتى until. أمثلة واضحة موجودة في بطاقات الأمثلة (Arcanist/Panic Shield، Rock Troll/Stone Rush).

6) Taunt وقدرات تغيّر الاستهداف

7) تفاعل المُفسِّر مع السرب وAoE

8) فضّ التعادل (Tie-breaking) — تفاصيل دقيقة

عند تساوي مرشحين بعد تطبيق القاعدة المختارة:

  1. الأقرب (مسافة أقل).
  2. الأقل HP لحظية.
  3. أصغر ID (حتمي لضمان تكرارية التجارب).
    هذا يُطبّق بعد طبقات الهرمية، وقبل بداية التكامل الصحي للنافذة.

9) معايير “الأقرب” و“داخل المدى”

10) تفاعل المُفسِّر مع الموارد والتبريد

11) أمثلة تنفيذية صغيرة

مثال (أ): Taunt يعلو على الطوارئ

مثال (ب): طارئ Stone Rush (للـRock Troll)

مثال (ج): Clear All مع AoE + Swarm

12) مخرجات المُفسِّر (ما يُسجَّل)

13) التحقق (Validation)

14) حالات الحافة

15) معايير القبول لهذه المرحلة

  1. تطبيق الهرمية والـtie-break كما في المرجع حرفيًا، مع ثبات الهدف داخل النافذة الواحدة.
  2. دعم Taunt/الطوارئ والاستراتيجية والقاعدة الافتراضية، واحترام نوافذ التأثير والموارد/التبريد.
  3. تكامل كامل مع السرب وAoE، وتغيير مجموعة المتأثرين فقط عندما تتبدّل min⁡(N,M)\min(N,M)min(N,M).
  4. تسجيل واضح للأسباب في windows/log (target_switch, swarm_change, apply/expire…).

المرحلة 11: إدارة الموارد والتبريد (Resources & Cooldowns Scheduler)

الهدف

وضع قواعد تشغيلية واضحة لكيفية تفعيل القدرات، خصم الكلفة، بدء التبريد، ومنع التفعيل عند نقص الموارد، مع ربط ذلك بنوافذ التأثيرات (windows) وسجلّ التشغيل (log) ونتائج المعركة—وفقًا للملحق A4 من المواصفة.


1) مبادئ مُلزِمة (من المرجع)


2) تعريفات تشغيلية


3) جدولة القدرات (Scheduler) — خطوات كل «لحظة قرار»

تُنفَّذ هذه الخطوات بعد ترتيب أحداث الطابع الزمني الواحد وقبل تثبيت ثوابت النافذة:

  1. فلترة القدرات الجاهزة: قدرة «جاهزة» إذا لم تكن على تبريد ونافذتها الزمنية ستتقاطع مع النافذة الحالية (أو التالية القريبة) وكان اللاعب ضمن الشروط (النطاق، الهدف…).
  2. تحقق الموارد: قارن الكلفة مع رصيد الموارد (مثل mana.mc أو غيره). إن لم تكفِ ⇒ «فشل».
  3. التفعيل: عند النجاح ⇒
    • خصم الكلفة فورًا من المخزون المناسب.
    • بدء التبريد فورًا (تسجّل «جاهز عند t = الآن + cooldown_s»).
    • إدراج التأثيرات: أضف start_s وend_s إلى قائمة نقاط الزمن (سيؤدي ذلك لتوليد/قصّ النوافذ).
  4. عدم وجود نافذة فعّالة = لا تأثير: حتى إن تم التفعيل، أي تأثير يعمل فقط داخل نافذته {start_s, duration_s}.

ملاحظة: القدرة قد تحمل أكثر من تأثير (effects[]) بفئات مختلفة (offensive/defensive/healing/buff) وكل منها يملك نافذته وop الخاص.


4) تداخل القدرات والنوافذ


5) دراسة حالات الموارد (Mana مثالًا)


6) تفاعل الـScheduler مع الاستهداف والسرب


7) سجلّ التشغيل (Logging)


8) حالات حافة مهمّة


9) ربط بقاعدة البيانات (وفق المرحلة 2 — خيار الجداول المخصّصة)


10) قبول/اختبارات (Acceptance)

يُعتمد النظام إذا تحققت كل البنود:

  1. عند التفعيل الناجح تُخصم الكلفة فورًا ويبدأ التبريد فورًا؛ الفشل لا يخصم ولا يبرد.
  2. التأثيرات تعمل حصريًا داخل {start_s, duration_s} وتولّد نوافذ حدث مضبوطة.
  3. قدرات «التعزيز القصير + مقذوف» لا تؤثر إلا إذا وصل المقذوف داخل نافذة التعزيز (Arc Bolt مثالًا).
  4. سجلّ التشغيل يُظهر apply/expire للكلفة/التبريد، وresult/windows/log مطابق للمواصفة من حيث البُنى والوحدات والدقة.
  5. يمنع النظام التفعيل عند نقص الموارد، ويتعامل مع تجدد الموارد لاحقًا لتمكين تفعيلات لاحقة—بدون أي «اقتراض».

المرحلة 12: التنفيذ، النتائج، وسجل المعركة (Output & Reporting Contract)

1) ما الذي نُخرجه بعد كل تشغيل؟

الوحدات القياسية في العرض: ثوانٍ (s)، أمتار (m)، معدلات ·s⁻¹. التقريب الافتراضي: 3 منازل عشرية (العرض فقط؛ التخزين بدقة كاملة).


2) مخطط JSON رسمي (Contract)

2.1 result

{
  "state": "win | lose | draw",
  "t_decide_s": 17.926,
  "objective": "kill_boss",
  "hp_final_by_side": { "player": 1240.331, "enemy": 0.000 },
  "mc_final_by_side": { "player": 18.500, "enemy": null },
  "notes": "Instant KO on boss at t=17.926s"
}

2.2 windows[]

عنصر واحد:

{
  "idx": 7,
  "t_start_s": 12.500,
  "t_end_s": 13.200,
  "reason": "projectile_arrival | ability_window | swarm_change | target_switch | objective_hit | death",
  "constants_snapshot": {
    "player": { "ATK": 320.0, "DEF_eff": 118.950, "m": 0.729, "F_hit": 0.840 },
    "enemy":  { "ATK": 210.0, "DEF_eff": 142.331, "m": 0.596, "F_hit": 0.700 },
    "swarm": { "N": 6, "M": 4, "k_engage": 4 }
  }
}

2.3 log[] (مختصر وقابل للتفصيل)

حدث نموذجي:

{
  "t_s": 12.640,
  "window_idx": 7,
  "actor": { "run_entity_id": 3, "side": "player" },
  "target": { "run_entity_id": 9, "side": "enemy" },
  "event_type": "hit | heal | apply | expire | death | objective | note",
  "payload": {
    "attack_kind": "melee | projectile | area",
    "damage_type": "physical | magic | ...",
    "pre_hit": {
      "ATK": 336.0,
      "DEF_eff": 118.950,
      "m": 0.739,
      "F_hit": 0.840,
      "DPS_raw": 248.3
    },
    "post_hit": {
      "resist": 0.10,
      "mitigation_passive": 0.05,
      "mitigate": 0.20,
      "DPS_final": 168.8
    },
    "aoe": { "k_engage": 4, "d_aoe_total": 675.2, "d_per": 168.8 },
    "hp_after": 412.775
  }
}

3) CSV/Excel Export (أعمدة قياسية)

3.1 windows.csv

idx,t_start_s,t_end_s,reason,player_ATK,player_DEF_eff,player_m,player_F_hit,
enemy_ATK,enemy_DEF_eff,enemy_m,enemy_F_hit,N,M,k_engage

3.2 log.csv

t_s,window_idx,event_type,actor_id,actor_side,target_id,target_side,
attack_kind,damage_type,ATK,DEF_eff,m,F_hit,DPS_raw,
resist,mitigation_passive,mitigate,DPS_final,
k_engage,d_aoe_total,d_per,hp_after,note

3.3 result.json / result.csv

state,t_decide_s,objective,hp_player,hp_enemy,mc_player,mc_enemy

4) سياسة التقريب والدقّة


5) توافق المراحل السابقة (Traceability)


6) حالات الحافة في الإخراج


7) تصاميم واجهة العرض (Admin UI)


8) الاستيراد/التصدير والتوافق


9) معايير القبول (Acceptance)

  1. يَنتُج عن كل تشغيل result/windows/log وفق المخطط أعلاه تمامًا، وبالوحدات والتقريب المحددين.
  2. كل نافذة تحمل reason واضحًا وconstants_snapshot صحيحة القيم.
  3. أحداث log منسّقة وتبيّن طبقات قبل/بعد الضربة وترابط AoE/Swarm حيث ينطبق.
  4. يدعم النظام تصدير JSON/CSV، والاستيراد للحزم لأغراض التحليل دون تعارض مع اللقطات.
  5. تتوافق الأرقام المعلنة مع الأمثلة العددية (الفصل 9) ضمن هامش خطأ ≤ 1e-3.

المرحلة 13: التحقق مقابل أمثلة الوثيقة (Reference Tests)

الهدف

تثبيت “حزمة اختبارات مرجعية” تعيد إنتاج أمثلة الوثيقة رقمياً (Kill Boss / Survive / Clear All / Draw…) وتتحقق من المطابقة الرقمية ضمن هامش خطأ محدد، مع لقطات (snapshots) لضمان إعادة العرض مستقبلًا.

1) مكوّنات حزمة الاختبار (Reference Test Pack)

جميع الملفات بالإنجليزية للمفاتيح وبالعربية/الإنجليزية لنصوص الواجهة، متوافقة مع مخطط المراحل السابقة.

2) حالات الاختبار الأساسية (Core)

  1. T-13.1 Kill Boss (فشل)
    • الهدف: kill_boss.
    • الترتيب المتوقع: العدو يقتل اللاعب أولًا (مثال: T_death ≈ 16.6667s قبل T_kill).
    • النجاح = state="lose" وزمن الحسم مطابق ضمن ±0.001s، مع سجلّ يظهر أول وفاة على العدو أو اللاعب حسب المواصفة.
  2. T-13.2 Survive_T (نجاة زمنية)
    • الهدف: survive_T بقيمة T=60s.
    • متوقع: فشل/نجاة حسب الإعداد المرجعي؛ إن كانت النجاة، يجب ألا توجد أحداث وفاة على طرف اللاعب حتى t=60s، ويجب إنهاء التشغيل بـ state="win".
  3. T-13.3 Clear All (AoE + Swarm)
    • الهدف: clear_all مع سرب: N0, λ, وM محددة.
    • متوقع: إنهاء قبل 20s في السيناريو القياسي مع تفعيل AoE؛ التحقق أن توزيع الضرر جرى على k_engage = min(N, M) في النوافذ المعنية (وجود reason="swarm_change" عند تغيّر N أو k_engage).
  4. T-13.4 تعادل آني (Instant Draw)
    • إعدادات متقاربة تؤدي إلى سقوط الطرفين في نفس الطابع الزمني.
    • متوقع: حدثان death متزامنان، وstate="draw".

3) حالات تكميليّة (Supplementary)

4) صيغة ملف تعريف الاختبار (Test Case Descriptor)

{
  "id": "T-13.3",
  "title": { "ar": "تنظيف السرب", "en": "Clear All (Swarm+AoE)" },
  "objective": "clear_all",
  "battle_config_ref": "cfg_ref_001",
  "sides": {
    "player": [{ "entity_uid": "hunter_arcanist_t2p", "count": 1 }],
    "enemy":  [{ "entity_uid": "monster_bug_swarm_t1", "count": 1 }]
  },
  "tolerance": { "time_s": 0.001, "hp_abs": 0.01, "mc_abs": 0.01 },
  "expected": {
    "state": "win",
    "t_decide_s": "< 20.0",
    "assertions": [
      { "type": "window_reason_count", "reason": "swarm_change", "op": ">=", "value": 1 },
      { "type": "aoe_k_engage_track", "window_idx": "any", "op": "==", "value": "min(N,M)" }
    ]
  }
}

5) آلية التحقق (Assertions)

6) سياسة التحمّل (Tolerance Policy)

7) التسمية والإصدارات

8) تنظيم لوحة «Reference Tests» في لوحة التحكم

9) معايير القبول (Acceptance)

  1. تشغيل الحزمة يُنتج state/t_decide/HP/MC المطابقة لكل حالة ضمن حدود التحمّل.
  2. نوافذ بأسباب صحيحة، مع constants_snapshot ذات معنى (ATK/DEF_eff/m/F_hit … و k_engage حيث يلزم).
  3. سجلّ يُبيّن ترتيب pre→post-hit وAoE/Swarm وTaunt/طوارئ عند الحالات المقابلة.
  4. إمكان تصدير نتائج جميع الاختبارات (JSON/CSV) وحزمة تشغيل واحدة قابلة للمراجعة لاحقًا (snapshots).

المرحلة 14: واجهة التشغيل الأمامية (Front-End Run UI)

هدفها تمكين المستخدم/اللاعب من تشغيل سيناريو جاهز واستعراض النتائج (result / windows / log) بأسلوب مبسّط، ثنائي اللغة، ومطابق تمامًا لعقود الإخراج التي ثبّتْناها.

1) نطاق الواجهة

2) تخطيط الشاشة (UX)

  1. Hero / Banner
    • عنوان السيناريو + وصف مختصر (ar/en) + اختيار Battle Config من قائمة جاهزة للنشر.
    • حقول اختيار جانبي القتال (Player/Enemy) من مكتبة كيانات «مُعلَّمة للنشر» مع عدّاد العدد لكل كيان (إن لزم).
    • زر تشغيل المعركة (Run).
  2. لوحة النتيجة (Result Card)
    • حالة الحسم (فوز/خسارة/تعادل) + زمن الحسم (t_decide_s).
    • ملخص HP/MC النهائية لكل جانب.
    • أزرار: تصدير result.json، نسخ البيانات.
  3. نوافذ الأحداث (Windows)
    • جدول مبسّط: #، t_start_s، t_end_s، السبب (projectile_arrival / ability_window / swarm_change / target_switch / death / objective_hit).
    • عند النقر على أي صف: يعرض constants_snapshot (ATK/DEF_eff/m/F_hit/…، وN/M/k_engage عند السرب).
    • فلاتر: حسب السبب، مدى زمني، أو جانب معيّن.
  4. سجل المعركة (Log)
    • جدول: الزمن t_s، event_type (hit/heal/apply/expire/death/objective/note)، الفاعل→الهدف (إن وُجد)، وملخص payload.
    • تمرير الفأرة على hit/heal يعرض pre_hit وpost_hit (DPS_raw ثم معاملات ما بعد الضربة ثم DPS_final).
    • فلاتر سريعة: «hits فقط»، «الوفيات فقط»، «حسب الفاعل/الهدف»، «حسب نافذة #».
  5. التنزيلات (Exports)
    • windows.csv، log.csv، Run Package (.zip) تتضمن result.json + windows.csv + log.csv + scenario_snapshot.json.

3) تدفّق الاستخدام

4) رسائل واجهة جاهزة (عربي/إنجليزي)

5) اعتبارات الوصول والأداء


المرحلة 15: الأداء، الجودة، والتعبئة (Performance & Packaging)

نُغلق المواصفة بمسلّمات الإنتاج، اختبارات الضغط، وأسلوب تسليم الإضافة.

1) الأداء (Back-End)

2) الأداء (Front-End)

3) الجودة والاختبارات

4) الأمان والسلامة

5) الاستيراد/التصدير

6) التوثيق والمساعدة

7) خطط التطوير لاحقًا (Nice-to-have)

8) التعبئة والتوزيع

المواصفة الشاملة النهائية (نسخة موحّدة بدون تناقض)

الإصدار: 1.0 • التاريخ: 2025-10-13

التزام لغوي إلزامي: أي نص يظهر للاعب يجب أن يملك صيغتين: ar وen.
⚠️ تنبيه توازُن: ثوابت الموازنة (مثل K) تُعرَّف في إعدادات المعركة العامة (Battle Config) وليست جزءًا من بطاقات الكيانات.
🔴 تنبيه توثيقي دائم: أي مثال رقمي داخل هذه المواصفة يجب أن يُحسب حصريًا وفق المعادلات الواردة هنا. تُمنع الأمثلة السردية غير المحسوبة داخل المرجع.


1) النطاق والغاية

وثيقة مرجعية موحَّدة: القواعد العامة، المعادلات، هرمية الاستهداف والسلوك، تصنيف القدرات، النموذج الموحّد للكيان (Hunter/Monster) ثنائي اللغة، محاكاة الأسراب، وأمثلة حسابية صارمة. لا تعتمد على tick؛ الحسابات زمنية مستمرة بفترات ثابتة البارامترات.


2) إعدادات المعركة العامة (Battle Config)

مهم: لا تُكرر K داخل بطاقات الكيانات.


3) قواعد الأهداف والنهاية


4) المعادلات (زمن مستمر، بلا tick)

تحويل الدفاع (لوغاريتمي):
[
DEF_{eff} = K\cdot\ln\Big(1 + \frac{DEF}{K}\Big)
]

معامل التخفيف:
[
m = \frac{ATK}{ATK + DEF_{eff}}
]

ضرر/ثانية (نموذج مستمر):
[
DPS(t) = ATK(t)\cdot m(t)
]

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

تطور الصحة:
[
\frac{dHP}{dt} = -D(t) + H(t) \Rightarrow HP(t) = HP_0 – \int D(t)\,dt + \int H(t)\,dt
]

زمن القتل لفترة ثابتة:
[
TTK = \frac{HP_\text{rem}}{DPS}
]

زمن وصول المقذوف:
[
t_{arr} = \frac{\text{range_m}}{\text{projectile_speed}}
]

تقسيم الفترات: تُقسّم المعركة إلى فترات يكون فيها (ATK, DEF) (وبالتالي (DPS)) ثابتة؛ نُجمع/نُكامل على الفترات.


5) هرمية السلوك والاستهداف

1) القدرات/التأثيرات النشطة (مثل Taunt) — أعلى أولوية.
2) قواعد الطوارئ في بطاقة الكيان.
3) الاستراتيجية المختارة قبل القتال (إن وُجدت).
4) قاعدة الاستهداف الافتراضية في بطاقة الكيان.

قواعد مدعومة: weakest_first, boss_first, nearest, lowest_hp, ranged_first, taunter_first.


6) تصنيف القدرات (Categories) + Ops


7) النموذج الموحَّد للكيان (Hunter/Monster)

المفاتيح برمجياً بالإنجليزية، وكل نص واجهاتي ثنائي اللغة {ar,en}. لا ثوابت توازن داخل البطاقة.

7.1 مثال — Hunter (caster)

{
  "id": "hunter_arcanist_t2p",
  "type": "hunter",
  "name":  { "ar": "صيّاد الأرْكَنة", "en": "Arcanist Hunter" },
  "title": { "ar": "مُقذِف القُوَى", "en": "Weaver of Forces" },
  "family":  { "ar": "بشر", "en": "Humans" },
  "species": { "ar": "بشري", "en": "Human" },
  "rank": { "band": "B", "mod": "+", "label": { "ar": "الرتبة B+", "en": "Rank B+" } },
  "style": "caster",
  "role":  "mage",
  "tags":  [ "human", "magic_user", "ranged" ],
  "stats": {
    "hp_max": 2100,
    "atk": 520,
    "def": 120,
    "HPS": 1.6,
    "rate": 1.0,
    "range_m": 16.0,
    "projectile_speed": 50.0,
    "damage_type": "magic",
    "eva": 0.10,
    "aim": 0.88,
    "resist": { "physical": 0.00, "magic": 0.10, "fire": 0.00, "cold": 0.05, "poison": 0.00 },
    "mitigation_passive": 0.00,
    "regen_hps": 0.0,
    "mana": { "mc": 120.0, "mr": 4.0 }
  },
  "behavior": {
    "target_rule": "boss_first",
    "emergency_rules": [
      {
        "name": { "ar": "درع الطوارئ", "en": "Panic Shield" },
        "condition": { "self_hp_lte_pct": 0.25 },
        "action":    { "target_rule": "nearest", "retreat": true, "enable_kite": true },
        "until":     { "self_hp_gt_pct": 0.40 }
      }
    ]
  },
  "abilities": [
    {
      "name": { "ar": "قذيفة قوسية", "en": "Arc Bolt" },
      "category": "offensive",
      "cooldown_s": 4,
      "cost": { "mana": 8.0, "stamina": 0.0 },
      "effects": [
        { "target": "enemy", "affects": "attack.atk", "op": "mul", "value": 1.25, "window": { "start_s": 0, "duration_s": 0.5 } }
      ],
      "taunt": false,
      "notes": { "ar": "اندفاعة سحرية قصيرة", "en": "Short magical burst" }
    },
    {
      "name": { "ar": "حاجز أركي", "en": "Arcane Barrier" },
      "category": "buff",
      "cooldown_s": 18,
      "cost": { "mana": 15.0, "stamina": 0.0 },
      "effects": [
        { "target": "self", "affects": "stats.mitigation_passive", "op": "add", "value": 0.18, "window": { "start_s": 0, "duration_s": 6 } }
      ],
      "taunt": false,
      "notes": { "ar": "يقلّل الضرر مؤقتًا", "en": "Temporarily reduces incoming damage" }
    }
  ],
  "ui": { "short_desc": { "ar": "صيّاد ساحر بعيد المدى", "en": "Long-range arcane hunter" },
          "lore":       { "ar": "يُتقن هندسة المانا لفرض السيطرة.", "en": "Harnesses mana to control the field." } },
  "meta": { "version": "FIXED", "author": "design" }
}

7.2 مثال — Monster (غير سحري؛ MC/MR=0)

{
  "id": "monster_rock_troll_t3",
  "type": "monster",
  "name":  { "ar": "ترول الصخر", "en": "Rock Troll" },
  "title": { "ar": "ساحق الجروف", "en": "Cliff Crusher" },
  "family":  { "ar": "عمالقة",     "en": "Giants" },
  "species": { "ar": "ترول حجري", "en": "Rock Troll" },
  "rank": { "band": "A", "mod": "base", "label": { "ar": "الرتبة A", "en": "Rank A" } },
  "style": "melee",
  "role":  "monster_generic",
  "tags":  [ "ground", "brute", "rock" ],
  "stats": {
    "hp_max": 6400,
    "atk": 780,
    "def": 100,
    "HPS": 0.9,
    "rate": 1.0,
    "range_m": 2.2,
    "projectile_speed": 0.0,
    "damage_type": "physical",
    "eva": 0.05,
    "aim": 0.80,
    "resist": { "physical": 0.10, "magic": 0.00, "fire": 0.00, "cold": 0.05, "poison": 0.00 },
    "mitigation_passive": 0.05,
    "regen_hps": 0.0,
    "mana": { "mc": 0.0, "mr": 0.0 }
  },
  "behavior": {
    "target_rule": "lowest_hp",
    "emergency_rules": [
      {
        "name": { "ar": "اندفاع حجري", "en": "Stone Rush" },
        "condition": { "enemy_count_gte": 3 },
        "action":    { "target_rule": "weakest_first" },
        "until":     { "time_lt_s": 120 }
      }
    ]
  },
  "abilities": [
    {
      "name": { "ar": "هزّة أرضية", "en": "Ground Shatter" },
      "category": "offensive",
      "cooldown_s": 10,
      "cost": { "mana": 0.0, "stamina": 0.0 },
      "effects": [
        { "target": "area",  "affects": "attack.atk", "op": "mul", "value": 1.20, "window": { "start_s": 0, "duration_s": 0.7 } },
        { "target": "enemy", "affects": "stats.eva",  "op": "add", "value": -0.06, "window": { "start_s": 0, "duration_s": 4 } }
      ],
      "taunt": false,
      "notes": { "ar": "ضربة ارتجاجية تقلّل التفادي", "en": "Tremor hit that lowers evasion" }
    }
  ],
  "ui": { "short_desc": { "ar": "مهاجم ثقيل عنيد", "en": "Stubborn heavy striker" },
          "lore":       { "ar": "ينحت مساره عبر الصخر والخصوم.", "en": "Carves through rock and foes alike." } },
  "meta": { "version": "FIXED", "author": "design" }
}

8) محاكاة الأسراب (Swarm Modeling)

المعاملات العامة: enabled, N0, معدل الوصول (\lambda) (عدو/ث)، (N(t) = N0 + \lfloor \int_0^t \lambda(\tau)\,d\tau \rfloor)، حد الاشتباك (M).
التوزيع: AoE يوزَّع على (\min(N(t), M)). الضربة المفردة تتبع target_rule.
لا tick: نقسّم الزمن إلى فترات بين وصولَيْن/تبدّل حالة، ونحسب تكاملاً تحليليًا في كل فترة.


9) أمثلة حسابية صارمة

9.1 Kill Boss (فشل)

المعطيات: (HP_b(0)=12000)، فترات: [0,4] (ATK=700)؛ [4,10] (ATK=900)؛ (>10) (ATK=700). (DEF_b=150), (K=200). على اللاعب 180 DPS وارد، (HP_p=3000).
الحساب: (DEF_{eff}=200\ln(1.75)=111.9232)، (m_1=0.8621506) ⇒ (DPS_1=603.5054)، (m_2=0.8893956) ⇒ (DPS_2=800.4560). حتى (t=10): (7216.7578). (HP_b(10)=4783.2422). بعد ذلك: (\Delta t=7.9258) ⇒ (T_{kill}=17.9258)s. (T_{death}=16.6667)s ⇒ ❌ فشل.

9.2 Survive 60s (تحليل جدوى)

المعطيات: (HP_p(0)=2600)، 120 DPS أساسي + 300 DPS ضمن [20,30]s، تجدد (H=6).
النتيجة: يفشل البقاء دون تعديل (مثلاً رفع (H) إلى ≥20 أو درع ≥0.7 لمدة 6s أثناء الطفرة أو تقليل الطفرة ≤220 DPS).

9.3 Clear All مع AoE+DoT+Swarm (نجاح مختصر)

(N0=2, \lambda=0.5, M=4, HP_{mob}=1200). لاعب: (ATK=600, DEF_{mob}=100, K=200 ⇒ DEF_{eff}=81.093, m=0.8810 ⇒ DPS_{total}=528.6). DoT +30 ضمن [5,15]s. الحسم قبل 20s ⇒ ✅ نجاح.

9.4 تعادل آني

ضربة متبادلة آنية تجعل (HP) للطرفين =0 بنفس اللحظة ⇒ تعادل وفق الشرط العالمي.


10) مسرد المصطلحات (عربي / English)

الرمز / الحقلالعربيEnglishالوصف
MCسعة الماناMana Capacityسقف المانا داخل المواجهة
MRتجدّد/ثانيةMana Regen (R/sec)معدل استعادة المانا
bandشريحة الرتبةRank BandE → D → C → B → A → S → SS → SSS 
modمعامل الرتبةRank Modbase / + / ++
styleأسلوب القتالCombat Stylemelee/ranged/caster/hybrid/support
roleالدور القتاليRolefighter/archer/mage/…
rateمعدل الضربAttack Rateأفعال/ثانية
range_mالمدى (م)Range (m)مسافة التأثير
projectile_speedسرعة المقذوفProjectile Speedم/ث
damage_typeنوع الضررDamage Typephysical/magic/fire/…
evaتفاديEvasion0..1
aimدقّةAim0..1
mitigation_passiveتخفيف ثابتPassive Mitigation0..1
resist.*مقاومات نوعيةElemental/Type Resist0..1
target_ruleقاعدة الاستهدافTarget Ruleweakest_first/…
swarmسربSwarmN0, λ, M…
HPSعدد الضربات في الثانيةHit per Second2 اي كل ضربة فيها نصف الهجوم

الملحق: Appendix — Implementation v1.0 (ملزِم)

A1) ترتيب العمليات (Order of Ops)

1) حساب (DEF_{eff}) من (DEF) باستخدام (K).
2) اختراق الدفاع penetrate_def (إن وُجد) يُطبق قبل حساب (m).
3) (m = \frac{ATK}{ATK + DEF_{eff}}).
4) عامل الإصابة الحتمي (لا RNG): (F_{hit} = \text{clamp}(AIM\times(1-EVA),0,1)).
5) ترتيب تأثيرات نفس المقياس: setaddmul.
6) (DPS_{raw} = ATK\times m).
7) تخفيفات ما بعد الضرب: resist[type] وmitigation_passive وmitigate تُطبَّق ضربيًا على (DPS).
8) المقذوفات: يبدأ التأثير بعد (t_{arr}) إن كان >0.
9) AoE مع السرب: تقسيم على (\min(N(t),M)).

A2) نوافذ الأحداث (Event Windows)

نبني خطًّا زمنيًا من النوافذ حيث القيم ثابتة (قدرة تبدأ/تنتهي، وصول مقذوف، دخول/خروج عدو في السرب، تبدّل هدف…). نكامل (D(t)) و(H(t)) داخل النافذة ونوقف فور تحقق شرط النهاية أو الهدف.

A3) Resolve الاستهداف

أولوية: قدرات نشطة > طوارئ > استراتيجية مسبقة > افتراضي. كسر التعادل: الأقرب ثم الأقل HP ثم ID أصغر.

A4) الموارد والتبريد

A5) الدقة والمخرجات

— انتهت الوثيقة —