Falar sobre novos projetos é, obviamente, bom, mas nem sempre tudo acontece como queremos.
Em geral, eles começaram a se lembrar do fakap do passado, quando a solução para um problema adicionava novos, se empolgava e decidiam compartilhar um casal. Como banir jogadores inocentes, matar seus próprios servidores, cometer um erro em uma carta e receber toneladas de feedback negativo dos usuários - isso é tudo que amamos.

Lost - seja banido
Houve um tempo em que nosso jogo War Robots, devido a falhas na arquitetura, foi atacado por trapaceiros. Havia serviços públicos que aumentavam a oferta de saúde a valores cósmicos, o que os tornava praticamente imortais. Como resultado,
encerramos a tarefa com trapaceiros, mas não imediatamente.
Inicialmente, queríamos resolver o problema lindamente em nível técnico: bloquear a capacidade de alterar os parâmetros do robô no cliente. Não conseguimos fazer isso (então, é claro, encontramos uma maneira). E então a primeira solução de trabalho foi um banhammer que calculou trapaceiros de acordo com um esquema simples:
- Cada robô após a partida foi testado quanto a danos.
- Se o dano sofrido pelo robô exceder o valor máximo de vida, o jogador será reconhecido como trapaceiro e sua conta será bloqueada.
A solução foi uma muleta, mas eficaz. Os problemas por causa dele começaram um pouco mais tarde, mas primeiro você terá que falar um pouco sobre outro bug e os recursos do desenvolvimento do PvP móvel síncrono.
Quando os jogadores têm uma conexão de Internet muito impertinente (o que é normal em jogos para celular), coisas absolutamente mágicas podem acontecer ao trocar dados entre o cliente e os servidores. As solicitações dos clientes são incompletas, fora de ordem ou com um grande atraso. Em geral, um bug no servidor permite que, se a conexão for ruim, o cliente possa enviar os resultados da batalha duas ou até três vezes seguidas. Dessa forma, os jogadores podem receber de duas a três vezes mais recompensas ou acidentalmente gastar o dobro de recursos em reparos.
Resolvemos esse problema rapidamente: o perfil do servidor aprendeu a ignorar resultados de batalha desnecessários de um cliente. Após testes bem-sucedidos, lançamos uma nova versão.
Foi aqui que nos cobriu.
Todo dia eu começava a banir um monte de jogadores com um banhammer, sobre o qual esquecemos com segurança, porque o problema dos robôs indestrutíveis com um suprimento infinito de saúde era coisa do passado. Aconteceu que, assim que o cliente do jogador enviou os resultados de uma batalha em dupla quantidade ao servidor, o banhammer percebeu de tal maneira que todo robô morto foi morto duas vezes - ou seja, sofreu danos duas vezes a sua saúde. E após cada batalha, os jogadores entraram na proibição em lotes.
Todo mundo, é claro, era pouco urbano e até pagava uma indenização, mas a situação é mais ou menos assim, não positiva, com certeza.

Como configurar o DDoS para si mesmo
Já
escrevemos sobre a evolução de nossa infraestrutura de servidores e agora lembramos de um caso daquela época.
No final de 2015, o lançamento do tão esperado recurso em War Robots - clãs. Quando a atualização foi lançada (e já era tarde da noite), abrimos o champanhe e tudo ficaria bem. Mas não tive que me alegrar por muito tempo - os servidores de repente se sentiram mal. Aconteceu que fizemos um ataque DDoS com nossas próprias mãos.
Como Muito simples O cliente na tela de resultados da batalha, na tentativa de obter informações sobre os clãs dos jogadores, fez muitos pedidos. E quando o servidor respondeu "deixe-me em paz, erro", o cliente retornou ao servidor sem tempo limite.
Na mesma noite, lavamos a bandeira (ainda não tínhamos tempo para fechar o champanhe), que era controlado pelo servidor de perfil - bloqueou completamente a operação da API do cliente Hangar. Para jogadores que já se juntaram aos clãs, deixamos essa bandeira, ou seja, tudo funcionou para eles, porque o número deles não era suficiente para fazer DDoS no servidor.
Como resultado, começamos a processar corretamente as respostas do servidor no jogo e, em caso de erro, aumentamos o tempo limite para tentar novamente a solicitação.
Classificação "grátis"
Uma história separada é quando a implementação de baixa qualidade atende ao fator humano. Só que agora eles não baniram ninguém, mas, pelo contrário, distribuíram a classificação para a esquerda e para a direita. Em resumo, uma noite, nosso monitoramento (e monitoramos
tudo ) registrou um crescimento muito rápido nas classificações de jogadores.
Depois, verificou-se que a própria implementação da pontuação na teoria tornou possível duplicar os dados. Mas ninguém teria prestado atenção se o administrador de serviço, por causa de um erro de digitação em uma carta, reiniciasse acidentalmente um servidor que não deveria funcionar. Foi ele quem começou a dobrar as classificações dos jogadores.
Eu tive que liberar uma correção com urgência e percorrer a base para remover todos os pontos extras que tinham tempo para acumular. Para evitar que isso aconteça - em todos os servidores, eliminamos o antigo esquema de cálculo de pontos e excluímos a possibilidade de lançamento incorreto de serviços onde eles não deveriam funcionar. Era necessário fazê-lo desde o início, é claro, mas seria muito chato.
Prêmio inestimável
Houve outro fakap com um erro de digitação, mas muito mais sério.
De alguma forma, no Halloween, lançamos uma nova gacha - uma loteria. Se alguém não sabe, um gacha é a mecânica de obter um item de vários diferentes aleatoriamente. Na loteria, o jogador tinha um conjunto visível limitado de prêmios de valores diferentes. Para cada abertura, o jogador recebeu 1 prêmio, esse prêmio foi retirado do set e o preço de abertura aumentou a cada vez. Assim, o jogador podia comprar todos os prêmios da loteria com certeza, e os sortudos ganharam os prêmios mais valiosos nas primeiras aberturas (e, portanto, os receberam muito barato).
Em geral, com o sangue, lavávamos um recurso do evento, testávamos e organizávamos. Começamos, atualizamos horários ... Viva! Eles se apressaram! .. E, ao mesmo tempo, toneladas de negatividade na comunidade estão caindo sobre nós, alegando que estamos enganando nossos jogadores.
Dentro de meia hora, a loteria teve que ser desligada. Sim, nós realmente enganamos os jogadores. Mas não era uma questão de chances ou prêmios - estava em uma letra.
A interface da loteria mostra o custo da abertura atual (a que aumenta a cada vez), por exemplo, PREÇO: 100 Gold. Aqui está a aparência do conceito (observe que, de acordo com a ideia, cada cartão também tem um preço de abertura adicional):

E aqui está como chegou ao fim quando, como resultado de uma série de "melhorias", o preço (de participação na loteria) subitamente se transformou em um prêmio (prêmio) para o designer:

Ao mesmo tempo, devido à confusão antes do lançamento e ao mau cheque de cada carta individual, o preço de abertura foi perdido, o que todos confundiram os jogadores.
E eles pressionaram reflexivamente o botão até gastar toda a dureza. Bem, o que, o "prêmio" está aumentando a cada compra. E assim foi em 18 idiomas. Ao mesmo tempo, também tínhamos “locales” no cliente, portanto, era possível corrigir apenas uma letra apenas por meio de um hotfix.
Como resultado, eles revelaram a situação, introduziram pontos de verificação adicionais, devolveram o ouro aos jogadores e salvaram os locais no servidor para que nada disso acontecesse novamente.
É hora de apresentar a hashtag
# Kosyakinaprode