Halo semuanya! Nama saya Maxim dan saya ingin menceritakan kisah pembuatan proyek Wasteland Wars. Saya harap Anda akan tertarik, dan mungkin beberapa di antaranya dapat membantu Anda menghindari kesalahan saya.
Pemilihan platform
Telegram adalah platform yang sangat tidak standar untuk membuat game online. Terutama ketika datang ke MMORPG. Saya bertanya-tanya apakah mungkin untuk menciptakan produk yang berkualitas di platform ini sama sekali, dan jika demikian, apakah akan ada permintaan untuk itu sama sekali. Jadi, pada Juni 2017, saya mulai mengembangkan Wasteland Wars.
Virality
Pada hari-hari awal pengembangan, diputuskan untuk mengumpulkan kelompok fokus dari teman-teman saya untuk tes permainan. Lagi pula, ketika berhadapan dengan IMO, pengujian saja ternyata bermasalah. Jadi saya meluncurkan uji beta tertutup game, membuat akses ke bot menggunakan kunci satu kali. Setelah menghasilkan 10 buah seperti itu, saya mengirimnya ke teman-teman saya di TG. Sistem rujukan sudah ditambahkan ke titik ini, meskipun sebenarnya tidak bekerja mengingat pengujian tertutup. Intinya adalah bahwa untuk setiap orang yang terdaftar dalam permainan sesuai dengan referensi Anda. Tautkan, pemain mendapat +1 ke stamina maksimum dan beberapa topi (mata uang lokal) untuk pengeluaran saku. Ini mengarah pada fakta bahwa setelah 2 minggu dari awal PTA, 50 orang mengambil bagian di dalamnya, dan pesan pribadi saya penuh dengan permintaan dari orang-orang untuk memberi mereka 1-2-10 kunci lagi untuk teman-teman mereka. Alih-alih terus-menerus menghasilkan kunci baru, saya memutuskan untuk fokus memperbaiki bug yang ditemukan dalam pengujian dan meluncurkan uji beta terbuka, tidak mendaftar dengan kunci. Pada hari pertama MBT, 120 orang mendaftar dalam game. Sebulan kemudian, online hariannya adalah 200-250 orang per hari, dan jumlah total pemain terdaftar mendekati 800. Dan semua ini tanpa ada gerakan di bagian PR saya, permainan menjadi dikenal secara eksklusif berkat sistem komunikasi dari mulut ke mulut dan rujukan.
Memproyeksikan fitur yang disukai pemain
Selama pengujian, pemain mencatat genre permainan yang sangat tidak biasa untuk format ini, pertempuran PVT lengkap dan sistem pemompaan pemain tanpa poin keterampilan klasik dan peningkatan level. Tapi, yang mengejutkan saya - kebanyakan orang memuji teks permainan, terutama memperhatikan kualitas humor, referensi budaya populer dan situasi atmosfer, kontras dengan humor hitam dengan drama mereka.
Rincian teknis
Kesulitan pertama yang terkait dengan platform Bot API muncul di hari-hari pertama pengembangan. Telegram memiliki 2 sistem utama untuk menghubungkan bot mereka ke server Anda: yang disebut Long Polling dan Webhooks. Yang pertama menyiratkan bahwa server Anda akan terus-menerus melakukan polling Telegram pada interval tertentu untuk permintaan baru, dan jika ada, itu akan memprosesnya dengan mengembalikan respons Bot API. Yang kedua sedikit lebih sulit untuk diterapkan - ini terdiri dari fakta bahwa server Anda memberi tahu Telegram "jika Anda memiliki permintaan, letakkan di alamat ini." Dengan demikian, untuk menerapkan bot menggunakan teknologi Webhooks, diperlukan alamat IP permanen dan sertifikat SSL, setidaknya ditandatangani sendiri. Setelah memulai pengembangan berdasarkan Long Polling, pada awalnya saya tidak melihat adanya masalah yang terkait dengan metode ini. Namun, setelah seharian beroperasi terus-menerus, bot itu secara tak terduga jatuh. Telegram mulai mengembalikan kesalahan ketika menerima permintaan. Ternyata, masalah ini mengganggu sepenuhnya semua bot berbasis Polling Panjang - telegram menutup pemrosesan permintaan dari bot setelah beberapa waktu, karena itu Anda harus terus-menerus menyalakannya kembali. Pertama, saya memutuskan untuk mencoba mengotomatiskan proses "reanimation" bot dengan menulis skrip cron untuk memeriksa denyut nadi proses dan memulai kembali jika pasien tidak menanggapi stick poke. Namun, proses restart konstan ini menyebabkan ketidaknyamanan bagi pemain, seperti membutuhkan waktu, dan juga mengatur ulang penghitung waktu saat ini dalam permainan. Akibatnya, proyek dipindahkan ke Webhooks, dan masalah ini segera hilang.
Lebih jauh dalam hal kompleksitas dari Bot API itu sendiri, semuanya tenang. Sampai suatu saat.
Proyek ini mendapatkan ruang lingkup, membangun audiens dan terus berkembang. Pada satu titik, bot itu tiba-tiba mulai "tumpul" setelah menerima permintaan. Lebih tepatnya, ada keterlambatan dalam respons bot terhadap pemain. Pertama-tama, saya naik ke server, berpikir bahwa itu telah berhenti untuk mengatasi meningkatnya jumlah permintaan. Tapi tidak, beban server tidak melebihi 30% pada waktu puncak, tidak ada masalah dengan memori bebas, tidak ada kesalahan dan peringatan di log sistem. Tetapi rem terus tumbuh. Ternyata, bot mulai bertumpu pada batas Bot API dalam hal jumlah permintaan simultan untuk itu. Pada awalnya, saya berhasil mengurangi dan mengoptimalkan bot untuk mengurangi jumlah ini. Namun, ketika permainan menyebar ke massa, menjadi jelas: segera bot akan mencapai langit-langit ini dan tidak ada optimasi yang akan membantu saya. Kemudian diputuskan untuk menulis mendukung Telegram dengan permintaan untuk meningkatkan batas khusus untuk bot saya. Dan saya sangat terkejut, mereka menjawab keesokan harinya, dan batasnya bertambah, meskipun mereka tidak menyebutkan ambang baru. Selain itu, mereka memberi tahu saya bahwa bot bertumpu pada batas untuk jenis permintaan tertentu - Callback pada apa yang disebut. Tombol sebaris. Ini adalah keyboard di Telegram, yang ditampilkan di bawah pesan tertentu. Untuk permintaan teks (termasuk yang dengan tombol biasa), batasnya jauh lebih tinggi, dan juga tidak ada batas 15 detik untuk respons dari server. Masalahnya adalah bahwa 70% dari antarmuka game dibangun di atas tombol inline. Saya harus mengolahnya sepenuhnya untuk menyingkirkan kejahatan ini, begitu nyaman dan indah.
Masalah selanjutnya yang dihadapi proyek adalah sudah ada di lingkungan pengembangan dan kode saya. Secara khusus, dalam Python 3 dan cara kerjanya dengan utas. Setiap utas baru di Python 3 dibuat bersama dengan variabel lingkungan, memakan sejumlah besar memori. Gim ini penuh timer (2 menit untuk beralih di antara lokasi, menunggu pertempuran, dll.), Dan meluncurkannya di aliran terpisah membuat kebocoran memori. Seiring permainan online tumbuh, kebocoran telah mencapai skala gila, melahap semua kemungkinan RAM dan memompa memori yang tersisa dari server SSD. Tentu saja, masalah itu diselesaikan dengan membuat antrian timer yang diproses dalam satu utas untuk setiap jenis.
Bagian visual dalam permainan teks
Salah satu fitur utama dari Wasteland Wars relatif terhadap permainan serupa lainnya di Telegram adalah pengenalan bagian visual. Avatar interaktif karakter ditambahkan ke permainan, serta tampilan visual dari setiap item peralatan dalam permainan. Seperti dalam RPG ukuran penuh pada platform game, pemain dapat mendandani karakternya dengan baju besi berbeda, memberinya senjata yang berbeda, dan kemudian melihat semua perubahan secara visual. Beberapa saat kemudian, saya mengembangkan ide ini, sekarang ketika pemain lain bertemu dalam permainan, avatarnya juga ditampilkan - dengan cara ini menjadi mungkin untuk tidak mengetahui pemompaan musuh, untuk mengevaluasi bahayanya dalam penampilan. Selain peralatan, "Masker" juga ditampilkan pada avatar - mereka dapat dibeli untuk sumbangan, mereka tidak memberikan keuntungan bagi pemain, tetapi mereka mengubah penampilannya di avatar. Selain itu, peta interaktif lengkap muncul di game. Karena setiap lokasi ditemukan, itu ditambahkan ke pemain di peta.
Semua gambar ditampilkan dalam resolusi yang cukup rendah, cukup untuk memahami kontennya. Ini karena fakta bahwa avatar dan peta dikumpulkan dari banyak elemen berbeda untuk setiap pemain, dan dengan sejumlah besar permintaan simultan, perakitan mereka dalam resolusi tinggi dapat secara signifikan memuat server game.
Rencana pengembangan proyek
Saat ini, gim tersebut sedang disalin ke Go - bahasa ini, ternyata, jauh lebih cocok untuk pengembangan proyek semacam itu. Memiliki server web saya sendiri di Go dan kecepatannya memungkinkan saya untuk mulai membuat API saya sendiri untuk proyek untuk melepaskannya dari satu platform tunggal di Telegram. API akan memungkinkan Anda untuk menerima dan memproses permintaan dari klien mana pun, dan semua logika hanya akan diproses di server.
Dengan demikian, mengembangkan klien untuk platform apa pun akan sesederhana klien itu sendiri, ini akan menghindari banyak keterbatasan Telegram, kesulitan memblokirnya, serta menarik sejumlah besar audiens baru ke permainan.