Nos jogos online, as pessoas preferem fazer logon e logoff quando quiserem. Geralmente, as conquistas de seus jogos são salvas perfeitamente no servidor. Isso não é tão difícil de alcançar, mas estou me perguntando como isso pode ser feito de uma maneira eficiente, que faça sentido e seja dimensionada.
Faz sentido salvar as coordenadas do jogador e indicar cada vez que ele é enviado? Meu servidor node.js pode fazer isso facilmente sem bloquear uma resposta, e eu quero empregar um banco de dados Mongo, mas talvez seja mais apropriado fazer isso uma vez por segundo e em um evento em todo o servidor, coletando todos de uma vez?
Respostas:
Eu tenho em mente um MMORPG tradicional como o World of Warcraft.
Salve após cada comando de cada jogador e coisa autônoma (por exemplo, NPC)
Salve tudo periodicamente
Salvar um personagem no logout (não salve mais nada)
Pensamentos finais
Por fim, não tome esse conselho como verdade absoluta. Eu não escrevi um sistema de backup multiplayer. Eu estou trabalhando em um "jogo" on-line, que é por isso que eu ter pensado nisso e escreveu os meus pensamentos acima, mas eu não ter chegado ao estágio de aplicação do presente ainda. Portanto, isso é escrito sem experiência real, mas após muita leitura e coleta de conhecimento sobre o tópico.
fonte
Suponho que depende do tipo de jogo e da quantidade de tráfego entre jogadores e o servidor.
Em um MMORPG, não faria sentido salvar a posição dos jogadores toda vez que eles enviarem as informações ao servidor. Faria mais sentido atualizar quando os dados atuais do jogador estiverem "antigos", por assim dizer. Também pode ser benéfico salvar o estado do jogador em grandes eventos, como atravessar um novo território, derrotar um chefe ou sair de uma loja.
Em um jogo baseado em turnos, definitivamente faria sentido salvar o estado do jogador toda vez que eles terminam o turno, bem como após o turno do adversário (salvo perda de saúde, efeitos de feitiços, etc.).
Novamente, a resposta depende inteiramente da escala e dos recursos do seu servidor. Trata-se de encontrar o melhor equilíbrio e otimizar o máximo possível sem sacrificar a qualidade.
fonte
Se sua única preocupação é quando eles saem, então uma resposta simples é salvar a posição deles quando ocorrerem quaisquer condições para eles que não existem mais no mundo do jogo (devido ao logoff ou desconexão).
Em uma observação lateral, eu ficaria um pouco desconfiado de o cliente relatar ao servidor sua posição ou, pelo menos, sem alguma forma de verificação de integridade do lado do servidor. Se você já tiver isso em prática, provavelmente poderá salvar essa posição ao fazer logoff ou desconectar, pois não precisa se preocupar em obter nenhum dado diretamente do cliente.
fonte