# إضافة لعبة إكس أو بين الأعضاء (xo_game)

إضافة مستقلة بالكامل، بتسمح لأي عضوين في نفس الغرفة إنهم يلعبوا إكس أو
(Tic-Tac-Toe) مع بعض، والفائز ياخد 50 كوينز (جولد) تلقائياً.

## طريقة التركيب

1. فك ضغط هذا الملف، هتلاقي مجلد اسمه `xo_game`.
2. ارفع المجلد بالكامل داخل مسار السكربت عندك في:
   `codychat/addons/xo_game`
3. ادخل على لوحة تحكم الأدمن (admin.php) → **الإضافات (Addons)**.
4. هتلاقي الإضافة ظاهرة باسم "xo_game" → اضغط **تركيب (Install)**.
5. خلاص، الإضافة شغالة على طول جوه كل الغرف.

## إزاي تستخدمها

1. أي عضو داخل أي غرفة هيلاقي أيقونة جديدة (شكل #) جوه قائمة "+"
   اللي جنب أيقونة الإيموشنات في مربع الكتابة.
2. بالضغط عليها: بتتبعت رسالة حقيقية في شات الغرفة بتقول إن العضو ده
   بيتحدى الجميع في لعبة إكس أو (زي أي رسالة عادية بيكتبها أي حد بالظبط)،
   وتحت الرسالة دي بالظبط بيظهر زرار **قبول** و **رفض** (مش نافذة أو
   شريط منفصل - جوه الرسالة نفسها في قلب شات الغرفة). أول واحد يضغط
   "قبول" يبدأ اللعب فوراً مع اللي بعت الدعوة.
3. صاحب الدعوة نفسه بيشوف تحت رسالته زرار **إلغاء الدعوة** بدل
   القبول/الرفض.
4. بعد القبول، بتفتح نافذة أنيقة وخفيفة فيها صورة واسم الاثنين، ولوحة
   اللعب 3×3، وتظهر فيها دايماً ملاحظة إن "الفائز يحصل على 50 كوينز".
5. بعد ما اللعبة تخلص (فوز، تعادل، أو انسحاب)، بيظهر داخل نفس النافذة
   اسم الفائز واسم الخاسر، **وكمان بتتبعت رسالة حقيقية تلقائياً في شات
   الغرفة** تعلن النتيجة (زي رسائل "فلان دخل الغرفة" النظامية بالظبط).
6. لو أي لاعب قفل نافذة اللعب بزرار الـ (×) وهو لسه وسط مباراة شغالة،
   ده بيتحسب انسحاباً: الطرف التاني بيُعلن فائزاً تلقائياً وياخد الـ 50
   كوينز، ورسالة الفوز بتتبعت في الغرفة زي أي نتيجة عادية.

## ملاحظات تقنية مهمة

- ملف إرسال الرسائل الأساسي بالسكربت (`action_chat.php`) محمي بتقنية
  ionCube (كود مُجمّع/محمي مش نص برمجي قابل للقراءة أو التعديل)، فالإضافة
  دي **مش بتلمسه ولا بتحاول تعدله خالص**. بدل كده، بترسل رسالة الدعوة
  كرسالة شات حقيقية 100% عن طريق نفس نقطة الدخول العامة اللي الشات نفسه
  بيستخدمها لما أي عضو يكتب رسالة عادية، فبتظهر فعلاً "في قلب الروم مع
  رسائل الغرفة" بالظبط زي المطلوب.
- زرارات القبول/الرفض/الإلغاء **مش نص جوه فقاعة الرسالة نفسها** (السيرفر
  بيعمل escape للمحتوى، وده أمان مطلوب ومقصود)، لكنها كمان مش شريط عائم
  منفصل. بدل كده، الإضافة بتاخد الـ id الحقيقي لرسالة التحدي (اللي
  بيرجعه السيرفر وقت إرسالها) وبتحقن الأزرار كعناصر DOM حقيقية جوه نفس
  عنصر الرسالة دي مباشرة (تحت فقاعة النص) - مطابقة دقيقة 100% من غير أي
  تخمين أو مطابقة نص، وبتشتغل عند كل الأعضاء (مش بس اللي بعت الدعوة).
- رسالة نتيجة المباراة (فوز/تعادل/انسحاب) بتتبعت من السيرفر مباشرة عن
  طريق دالة رسائل النظام الأساسية في السكربت (`systemPostChat`) - نفس
  الآلية اللي بيتبعت بيها "فلان دخل الغرفة"، فمضمون وصولها للغرفة حتى
  لو الطرف التاني قفل المتصفح فوراً بعد الحركة الأخيرة أو الانسحاب.
- أثناء اللعب، فيه فحص دوري أسرع (كل 1.5 ثانية) بين اللاعبين الاتنين
  بس، عشان اللوحة تتحدث لحظياً لكل واحد فيهم. وفحص أبطأ (كل 3 ثواني)
  للدعوات الجديدة في الغرفة بشكل عام.
- الإضافة بتنشئ جدولين بس: `boom_xo_invites` (سجل الدعوات) و
  `boom_xo_games` (سجل المباريات والحركات). الإلغاء (Uninstall) بيمسحهم
  بالكامل.
- مسموح بدعوة واحدة نشطة بس في نفس الوقت لكل غرفة، وممنوع أي عضو يبعت
  أو يقبل دعوة جديدة وهو أصلاً وسط مباراة شغالة.
