Come posso implementare le abilità offline


13

Un esempio di abilità offline sarebbe EvE Online. Il tuo personaggio (pilota) non acquisisce abilità acquisendo esperienza. Invece, il tuo personaggio ottiene punti abilità verso un'abilità che stai allenando, sia che tu sia dentro o fuori dal gioco. Inoltre, sono abbastanza certo che le abilità continueranno a svilupparsi anche quando i server di gioco sono inattivi.

Qualcuno ha le idee generali su come procedere, o meglio ancora su come potrei implementare qualcosa del genere in un gioco che sto sviluppando. Non sto cercando una spiegazione dettagliata qui (non lasciarmi trattenere però), ma sto cercando un cartello che mi indichi nella direzione corretta.

Grazie!

Risposte:


17

Supponendo che lo sviluppo delle abilità sia deterministico e abbastanza lineare, tutto ciò che devi fare è collegarti a un qualche tipo di orologio in tempo reale (come l'orologio di sistema o l'orologio del server) e calcolare da quanto tempo è in sviluppo l'abilità.

In altre parole, quando inizia lo sviluppo delle abilità, prendi il timestamp e memorizzalo, e ogni volta che vuoi controllare se l'abilità è migliorata, confronta il timestamp con quello attuale, controlla se il delta è abbastanza grande e, bing, il giocatore ha una nuova abilità.


2
Improvvisamente ha senso il motivo per cui ti costringono a mettere in pausa l'allenamento se cambi i tuoi attributi che influenzano la velocità dell'allenamento! Perché ricalcolano il delta necessario ... Fantastico, grazie!
Dream Lane,

5
@Dream Lane, per facilitare questo potenziale sovraccarico computazionale questo avrà. Ricalcola le abilità / i punti guadagnati solo quando l'utente accede. Pertanto, avere migliaia di persone disconnesse non comporta alcun sovraccarico.
Attaccando

2

Se l'abilità non verrà utilizzata fino a quando il giocatore non è tornato online, puoi semplicemente memorizzare il tempo di disconnessione e il tempo rimanente su qualsiasi abilità in coda, quindi quando il giocatore accede fai qualcosa del genere:

timeRemaining = currentTime - logoutTime
while ( timeRemaining > 0 and hasQueuedSkill() ) {
     skillTime -= timeRemaining
     if ( skillTime <= 0 ) {
           popSkill()
           timeRemaining = -skillTime
     }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.