Çevrimdışı Becerileri nasıl uygulayabilirim


13

Çevrimdışı becerilere örnek EvE Online olabilir. Karakteriniz (pilot) deneyim kazanarak beceri kazanmaz. Bunun yerine, karakteriniz, ister oyun içinde ister oyun dışında olun, antrenman yaptığınız bir beceriye yönelik beceri puanları kazanır. Ayrıca, oyun sunucuları kapalı olduğunda bile becerilerin gelişmeye devam ettiğinden oldukça eminim.

Herkes bu konuda nasıl, ya da daha iyi bir oyun gibi böyle bir şey uygulamak için nasıl gidebilirim hakkında geniş fikirleri var. Burada ayrıntılı bir açıklama aramıyorum (yine de seni tutmama izin verme), ama beni doğru yöne yönlendiren bir tabela arıyorum.

Teşekkürler!

Yanıtlar:


17

Beceri gelişiminin deterministik ve oldukça doğrusal olduğunu varsayarsak, yapmanız gereken tek şey bir tür gerçek zamanlı saate (sistem saati veya sunucu saati gibi) bağlanmak ve becerinin gelişimde ne kadar süredir olduğunu hesaplamaktır.

Başka bir deyişle, beceri geliştirme başladığında, zaman damgası alıp saklayın ve becerinin gelişip gelişmediğini kontrol etmek istediğinizde, zaman damgasını geçerli olanla karşılaştırın, deltanın yeterince büyük olup olmadığını kontrol edin ve bing, oyuncunun yeni bir yetenek.


2
Aniden, eğitimin hızını etkileyen niteliklerinizi değiştirirseniz sizi neden eğitimi duraklatmaya zorladıkları anlaşılır! Çünkü gerekli deltayı yeniden hesaplıyorlar ... Harika, teşekkürler!
Dream Lane

5
@Dream Lane, Herhangi bir potansiyel hesaplama yükünü hafifletmek için bu olacaktır. Kazanılan becerileri / puanları yalnızca kullanıcı oturum açtığında yeniden hesaplayın. Bu yüzden oturumu kapalı binlerce insanın herhangi bir ek yüke maruz kalmayacağı.
AttackingHobo

2

Yetenek oyuncu tekrar çevrimiçi olana kadar kullanılmazsa, oturum kapatma süresini ve kalan süreyi kuyruktaki herhangi bir beceri üzerine depolayabilir ve daha sonra oyuncu oturum açtığında böyle bir şey yapabilirsiniz:

timeRemaining = currentTime - logoutTime
while ( timeRemaining > 0 and hasQueuedSkill() ) {
     skillTime -= timeRemaining
     if ( skillTime <= 0 ) {
           popSkill()
           timeRemaining = -skillTime
     }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.