مرحبا بالجميع! اسمي مكسيم وأريد أن أخبركم قصة إنشاء مشروع حروب القفر. آمل أن تكون مهتمًا ، وربما يساعدك بعض هذا في تجنب أخطائي.
اختيار المنصة
Telegram هي منصة غير قياسية للغاية لإنشاء ألعاب عبر الإنترنت. خاصة عندما يتعلق الأمر بلعبة MMORPG. تساءلت عما إذا كان من الممكن إنشاء منتج عالي الجودة على هذه المنصة على الإطلاق ، وإذا كان الأمر كذلك ، فهل سيكون هناك أي طلب عليه على الإطلاق. لذلك ، في يونيو 2017 ، بدأت في تطوير حروب القفر.
الفيروسية
في الأيام الأولى من التطوير ، تقرر تجميع مجموعة تركيز من أصدقائي لاختبار اللعبة. بعد كل شيء ، عند التعامل مع المنظمة البحرية الدولية ، كان الاختبار وحده مشكلة. لذلك أطلقت اختبار بيتا المغلق للعبة ، مما جعل الوصول إلى الروبوت باستخدام مفاتيح لمرة واحدة. بعد أن أنتجت هذه القطع العشرة ، أرسلتها إلى أصدقائي في TG. تمت إضافة نظام الإحالة بالفعل إلى هذه النقطة ، على الرغم من أنه لم يعمل في الواقع في ضوء الاختبار المغلق. جوهرها هو أنه لكل شخص مسجل في اللعبة حسب المرجع الخاص بك. رابط ، يحصل اللاعب على +1 إلى الحد الأقصى للقدرة على التحمل وبعض القبعات (العملة المحلية) لتغطية نفقات الجيب. أدى ذلك إلى حقيقة أنه بعد أسبوعين من بداية اتفاقية التجارة التفضيلية ، شارك فيها 50 شخصًا ، واكتظت رسائلي الخاصة بطلبات من الأشخاص لمنحهم 1-2-10 مفاتيح أخرى لأصدقائهم. بدلاً من إنشاء مفاتيح جديدة باستمرار ، قررت التركيز على إصلاح الأخطاء الموجودة في الاختبار وتشغيل اختبار بيتا مفتوح ، بدون تسجيل بالمفاتيح. في اليوم الأول لـ MBT ، تم تسجيل 120 شخصًا في اللعبة. بعد ذلك بشهر ، كانت الشبكة اليومية على الإنترنت 200-250 شخصًا في اليوم ، وكان العدد الإجمالي للاعبين المسجلين يقترب من 800. وكل هذا دون أي حركة من جانبي من PR لللعبة ، أصبحت اللعبة معروفة حصريًا بفضل الكلام الشفهي ونظام الإحالة.
ميزات المشروع التي يحبها اللاعبون
أثناء الاختبار ، لاحظ اللاعبون نوع لعبة غير معتاد للغاية لهذا التنسيق ، ومعارك PVP الكاملة ونظام الضخ للاعب دون نقاط مهارة كلاسيكية ومستويات أعلى. ولكن ، ما كان مفاجأة لي - أشاد معظم الناس بنصوص اللعبة ، لا سيما الإشارة إلى جودة الفكاهة والإشارات إلى الثقافة الشعبية والمواقف الجوية ، على النقيض من الفكاهة السوداء مع الدراما الخاصة بهم.
التفاصيل الفنية
نشأت الصعوبات الأولى المرتبطة بمنصة Bot API في الأيام الأولى من التطوير. يحتوي Telegram على نظامين رئيسيين لتوصيل برامج الروبوت الخاصة بهم بخادمك: ما يسمى Long Polling و Webhooks. يشير الأول إلى أن الخادم الخاص بك سوف يستقصي Telegram باستمرار في فترة زمنية معينة للطلبات الجديدة ، وإذا كانت هناك أي طلبات ، فسيتم معالجتها عن طريق إرجاع استجابة Bot API. والثاني أصعب قليلاً في التنفيذ - وهو يتألف من حقيقة أن نوع الخادم الخاص بك يخبر Telegram "إذا كان لديك أي طلبات ، فأرسلها إلى هذا العنوان." وفقًا لذلك ، لتطبيق الروبوت باستخدام تقنية Webhooks ، يلزم وجود عنوان IP دائم وشهادة SSL ، على الأقل موقعة ذاتيًا. بعد أن بدأت التطوير على أساس الاقتراع الطويل ، في البداية لم ألاحظ أي مشاكل مرتبطة بهذه الطريقة. ومع ذلك ، بعد يوم من التشغيل المتواصل ، تحطم البوت بشكل غير متوقع. بدأت Telegram في إرجاع خطأ عندما تلقت طلبًا. كما اتضح ، فإن هذه المشكلة تعاني من جميع الروبوتات القائمة على الاقتراع الطويل - تغلق البرقية معالجة الطلب من البوت بعد مرور بعض الوقت ، بسبب ذلك يجب عليك إعادة تشغيله باستمرار. أولاً ، قررت أن أحاول أتمتة عملية "إنعاش" الروبوت عن طريق كتابة نص برمجي للتحقق من نبض العملية وإعادة تشغيلها إذا لم يستجب المريض لكزة العصا. ومع ذلك ، تسببت عملية إعادة التشغيل المستمرة هذه في إزعاج للاعبين ، مثل استغرق بعض الوقت ، وإعادة تعيين المؤقتات الحالية في اللعبة. نتيجة لذلك ، تم نقل المشروع إلى Webhooks ، واختفت هذه المشكلة على الفور.
علاوة على ذلك ، من حيث التعقيد من Bot API نفسه ، كان كل شيء هادئًا. حتى لحظة واحدة.
كان المشروع يكتسب نطاقًا ، ويبني جمهوره ويتطور باستمرار. عند نقطة واحدة ، بدأ البوت فجأة في "الباهتة" عند استلام الطلب. بتعبير أدق ، كان هناك تأخير في استجابة الروبوت للاعب. بادئ ذي بدء ، صعدت إلى الخادم ، معتقدة أنها توقفت عن التعامل مع العدد المتزايد من الطلبات. ولكن لا ، لم يتجاوز تحميل الخادم 30٪ في أوقات الذروة ، ولم تكن هناك مشاكل في الذاكرة الخالية ، ولم تكن هناك أخطاء أو تحذيرات في سجل النظام. لكن الفرامل استمرت في النمو. كما اتضح ، بدأ البوت يستريح مقابل حد API Bot من حيث عدد الطلبات المتزامنة عليه. في البداية ، نجحت في تقليل البوت وتحسينه لتقليل هذا المبلغ. ومع ذلك ، مع انتشار اللعبة إلى الجماهير ، أصبح واضحًا: قريبًا جدًا سيصل البوت إلى هذا السقف ولن تساعدني أي تحسينات. ثم تقرر الكتابة لدعم Telegram مع طلب لزيادة الحدود المخصصة لبرنامج الروبوت الخاص بي. ولدهشتي الكبيرة ، أجابوا في اليوم التالي ، وتم رفع الحد الأقصى ، على الرغم من أنهم لم يحددوا عتبة جديدة. بالإضافة إلى ذلك ، أبلغوني أن البوت يعتمد على حد نوع معين من الطلبات - رد على ما يسمى. أزرار مضمنة. هذه هي لوحة المفاتيح في Telegram ، والتي يتم عرضها تحت رسالة محددة. بالنسبة للطلبات النصية (بما في ذلك تلك التي تحتوي على أزرار عادية) ، فإن الحد أعلى بكثير ، ولا يوجد حد 15 ثانية للرد من الخادم. كانت المشكلة أن 70٪ من واجهة اللعبة مبنية على أزرار مضمنة. كان علي أن أعالجها بالكامل من أجل التخلص من هذا الشر المريح والجميل.
كانت المشكلة التالية التي واجهت المشروع بالفعل في بيئة التطوير الخاصة بي والرمز. على وجه التحديد ، في Python 3 وكيف يعمل مع الخيوط. يتم إنشاء كل خيط جديد في Python 3 مع متغيرات البيئة ، وتستهلك مساحة كبيرة من الذاكرة. اللعبة مليئة بالمؤقتات (دقيقتان للتبديل بين المواقع ، وانتظار معركة ، وما إلى ذلك) ، وإطلاقها في تدفقات منفصلة خلق تسرب للذاكرة. مع نمو اللعبة عبر الإنترنت ، وصل التسرب إلى نطاق مجنون ، حيث يلتهم كل ذاكرة الوصول العشوائي الممكنة ويضخ الذاكرة المتبقية لخادم SSD. بالطبع ، تم حل المشكلة عن طريق إنشاء قوائم انتظار للمؤقتات التي تتم معالجتها في مؤشر ترابط واحد لكل نوع.
جزء مرئي في لعبة نصية
واحدة من الميزات الرئيسية في Wasteland Wars نسبة إلى الألعاب المماثلة الأخرى في Telegram كانت مقدمة الجزء المرئي. تمت إضافة صورة شخصية تفاعلية إلى اللعبة ، بالإضافة إلى عرض مرئي لكل عنصر من المعدات في اللعبة. كما هو الحال في ألعاب تقمص الأدوار بالحجم الكامل على منصات الألعاب ، يمكن للاعب أن يلبس شخصيته بدرع مختلف ، ويمنحه أسلحة مختلفة ، ثم يرى جميع التغييرات بصريًا. بعد ذلك بقليل ، طورت هذه الفكرة ، الآن عندما يلتقي لاعب آخر في اللعبة ، يتم عرض صورته الرمزية أيضًا - وبهذه الطريقة يصبح من الممكن عدم معرفة ضخ العدو ، لتقييم خطر ظهوره. بالإضافة إلى المعدات ، يتم عرض "الأقنعة" أيضًا على الصورة الرمزية - يمكن شراؤها للتبرع ، ولا تمنح أي ميزة للاعب ، لكنها تغير مظهره في الصورة الرمزية. بالإضافة إلى ذلك ، ظهرت خريطة تفاعلية كاملة في اللعبة. عند العثور على أي موقع ، تتم إضافته إلى اللاعب الموجود على الخريطة.
يتم عرض جميع الصور بدقة منخفضة إلى حد ما ، وهي كافية لفهم محتواها. هذا يرجع إلى حقيقة أن الصور الرمزية والخرائط يتم جمعها من العديد من العناصر المختلفة لكل لاعب ، ومع وجود عدد كبير من الطلبات المتزامنة ، يمكن لتجميعها بدقة عالية تحميل خادم اللعبة بشكل كبير.
خطط تطوير المشروع
في الوقت الحالي ، يتم نسخ اللعبة إلى Go - هذه اللغة ، كما اتضح ، هي أكثر ملاءمة لتطوير مثل هذا المشروع. أتاح لي وجود خادم الويب الخاص بي في Go وسرعته البدء في إنشاء واجهة برمجة التطبيقات الخاصة بي للمشروع من أجل فك ارتباطه من منصة واحدة في Telegram. ستسمح لك واجهة برمجة التطبيقات بتلقي ومعالجة الطلبات من أي عميل ، وستتم معالجة كل المنطق على الخادم فقط.
وبالتالي ، فإن تطوير عميل لأي نظام أساسي سيكون بسيطًا مثل العميل نفسه ، وهذا سيتجنب العديد من قيود Telegram ، وصعوبات حظره ، بالإضافة إلى جذب عدد كبير من الجمهور الجديد إلى اللعبة.