توثيق PhoneHub + Pulse
PhoneHub + Pulse Phone — دليل التثبيت
الإصدار المدمج 1.4.6 · ZeroDev
هذا الإصدار يجمع Pulse Phone، ومبنى PhoneHub، وPhoneHub OS المخصص، وكشك الهواتف ثلاثي الأبعاد، وطاولة التصليح، ونظام المخزون/التوصيل للموظفين. وهو منتج منفصل عن إصدار الهاتف وحده. ثبّت الهاتف وريسورس المتجر معًا. لا تشغّل نسختين من phone أو إصدارين من خريطة PhoneHub.
1. قبل التثبيت
- خذ نسخة احتياطية من ريسورس الهاتف الحالي، وريسورس الخريطة، والإعدادات، وقاعدة البيانات.
- استخدم OneSync وإصدار لعبة GTA 2699 أو أحدث.
- شغّل قاعدة البيانات والـ framework والـ inventory وريسورس الصوت وscreenshot-basic أولًا.
- أبقِ أسماء الريسورسات
phoneوzerodev_phonehub_mloتمامًا كما هي. - احذف ريسورسات PhoneHub السابقة من مجلد الريسورسات النشط واحذف أسطر
ensureالمكررة. احفظ النسخ الاحتياطية خارج ذلك المجلد. - أبقِ أي خريطة أخرى تحل محل نفس مبنى Portola Drive معطّلة.
- أغلق FiveM تمامًا وأوقف السيرفر قبل استبدال ملفات الخريطة. شغّل السيرفر، ثم شغّل FiveM مرة أخرى. افصل اللاعبين قبل استبدال هذا الـ MLO المُحمَّل (streamed) أو إعادة تشغيله. اللاعب المتصل قد يحتفظ بالخريطة حتى وهو بعيد عن المبنى؛ وإعادة تشغيله أثناء العمل (hot-restart) قد تُسقط لعبة ذلك اللاعب.
هذه الحزمة لا تتضمن مفتاح ترخيص سيرفر، أو framework، أو inventory، أو سكربتات مدفوعة من أطراف أخرى. بعد معالجة Keymaster، يجب أن يتبع مفتاح السيرفر الحساب الذي يملك الاستحقاق لهذا الـ asset المدمج الجديد. الاستحقاق لإصدار الهاتف وحده القديم لا يمنح هذا الإصدار الجديد.
2. انسخ الريسورسات
انسخ مجلدَي phone وzerodev_phonehub_mlo من هذا التحميل إلى مجلد resources في سيرفرك. يمكنك وضعهما في أي مجلد فئة؛ واحتفظ بأسماء المجلدات تمامًا كما هي.
screenshot-basic. تحتاج الكاميرا إلى تشغيل screenshot-basic قبل phone؛ والريسورس الأصلي يعمل. يتضمن التحميل أيضًا نسخة أخف (ترسم صورة اللعبة فقط أثناء التقاط صورة، بنفس الاسم والـ exports والأحداث). التبديل إليها اختياري: احتفظ بمجلدك القديم كنسخة احتياطية خارج resources، واختبر السكربتات التي تلتقط صورًا للشاشة، وأعِد المجلد القديم إذا تغيّر أي شيء. الخطوات موجودة في البدء السريع لـ Pulse Phone، الخطوة 6؛ والملفات المتغيرة مذكورة في screenshot-basic/ZERODEV-CHANGES.md.
أضف هذه الأسطر بعد الـ dependencies الموجودة لديك في server.cfg:
ensure phone
ensure zerodev_phonehub_mloلا تنسخ محرك هاتف قديمًا أو واجهة قديمة إلى الحزمة الجديدة. عند الترقية، انقل الإعدادات التي تحتاجها إلى ملفات الإعداد الجديدة. احتفظ بقاعدة بياناتك، وتخزين KVP الخاص بالريسورس، ومجلدَي media وownermedia. الملف الجديد phone/config/phonehub_business.lua يتضمن إعدادات التوصيل غير الموجودة في إصدار الهاتف وحده.
كاونتر المتجر المُعدّ موجود عند -749.541, -216.952224, 36.256562، باتجاه 210. موقع المتجر مُعدّ مسبقًا في الإصدار المدمج النظيف. PhoneHub هو متجر الهواتف الوحيد في هذا الإصدار: متجر Legion Square الموجود في حزمة الهاتف وحده ليس جزءًا منه. ملف config.lua المحفوظ من 1.4.4 أو أقدم ما زال يذكر Legion Square؛ ذلك الإدخال يُتخطى ويذكر الكونسول ذلك مرة واحدة. اضغط مفتاح PhoneHub (E افتراضيًا)، أو استخدم /phonehub، عند كشك الأرضية، أو طاولة تصليح، أو كاونتر الخدمة، أو نقطة التحكم على السطح لفتح جهاز PhoneHub. الكشك يفتح Shop وطاولة التصليح تفتح Repair. يمكن تغيير المفتاح من ربط المفاتيح في FiveM. يتطلب الأمر نفس القرب الذي يتطلبه المفتاح؛ وإجراءات الموظفين ما زالت تتطلب صلاحية من السيرفر.
3. الـ framework والـ inventory والسكربتات الأخرى
ابدأ بـ Config.Framework = 'auto' وإعدادات المزوّدين التلقائية في phone/config/config.lua. تقرير الصحة عند بدء تشغيل الهاتف يحدد المزوّدين الفعليين الذين اختارهم. راجع ذلك التقرير قبل إجراء عمليات شراء.
| الـ Framework | الإعداد |
|---|---|
| ESX Legacy | شغّل es_extended والـ inventory قبل phone. استورد zerodev_phonehub_mlo/setup/phonehub_esx_jobs.sql؛ هذا يضيف رتب الوظيفة الناقصة دون تعيين أي لاعب. |
| QBCore | أضف إدخال الوظيفة المرفق zerodev_phonehub_mlo/setup/phonehub_qb_job.lua إلى جدول الوظائف المشتركة في النواة لديك. سجّل عناصر الهاتف باستخدام دليل العناصر الخاص بالهاتف. |
| Qbox | سجّل نفس الوظيفة/الرتب عبر إعدادات الوظائف المثبتة لديك في Qbox أو API تسجيل الوظائف المدعوم. استخدم تعريفات عناصر ox_inventory. |
| ox_core / vRP | اضبط adapter الـ framework الموجود في الهاتف ومزوّد وظائف يُرجع وظيفة PhoneHub ورتبتها الرقمية. استخدم وصولًا للمبنى يتحكم فيه ACE إذا كان نظام الوظائف لديك لا يوفر ذلك. |
| Standalone / مخصص | التسوق العام متاح عبر جسر standalone/المخصص الموجود في الهاتف. وصول الموظفين يحتاج إلى مزوّد وظائف مُعدّ أو صلاحية ACE لمسؤول موثوق. |
adapters الـ inventory تغطي ox_inventory، ودوال الـ inventory المدعومة في الـ frameworks، والمزوّدين المحددين من أطراف أخرى المذكورين في phone/guides/integrations.md (أو دليل التكامل المرفق مع إصدار الهاتف لديك). كل مزوّد يحتاج إلى تعريفات عناصره الحقيقية وإصدار API متوافق. العناصر الناقصة تُبلغ عنها فحوصات صحة الهاتف؛ لا تُخفِ تلك الأخطاء. أمثلة إعداد العناصر موجودة تحت phone/config/items/.
الجسور القابلة للتعديل في الهاتف تغطي الصوت، وحسابات الـ society، والبنوك، والكراجات، والمنازل، والـ dispatch، وتكاملات أخرى. احتفظ بمزوّد واحد مختار فقط لكل وظيفة. ثبّت الريسورسات المعاد تسميتها عبر Config.ResourceNames؛ واستخدم Config.Providers لاختيار مزوّد صراحةً. الـ exports العشوائية من أطراف أخرى ليست متوافقة تلقائيًا: نفّذ الجسر المخصص الموثَّق عندما لا يكون سكربتك مُدرجًا. الـ adapters الخاصة بالـ frameworks واختبارات العقود الآلية ليست ادعاءً بأن كل إصدار من أطراف أخرى قد اختُبر مباشرةً.
الحزمة المختبرة مباشرةً لهذا الإصدار: ESX Legacy وox_inventory وoxmysql وpma-voice. على framework آخر، شغّل فحوصات التشغيل الأول في القسم 7 قبل فتح المتجر.
4. متجر عام أو مشروع يملكه لاعب
شغّل أيًا من الأمرين في كونسول السيرفر:
phonehubmode public
phonehubmode businessالوضع المختار يبقى محفوظًا بعد إعادة التشغيل. الوضع العام يُبقي التسوق العادي. وضع الأعمال يطبّق المخزون الدائم والحجوزات على المشتريات التي تتم عند كاونتر PhoneHub. وضع الأعمال يعطّل الاستبدال (trade-in) عند الكاونتر. ونفس عملية الدفع في الهاتف تتحقق من الأسعار والمدفوعات وتسليم العناصر.
اضبط اسم الوظيفة والرتب في phone/config/phonehub_business.lua:
| الرتبة | المهام الافتراضية |
|---|---|
| 0 — متدرب | عرض جهاز إدارة الأعمال، واستلام التوصيلات الواصلة، والتحكم بالمبنى |
| 1 — مبيعات | مهام المتدرب بالإضافة إلى طلب البضائع من المورّد |
| 2 — فني | الطلب/الاستلام ودور التصليح المُعدّ |
| 3 — مدير | كل صلاحيات الموظفين بالإضافة إلى إلغاء طلبات التوريد المعلقة واسترداد قيمتها |
عيّن الوظائف بأدوات الإدارة العادية في الـ framework لديك. افتح Services → My Work → PhoneHub → Staff and account على الهاتف لإدارة الشركة. وهي تستخدم دوال الموظفين/الـ society المدعومة في الـ framework المختار. يدعم الإصدار المدمج أيضًا ملكية دائمة للاعبين عبر شراء داخل اللعبة في تبويب Business أو أمر التعيين للمسؤول الموضح أدناه. كل أسعار الملكية مبالغ بعملة اللعبة.
لـ ESX مع esx_addonaccount، استورد أيضًا zerodev_phonehub_mlo/setup/phonehub_esx_society.sql قبل تشغيل ريسورس الحسابات، ثم أعِد تشغيل سيرفرك. هذا ينشئ حساب الشركة society_phonehub برصيد صفر دون استبدال رصيد موجود. إذا أعدت تسمية الوظيفة، حدّث لاحقة الحساب لتطابقها. مزوّدو البنوك الآخرون يحتاجون إلى الإعداد العادي لحساب الشركة للوظيفة المُعدّة. تحقق من إيداع وسحب صغيرين في Company قبل افتتاح المشروع.
ميزانية التشغيل دفتر داخلي منفصل لشراء المخزون. المبيعات تضيف إليها؛ وطلبات المورّد تخصم منها. وهي ليست تلقائيًا حساب society بنكيًا وليست رصيدًا نقديًا للاعب يمكن سحبه.
5. طلبات المورّد وتوصيل المخزون
عند كاونتر الخدمة، اضغط E لفتح جهاز PhoneHub، ثم Stock. اختر منتجًا وإعدادًا وكمية. يحسب السيرفر عرض سعر المورّد ويتحقق من رتبة الموظف وقربه وميزانية التشغيل.
التوصيل الافتراضي يستغرق 120 ثانية. ويبقى قيد النقل بعد إعادة التشغيل. بعد وصوله، يختار موظف Receive delivery عند الجهاز. القيمة الافتراضية destination='stock' تضيف البضائع إلى دفتر مخزون المتجر الذي تستهلكه عملية الدفع، بشكل مستقل عن مزوّد inventory الخاص بالمشتري. طلبات الاستلام المتكررة لا يمكنها إضافة نفس الشحنة مرتين. يمكن للمديرين إلغاء شحنة لم تُستلم مقابل استرداد واحد للميزانية.
الإعدادات:
delivery = {
seconds = 120,
autoReceive = false,
destination = 'stock',
resource = '',
export = '',
}لمستودع/stash مخصص، اضبط destination='custom' وحدد export على السيرفر. يستقبل (shipment, source) ويجب أن يستخدم shipment.id كمفتاح دائم لمنع التكرار. أرجِع true فقط عندما يُحفظ كل سطر بنجاح. اضبط ربط العناصر/SKU الخاص بالـ inventory لديك في ذلك الـ adapter. التوصيل المخصص لا يضيف العناصر أيضًا إلى دفتر المبيعات الداخلي؛ اربط مسار البيع في مستودعك صراحةً لتجنب تكرار المخزون. لا يُفترض وجود adapter عام لأي stash.
التسليم الخارجي غير المؤكد يُحجز للمراجعة، ولا يُعاد تجربته بشكل أعمى أبدًا. بعد التحقق من inventory الوجهة، استخدم:
phonehubdelivery <shipment-id> delivered
phonehubdelivery <shipment-id> retryلحجز دفع عميل غير مؤكد، افحص سجلات الدفع والـ inventory قبل استخدام phonehubresolve <reservation-id> returned|delivered.
6. التحكم بالمتجر
اضغط E قرب نقطة التحكم بالخدمة أو منصة التحكم على السطح.
- المكان: أقفال الباب الأمامي وباب السطح، وأضواء المتجر، وشاشة صالة الجلوس، ومظلة التراس (تلقائية في المطر أو الثلج، أو مفتوحة/مغلقة)، ودفايات التراس أو تدفق الهواء، وكهرباء التراس، واختبار رشاشات الحريق لمدة 15 ثانية.
- الكاميرات: Entrance overview وShowroom overview وService counter. العودة إلى الجهاز تغلق الكاميرا؛ وEscape للخروج.
- Stock وBusiness: طلبات المورّد، والتوصيلات، والإيرادات، ودفتر المبيعات والتصليحات، ووصول الفريق.
التحكم بالمبنى يتطلب وظيفة PhoneHub أو صلاحية ACE المُعدّة للموظفين/الأدمن. وصول العامة للتحكم بالتراس يُعدّ بشكل منفصل في systems_config.lua. امنح phonehub.admin فقط لـ principal المسؤول الموثوق لديك؛ وليس للجميع أبدًا. اضبط phoneResource='phone' في إعدادات أنظمة الـ MLO.
الأبواب الأوتوماتيكية تستخدم حساسات قرب عندما تكون غير مقفلة. يجب أن تبقى أجنحتها المتحركة صلبة، بما في ذلك أثناء فتحها. الأثاث والزجاج والإضاءة عناصر مصممة في الخريطة؛ وليس لكل قطعة ديكور تفاعل في اللعب.
7. قبول التشغيل الأول
- شغّل السيرفر ونفّذ
phone:health. تأكد من مزوّدي الـ framework والـ inventory وقاعدة البيانات والصوت المتوقعين، ومن عدم وجود عناصر مطلوبة ناقصة. - ادخل بشكل عادي وزُر المتجر. امشِ من الرصيف عبر زوجي المدخل، وصعودًا/نزولًا على الدرج وعبر مدخل السطح مع تعطيل noclip.
- افتح المظلة وأغلقها. يجب أن تبقى ألواحها الثمانية متراصفة داخل المسارات في كل وضع. اختبر الإغلاق التلقائي عند المطر/الثلج بشكل منفصل.
- افتح كل منظر CCTV، وبدّل بينها واخرج. يجب أن يكون المشهد مرئيًا وأن تعود رؤية اللاعب والتركيز (focus) إلى الوضع الطبيعي.
- اقفل مجموعتي الأبواب بحساب موظف. تحقق من التصادم من الجهتين. افتح القفل وتحقق من حركة الفتح عند الاقتراب مرة أخرى.
- تحقق من الإضاءة نهارًا/ليلًا، وتشغيل/إطفاء الشاشة، والزجاج، واللافتات، والمقاعد، وكل الحواف. امشِ وقُد نحو المبنى وبعيدًا عنه لفحص انتقالات التحميل (streaming).
- اشترِ هاتفًا/إكسسوارًا في الوضع العام. وفي وضع الأعمال، تحقق من نقص المخزون، وطلبات الموظفين، والوصول/الاستلام، والرصيد غير الكافي، والوصول غير المصرح به.
- أعِد تشغيل السيرفر وتأكد أن وضع المتجر والمخزون والتوصيلات المعلقة باقية. كرر محاولة استلام/إلغاء مكررة؛ يجب ألا تظهر بضائع أو مبالغ مستردة مكررة. تحقق من أن عدة لاعبين يرون نفس حالة المتجر.
phonehubcheck في كونسول F8 لدى اللاعب يُبلغ عن تراصف المظلة الفعلي؛ ويجب أن يُبلغ كل لوح عن تراصف قريب من 1. وهو أداة تشخيص، وليس دليلًا على صحة الجودة البصرية أو التصادمات. الفحوصات الآلية لا تستطيع ضمان كل زاوية كاميرا أو كل تركيبات السيرفرات.
8. حل المشاكل والتحديثات
المنفذ 30120 مشغول: نسخة سيرفر أخرى تعمل بالفعل. أوقفها عبر txAdmin (أو لوحة الاستضافة) بدلًا من تشغيل FXServer ثانٍ.
أزرار التحكم مفقودة: تحقق من أن الريسورسين يعملان، وأن أسماءهما لم تتغير، وأن اللاعب عند نقطة التحكم. افحص F8 لدى اللاعب وأخطاء السيرفر.
لا يوجد وصول للموظفين: تحقق من الوظيفة المُعدّة، والرتبة الرقمية، والقرب من كاونتر الخدمة، ومزوّد الوظائف المختار. وضع المتجر العام لا يمنح صلاحيات الموظفين.
الخريطة القديمة/الواجهة القديمة ما زالت تظهر: احذف الريسورسات/إدخالات ensure المكررة. أغلق FiveM تمامًا، وأوقف السيرفر، واستبدل الملفات، ثم شغّل السيرفر وشغّل FiveM مرة أخرى. إعادة الاتصال وحدها قد تُبقي ملفات stream قديمة. لا تُعِد تحميل الـ MLO أثناء العمل (hot-reload) بينما لاعب متصل، حتى لو كان بعيدًا عن المبنى.
الرجوع إلى إصدار سابق: أوقف هذه الريسورسات، واستعِد مجلدات الريسورسات والإعدادات من النسخة الاحتياطية، ثم أعِد التشغيل باستخدام txAdmin الموجود لديك. احتفظ بتخزين قاعدة البيانات/KVP ما لم تكن تستعيد عمدًا نسخة احتياطية متسقة من البيانات.
احتفظ ببصمات الإصدار المرفقة (SHA256.json) لطلبات الدعم.
PhoneHub OS والملكية
Config.PhoneHubOS في phone/config/phonehub_business.lua يتحكم في هذا الإصدار. ownership='both' يسمح بالشراء داخل اللعبة والتعيين من المسؤول. اضبط 'admin' أو 'purchase' للسماح بطريقة واحدة فقط. purchasePrice مبلغ بعملة اللعبة. يستخدم المسؤولون phonehubowner <online player id> من كونسول السيرفر أو بصلاحية ACE phonehub.admin. التعيين محظور أثناء وجود دفعة شراء معلقة. يُحفظ المالك مرتبطًا بمعرّف الشخصية في الـ framework، وليس برقم source مؤقت للاعب أبدًا. الملكية تفعّل نظام المخزون الدائم وميزانية التشغيل الموجود.
يضيف المالكون الموظفين أو المديرين القريبين في تبويب Business. هذه الأدوار المستقلة تعمل عبر جسر الهوية في الـ framework؛ ولا تغيّر الوظيفة الأساسية للاعب. أدوار وظيفة PhoneHub الموجودة والوصول الإداري المُعدّ ما زالت تعمل. يمكن للمديرين طلب البضائع، ويمكن للموظفين استلام الشحنات الواصلة افتراضيًا. يبقى المخزون محجوزًا حتى يتم تأكيد شراء أو توصيل من المورّد.
service='hybrid' يسمح بالدفع والتصليح بمساعدة موظف وبالخدمة الذاتية معًا. 'self' يسمح بالخدمة المباشرة؛ و'staff' يتطلب عرضًا من موظف يوافق عليه العميل في هذا المتجر. المنتج المستقل يحتفظ بنظام التسوق الخاص به.
عند كشك الأرضية، اقترب واضغط E. يحمّل تبويب Shop موديل Pulse المحمي الفعلي، مع التدوير بالسحب، وفحص الأمام/الخلف، والتكبير، والتشطيب المختار. السعر يأتي من سيرفر الهاتف. الدفع يتطلب تأكيدًا ويستخدم الـ inventory والأموال وتسليم الهاتف في علبة المُعدّة. انتهاء المهلة ليس دليلًا على فشل الخصم؛ راجع الـ inventory وسجل المدفوعات قبل المحاولة مرة أخرى.
يطلب العملاء المساعدة في المبيعات أو التصليح من تبويب Help ويحصلون على رقم انتظار. يختار الموظفون عميلًا قريبًا في تبويب Counter ويجهزون عرضًا؛ ولا يستطيع الموافقة والدفع إلا ذلك العميل. يجب أن يبقى الاثنان في نفس المتجر وفي نفس الـ routing bucket. موافقة التصليح ترتبط بالجهاز الفريد المختار وسعره المعروض. وتغيير الجهاز يُلغيها.
للتصليح بمساعدة فني، يفتح الفني الجهاز عند طاولة تصليح شاغرة، ويجهّز عرض التصليح للعميل، ويبقى هناك حتى القبول. تُحجز الطاولة قبل الدفع. التصليح المدفوع الناجح يشغّل تسلسل التركيب مع ذلك اللاعب كفني؛ والخدمة الذاتية تستخدم فني المتجر. محرك الهاتف هو المسؤول عن تصليح الجهاز ويستعيد العمل المدفوع بعد انقطاع جلسة السيرفر. الـ props لدى اللاعب لا تنشئ أبدًا هاتفًا في الـ inventory ولا تستبدله.
تبويب Space، عند نقطتي التحكم على السطح وعند الكاونتر، يتحكم في المظلة، والتكييف، والأقفال، والإضاءة، والشاشة. الهندسة، والحماية من الطقس، والأرضيات، والمقاعد من الـ MLO المكتمل باقية كما هي.