Mis pasos, éxitos y errores en el mundo del desarrollo de juegos con el ejemplo de un bot de juegos en Telegram

Hola a todos! Mi nombre es Maxim y quiero contarles la historia de la creación del proyecto Wasteland Wars. Espero que te interese, y tal vez algo de esto pueda ayudarte a evitar mis errores.

Selección de plataforma


Telegram es una plataforma muy no estándar para crear juegos en línea. Especialmente cuando se trata de MMORPG. Me preguntaba si era posible crear un producto de calidad en esta plataforma, y ​​de ser así, ¿habría alguna demanda? Entonces, en junio de 2017, comencé a desarrollar Wasteland Wars.

Viralidad


En los primeros días de desarrollo, se decidió reunir un grupo focal de mis amigos para una prueba de juego. Después de todo, cuando se trata de IMO, las pruebas por sí solas eran problemáticas. Así que lancé la prueba beta cerrada del juego, haciendo acceso al bot usando teclas de una sola vez. Habiendo generado tales 10 piezas, las envié a mis amigos en TG. El sistema de referencia ya se agregó a este punto, aunque en realidad no funcionó en vista de las pruebas cerradas. Su esencia es que para cada persona registrada en el juego según su referencia. Enlace, el jugador obtiene +1 a la resistencia máxima y algunos topes (moneda local) para gastos de bolsillo. Esto llevó al hecho de que después de 2 semanas desde el comienzo de la PTA, 50 personas participaron en él, y mis mensajes privados se atascaron con solicitudes de personas para darles otras llaves 1-2-10 para sus amigos. En lugar de generar constantemente nuevas claves, decidí concentrarme en corregir los errores encontrados en las pruebas y lanzar una prueba beta abierta, sin registrar por claves. El primer día de MBT, 120 personas se registraron en el juego. Un mes después, el diario en línea era de 200-250 personas por día, y el número total de jugadores registrados se acercaba a 800. Y todo esto sin ningún movimiento de mi parte en el juego de relaciones públicas, el juego se dio a conocer exclusivamente gracias al boca a boca y al sistema de referencias.

Características del proyecto que les gustaron a los jugadores


Durante las pruebas, los jugadores notaron un género de juego que era extremadamente inusual para este formato, batallas PVP completas y el sistema de bombeo de un jugador sin puntos de habilidad clásicos y niveles. Pero, lo que me sorprendió: la mayoría de las personas elogiaron los textos del juego, especialmente señalando la calidad del humor, las referencias a la cultura popular y las situaciones atmosféricas, en contraste con el humor negro con su drama.

Detalles técnicos


Las primeras dificultades asociadas con la plataforma Bot API surgieron en los primeros días de desarrollo. Telegram tiene 2 sistemas principales para conectar sus bots a su servidor: los llamados Long Polling y Webhooks. El primero implica que su servidor sondeará constantemente Telegram en un cierto intervalo para nuevas solicitudes, y si hay alguna, la procesará devolviendo una respuesta API de Bot. El segundo es un poco más difícil de implementar: consiste en el hecho de que su servidor le dice a Telegram "si tiene alguna solicitud, envíela a esta dirección". En consecuencia, para implementar el bot utilizando la tecnología Webhooks, se requiere una dirección IP permanente y un certificado SSL, al menos autofirmado. Habiendo comenzado el desarrollo basado en Long Polling, al principio no noté ningún problema asociado con este método. Sin embargo, después de un día de operación continua, el bot se bloqueó inesperadamente. Telegram comenzó a devolver un error cuando recibió una solicitud. Al final resultó que, este problema está afectando absolutamente a todos los bots basados ​​en Long Polling: el telegrama cierra el procesamiento de la solicitud del bot después de un tiempo, por lo que debe reiniciarlo constantemente. Primero, decidí tratar de automatizar el proceso de "reanimación" del bot escribiendo un script cron para verificar el pulso del proceso y reiniciar si el paciente no respondía a un golpe de palo. Sin embargo, este proceso de reinicios constantes causó molestias a los jugadores, ya que tomó un tiempo y también restableció los temporizadores actuales en el juego. Como resultado, el proyecto se transfirió a Webhooks y este problema desapareció de inmediato.

Además, en términos de complejidad de la API de Bot, todo estaba en calma. Hasta un momento

