بعد إغلاق لعبة UnnyWorld الخاصة بنا ، طُلب من العديد من المطورين الذين كانوا أصدقاء أن يكتبوا
بعد الوفاة في اللعبة . قررت أن أشارك أمثلة محددة ، تراكمت كمية لائقة منها خلال فترة التطوير. سيكون هناك أخطاء ارتكبناها ، وسأحاول تقديم بعض النصائح المفيدة.

في وقت سابق ، نشرت مقالًا بعنوان
"ثلاث سنوات من تطوير لعبة MMO الخاصة بي" ، والتي تناولت بشكل أكبر البحث عن الاستثمارات والفريق وطريقنا إلى "النجاح". لسوء الحظ (أو لحسن الحظ؟) ، كان لا بد من إغلاق المشروع. في هذه المقالة ، سأحاول مراجعة الأخطاء التي ارتكبت ، وربما أقدم على الأقل بعض النصائح المفيدة.
عن اللعبة باختصار
تقليديا ، يمكن تقسيم Unnyworld إلى قسمين: City Builder و Arena.
الجزء المتعلق بالباني هو Clash of Clans. لديك كوكب خاص بك ، والذي تحتاج إلى تجهيزه. ويمكنك مهاجمة الكواكب الأخرى لسرقة الموارد.

هاجم لاعبين آخرين أنت من شخصياتك وتتحكم فيها.
الساحات - MOBA 3v3 النموذجية بأوضاع مختلفة (التقاط العلم ، التقاط النقطة ، إلخ).

كل شخصية لها نوباتها الخاصة ، والتي يمكن دمجها مع لاعبين آخرين.
قبل المعركة ، يمكنك تغيير التعاويذ.
تبدو دورة اللعبة ككل كما يلي:
- لضخ نوبات ، هناك حاجة إلى مخطوطات تسقط من الصناديق. يمكن الحصول على الصناديق بطرق مجانية مختلفة (للدوري ، للفوز في Battle Royal ، إلخ) أو الشراء.
- لضخ التعويذة ، تحتاج إلى بناء وتحسين بناء البطل إلى مستوى معين.
- لتحسين بناء البطل ، من الضروري تحسين المباني الأخرى (المبنى الرئيسي ، المذبح ، إلخ).
أي أننا حاولنا التوفيق بطريقة ما بين نظام الكوكب والساحات. ربما فعلنا كل شيء خاطئ.
عدم وجود خطة واستراتيجية واضحة
نعم ، نوقشت أشياء كثيرة باستمرار ، لكنها أدركتها في غير مكانها ، دون تحليل دقيق لما يجب القيام به في المقام الأول.
نتيجة لذلك ، حاولوا القيام بكل شيء في وقت واحد. هل تحتاج إلى نظام نقابة عندما يكون لدى اللعبة مستخدم ونصف؟ همم ، بالكاد.
هل تحتاج إلى نظام يسمح لك بإنشاء مطابقة مخصصة ، ودعوة الأصدقاء والنقابات المشتركة هناك عندما تحتوي اللعبة على وحدة CCU صغيرة؟ لست متأكدا.
خلال عملية التطوير ، حاولنا الكثير من الأشياء للقيام بشيء ربما لم يكن من الضروري القيام به في تلك المرحلة. ونتيجة لذلك ، لم يتم تنفيذ الأشياء الضرورية حقًا.
قلة الخبرة
لأن قبل أن نعمل بشكل أساسي فقط مع ألعاب اللعب الفردي ، ثم قمنا بدراسة عدد كبير من المجارف عند اختيار تقنية أو أخرى.
لنتحدث قليلاً عن الجزء التقني من السؤال.
اختيار التكنولوجيا
القليل من التوضيح. بالنسبة للجزء الأكبر ، نحن مطورون عملاء بحتون. من بين الفريق بأكمله ، لم يكن لدى سوى شخصين خبرة في العمل مع تقنيات الخادم. حول الإدارة ، عموما ألتزم الصمت. سأحاول أن أذهب من خلال تقنيات محددة مع ملخص صغير لكل منها.
أي مزود سحابة لاستخدامه؟ AWS؟ أزور؟ طبقة ناعمة
في ذلك الوقت لم يكن هناك اختلاف جوهري. بالإضافة إلى ذلك ، كان لدينا قرض لـ SoftLayer كشركة ناشئة.
أوه ، boi ، إذا كنت تعرف فقط مدى سوء الأشياء:
- Saport ليس ضليعا بشكل خاص في المشكلة. كانت هناك حالات عندما انتقلت إليهم بشأن مشكلة على جهاز ظاهري معين (لم أتمكن من الاتصال ، وما إلى ذلك). التي تلقيت الإجابة عليها:
قمنا بإعادة تشغيل السيارة ، والآن كل شيء على ما يرام
- كانت هناك حالات عندما ارتفع
الجهاز الظاهري لساعات . كما ترى ، لقد انتظرت 4 ساعات ، ولكن لم يتم إنشاء الجهاز الظاهري.

