الوثائق 9.6.24
قاعدة البيانات والجسر
يستخدم الجسر اتصال oxmysql الحالي. لا تحتاج لإدخال كلمة مرور قاعدة اللعبة في اللوحة أو فتح MySQL للإنترنت.
القراءات المدعومة#
الاتصال مفعّل افتراضيًا لكل خادم ولا يحتاج إلى سطر في server.cfg. لإيقافه لخادم واحد افتح الخادم من صفحة الخوادم واستخدم «Disable connection» في بطاقة Tosun Connect؛ ويمكن إعادة تشغيله من البطاقة نفسها. عند وجود set tosun_db_bridge_manual "1" في server.cfg تُقرأ قيمتا tosun_db_bridge_enabled وtosun_db_bridge_money_write من server.cfg كما في السابق، وتبقى كل منهما معطلة ما لم تُضبط على "1". إذا فُعّلت المرآة الكاملة القديمة عمدًا (ts.panelMirror.enabled = true في configs/anticheat_config.lua) يبقى الجسر معطلًا تلقائيًا لتستمر تلك المرآة في العمل. تعرض بنى QBCore/ESX المدعومة بيانات محددة للاعبين والمخزون والمركبات والسجلات. الجسر ليس متصفحًا كاملًا للقاعدة.
طلبات محدودة وتعديل الرصيد#
يفحص اللوحة عبر HTTPS كل نحو 10 ثوانٍ في الخمول دون استعلام قاعدة اللعبة. حتى 25 نتيجة لكل صفحة ومهمة واحدة في الوقت نفسه. تعديل الرصيد أثناء الاتصال (ضبط مجموع النقد أو البنك لشخصية متصلة من اللوحة) مفعّل افتراضيًا. يستخدمه مستخدمو اللوحة بدور admin أو owner (صلاحية الاقتصاد) فقط. يجب أن تكون الشخصية متصلة وأن يطابق الرصيد الحالي المتوقع، وإلا يُعاد stale_balance ولا يتغير شيء. تعرض اللوحة ملخص تأكيد قبل الإرسال، ويُسجَّل كل طلب في سجل التدقيق. تضبط العملية المجموع ولا تضيف إليه. لا تُكرَّر العملية غير المؤكدة النتيجة تلقائيًا أبدًا؛ تحقق أولًا من الرصيد داخل اللعبة. لإيقاف القراءة وتعديل الرصيد لخادم استخدم «Disable connection» في بطاقة Tosun Connect. وللإبقاء على القراءة دون تعديل الرصيد استخدم الوضع اليدوي: set tosun_db_bridge_manual "1" وset tosun_db_bridge_enabled "1" دون set tosun_db_bridge_money_write "1".
الاتصال عبر خادم اللعبة الحالي#
يستخدم الجسر اتصال oxmysql الموجود. ترسل اللوحة مهام مدعومة عبر HTTPS، وينفذها خادم اللعبة محلياً ويعيد النتائج المحددة. لا تحتاج لنسخ كلمة مرور MySQL إلى الموقع أو فتح منفذ القاعدة للإنترنت.
- الاتصال مفعّل افتراضياً لكل خادم، ومع tosun-ac 9.6.14 أو أحدث لا يلزم تفعيله. لإيقافه لخادم واحد افتح الخوادم ثم الخادم ثم بطاقة Tosun Connect واختر «Disable connection». إذا كان النسخ الكامل القديم (legacy mirror) مفعّلاً عمداً عبر ts.panelMirror.enabled = true في configs/anticheat_config.lua فإن الجسر يبقى معطلاً تلقائياً حتى يستمر النسخ القديم في العمل.
- مع tosun-ac 9.6.14 أو أحدث لا يحتاج الاتصال إلى أي سطر في server.cfg؛ يكفي سطر set tosun_ac_license بالترخيص الصحيح. الأسطر القديمة tosun_db_bridge_enabled وtosun_db_bridge_money_write تُتجاهل حينها ويمكن حذفها؛ أما الخادم الذي ما زال يشغّل حزمة أقدم فيحتاجها إلى أن تُثبَّت الحزمة الجديدة. تعديل أرصدة الشخصيات المتصلة مفعّل افتراضياً أيضاً ومتاح فقط لمستخدمي اللوحة بدور admin أو owner.
- اسمح باتصالات HTTPS الصادرة إلى admin.tosundev.com وافحص وحدة التحكم ثم اطلب قائمة لاعبين صغيرة.
# نفّذ في وحدة تحكم الخادم:
tosunac_db_statusموقع المجتمع بالترخيص فقط#
يقرأ موقع مجتمعك بيانات اللعبة عبر اتصال Tosun Connect نفسه. إذا لم تُدخل إعدادات قاعدة بيانات اللعبة للخادم في اللوحة، فلا يحتاج الموقع إلى مستخدم MySQL أو GRANT أو منفذ 3306 مفتوح: تحمّل صفحات اللاعبين والحظورات واكتشافات مضاد الغش والسجلات بياناتها من خادم اللعبة عند فتحها.
في هذا الوضع لا يستطيع الموقع البحث أو التصفية أو رفع الحظر أو إضافة حظر أو تعديل المال والمخزون. لرفع حظر استخدم /ts unban <banID> داخل اللعبة أو ts unban <banID> في وحدة تحكم الخادم. كل صفحة طلب جديد يُجاب عنه خلال نحو 10 ثوانٍ؛ وإذا كان خادم اللعبة غير متصل أو كان الاتصال متوقفًا من بطاقة Tosun Connect، تذكر الصفحة ذلك بدل عرض قائمة فارغة.
تحتاج الأسماء والوظائف والأرصدة والمخزون وطرازات المركبات إلى tosun-ac 9.6.17 أو أحدث على خادم اللعبة. مع الحزم الأقدم تعيد بعض خوادم MySQL/MariaDB معرّف الشخصية فقط.
الاتصال المباشر بقاعدة بيانات اللعبة اختياري. أضفه فقط إذا أردت البحث والتعديل في الموقع: أنشئ مستخدم قاعدة بيانات لا يتصل إلا من عنوان IP لخادم لوحة Tosun (يمكن للدعم تأكيده)، وامنحه SELECT وINSERT وUPDATE وDELETE على قاعدة بيانات اللعبة، وافتح المنفذ 3306 لهذا العنوان فقط، ثم أدخل البيانات في إعدادات قاعدة بيانات الخادم ضمن الخوادم (Direct MySQL · Advanced). لا تحفظ اللوحة هذه البيانات إلا بعد نجاح اختبار الاتصال. ومن دون هذه البيانات يبقى الإعداد بالترخيص فقط مستخدمًا.
- اللاعبون: 25 شخصية في كل صفحة مع معرّف الشخصية والاسم والوظيفة. ويرى الطاقم أيضًا النقد والبنك.
- يمكن للطاقم (مشرف فما فوق) النقر على شخصية لرؤية حالة الاتصال والأرصدة والمخزون، وتحميل مركبات تلك الشخصية.
- الحظورات واكتشافات مضاد الغش: 25 سجلًا في كل صفحة، للقراءة فقط. تظهر الاكتشافات من الأقدم إلى الأحدث، والحظورات بترتيب معرّف الحظر.
- تعرض مجاميع اللاعبين والحظورات والاكتشافات في لوحة المعلومات «—»: لا يملك الاتصال عملية عدّ، لذلك لا يُخمَّن أي رقم.
البيانات المتاحة وحدودها#
تتوفر قائمة اللاعبين وتفاصيل شخصية ومركباتها والحظر وسجلات الكشف. يستخدم QBCore/Qbox عادة players وplayer_vehicles، وESX users وowned_vehicles. يجب توافق الأعمدة والفهارس. حالة ready لا تعني إمكانية قراءة كل جدول مخصص.
المخزون يعيد حقولاً مختارة وحجماً محدوداً من البيانات المحفوظة، مع زيارة 100 عنصر كحد أقصى. لا تُنسخ metadata عشوائية أو مخازن stash أو جميع الجداول. المخزون المقتطع نتيجة جزئية؛ غياب عنصر منها لا يثبت عدم امتلاكه. استخدم أدوات مخزون اللعبة للفحص الكامل.
فهم الحالة والحمولة#
في الخمول يتصل الجسر باللوحة كل عشر ثوان تقريباً دون قراءة قاعدة اللعبة. تعمل مهمة واحدة في كل مرة. تعرض الصفحة حتى 25 نتيجة بمؤشر؛ انتقل للصفحة التالية بدلاً من تحديث الأولى باستمرار. تُخزن معلومات البنية المطلوبة مؤقتاً لخمس دقائق.
- oxmysql_unavailable: افحص ترتيب التشغيل والاتصال.
- unsupported_framework / schema_unavailable: افحص إطار العمل والجداول والأعمدة.
- unsupported_index: اطلب مراجعة المفتاح المطلوب من مسؤول القاعدة، ولا تضف فهرساً دون تقييم خادم مزدحم.
- request_expired / حالة قديمة: افحص الاتصال وعمر الطلب قبل القراءة مجدداً.
تعديل الأرصدة بشكل مقصود#
تعديل أرصدة الشخصيات المتصلة مفعّل افتراضياً. يستطيع مستخدمو اللوحة بدور admin أو owner (صلاحية الاقتصاد) ضبط رصيد النقد أو البنك لشخصية مدعومة متصلة بعد مراجعة ملخص التأكيد. تضبط العملية الرصيد إلى قيمة نهائية مطلقة؛ لا تضيف المبلغ عند كل إعادة. يُفحص الرصيد السابق المتوقع، وإن لم يطابق تعود stale_balance ولا يتغير شيء. يُسجَّل كل طلب في سجل التدقيق.
لا يوجد رجوع إلى تحديث SQL للشخصيات غير المتصلة. يُحفظ السجل غير المؤكد لمنع التكرار التلقائي. لا تمنح دور admin أو owner للموظفين الذين يكتفون بالفحص. لإيقاف تعديل الأرصدة على خادم واحد استخدم «Disable connection» في بطاقة Tosun Connect الخاصة به (تتوقف القراءات أيضاً)، أو الوضع اليدوي عبر set tosun_db_bridge_manual "1"؛ عندها يُقرأ tosun_db_bridge_enabled وtosun_db_bridge_money_write من server.cfg ويبقى كل منهما معطلاً ما لم يُضبط على "1".
- اقرأ الشخصية والرصيد الحالي وأكد المبلغ النهائي ونفّذ مرة واحدة.
- عند stale_balance اقرأ مجدداً؛ ربما أنفق اللاعب أو كسب أموالاً.
- عند unknown_outcome توقف وقارن الرصيد المباشر وسجل العمليات. لا تكتب مرة أخرى قبل معرفة النتيجة الأولى.
ميّز القائمة المحفوظة عن تفاصيل الشخصية الحالية#
تقرأ قائمة اللاعبين صفوف الشخصيات المحفوظة وليست تدفقاً حياً مستمراً. قد تستبدل تفاصيل الشخصية الأرصدة المحفوظة بقيم framework المدعوم أثناء الاتصال، وتقرأ عناصر ox_inventory الحالية للاعب عند توفرها. اختر character_id الدائم لا رقم جلسة تتذكره. في اللوحة راجع مؤشرات الرصيد غير المتاح وتحذير الجرد غير المكتمل قبل تفسير الصفر أو اعتبار القائمة كاملة. يمكن للمطور فحص مؤشري balance_available وinventory_truncated المقابلين. حقل غير متاح أو جرد جزئي لا يثبت ضياع مال أو ممتلكات. تعرض نتائج المركبات حقولاً محفوظة محددة، ولا تثبت أن المركبة موجودة حالياً في العالم أو مرتبطة بجلسة مرآب نشطة.
- قارن تفاصيل شخصية معروفة باللعبة في وقت مسجل، مع حالة الاتصال والحساب المختار.
- عند الاختلاف تحقق من الهوية ونوع الطلب، قائمة أم تفاصيل، ومؤشرات التوفر قبل أي إجراء.
- بعد إعادة الاتصال أو تبديل الشخصية اطلب تفاصيل جديدة بدلاً من استخدام نتيجة الشخصية السابقة.
افحص على صفحات بدلاً من تفريغ القاعدة#
تقبل قائمة الانتظار ثلاثة طلبات معلقة أو مستلمة لكل خادم واثني عشر طلباً جديداً في الدقيقة. عمر المهمة 120 ثانية والنتائج مؤقتة وتصبح قابلة للتنظيف بعد خمس دقائق من انتهاء المهمة دون وقت حذف مضمون. هذه الحدود للإدارة المحددة لا للجمع الآلي الكامل. استخدم أدوات الصفحة التالية في اللوحة؛ يتبع المطور has_more وnext_cursor ضمن العملية والشخصية نفسيهما. الصفحة التالية الفارغة تختلف عن فشل الاستعلام. تُفحص المفاتيح الفريدة وفهارس مالك المركبة لرفض البنى غير المدعومة بأمان. لا تُعد تسمية أعمدة الإنتاج ولا تضف فهرساً لمجرد إسكات خطأ دون تقييم التطبيق وخطة الاستعلام.
- اقرأ صفحة واحدة في اللوحة كل مرة. في تكامل مخصص احفظ المؤشر مع العملية وتابع فقط إذا كانت has_more صحيحة.
- عند queue_full أو rate_limited انتظر الأعمال المفتوحة بدلاً من إعادة فتح العرض باستمرار.
- اطلب تقييم unsupported_index على نسخة أولاً؛ قد تبقى معلومات البنية مخزنة مؤقتاً خمس دقائق.
أوقف الوصول دون محو العمليات غير المحسومة#
للفحص فقط أعط الموظفين صلاحيات القراءة اللازمة؛ تعديل الأرصدة متاح لدوري admin وowner فقط. لإيقاف اتصال خادم واحد افتح الخوادم ثم الخادم ثم بطاقة Tosun Connect واختر «Disable connection»؛ تتوقف بذلك كل القراءات وتعديلات الأرصدة لهذا الخادم، ويمكن إعادة تشغيله من البطاقة نفسها. إذا احتجت القراءة دون تعديل الأرصدة فاستخدم الوضع اليدوي: أضف set tosun_db_bridge_manual "1" وset tosun_db_bridge_enabled "1" إلى server.cfg واترك tosun_db_bridge_money_write دون ضبط أو على "0". في الوضع اليدوي تُقرأ القيمتان من server.cfg ويبقى كل منهما معطلاً ما لم يُضبط على "1"؛ لذلك فإن الوضع اليدوي دون set tosun_db_bridge_enabled "1" يوقف القراءة أيضاً. تُعلّم اللوحة المهام المعلقة أو المستلمة بالفشل، وتضع unknown_outcome لكتابة مال مستلمة لأن أثرها ربما حدث. سجل عمليات اللعبة ليس ذاكرة مؤقتة قابلة للحذف. حذف KVP لإجبار محاولة جديدة قد يزيل الدليل الذي يمنع التكرار. راجع أيضاً الوصول لبيانات اللاعبين الملتقطة؛ الجسر لا يجعل صورة أو سجل دعم منشوراً للعامة خاصاً.
- قبل فصل مخطط له اترك القراءات تنتهي وافحص المال غير المحسوم بالرصيد الحي وسجل التدقيق.
- بعد التعطيل تحقق من اللوحة وtosunac_db_status؛ لا تعتبر فحصاً جديداً في الانتظار ناجحاً.
- عند إعادة تشغيل الاتصال من البطاقة ابدأ بقراءة واحدة ولا تعدّل الأرصدة حتى مراجعة الصلاحيات والقدرات والعمليات السابقة غير المحسومة.
# Server console / Sunucu konsolu:
tosunac_db_statusافحص توافق البنية دون تغيير بيانات اللاعبين#
عند ظهور schema_unavailable أو unsupported_index، تأكد أولاً من اختيار قاعدة البيانات التي تستخدمها اللعبة فعلاً. يقرأ المثال أدناه أسماء الأعمدة وأنواعها فقط، ولا يغير الأرصدة أو المخزون أو سجلات المركبات. ليس هذا خطوة إلزامية للتثبيت. يستطيع مسؤول قاعدة بيانات مخول تشغيله في أداته الخاصة المعتادة عند التحقيق في خطأ البنية. لا ترسل SQL إلى جسر اللوحة؛ فهو يقبل العمليات المحددة فقط.
تتطلب قراءات QBCore/Qbox أعمدة citizenid وmoney وjob وcharinfo في players، بينما يتطلب ESX أعمدة identifier وaccounts وjob في users. وجود الجدول وحده لا يكفي. يجب أن يكون نوع مفتاح الشخصية مدعوماً وله فهرس فريد على عمود واحد بكامل طوله.
تتحقق قراءة المركبات أيضاً من الفهارس المناسبة للمالك ومفتاح المركبة لتجنب فرض استعلامات مكلفة. لا تعِد تسمية جدول مرآب مخصص لإخفاء الخطأ؛ اطلب أولاً من مطوري الإطار والمرآب تقييم التوافق.
- سجل رمز الخطأ وإصدار الإطار وعملية القراءة المتأثرة.
- قارن الأعمدة والفهارس، ولا ترفق صفوف اللاعبين بطلب الدعم.
- قيّم التغييرات أولاً على نسخة اختبار؛ قد لا تتعرف ذاكرة الجسر المؤقتة على البنية الجديدة فوراً.
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME IN ('players', 'users', 'player_vehicles', 'owned_vehicles')
ORDER BY TABLE_NAME, ORDINAL_POSITION
LIMIT 128;تظهر الشخصية لكن قائمة المركبات فارغة#
لنفترض أن شخصية اخترتها من قائمة اللاعبين تفتح تفاصيلها بصورة صحيحة، لكن قائمة مركباتها فارغة. ميّز أولاً النتيجة المكتملة بنجاح من المهمة الفاشلة. تعني القائمة الفارغة الناجحة أن هذه القراءة لم تُرجع سجلات مطابقة، ولا تثبت أن اللاعب لا يملك مركبة في أي نظام. لا تعامل query_failed أو schema_unavailable أو unsupported_index كقائمة فارغة.
تأكد أن الاختيار يستخدم character_id الدائم نفسه. رقم الجلسة الذي قد يتغير بعد إعادة الاتصال لا يحل محل مفتاح الشخصية. يطابق QBCore/Qbox المالك عبر player_vehicles.citizenid ويستخدم ESX الحقل owned_vehicles.owner. إذا استعمل مرآب مخصص جدولاً آخر أو صيغة ملكية مختلفة فلن يكتشف الجسر القياسي تلك السجلات تلقائياً.
اختيار الشخصية الخطأ في حساب متعدد الشخصيات قد يعطي العرض نفسه. اطلب من مسؤول المرآب المخول التحقق من سجل مركبة معروفة داخل اللعبة. لا تحتاج للتشخيص إلى تعديل الرصيد عبر الجسر أو إعادة إنشاء المركبة أو مسح الجدول الأصلي.
- سجل معرف الخادم ومرجع الشخصية بعد إخفاء المعلومات الخاصة ووقت العملية وحالة المهمة.
- تابع الصفحات التالية في سياق الشخصية نفسها ولا تنقل cursor لشخصية أخرى.
- أخبر الدعم هل كانت النتيجة فارغة وناجحة أم احتوت رمز خطأ محدداً، واحذف بيانات اللاعبين الشخصية.
ميّز الأرقام والنصوص والحقول غير المتاحة#
لا يعرض الجسر صف قاعدة البيانات الخام كما هو، بل يحوّل الحقول المدعومة إلى أنواع وأطوال محددة. تُقرأ أموال الشخصية من قيم رقمية في JSON. فالعدد 1200 والنص "1200" نوعان مختلفان في التخزين؛ وقد يصبح الرصيد غير متاح إذا حوّله سكربت مخصص إلى نص. يعرض اللوح — عند تعذر قراءة الرصيد، ولا يعني ذلك أن الرصيد صفر. تشمل حقول المخزون المختارة الاسم والتسمية والعدد والموضع والجودة؛ ولا تشمل metadata إضافية أو محتويات stash أو حسابات الأعمال.
قد تعود قيم مختارة للمركبة، مثل الوقود والمحرك والحالة، كنصوص؛ فلا تستنتج مقارنات رقمية من شكل العرض وحده. طول تعريف char/varchar المدعوم للمفتاح لا يتجاوز 96؛ والمفتاح النصي المنقول محدود أيضًا بـ96 بايت، وهو حد مختلف للأحرف متعددة البايتات. ويدعم كذلك int وbigint وmediumint. لا تفترض أن مفتاحاً ثنائياً مخصصاً صيغة قياسية. قد يُختصر النص الطويل أو المخزون؛ والمعلومات غير المعروضة ليست بالضرورة محذوفة. اطلب من المطور التحقق من صيغة المصدر الفعلية قبل تشخيص حقل مفقود. إذا لزم تحويل النوع، فقيّمه وفق متطلبات بيانات اللعبة في بيئة اختبار، بدلاً من تغيير بيانات الإنتاج لمجرد ملء الشاشة.
تحقق من كتابة الرصيد بمثال محدد#
لنفترض، في تصحيح مخوّل وموافق عليه، أنك تريد تعديل الرصيد النقدي لشخصية متصلة من 1200 إلى 1250. القيمة النهائية المطلوبة هي 1250؛ إدخال 50 يضبط الرصيد على خمسين ولا يضيف خمسين. تحقق من اختيار الحساب النقدي أو البنكي، وطابق هوية الشخصية الدائمة مع تفاصيل مباشرة حديثة. يعرض ملخص التأكيد الشخصية والحساب والتغيير من الإجمالي الحالي إلى الإجمالي الجديد. المبلغ قيمة نهائية صحيحة غير سالبة؛ ولا يمكن استخدام هذه العملية بالتبادل مع العملات المخصصة أو أرصدة الأعمال.
لا تعتبر التحقق مكتملاً بمجرد دخول المهمة إلى الطابور. تأكد أن نتيجتها المكتملة تخص الشخصية والحساب نفسيهما وتعرض before=1200 وafter=1250، ثم افحص الحالة الحالية بقراءة عادية للشخصية. قد يغير إنفاق اللاعب اللاحق هذه القراءة؛ والنتيجة المكتملة ليست سبباً لإعادة الإرسال تلقائياً. راجع افتراض الرصيد القديم وراء stale_balance، والأثر الذي لم يُتحقق منه وراء unknown_outcome. احتفظ بمعرف الطلب والوقت وملخص النتيجة بعد تنقيحه من المعلومات الخاصة. إذا كانت النتيجة غير مؤكدة، فلا ترسل كتابة جديدة قبل إعادة تقييم الرصيد الفعلي والتصحيح المقصود.
مهلة الاستجابة لا تلغي استعلام SQL#
مدة انتظار استجابة SQL الافتراضية 5,000 مللي ثانية. ينهي query_timeout انتظار اللوحة فقط؛ وقد يظل الاستعلام الفعلي قيد التنفيذ. تبقى سعة SQL مشغولة حتى وصول أول callback حقيقي، وتعيد أي قراءة أخرى query_busy. لا تغيّر الاستجابة المتأخرة العرض السابق. وإذا لم يصل أي callback، فلا تحرّر المهلة السعة تلقائيًا. يجب على مسؤول الخادم فحص الاتصال وقاعدة البيانات؛ وإعادة تشغيل المورد لا تثبت إلغاء استعلام SQL.
يمكن لمالك الخادم وحده، إن أراد، إضافة سطر set التالي إلى server.cfg. تُحصر القيمة بين 1,000 و10,000 مللي ثانية؛ ويُستخدم 5,000 مللي ثانية للرقم غير الصالح أو اللانهائي. لا يسرّع هذا الإعداد SQL ولا يعيد الاستعلامات تلقائيًا.
تعديل الرصيد أثناء الاتصال مفعّل افتراضيًا لمستخدمي اللوحة بدور admin أو owner (صلاحية الاقتصاد)؛ وفي الوضع اليدوي (set tosun_db_bridge_manual "1") يبقى متوقفًا ما لم تكن قيمة tosun_db_bridge_money_write هي "1". يتطلب شخصية مدعومة متصلة وتأكيدًا في اللوحة. تستبدل العملية مجموع النقد أو البنك فقط بعد التحقق من الرصيد الحالي المتوقع؛ ولا تلجأ أبدًا إلى كتابة SQL دون اتصال. لا تُعاد حالة unknown_outcome أو أي غموض في الاتصال تلقائيًا أبدًا. افحص الرصيد المباشر وسجلات التدقيق قبل كتابة أخرى؛ ولا تحذف سجلات KVP للعمليات غير المؤكدة لفرض التكرار.
set tosun_db_bridge_query_timeout_ms "5000"ملف SQL واحد وقاعدة البيانات الصحيحة#
نقطة استيراد SQL الوحيدة في ZIP الجديد هي tosun-ac/INSTALL.sql. لا تستورد نسخة قديمة ثانية من الجداول نفسها. الهدف قاعدة لعبة FiveM/oxmysql وليس قاعدة حسابات وقالب الموقع المستأجر. تُصلح الأعمدة القديمة الناقصة قبل القيم الافتراضية، مع الحفاظ على الحظر والإعدادات الخاصة.
- خذ نسخة احتياطية من قاعدة اللعبة وتحقق من اسمها المستخدم في oxmysql.
- استورد INSTALL.sql وحده في HeidiSQL/phpMyAdmin، أو حدد القاعدة صراحة في أمر mysql.
- يفحص tosunac_db_check الاستعلام، ويعرض tosunac_db_status حالة الجسر. الجسر مفعّل افتراضيًا ولا يحتاج إلى أي سطر في server.cfg. تكون الحالة enabled=false طبيعية في الوضع اليدوي (set tosun_db_bridge_manual "1") دون tosun_db_bridge_enabled "1"، أو عند تفعيل المرآة الكاملة القديمة عمدًا (ts.panelMirror.enabled = true في configs/anticheat_config.lua)؛ الترخيص لا ينشئ اتصال MySQL.
- اتصال اللوحة (Tosun Connect) وتعديل رصيد الشخصيات المتصلة مفعّلان افتراضيًا. لا تضف tosun_db_bridge_enabled أو tosun_db_bridge_money_write إلى server.cfg؛ الأسطر القديمة تُتجاهل ابتداءً من الحزمة 9.6.14 ويمكن حذفها (ما زالت الحزم الأقدم تحتاج إليها إلى أن تثبّت الحزمة الحالية). لا يعدّل الرصيد إلا مستخدمو اللوحة بدور admin أو owner: يجب أن تكون الشخصية متصلة، وأن يطابق الرصيدُ المتوقع الرصيدَ الحالي (وإلا تُعاد stale_balance ولا يتغير شيء)، وتعرض اللوحة ملخصًا للتأكيد قبل الإرسال، ويُسجَّل كل طلب في سجل التدقيق، ولا يُعاد الطلب تلقائيًا إذا كانت النتيجة غير مؤكدة؛ تحقق أولًا من الرصيد داخل اللعبة. العملية تضبط المجموع ولا تضيف إليه. لإيقاف الاتصال بالكامل لخادم واحد (يوقف ذلك جميع قراءات اللوحة وتعديلات الرصيد لهذا الخادم): اللوحة → الخوادم → الخادم → بطاقة Tosun Connect → Disable connection؛ ويمكنك إعادة تفعيله من البطاقة نفسها. احفظ كلمة مرور القاعدة على خادم اللعبة.
mysql -u YOUR_DB_USER -p YOUR_GAME_DATABASE < tosun-ac/INSTALL.sql
# txAdmin console:
tosunac_db_check
tosunac_db_status