Como posso implementar habilidades offline


13

Um exemplo de habilidade offline seria o EvE Online. Seu personagem (piloto) não ganha habilidades adquirindo experiência. Em vez disso, seu personagem ganha pontos de habilidade em relação a uma habilidade que você está treinando, dentro ou fora do jogo. Além disso, tenho certeza de que as habilidades continuam a crescer mesmo quando os servidores do jogo estão inoperantes.

Alguém tem alguma idéia ampla de como eles fazem isso, ou melhor ainda, como eu poderia implementar algo assim em um jogo que estou desenvolvendo. Não estou procurando uma explicação detalhada aqui (não deixe que eu te segure), mas estou procurando uma placa que me indique a direção correta.

Obrigado!

Respostas:


17

Supondo que o desenvolvimento de habilidades seja determinístico e bastante linear, tudo que você precisa fazer é conectar-se a algum tipo de relógio em tempo real (como o relógio do sistema ou relógio do servidor) e calcular quanto tempo a habilidade está em desenvolvimento.

Em outras palavras, quando o desenvolvimento de habilidades começar, pegue o carimbo de data e hora e, sempre que você quiser verificar se a habilidade melhorou, compare o carimbo de hora com o atual, verifique se o delta é grande o suficiente e bing, o jogador tem uma nova habilidade.


2
De repente, faz sentido por que eles o forçam a pausar o treinamento se você alterar seus atributos que afetam a velocidade do treinamento! Porque eles recalculam o delta necessário ... Incrível, obrigado!
Dream Lane

5
@ Dream Lane, para facilitar qualquer sobrecarga computacional em potencial que isso aconteça. Recalcule apenas as habilidades / pontos ganhos quando o usuário fizer logon. Portanto, ter milhares de pessoas desconectadas não sofrerá nenhuma sobrecarga.
AttackingHobo

2

Se a habilidade não for usada até que o jogador volte a ficar online, você pode simplesmente armazenar o tempo de logoff e o tempo restante em qualquer habilidade na fila e, quando o jogador fizer logon, faça algo assim:

timeRemaining = currentTime - logoutTime
while ( timeRemaining > 0 and hasQueuedSkill() ) {
     skillTime -= timeRemaining
     if ( skillTime <= 0 ) {
           popSkill()
           timeRemaining = -skillTime
     }
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.