- الصيانة المتكررة.

- يحدث أنه بدون سابق إنذار سيتم إعادة تشغيل السيارة ، أو سيتم قطع شبكة خاصة.
ونتيجة لذلك ، تحولوا إلى Azure. لم تكن هناك مثل هذه المشاكل. يستجيب الدعم بسرعة ويساعد دائمًا إذا حدث شيء ما.
جيد: -
سيئ: لم يقوموا بتحليل جميع الخيارات الممكنة بشكل صحيح. لكن الخادم هو الجزء الأكثر أهمية للعبة عبر الإنترنت = /
لذلك ، تحتاج إلى بدء تشغيل مثيلات اللعبة على الخادم بطريقة أو بأخرى ، ورميها من خلال نظام واجهة برمجة التطبيقات بعد تخويل اللاعب بالمثيل المطلوب. ماذا سنفعل؟ ولنأخذ حلًا جاهزًا لإدارة هذه الأعمال اعتمادًا على الحمل. واو ، هناك شيء يسمى Kubernetes. صحيح ، إنها في مرحلة تجريبية ... ولكن على أي حال ، فلنحاول!
إذا تجاهلنا حقيقة أنك بحاجة إلى خبرة للعمل مع هذه التقنية ، حتى مع الإعداد الأساسي لهذا العمل ، فقد تمكنت من السقوط. سقطت بعض الخدمات ، وما إلى ذلك.
حسنا ، ماذا هناك؟ Mesosphere و Apache Mesos! كل شيء هو نفسه معه ، إنه صعب بدون خبرة. إذا وقع شيء ما ، فلن تتمكن من حل المشكلة بدون الدف.
ونتيجة لذلك ، كتبوا كل شيء بأنفسهم. تبدأ المثيلات بالمشرف ، وكذلك المدير الصغير فوقهم (مكتوب بلغة جافا). تطبيق Java ttl'it في خدمة اكتشاف الحالة (عدد الغرف المجانية في الحالات ، وما إلى ذلك). عند التفويض وطلب إنشاء غرفة لواجهة برمجة التطبيقات باستخدام هذه المعلومات حول المثيلات ، ينتقل الطلب إلى العقدة الصحيحة ، التي ترفع الغرفة في المثيل الصحيح.
على سبيل المثال يتم تشغيل المثيلات دائمًا مسبقًا. مع نقص ، نقوم برفع VPS جديد.
حسن: حلل البدائل.
سيئ: قضى الكثير من الوقت في النموذج الأولي. بالنسبة إلى الإصدار الأول ، لم يكن عليك التفكير في هذه الأشياء على الإطلاق ، ولكنك ببساطة بدأت الحالات دون أي شكاوى في الأعلى. كان من الممكن مباشرة ترميز عناوين المثيل على العميل في النموذج الأولي مباشرة.
استخدمنا
www.consul.io لخدمة الاكتشاف ، وربما يكون هذا أحد الحلول التي لم نندم عليها. صحيح ، هناك مشاكل
مثل هذه عندما ينكسر التكوين أثناء إعادة التشغيل. لكن هذا نادر ومع إعادة تشغيل غير مخطط لها للسيارة. بشكل عام ، طوال الوقت كان من دواعي سروري العمل مع القنصل.
جيد: لقد صنعوا حلاً جاهزًا ، لكنهم لم يبدأوا في رؤية شيء بأنفسهم.
للنشر ، تم استخدام مخطوطات باش في الأصل.
في وقت لاحق ، قمت بنقل النشر بالكامل إلى Ansible. لا أستطيع الحصول على ما يكفي حتى يومنا هذا. بالطبع ، كانت هناك مشاكل في البداية. لكن النظام بسيط للغاية للتعلم ، والوثائق بكميات كبيرة.
جيد: اكتب نص باش بسرعة ، ولا يتطلب معرفة خاصة.
سيئ: عند التبديل إلى نظام نشر عادي ، كان علي التخلص من كل ما كتبته سابقًا.
للتواصل بين خدماتهم حاولنا
www.rabbitmq.com . لكنه خارج الموضوع في غضون أيام قليلة يمكن أن ينهار. ونتيجة لذلك ، قاموا بذلك بطريقة بسيطة - تتفاعل جميع الخدمات إما من خلال مآخذ tcp خالصة ، أو طلبات http مع استمرار النشاط ، إذا كنت بحاجة إلى إرسال الطلبات في اتجاه واحد فقط.
حسن: حلل البدائل. اخترنا حلا جيدا.
سيئ: نقص الخبرة في التكنولوجيا. ليست هناك حاجة لسحب الأشياء إلى الإنتاج التي لا يمكنك إصلاحها في حالة حدوث مشاكل.
اللعب عبر الإنترنت يعني أنك بحاجة إلى غرفة دردشة. اكتب نفسك؟ من غير المحتمل أن تكون قابلة للتطوير. لنأخذ شيئًا جاهزًا. XMPP؟ اجبرد؟ يبدو جيدًا. بشكل عام ، حاولنا كل من القنفذ و MongooseIM ، لكننا استقرنا في النهاية على القنفذ. كانت هناك بعض المشاكل في رفعه على خوادمهم (عضادات مع توقيت في الرسائل ، أعطال ، وما إلى ذلك). قررنا استخدام حل سحابة
ejabberd-saas.com . نعم ، إنها مدفوعة. لكنها عملت دون مشاكل.
حسن: حلل البدائل. حدد الخيار المناسب.
سيئ: بدلاً من حل المشكلات المحلية ، قررنا استخدام حل سحابي مدفوع. معدلات هناك من 200 يورو. كان لدينا العديد من مناطق الألعاب. بالنسبة لفريق مستقل ، يأتي هذا بكمية كبيرة جدًا ، والتي من الأفضل إنفاقها على أشياء أخرى.
في البداية ، لم يكن لدينا بشكل عام أي نظام لجمع المقاييس على الخوادم. لماذا يتباطأ الطلب؟ ما هو الخطأ في الخدمة؟ كم عدد الغرف المتاحة الآن؟ نعم ، لم نتمكن حتى من رؤية عدد الغرف المتاحة حاليًا!
في وقت لاحق جاء إدراك أن هناك حاجة لعمل شيء ما. حاول استخدام الجرافيت + جرافانا. حتى صورة ما قبل عامل الميناء فعلت كل هذا:
github.com/Suvitruf/docker-grafana-graphite-diamondلكنها لم تنجح. لم أكن أرغب في قضاء بعض الوقت في ذلك ، قررنا استخدام شيء جاهز. وقع الاختيار على
www.datadoghq.comكل شيء رائع. العدادات والتنبيهات والرسوم البيانية. برنامج تشغيل العميل هو تقريبًا نفس الجرافيت. الجمال لكن ... 10 + $ لكل مضيف في الشهر. III ... يخرج بسعر 200 + دولار في الشهر.
كان إدراك أننا أغضبنا الكثير من المال على هذا الوقت متأخرًا جدًا. قررنا ، مع ذلك ، القيام بذلك على خوادمنا. قم بإعداد
www.influxdata.com . ونتيجة لذلك ، تعالج سيارة واحدة لعشرات الدولارات المقاييس بهدوء من عشرات / مئات السيارات.
جيد: لقد حاولنا ذلك بسرعة. العثور على بديل جاهز. لقد أدركوا (وإن كانوا متأخرين) أن القرار كان خاطئًا. قم بإعداد نظام مناسب محليًا.
سيئ: لم أفهم المشكلة بشكل صحيح. قضى الكثير من المال.
فيما يتعلق بالمقاييس ، نفس المشكلة مع الأداء. في البداية ، نحن لسنا بشكل خاص عميل ولا خادم على ملفات التعريف. ونتيجة لذلك ، تم اكتشاف تسرب للذاكرة في مثيلات الخادم للعبة بعد فوات الأوان. لم يتمكنوا من تحديد وإصلاح على الفور. ونتيجة لذلك ، كتبوا أنه بعد إنشاء عدد معين من الغرف ، يتم إعادة تشغيل مثيل اللعبة.

