Olá pessoal! Meu nome é Maxim e quero contar a história da criação do projeto Wasteland Wars. Espero que você esteja interessado, e talvez isso possa ajudá-lo a evitar meus erros.
Seleção de plataforma
O Telegram é uma plataforma muito fora do padrão para a criação de jogos online. Especialmente quando se trata de MMORPGs. Gostaria de saber se era possível criar um produto de qualidade nessa plataforma, e se sim, haveria alguma demanda por ele? Então, em junho de 2017, comecei a desenvolver Wasteland Wars.
Viralidade
Nos primeiros dias de desenvolvimento, foi decidido montar um grupo de foco de meus amigos para um teste de jogo. Afinal, ao lidar com a IMO, o teste sozinho era problemático. Então, iniciei o teste beta fechado do jogo, acessando o bot usando teclas únicas. Depois de gerar essas 10 peças, enviei-as para meus amigos no TG. O sistema de referência já foi adicionado a esse ponto, embora não funcionasse de fato em vista dos testes fechados. Sua essência é que, para cada pessoa registrada no jogo, de acordo com sua referência. Link, o jogador recebe +1 com a resistência máxima e alguns limites (moeda local) para despesas de bolso. Isso levou ao fato de que, após duas semanas desde o início do PTA, 50 pessoas participaram e minhas mensagens privadas foram atoladas com pedidos de pessoas para fornecer a eles mais uma ou mais 10 a 10 chaves para seus amigos. Em vez de gerar constantemente novas chaves, decidi me concentrar em corrigir os erros encontrados nos testes e iniciar um teste beta aberto, sem registrar as chaves. No primeiro dia do MBT, 120 pessoas se inscreveram no jogo. Um mês depois, o diário on-line era de 200 a 250 pessoas por dia, e o número total de jogadores registrados estava chegando a 800. E tudo isso sem nenhum movimento da minha parte no jogo de relações públicas, o jogo ficou conhecido exclusivamente graças ao sistema de referência e boca a boca.
Recursos do projeto que os jogadores gostaram
Durante o teste, os jogadores observaram um gênero de jogo extremamente incomum para esse formato, batalhas PVP completas e o sistema de bombeamento de um jogador sem pontos de habilidade e aprimoramentos clássicos. Mas, o que me surpreendeu - a maioria das pessoas elogiou os textos do jogo, notando principalmente a qualidade do humor, referências à cultura popular e situações atmosféricas, contrastando com o humor negro e seu drama.
Detalhes técnicos
As primeiras dificuldades associadas à plataforma Bot API surgiram nos primeiros dias de desenvolvimento. O Telegram possui 2 sistemas principais para conectar seus bots ao servidor: os chamados Long Polling e Webhooks. O primeiro implica que o servidor irá pesquisar constantemente o Telegram em um determinado intervalo para novas solicitações e, se houver, ele o processará retornando uma resposta da API do Bot. A segunda é um pouco mais difícil de implementar - consiste no fato de o seu servidor dizer ao Telegram "se você tiver alguma solicitação, solte-a neste endereço". Assim, para implementar o bot usando a tecnologia Webhooks, é necessário um endereço IP permanente e um certificado SSL, pelo menos autoassinado. Tendo iniciado o desenvolvimento com base no Long Polling, no começo não percebi nenhum problema associado a esse método. No entanto, após um dia de operação contínua, o bot travou inesperadamente. O Telegram começou a retornar um erro quando recebeu uma solicitação. Como se viu, esse problema está afetando absolutamente todos os bots baseados em Long Polling - o telegrama fecha o processamento de solicitações do bot depois de algum tempo, por causa do qual é necessário reiniciá-lo constantemente. Primeiro, decidi tentar automatizar o processo de "ressuscitação" do bot escrevendo um script cron para verificar o pulso do processo e reiniciar se o paciente não responder a um cutucão. Entretanto, esse processo de reinicializações constantes causou transtornos aos jogadores, pois demorou algum tempo e também redefiniu os cronômetros atuais do jogo. Como resultado, o projeto foi transferido para o Webhooks e esse problema desapareceu imediatamente.
Além disso, em termos de complexidade da própria API Bot, tudo estava calmo. Até um momento.
O projeto estava ganhando escopo, construindo seu público e evoluindo constantemente. A certa altura, o bot subitamente começou a "entediar" ao receber o pedido. Mais precisamente, houve um atraso na resposta do bot ao jogador. Primeiro, subi no servidor, pensando que ele havia deixado de lidar com o crescente número de solicitações. Mas não, a carga do servidor não excedeu 30% nos horários de pico, não houve problemas com memória livre, não houve erros e avisos no log do sistema. Mas os freios continuaram a crescer. Como se viu, o bot começou a se apoiar no limite da API de bot em termos do número de solicitações simultâneas. No começo, reduzi e otimizei o bot para reduzir esse valor. No entanto, à medida que o jogo se espalha para as massas, ficou óbvio: muito em breve o bot atingirá esse limite e nenhuma otimização me ajudará. Foi então decidido escrever em suporte ao Telegram com uma solicitação para aumentar os limites especificamente para o meu bot. E para minha grande surpresa, eles responderam no dia seguinte, e o limite foi aumentado, embora não tenham nomeado um novo limite. Além disso, eles me informaram que o bot repousa no limite de um tipo específico de solicitação - retorno de chamada no chamado. Botões embutidos. Este é o teclado no Telegram, exibido sob uma mensagem específica. Para solicitações de texto (incluindo aquelas com botões comuns), o limite é muito maior e também não há limite de 15 segundos para uma resposta do servidor. O problema era que 70% da interface do jogo era construída com botões embutidos. Eu tive que processá-lo completamente para me livrar desse mal, tão conveniente e bonito.
O próximo problema que o projeto encontrou já estava no meu ambiente e código de desenvolvimento. Especificamente, no Python 3 e como ele funciona com threads. Cada novo thread no Python 3 é criado junto com variáveis de ambiente, consumindo uma grande quantidade de memória. O jogo está cheio de temporizadores (2 minutos para alternar entre locais, aguardando uma batalha etc.) e lançá-los em fluxos separados criou um vazamento de memória. À medida que o jogo online cresce, o vazamento atingiu uma escala louca, devorando toda a RAM possível e aumentando a memória restante do servidor SSD. Obviamente, o problema foi resolvido criando filas de timers que são processados em um encadeamento para cada tipo.
Parte visual em um jogo de texto
Uma das principais características do Wasteland Wars em relação a outros jogos semelhantes no Telegram foi a introdução da parte visual. Um avatar interativo do personagem foi adicionado ao jogo, bem como uma exibição visual de cada item de equipamento no jogo. Como nos RPGs em tamanho real nas plataformas de jogos, um jogador pode vestir seu personagem com armaduras diferentes, fornecer armas diferentes e ver todas as mudanças visualmente. Um pouco mais tarde, desenvolvi essa idéia, agora, quando outro jogador se encontra no jogo, seu avatar também é exibido - dessa forma, torna-se possível não conhecer o bombeamento do inimigo, avaliar seu perigo na aparência. Além do equipamento, “Máscaras” também são exibidas no avatar - elas podem ser compradas para doação, não dão nenhuma vantagem ao jogador, mas mudam sua aparência no avatar. Além disso, um mapa interativo completo apareceu no jogo. Como qualquer local é encontrado, ele é adicionado ao jogador no mapa.
Todas as imagens são exibidas em uma resolução bastante baixa, suficiente para entender seu conteúdo. Isso se deve ao fato de que avatares e mapas são coletados de muitos elementos diferentes para cada jogador e, com um grande número de solicitações simultâneas, sua montagem em alta resolução pode carregar significativamente o servidor do jogo.
Planos de desenvolvimento do projeto
No momento, o jogo está sendo copiado para o Go - essa linguagem, como se viu, é muito mais adequada para o desenvolvimento de um projeto desse tipo. Ter meu próprio servidor da Web no Go e sua velocidade me permitiram começar a criar minha própria API para o projeto, a fim de desatá-lo de uma única plataforma no Telegram. A API permitirá que você receba e processe solicitações de qualquer cliente, e toda a lógica será processada apenas no servidor.
Assim, o desenvolvimento de um cliente para qualquer plataforma será tão simples quanto o próprio cliente, isso evitará muitas das limitações do Telegram, dificuldades em bloqueá-lo e também atrairá um grande número de novas audiências para o jogo.