SSI ļʱ
SSI ļʱ
当前位置:QQ游戏 > 热门手游 > 饥荒 >
SSI ļʱ

饥荒海滩火山时间错乱怎么办

咏良  2018-02-08 16:46:41  手机版

  《饥荒》海难大家是否遇到火山时间错乱了呢?火山时间错乱应该如何解决呢?下面就是小编为大家整理的火山时间错乱的解决方法,希望对大家有所帮助!

  解决方法

  好了,下面是免疫办法(其实是修BUG):

  打开data\DLC0002\scripts\gamelogic.lua文件,定位到:

  if travel_direction == "ascend" or travel_direction == "descend" then

  print ("Catching up world", catch_up, "(", player_age,"/",world_age,")" )

  改为

  if travel_direction == "ascend" or travel_direction == "descend" or travel_direction == "ascend_volcano" or travel_direction == "descend_volcano" then

  print ("Catching up world", catch_up, "(", player_age,"/",world_age,")" )

  闲话:饥荒的作者在日期设计上有点奇怪==他不是采用统一的时间,而是每个世界(包括洞穴,火山)都有一一个独立的时间,只有当前世界的表会走。这样跳世界的时候时间会不一致。

  按理说用跳之前世界的时间盖掉新世界的时间不就简单了吗?可是作者想允许不同世界的时间不一样,所以要用player_age(即玩家年龄)来同步两个世界(ROG和SW跳除外)。(这个设计真的是无力吐槽)

  然后呢,当检测到用户是从一个世界跳到另一个世界的时候,它就触发这个同步的代码。跳世界(travel)的方式总共有:"ascend""descend"(上下洞穴)"shipwrecked"(跳ROG和SW)"ascend_volcano""descend_volcano"(进出火山)这几种。

  当上下洞穴和进出火山的时候都需要同步时间(跳ROG和SW不需要),所以要在加载世界的时候需要检测下是不是要同步:

  if travel_direction == "ascend" or travel_direction == "descend" then

  print ("Catching up world", catch_up, "(", player_age,"/",world_age,")" )

  所以现在你看出问题来了吗,作者在这里漏掉了"volcano_ascend"和"travel_direction"这两条。一旦你在火山里呆的时间超过一天,这个时间就应该要同步,但是由于作者的大意,这个同步永远不可能发生。。。

  然后接下来问题得以扩散,整个世界都会乱掉。。。

  当然了,这个同步错误仅仅会在游戏中跳世界时发生,如果你发现时间不对,退了再读次档也会没问题。(但是我不确定会不会一直没问题)

  全新档使用GetClock():OnUpdate()模拟时间增长的方法下进出火山多次

  测试通过。

  补充更正

  进一步看了下代码,之前有的地方说得不大对,更正如下:

  饥荒累积时间单位是秒,所以在火山里面就算不够一天,出来的时间也会错开。

  这个bug的触发条件比较苛刻,因为实际上如果你连着玩,catch_up这个值在GetClock()中就会获取到,前面那个大分支都不会进而直接LongUpdate更新时间,这时BUG是不会触发的。但是如果前面发生特殊情况(比方说进出火山的时候崩溃了,就会导致catch_up为nil从而进入那个有问题的分支。

SSI ļʱ
    SSI ļʱ
    SSI ļʱ
    SSI ļʱ
    SSI ļʱ
    SSI ļʱ
    SSI ļʱ
    SSI ļʱ
    SSI ļʱ