قليلا عن الحلول المفاهيمية والحوكمة
لا يمكنني الآن بناء الترتيب الصحيح في الوقت المناسب لجميع هذه الأحداث ، وسأذكر بعض القرارات الرئيسية التي اتخذناها.
تقسيم اللعبة حسب المنطقة
طلب اللاعبون خادمًا آسيويًا وخادمًا في أمريكا الجنوبية (قبل أن يكون هذا الخادم في أوروبا والولايات المتحدة الأمريكية). لماذا لا تفعل ذلك؟ فعلوا ذلك. ونتيجة لذلك ، انتشر مستخدم ونصف مستخدم في 4 مناطق. مرة واحدة عدة مناطق ، فأنت بحاجة إلى إجراء نظام نقل. هل هذا منطقي؟ منطقي.
جيد: حصل شخصان على أفضل بينغ (。 • ́︿ • ̀。)
سيئ: الكثير من الوقت الذي يقضيه في إنشاء المناطق وأنظمة النقل وما إلى ذلك.
من الضروري الاستماع إلى اقتراحات / اقتراحات اللاعبين ، ولكن لا يجب أن تهرب على الفور وتدرك كل هذا.
استبدال شبكة مربعة بالسداسي وإعادة صنع الهجمات على الكواكب
في السابق ، كانت الكواكب تبدو كما يلي:

