Estou procurando criar um jogo multiplayer de cima para baixo. Enquanto leio sobre diferentes tópicos, posso vê-los. Tenho alguns desafios reais pela frente, mas estou pronto para isso.
Uma coisa que não consigo entender é como devo proteger o jogo das pessoas que tentam criar bots?
O que eu quero dizer é que, até onde eu entendi, é impossível proteger o tráfego da rede de uma maneira que os jogadores não possam criar programas que escutem o que está acontecendo e o entendam.
Então, o que me preocupa é que as pessoas possam criar bots que escutem a localização atual dos jogadores rivais e enviar comunicações que imitem como se o jogador estivesse atirando no local "perfeito" exato para vencer a partida.
Então, que tipo de técnicas são usadas para proteger jogos em tempo real de tais bots?
Também gostaria de mencionar que tentei procurar discussões (pois isso parece algo com o qual muitas pessoas lutam), mas não conseguiu encontrar nada sobre isso especificamente, apenas como parte de perguntas mais amplas sobre redes em jogos em tempo real . Se eu deveria ter olhado mais, sinta-se à vontade para me colocar no meu lugar :)
fonte
Respostas:
Existem duas abordagens para combater bots. Eles são proteção do lado do cliente e análise do lado do servidor.
A proteção do lado do cliente é a abordagem mais óbvia - força bruta, em certo sentido. Você faz todos os esforços para garantir que o cliente do jogo seja totalmente legítimo, não tenha sido violado e que nenhum outro programa o afete. Agora, este é um problema difícil e impossível de resolver completamente. Mas muitos jogos tentam e têm algum sucesso com esse método. Sei que existem algumas soluções prontas para a proteção do cliente e sugiro que você as procure. Implementar um você mesmo é uma tarefa assustadora.
Além de ser menos de 100% eficaz, a proteção do cliente tem a desvantagem de ser extremamente irritante para os seus jogadores. Geralmente, isso implica coisas como desativar a alternância de tarefas com a tecla alt-tab, programas antivírus etc.
A análise do lado do servidor é menos invasiva. Nesta abordagem, você tem algum código de servidor que analisa padrões no comportamento dos jogadores. Na maioria das vezes, os robôs jogam comprovadamente diferentes. Por exemplo, jogadores humanos têm um tempo variável entre as ações (como chutes), e dessa vez obedecem a uma distribuição em curva de sino. Os bots primitivos terão tempo constante ou distribuídos uniformemente por algum intervalo. Curiosidade: usando esse método, certa vez capturamos um jogador com um bot mecânico - um dispositivo inteligente que pressionava botões em seu teclado físico. Escusado será dizer que nenhuma quantidade de proteção do cliente pode capturar esse . Ainda assim, essa análise não é perfeita. Bots mais avançados enganarão seus sistemas e, quanto mais verificações você implementar, mais bots avançados se tornarão.
Para melhor proteção, você pode combinar os dois métodos. A proteção do cliente tornará mais difícil o desenvolvimento de bots, e a análise do servidor interromperá bots simples que foram desenvolvidos rapidamente. Mas o que você faz, você nunca pode parar completamente os bots. Bem, a menos que você envie seus representantes para a casa dos jogadores, para supervisionar o jogo deles e denunciar violações. (A propósito, isso não é inédito. Eu definitivamente li uma história sobre a empresa de pôquer online que envia pessoas para a casa de um jogador muito bem-sucedido, para confirmar que ele estava jogando legitimamente. Mas agora não consigo encontrá-la.)
Existem mais duas recomendações duvidosas para combater bots. Primeiro, criptografe o tráfego da sua rede. Eu não acho que isso vai funcionar. Com seu cliente nas mãos de um inimigo, o tráfego pode ser e será descriptografado ... ou seu próprio cliente será usado para criptografia. Por outro lado, a criptografia adiciona lag, e isso é muito ruim para um "atirador em tempo real". A segunda recomendação é "apenas projete seu jogo em torno disso". Embora isso pareça uma boa idéia, ainda não vi um único jogo que conseguiu isso.
fonte
Eu não esperaria que nenhum dos grandes jogadores falasse sobre o que eles fazem para proteger seus jogos. Quanto menos as pessoas souberem o que estão fazendo, mais difícil será para as pessoas resolverem o problema. Acho que parte do que o Steam faz é procurar certos aplicativos em execução que estão em uma lista negra.
Pessoalmente, eu tentaria criptografar e ofuscar a comunicação o máximo possível entre as máquinas de comunicação; talvez valha a pena ler sobre o modo como o https / ssl trabalha para obter algumas idéias. Se os hosts gerassem chaves públicas / privadas aleatórias e enviassem a parte pública apenas para outros clientes, algo não seria capaz de interceptar e alterar facilmente o conteúdo dos pacotes enviados, embora se você tiver acesso ao cliente máquina, então nada é completamente seguro.
Você também precisará garantir que o exe do cliente não seja violado.
fonte
Projete seu jogo para que o trabalho em equipe e as decisões inteligentes sejam mais importantes do que ser capaz de mirar perfeitamente. Torna-se exponencialmente mais difícil fazer bots decentes.
fonte
E pergunte a si mesmo a pergunta mais importante sobre se vale a pena. Traidores e botters podem fazer duas coisas:
Os dois não são mutuamente exclusivos, é claro.
Normalmente, o maior problema é 3+ (como um ser humano pode, com o treinamento, usar 2 teclados ou outros dispositivos de entrada ao mesmo tempo, mas não mais porque ele tem apenas duas mãos) clientes dos mesmos endereços IP ou MAC (ou MAC) endereços) agindo em uníssono direto, executando comandos em milissegundos um do outro. Portanto, se você detectar, digamos, 5 clientes originários do mesmo endereço IP, todos dando comandos a uma taxa anormalmente alta e a uma coordenação anormalmente próxima, provavelmente encontrará o seu botter. Geralmente, isso será mais prejudicial em cenários de PvP em que esse exército de bot pode dominar um combate contra um número semelhante de toons controlados por humanos devido à sua maior coordenação e velocidade. Em cenários anteriores, normalmente há danos limitados no jogo (exceto pelo fato de permitir que uma pessoa treine vários toons para níveis altos mais rapidamente,
fonte