mohmedmm/shkobba-bots
Shkobba Game - الدليل الشامل والمحدد للمشروع (AI Context & Architecture) تنبيه للذكاء الاصطناعي (AI Prompt & Context Anchor):اقرأ هذا الملف بعناية؛ فهو المرجع الحصري والشامل لهيكلية هذا المشروع، نماذج البيانات، وطريقة عمل السيرفر والواجهات، لتجنب استهلاك الـ Tokens في استكشاف الملفات مراراً. 📌 1. نبذة عن المشروع وTech Stack Flutter & Dart: الواجهة الأمامية، الحركات والرسوميات، والمنطق. PocketBase (https://bas.nbox.ly): السيرفر وقاعدة البيانات الأساسية (REST… See the full description on the dataset page: https://huggingface.co/datasets/mohmedmm/shkobba-bots.
0604
Shkobba Game - الدليل الشامل والمحدد للمشروع (AI Context & Architecture)
تنبيه للذكاء الاصطناعي (AI Prompt & Context Anchor): اقرأ هذا الملف بعناية؛ فهو المرجع الحصري والشامل لهيكلية هذا المشروع، نماذج البيانات، وطريقة عمل السيرفر والواجهات، لتجنب استهلاك الـ Tokens في استكشاف الملفات مراراً.
📌 1. نبذة عن المشروع وTech Stack
- Flutter & Dart: الواجهة الأمامية، الحركات والرسوميات، والمنطق.
- PocketBase (`https://bas.nbox.ly`): السيرفر وقاعدة البيانات الأساسية (REST API + Realtime SSE Subscriptions).
- Riverpod: إدارة الحالة المركزية (State Management).
- Audioplayers: تشغيل المؤثرات الصوتية (الدخول المميز، ضربات الشكبة، أصوات الإيموجي، أصوات اللعب).
- VideoPlayer: تشغيل فيديوهات الدخول المميز (
.mp4) في شاشة اللعبة. - Python CustomTkinter (`admin_panel/admin_app.py`): لوحة التحكم والإدارة الشاملة للمحتوى والمتجر واللاعبين.
📂 2. هيكلية قاعدة البيانات في PocketBase (pb_schema.json)
📂 3. الهيكلية العامة للكود (Project Files Breakdown)
🔹 1. الخدمات (lib/services/)
- `pocketbase_service.dart`: المحرك البرمجي الأساسي للاتصال بـ PocketBase، إدارة جلسات المستخدمين (
watchActiveSession)، جلب وتحديث المستخدمين (getUserProfile,updateUser)، تفعيل المقتنيات (equipStrike,equipEntry)، تحديث المتجر (updateStoreProduct)، والمزامنة اللحظية عبر الـ SSE (watchMatch,watchActiveCustomRooms). - `game_logic_service.dart`: الكود المركزي الحاكم لكل قواعد لعبة الشكبة (توزيع الكروت، الأكل، الكيشة/الحية، الميستو، حساب النقاط، والذكاء الاصطناعي للبوتات).
- `matchmaking_service.dart`: نظام البحث عن خصم والمطابقة التلقائية حسب الكؤوس (
cups). - `webrtc_voice_service.dart`: الدردشة الصوتية الحية داخل الغرف الخاصة.
🔹 2. إدارة الحالة (lib/providers/)
- `auth_provider.dart`: إدارة المستخدم الحالي، تدفق الـ
userProfileProviderاللحظي من PocketBase، وتوابع التفعيل/إلغاء التفعيل (equipStrike,activateEntry,deactivateEntry,activateBadge). - `app_data_provider.dart`: مزودي بيانات المتجر والمقتنيات (
storeProductsProvider,strikesProvider,premiumEntriesProvider,emojisProvider). - `game_provider.dart` & `online_game_provider.dart`: إدارة حالة دور المباراة، لعب الورق، ومزامنة أحداث اللعبة والإيموجي.
🔹 3. الشاشات والواجهات (lib/screens/)
- `game/game_screen.dart`: شاشة المباراة الرئيسية:
- تشمل نظام تحليق الورق (
CardFlightOverlay) والأكل السريع (CaptureAnimationOverlay). - تشمل انفجار ضربة الشكبة التفاعلية الملونة (
ShkobbaStrikeOverlay). - تشمل الدخول المميز البصري والصوتي في بداية المباراة (
_buildEntryOverlay). - مؤقت الـ 15 ثانية للعب التلقائي عند انتهاء الدور.
- `inventory/inventory_screen.dart`: شاشة المقتنيات:
- عرض المقتنيات وتفعيل أو إلغاء تفعيل حركة الدخول أو ضربة الشكبة أو الشارات، مع ضمان تفعيل عنصر واحد فقط في نفس الوقت.
- `store/store_screen.dart`: شاشة المتجر وشراء الصناديق والضربات وحركات الدخول مع إنقاص المخزون تلقائياً في السيرفر.
- `online/ranked_lobby_screen.dart`: لوبي البحث عن خصم في النمط المصنف (1v1 Ranked).
- `online/room_lobby_screen.dart`: لوبي إنشاء ودخول الغرف الخاصة بالكود.
🔹 4. لوحة الإدارة (admin_panel/admin_app.py)
- تطبيق سطح مكتب متكامل مبني بـ Python و CustomTkinter:
- إدارة وحذف وتعديل ضربات الشكبة والدخول المميز والرموز والمنتجات.
- تعديل الأسعار، الكميات المحدودة (
stock/quantity)، وربط ملفات الصوت (soundUrl) وتشغيلها ومعاينتها مباشرة داخل التطبيق. - إدارة المستخدمين وحظرهم وتعديل أرصدتهم.
⚙️ 4. قواعد ومحددات العمل (Critical Guidelines)
- الاعتماد الكلي على PocketBase:
- لا تستخدم Firebase لتخزين بيانات المستخدمين أو المتجر أو المقتنيات أو المخطط.
- جميع عمليات التحديث والاستعلام تتم عبر
PocketBaseService.
- قواعد المقتنيات والتفعيل (Single Active Equip):
- المستخدم يمكنه تفعيل ضربة شكبة واحدة فقط و حركة دخول مميز واحدة فقط.
- عند النقر على "إلغاء"، يتم إفراغ الحقول (
equippedStrike: ''أوactiveEntryId: '') فوراً وتحديث واجهة المستخدم عبرref.invalidate(userProfileProvider).
- إنقاص الكمية والمخزون في المتجر:
- عند شراء عنصر محدد الكمية، يتم إنقاص
stockوزيادةsoldCountوتحديث وصف المنتج فيshkobba_store.