والهجمات:

لقد سهل التحول إلى السداسيات العديد من الأشياء من الناحية الفنية. بالإضافة إلى أنها تبدو أفضل بكثير ، من الأسهل العمل مع عناصر اللعبة.
نظام الإملائي المعدل
كان يبدو مثل هذا:

تمت الترقية نفسها للحجارة التي سقطت من الصناديق. كل شيء لم يكن واضحا ومربكا.
ونتيجة لذلك ، استبدلوا نظام الأحجار بمخطوطات كما في Clash Royale.

لتحسين الإملائي ، تحتاج إلى عدد معين من المخطوطات. كل شيء بسيط وواضح.
حسن: لاحظوا مكان المشكلة وأعادوا إصلاحه.
سيئ: في البداية لم يحللوا كيف يمكن للاعبين رؤيته. العديد من الأشياء الواضحة للمطورين ، ينظر اللاعبون بطريقة مختلفة تمامًا. لذلك ، يجب جمع التعليقات في أقرب وقت ممكن ، وترتيب اختبارات اللعب ، وما إلى ذلك.
التسوق على Twitch
حتى أننا اتفقنا مع
www.twitch.tv على إجراء عمليات شراء داخل اللعبة على صفحة اللعبة.

لكن منذ ذلك الحين لم يبث أحد لعبتنا ، فمعنى هذا القرار هو صفر بشكل عام.
جيد: مكان محتمل لسحب الأموال العادلة من اللاعبين.
سيئ: إذا لم يتم لعب اللعبة ، فلا فائدة من ذلك. مجرد إضاعة الوقت.
وضع معركة رويال
في أعقاب الضجيج ، قرروا قطع مثل هذا النظام في اللعبة. لكن منذ ذلك الحين كان هناك القليل عبر الإنترنت في اللعبة ، ثم في هذا الوضع كان هناك تقريبًا روبوتات فقط ، مما يلغي كل شيء إلى لا شيء.

