Mes étapes, mes succès et mes erreurs dans le monde du développement de jeu par l'exemple d'un bot de jeu dans Telegram

Bonjour à tous! Je m'appelle Maxim et je veux vous raconter l'histoire de la création du projet Wasteland Wars. J'espère que vous serez intéressé, et peut-être que cela peut vous aider à éviter mes erreurs.

Sélection de la plateforme


Telegram est une plateforme très non standard pour créer des jeux en ligne. Surtout en ce qui concerne les MMORPG. Je me demandais s'il était possible de créer un produit de qualité sur cette plate-forme, et si oui, y aurait-il une demande pour cela. Donc, en juin 2017, j'ai commencé à développer Wasteland Wars.

Viralité


Au début du développement, il a été décidé de réunir un groupe de discussion de mes amis pour un test de jeu. Après tout, lorsqu'il s'agissait de l'OMI, les tests seuls étaient problématiques. J'ai donc lancé le test bêta fermé du jeu, rendant l'accès au bot à l'aide de touches uniques. Ayant généré ces 10 pièces, je les ai envoyées à mes amis dans TG. Le système de référence a déjà été ajouté à ce point, bien qu'il ne fonctionne pas en fait compte tenu des tests clôturés. Son essence est que pour chaque personne inscrite au jeu selon votre référence. Link, le joueur obtient +1 à l'endurance maximale et quelques plafonds (monnaie locale) pour les dépenses de poche. Cela a conduit au fait qu'après 2 semaines depuis le début du PTA, 50 personnes y ont participé, et mes messages privés ont été bloqués avec des demandes de personnes pour leur donner encore 1-2-10 clés pour leurs amis. Au lieu de générer constamment de nouvelles clés, j'ai décidé de me concentrer sur la correction des bogues trouvés dans les tests et de lancer un test bêta ouvert, en vous désinscrivant par clés. Le premier jour du MBT, 120 personnes se sont inscrites au jeu. Un mois plus tard, le quotidien en ligne était de 200 à 250 personnes par jour, et le nombre total de joueurs inscrits approchait 800. Et tout cela sans aucun mouvement de ma part du jeu PR, le jeu est devenu connu exclusivement grâce au bouche à oreille et au système de référence.

Fonctionnalités du projet que les joueurs ont appréciées


Au cours des tests, les joueurs ont noté un genre de jeu qui était extrêmement inhabituel pour ce format, des batailles PVP à part entière et un système de pompage d'un joueur sans points de compétence classiques et niveaux. Mais, ce qui m'a surpris - la plupart des gens ont fait l'éloge des textes du jeu, notant en particulier la qualité de l'humour, les références à la culture populaire et aux situations atmosphériques, contrastant avec l'humour noir avec leur drame.

Détails techniques


Les premières difficultés liées à la plateforme API Bot sont apparues dès les premiers jours de développement. Telegram dispose de 2 systèmes principaux pour connecter leurs bots à votre serveur: les soi-disant longues interrogations et les webhooks. Le premier implique que votre serveur interrogera constamment Telegram à un certain intervalle pour les nouvelles demandes, et s'il y en a, il le traitera en renvoyant une réponse de l'API Bot. La seconde est un peu plus difficile à implémenter - elle consiste dans le fait que votre serveur dit à Telegram "si vous avez des demandes, déposez-les à cette adresse". En conséquence, pour implémenter le bot à l'aide de la technologie Webhooks, une adresse IP permanente et un certificat SSL sont requis, au moins auto-signés. Ayant commencé le développement basé sur Long Polling, au début, je n'ai remarqué aucun problème associé à cette méthode. Cependant, après une journée de fonctionnement continu, le bot s'est écrasé de manière inattendue. Le télégramme a commencé à renvoyer une erreur lorsqu'il a reçu une demande. Il s'est avéré que ce problème affectait absolument tous les bots basés sur une interrogation longue - le télégramme ferme le traitement des demandes du bot après un certain temps, à cause duquel vous devez constamment le redémarrer. Tout d'abord, j'ai décidé d'essayer d'automatiser le processus de «réanimation» du bot en écrivant un script cron pour vérifier le pouls du processus et redémarrer si le patient ne répondait pas à un coup de bâton. Cependant, ce processus de redémarrages constants a causé des inconvénients aux joueurs, car a pris un certain temps et a également réinitialisé les minuteurs actuels du jeu. En conséquence, le projet a été transféré à Webhooks et ce problème a immédiatement disparu.

Plus loin en termes de complexité de l'API Bot elle-même, tout était calme. Jusqu'à un instant.

