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!

Dream Lane
fonte

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.

Jari Komppa
fonte
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
     }
}
Elva
fonte