Estou criando um MOBA simples e apenas por diversão. Eu estava criando tudo como single player e então percebi "ah, merda, eu provavelmente deveria adicionar o multiplayer, hein".
Eu nunca fiz nada com redes antes, então aprender como integrar o Lidgren no meu jogo foi divertido e incrível. O problema é que eu sei muito bem como as coisas estão fazendo errado, porque não é suficientemente robusto para os jogos tradicionais, tanto quanto eu sei, mas o que há de errado nisso?
O que estou fazendo é, basicamente, sempre que um jogador faz uma ação, ele envia uma mensagem ao servidor dizendo "ei, eu fiz isso". O servidor e o cliente estão executando a mesma simulação. O servidor envia uma mensagem para todos os outros clientes, informando que aquele cara fez aquilo.
Na maioria das vezes, exceto em alguns casos, quando um jogador faz alguma coisa, o cliente assume que é legal e segue adiante sozinho. Então, quando você clique com o botão direito em algum lugar se mudar para lá, o cliente do jogador apenas começa a se mover a sua cara lá, e , em seguida, envia uma mensagem para o servidor dizendo a ele sobre isso.
Então, basicamente:
- O jogador 1 lança um feitiço para fazê-lo se mover 100% mais rápido por seis segundos
- O cliente local do jogador 1 adiciona esse buff ao objeto Unit
- O cliente do jogador 1 envia uma mensagem ao servidor dizendo "ei, acabei de lançar este feitiço"
- O servidor garante que ele realmente tenha mana suficiente para lançar esse feitiço e, nesse caso, adiciona esse buff à cópia do servidor desse objeto Unit
- O servidor envia uma mensagem para todos os outros clientes dizendo "ei, esse cara acabou de lançar esse feitiço"
- Todos os outros clientes recebem a mensagem e dizem "ah, tudo bem, legal" e adicionam esse bônus ao objeto de unidade local desse jogador
Venho examinando as coisas para ver como os grandes jogos são multijogadores, e é meio confuso para alguém que está começando a se interessar por essas coisas, mas parece que o mecanismo Source envia um pacote contendo todas as alterações para tudo no jogo. mundo todo carrapato? Novamente, totalmente novo para essas coisas, mas você pode realmente enviar tantos dados com tanta frequência?
Desculpe se isso é um pouco desmedido, mas basicamente, eu estava me perguntando por que meu sistema mais simples não é o caminho certo a seguir, porque, se fosse, outros jogos o usariam, certo?