Le projet prend de l'ampleur, construit son audience et évolue constamment. À un moment donné, le bot a soudainement commencé à "s'émousser" à la réception de la demande. Plus précisément, il y a eu un retard dans la réponse du bot au joueur. Tout d'abord, je suis monté sur le serveur, pensant qu'il avait cessé de faire face au nombre croissant de demandes. Mais non, la charge du serveur n'a pas dépassé 30% aux heures de pointe, il n'y a eu aucun problème de mémoire libre, il n'y a pas eu d'erreurs et d'avertissements dans le journal système. Mais les freins ont continué de croître. Il s'est avéré que le bot a commencé à se reposer sur la limite de l'API Bot en termes de nombre de demandes simultanées. Au début, j'ai réussi à réduire et à optimiser le bot pour réduire ce montant. Cependant, au fur et à mesure que le jeu se propage aux masses, c'est devenu évident: très bientôt, le bot atteindra ce plafond et aucune optimisation ne m'aidera. Ensuite, il a été décidé d'écrire en faveur de Telegram avec une demande d'augmentation des limites spécifiquement pour mon bot. Et à ma grande surprise, ils ont répondu dès le lendemain, et la limite a été augmentée, bien qu'ils n'aient pas nommé de nouveau seuil. De plus, ils m'ont informé que le bot repose sur la limite d'un type spécifique de demande - Rappel sur le soi-disant. Boutons en ligne. Il s'agit du clavier de Telegram, qui s'affiche sous un message spécifique. Pour les demandes de texte (y compris celles avec des boutons ordinaires), la limite est beaucoup plus élevée, et il n'y a pas non plus de limite de 15 secondes pour une réponse du serveur. Le problème était que 70% de l'interface du jeu était construit sur des boutons en ligne. J'ai dû le traiter complètement pour me débarrasser de ce mal, si pratique et beau.

Le problème suivant que le projet a rencontré était déjà dans mon environnement de développement et mon code. Plus précisément, dans Python 3 et comment cela fonctionne avec les threads. Chaque nouveau thread dans Python 3 est créé avec des variables d'environnement, consommant une grande quantité de mémoire. Le jeu est plein de minuteries (2 minutes pour basculer entre les emplacements, attendre une bataille, etc.), et les lancer dans des flux séparés a créé une fuite de mémoire. Au fur et à mesure que le jeu en ligne se développe, la fuite a atteint une échelle folle, dévorant toute la RAM possible et gonflant la mémoire restante du serveur SSD. Bien sûr, le problème a été résolu en créant des files d'attente de minuteries qui sont traitées dans un thread pour chaque type.

Partie visuelle dans un jeu de texte


L'une des principales caractéristiques de Wasteland Wars par rapport à d'autres jeux similaires dans Telegram était l'introduction de la partie visuelle. Un avatar interactif du personnage a été ajouté au jeu, ainsi qu'un affichage visuel de chaque équipement du jeu. Comme dans les RPG en taille réelle sur les plateformes de jeu, un joueur peut habiller son personnage avec une armure différente, lui donner différentes armes, puis voir visuellement tous les changements. Un peu plus tard, j'ai développé cette idée, maintenant quand un autre joueur se rencontre dans le jeu, son avatar est également affiché - de cette façon, il devient possible de ne pas connaître le pompage de l'ennemi, d'évaluer son danger en apparence. En plus de l'équipement, des «masques» sont également affichés sur l'avatar - ils peuvent être achetés pour un don, ils ne donnent aucun avantage au joueur, mais ils changent son apparence dans l'avatar. De plus, une carte interactive complète est apparue dans le jeu. Lorsqu'un emplacement est trouvé, il est ajouté au joueur sur la carte.

Toutes les images sont affichées dans une résolution assez basse, suffisante pour comprendre leur contenu. Cela est dû au fait que les avatars et les cartes sont collectés à partir de nombreux éléments différents pour chaque joueur, et avec un grand nombre de demandes simultanées, leur assemblage en haute résolution peut charger considérablement le serveur de jeu.

Plans de développement de projets


Pour le moment, le jeu est en train d'être copié sur Go - ce langage s'est avéré bien mieux adapté au développement d'un tel projet. Avoir mon propre serveur Web dans Go et sa vitesse m'ont permis de commencer à créer ma propre API pour le projet afin de le détacher d'une seule plateforme dans Telegram. L'API vous permettra de recevoir et de traiter les demandes de n'importe quel client, et toute la logique sera traitée uniquement sur le serveur.

Ainsi, le développement d'un client pour n'importe quelle plate-forme sera aussi simple que le client lui-même, cela évitera de nombreuses limitations de Telegram, des difficultés à le bloquer et attirera un grand nombre de nouveaux publics dans le jeu.

Source: https://habr.com/ru/post/fr412805/


All Articles