حول البق
في مثل هذا المشروع ، من الصعب عدم عمل أخطاء. كان هناك العديد من أخطاء واجهة المستخدم الرسومية غير ضارة نسبيًا.

كانت هناك أخطاء أكثر خطورة ، على سبيل المثال ، عندما مات اللاعبون على الفور في وسط الساحة. لم نتمكن من إعادة محاولة هذا الخطأ محليًا. حدث ذلك أحيانًا للاعبين ، لكننا لم نتمكن من إصلاحه.
خلل مضحك عند تبديل الشخصية لم يتم حذف نموذج النموذج السابق. نتيجة لذلك ، كان من الممكن ترتيب حزب صعب.

كانت هناك أيضًا أخطاء تتعلق بالمنصة / المحرك.
على سبيل المثال ، في بعض الأحيان قد تختفي واجهة المستخدم الرسومية بأكملها ببساطة. ولكن إذا ذهبت إلى التسلسل الهرمي للكائنات والنقر فقط على الكائن ، فسيظهر مرة أخرى.
أبلغنا عن هذه المشكلة الوحدة. ردوا بأن بإمكانهم إعطائنا موظفًا للمساعدة مقابل 10 آلاف دولار شهريًا ლ (ಠ_ಠ ლ)
على منصة Facebook ، واجه Gameroom مشكلة في التحجيم عندما تفاعلت اللعبة مع السرعة في المكان الخطأ.
هذا ، ناهيك عن الخلل في المكتبات المختلفة. على سبيل المثال ، في بعض أجهزة Steamworks.NET ، يمكن أن
يتعطل github.com/rlabrecque/Steamworks.NET/issues/121 .
الملخص
لم نستثمر تقريبًا في التسويق ، كنا نأمل أن يكون هناك تدفق عضوي للاعبين. ونتيجة لذلك ، لم تصل اللعبة إلى تلك الكتلة الحرجة ، وبعد ذلك لن تكون هناك حاجة إلى الروبوتات وسيكون هناك تدفق عضوي للاعبين الجدد.
خاصة لم ينخرط أحد في إدارة المحتوى والتواصل مع اللاعبين ، لم تكن هناك رسائل إخبارية.
أثناء التطوير ، ضاع الكثير من الوقت في اختيار واختبار التقنيات المختلفة.
لم تكن هناك خطة واضحة لتنفيذ الميزات / المحتوى.
بشكل عام ، معظم هذه المشاكل ترجع إلى عدم الخبرة.
ما هي الخطوة التالية؟
تم إغلاق Unnyworld. قررنا أن نجعل المشروع أصغر في إطار الفرص الحالية.
مقال واحد لا يغطي كل شيء. وما كتبته عن شخص غريب قد يبدو وكأنه مجموعة من الحقائق غير المترابطة. لسوء الحظ ، ليس من الخبراء كتابة مثل هذه النصوص.
إذا كان لديك أي أسئلة ، يسعدني أن أجيب إما في التعليقات أو في مقال جديد.