如何实施离线技能


13

离线技能的一个例子是在线EvE。您的角色(飞行员)无法通过获得经验来获得技能。相反,无论您是在游戏中还是游戏外,您的角色都会获得与所要训练的技能有关的技能点。另外,我相当确定即使游戏服务器出现故障,技能仍会继续积累。

任何人都有关于如何实现此目标的广泛想法,或者更好的是我如何能够在正在开发的游戏中实现类似的东西。我不是在这里寻找详细的解释(不过,不要让我退缩),但是我正在寻找一个指向正确方向的路标。

谢谢!

Answers:


17

假设技能开发是确定性的且相当线性的,那么您要做的就是挂接某种实时时钟(例如系统时钟或服务器时钟),然后计算技能开发的时间。

换句话说,当技能开发开始时,记下时间戳并将其存储,并且每当您要检查技能是否有所提高时,请将时间戳与当前技能进行比较,检查增量是否足够大,并且bing,玩家有新技能。


2
突然间,如果您更改了影响培训速度的属性,为什么他们会强迫您暂停培训!因为它们重新计算了所需的增量...太棒了,谢谢!
梦幻巷

5
@Dream Lane,为减轻可能产生的任何潜在计算开销。仅在用户登录时重新计算所获得的技能/积分。因此,拥有数千名注销人员不会产生任何开销。
AttackingHobo

2

如果在玩家恢复在线状态之前不使用该技能,则只需将注销时间和剩余时间存储在队列中的任何技能上,然后在玩家登录时执行以下操作:

timeRemaining = currentTime - logoutTime
while ( timeRemaining > 0 and hasQueuedSkill() ) {
     skillTime -= timeRemaining
     if ( skillTime <= 0 ) {
           popSkill()
           timeRemaining = -skillTime
     }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.