Eu estive pensando em implementar stealth em um jogo multiplayer. É um jogo estilo MOBA, então pense em League of Legends (LoL) e Heroes of the Storm (HotS). Vários clientes se conectam a um único servidor, que transmite o estado do jogo a todos os clientes. Os clientes enviam seus dados de entrada para o servidor, o que pode ser rejeitado ao encontrar comandos inválidos, impossibilitando a trapaça (bem, em teoria).
Agora, eu mencionei esses jogos de propósito porque ambos implementaram stealth de maneira diferente. LoL tem discrição com dois estados possíveis: você é completamente visível ou completamente invisível. O HotS, por outro lado, implementa furtividade de maneira que você pode perceber com um brilho no ar:
Penso que este é um mecânico elegante, pois promove / recompensa prestando atenção ao seu entorno. No entanto, este ser um jogo multiplayer me fez perceber que isso pode ser facilmente explorável.
Quando você implementa furtividade da maneira 'LoL', pode simplesmente parar de enviar as coordenadas do jogador para os outros clientes. Quando o personagem do jogador quebra furtivamente, o servidor pode transmitir o local novamente. No entanto, com o modelo HotS, um brilho pode ser visto no ar onde o personagem está se movendo. Isso significa que o servidor deve estar enviando a localização do player para os outros clientes. O que significa que jogadores que mudam a textura ou modelo ou mesmo o próprio código do jogo podem tornar inútil o mecânico da capa. Aqui está um tópico nas placas HotS sobre isso.
Minha pergunta é se existe alguma maneira de implementar camuflagem (com um 'shimmer', à la HotS), sem ter o problema de que jogadores habilidosos podem modificar o jogo (dados) e 'vencer o sistema'. Isso é possível e, se não, como outros jogos multiplayer com esse mecânico lidam com isso? Apenas o estilo LoL de invisibilidade é invencível?
Pensei em ter o servidor enviando locais falsos de 'capa' de vez em quando, mas isso também prejudica jogadores justos que estão apenas prestando atenção, para que não funcionem.
fonte
Respostas:
Você não pode implementar um efeito cintilante sem facilitar a exploração ... mas e se você usasse um meio indireto de mostrar que alguém está por perto, um meio que também se aplica a jogadores visíveis?
Por exemplo, e se os jogadores deixarem pegadas e as mensagens "pegadas criadas" forem enviadas do servidor independentemente da localização do jogador? Todo jogador deixa pegadas para que você não possa tornar o modelo de pegada mais visível sem cobrir a arena nelas e tornar cada impressão individual menos perceptível, mas se um jogador vê uma pegada aparecer sem um personagem visível, sabe que alguém está lá.
Você também pode fazer coisas como pequenas pedras que são derrubadas, farfalhar a grama quando alguém está passando por ela ou ondulações que aparecem quando alguém se move pela água. Se os 'sinais' se aplicarem apenas a determinados locais ou materiais, isso pode adicionar uma estratégia extra que força os personagens invisíveis a se moverem com cuidado e evitar coisas que revelam suas posições.
fonte
without making it easy to exploit
-> Isso se aplica a todas as mecânicas do jogo, não apenas a essa particular.Quando você olha para as inúmeras outras perguntas sobre prevenção de trapaça em jogos multiplayer que estão neste site, você verá facilmente que realmente não há nenhuma medida técnica para impedir a trapaça do lado do cliente.
Tudo o que você pode fazer é fornecer menos informações sobre a entidade encoberta. Tudo o que o cliente precisa saber para gerar o efeito de distorção é que existe algo encoberto nessa posição. Mas ele não precisa saber nada específico, como exatamente o que é, quanta saúde resta e o que está fazendo no momento. Dependendo do seu jogo, isso por si só pode ser um déficit de informações que muda o jogo para o jogador.
fonte
Sim, qualquer informação que você enviar para o cliente pode ser mostrada mais obviamente do que você pretendia. Mas aqui está o truque:
Mitigar o impacto
Certamente, o cliente pode ter algumas informações, mas pensando cuidadosamente em quais informações você deseja compartilhar e no que os jogadores podem fazer com elas, você pode pelo menos atenuar o impacto dos hacks do cliente.
1. O que o jogador observa?
uma. Você vê algo, mas não está no local (a ponte ou o mato se move, mas é grande, de modo que você não sabe para onde mirar; os passos só se tornam visíveis com um atraso de 2 segundos): Nesse caso, o cliente sabe apenas que existe alguma coisa, mas não onde / o que exatamente.
b. Você observa algo de uma maneira diferente (soa se houver algo na área; indicação de proximidade como um radar com ou sem direção)
A captura de tela na pergunta parece estar entre 1 e 2, pois provavelmente é baseada em informações limitadas, mas você ainda vê o esboço que pode fornecer algumas informações.
2. O que o jogador pode fazer?
Suponha que você pense que alguém está na coordenada XY, o que você pode fazer? Aqui estão algumas opções típicas:
Atacante
Movendo
Se a seleção de rota for normalmente feita no lado do cliente
fonte
O efeito cascata pode ser feito através do código shader. Você pode desativar o uso da textura nesse modo, para que a simples alteração da textura não seja mais um problema.
Em 3D, quando o modelo entra em ação, você ainda pode alterar o shader para um que simule a refração, usando apenas a superfície do modelo, descartando a cor. Mesmo quando o modelo é substituído de alguma forma, o efeito permanece.
Modificar o shader pré-compilado seria tão difícil quanto modificar o código do jogo e acho que é um nível mais difícil do que alguma pesquisa de textura nos arquivos do jogo.
fonte
Which means that players that change the texture or model or even the game code itself could render the cloak mechanic useless
. E não vejo por que perdi a perguntawhether there is some way to implement cloaking (with a 'shimmer', à la HotS), without having the issue that crafty players can modify the game (data)
. A: Ele é camuflado com brilho, B: é mais difícil de modificar do que uma simples mudança de textura. ONDE realmente renderizar é outro lado. Se a posição é a única coisa em que precisamos aplicar o efeito cascata, esses devem ser os únicos dados enviados ao jogador.