Bagaimana saya bisa menerapkan Skilling Offline

13

Contoh keterampilan offline adalah EvE Online. Karakter Anda (pilot) tidak mendapatkan keterampilan dengan mendapatkan pengalaman. Alih-alih, karakter Anda mendapatkan poin keterampilan menuju keterampilan yang Anda latih, baik saat Anda sedang bermain atau tidak. Juga, saya cukup yakin bahwa keterampilan terus membangun bahkan ketika server game sedang down.

Ada yang punya ide luas tentang bagaimana mereka melakukan ini, atau lebih baik lagi bagaimana saya bisa menerapkan sesuatu seperti ini dalam permainan yang saya kembangkan. Saya tidak mencari penjelasan terperinci di sini (jangan biarkan saya menahan Anda), tetapi saya mencari rambu yang menunjukkan saya ke arah yang benar.

Terima kasih!

Dream Lane
sumber

Jawaban:

17

Dengan asumsi pengembangan keterampilan adalah deterministik dan cukup linier, yang perlu Anda lakukan adalah menghubungkan ke beberapa jenis jam waktu nyata (seperti jam sistem, atau jam server), dan menghitung berapa lama keterampilan telah dikembangkan.

Dengan kata lain, ketika pengembangan keterampilan dimulai, ambil stempel waktu dan simpan, dan kapan pun Anda ingin memeriksa apakah keterampilan telah meningkat, bandingkan stempel waktu dengan yang sekarang, periksa apakah delta cukup besar, dan bing, pemain memiliki keterampilan baru.

Jari Komppa
sumber
2
Tiba-tiba masuk akal mengapa mereka memaksa Anda untuk menghentikan pelatihan jika Anda mengubah atribut Anda yang memengaruhi kecepatan pelatihan! Karena mereka menghitung ulang delta yang diperlukan ... Luar biasa, terima kasih!
Dream Lane
5
@ Dream Lane, Untuk meringankan potensi komputasi apa pun yang akan terjadi. Hitung ulang keterampilan / poin yang diperoleh saat pengguna masuk. Jadi, memiliki ribuan orang yang logout tidak akan dikenakan biaya apa pun.
AttackingHobo
2

Jika skill tidak akan digunakan sampai pemain kembali online Anda dapat dengan mudah menyimpan waktu log-off dan sisa waktu pada keterampilan apa pun dalam antrian, dan kemudian ketika pemain login melakukan sesuatu seperti ini:

timeRemaining = currentTime - logoutTime
while ( timeRemaining > 0 and hasQueuedSkill() ) {
     skillTime -= timeRemaining
     if ( skillTime <= 0 ) {
           popSkill()
           timeRemaining = -skillTime
     }
}
Elva
sumber