El proyecto estaba ganando alcance, construyendo su audiencia y evolucionando constantemente. En un momento, el bot de repente comenzó a "aburrirse" al recibir la solicitud. Más precisamente, hubo un retraso en la respuesta del bot al jugador. En primer lugar, me subí al servidor, pensando que había dejado de hacer frente a la creciente cantidad de solicitudes. Pero no, la carga del servidor no superó el 30% en las horas pico, no hubo problemas con la memoria libre, no hubo errores y advertencias en el registro del sistema. Pero los frenos continuaron creciendo. Al final resultó que, el bot comenzó a descansar en contra del límite API de Bot en términos de la cantidad de solicitudes simultáneas. Al principio, reduje y optimicé con éxito el bot para reducir esta cantidad. Sin embargo, a medida que el juego se extendió a las masas, se hizo evidente: muy pronto el bot llegará a este límite y ninguna optimización me ayudará. Luego se decidió escribir en apoyo de Telegram con una solicitud para aumentar los límites específicamente para mi bot. Y para mi gran sorpresa, respondieron al día siguiente, y el límite aumentó, aunque no mencionaron un nuevo umbral. Además, me informaron que el bot se basa en el límite para un tipo específico de solicitud: devolución de llamada en el llamado. Botones en línea. Este es el teclado en Telegram, que se muestra debajo de un mensaje específico. Para las solicitudes de texto (incluidas las que tienen botones normales), el límite es mucho mayor y tampoco hay un límite de 15 segundos para una respuesta del servidor. El problema era que el 70% de la interfaz del juego se basaba en botones en línea. Tuve que procesarlo por completo para deshacerme de este mal, tan conveniente y hermoso.

El siguiente problema con el que se encontró el proyecto ya estaba en mi entorno de desarrollo y código. Específicamente, en Python 3 y cómo funciona con hilos. Cada nuevo hilo en Python 3 se crea junto con variables de entorno, consumiendo una gran cantidad de memoria. El juego está lleno de temporizadores (2 minutos para cambiar entre ubicaciones, esperar una batalla, etc.), y lanzarlos en secuencias separadas creó una pérdida de memoria. A medida que el juego en línea crece, la fuga ha alcanzado una escala loca, devorando toda la RAM posible y bombeando la memoria restante del servidor SSD. Por supuesto, el problema se resolvió creando colas de temporizadores que se procesan en un hilo para cada tipo.

Parte visual en un juego de texto.


Una de las características clave de Wasteland Wars en relación con otros juegos similares en Telegram fue la introducción de la parte visual. Se agregó al juego un avatar interactivo del personaje, así como una visualización de cada elemento del equipo en el juego. Al igual que en los juegos de rol de tamaño completo en plataformas de juego, un jugador puede vestir a su personaje con diferentes armaduras, darle diferentes armas y luego ver todos los cambios visualmente. Un poco más tarde, desarrollé esta idea, ahora cuando otro jugador se encuentra en el juego, también se muestra su avatar, de esta manera es posible no saber el bombeo del enemigo, para evaluar su peligro en apariencia. Además del equipo, las "Máscaras" también se muestran en el avatar: se pueden comprar por donación, no le dan ninguna ventaja al jugador, pero cambian su apariencia en el avatar. Además, apareció un mapa interactivo completo en el juego. A medida que se encuentra cualquier ubicación, se agrega al jugador en el mapa.

Todas las imágenes se muestran en una resolución bastante baja, suficiente para comprender su contenido. Esto se debe al hecho de que los avatares y mapas se recopilan de muchos elementos diferentes para cada jugador, y con una gran cantidad de solicitudes simultáneas, su ensamblaje en alta resolución puede cargar significativamente el servidor del juego.

Planes de desarrollo del proyecto.


Por el momento, el juego se está copiando en Go: este lenguaje, como resultó, es mucho más adecuado para el desarrollo de dicho proyecto. Tener mi propio servidor web en Go y su velocidad me permitió comenzar a crear mi propia API para el proyecto con el fin de desatarlo de una sola plataforma en Telegram. La API le permitirá recibir y procesar solicitudes de cualquier cliente, y toda la lógica se procesará solo en el servidor.

Por lo tanto, desarrollar un cliente para cualquier plataforma será tan simple como el propio cliente, esto evitará muchas de las limitaciones de Telegram, las dificultades para bloquearlo, y atraerá una gran cantidad de público nuevo al juego.

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


All Articles