饥荒游戏吧 关注:204,211贴子:2,999,516
  • 33回复贴,共1

16-07-28丨【攻略】火山时间错乱免疫及解决办法

只看楼主收藏回复

好吧虽然本菜鸡还没怎么玩船难。
但是看到很多人都被这个问题困扰了很久。。。
---------------------------------------------------------------------------------------------
首先,如果你的档时间已经乱掉了==那么下面的办法是不能将这个错改回去的。
因为数据破坏已经发生了,你可以使用控制台GetClock().numcycles = [天数] 将时间强制重设,注意火山里的时间和外面是分开的,需要在你认为错乱的里面进行改动。
但是这样的话季节百分比之类的也会是错的,需要使用GetSeasonManager().percent_season = [季节内百分比,小数表示],来改回。比如GetSeasonManager().percent_season = 0.5即可设置为当前季节的一半。
类似的,GetSeasonManager().current_season = "spring" 可以将当前季节设置为春天。
当然还有其他的影响,不过一般来说影响不大。
设置完成后要小退再进一下,否则插件们还会显示旧值。
---------------------------------------------------------------------------------------------
好了,下面是免疫办法(其实是修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"这两条。一旦你在火山里呆的时间超过一天,这个时间就应该要同步,但是由于作者的大意,这个同步永远不可能发生。。。
然后接下来问题得以扩散,整个世界都会乱掉。。。
当然了,这个同步错误仅仅会在游戏中跳世界时发生,如果你发现时间不对,退了再读次档也会没问题。(但是我不确定会不会一直没问题)


IP属地:浙江1楼2016-07-28 19:18回复
    全新档使用GetClock():OnUpdate()模拟时间增长的方法下进出火山多次
    测试通过~


    IP属地:浙江2楼2016-07-28 19:19
    收起回复
      另外如果大家觉得只玩游戏没有乐趣,想学程序设计,那么就从这本书开始吧:
      http://wenku.baidu.com/link?url=rH_J_3mzs7q46HvSQNxq0PbpPITYTYzyP3j2XWziKd5rQsTXFeQ9_jO2pSS5nqrunMm7p4e5JUE_LHDq1y7jR_tzh8cwuPutZknHNmtQUBC


      IP属地:浙江4楼2016-07-28 19:23
      收起回复


        IP属地:瑞士6楼2016-07-28 20:13
        回复
          终于可以解决错乱了。


          IP属地:海南来自Android客户端7楼2016-07-28 20:34
          回复
            进一步看了下代码,之前有的地方说得不大对==更正如下:
            饥荒累积时间单位是秒,所以在火山里面就算不够一天,出来的时间也会错开。
            这个bug的触发条件比较苛刻,因为实际上如果你连着玩,catch_up这个值在GetClock()中就会获取到,前面那个大分支都不会进而直接LongUpdate更新时间,这时BUG是不会触发的。但是如果前面发生特殊情况(比方说进出火山的时候崩溃了,就会导致catch_up为nil从而进入那个有问题的分支。


            IP属地:浙江8楼2016-07-28 22:43
            回复
              看不懂
              不敢试
              T滑稽躺Z


              IP属地:福建9楼2016-07-28 22:43
              回复
                前排


                IP属地:辽宁来自Android客户端10楼2016-07-28 23:42
                收起回复
                  厉害啊,LZ名副其实debug达人,如果有兴趣帮我看看虎鲨刷新时间bug可否?
                  http://tieba.baidu.com/p/4685912463?pn=1


                  11楼2016-07-29 11:20
                  收起回复
                    嗯,不太懂代码,但是嘛,火钳刘明


                    IP属地:浙江来自iPhone客户端12楼2016-07-29 13:29
                    回复
                      技术贴


                      IP属地:浙江来自Android客户端15楼2016-07-31 14:57
                      回复
                        技术控就是高深莫测


                        16楼2016-07-31 14:58
                        回复
                          应该去官方论坛提交一下bug,造福大家


                          IP属地:四川来自Android客户端23楼2016-08-07 20:27
                          收起回复
                            官方已经答复,下次更新的时候应该会修复。


                            IP属地:浙江24楼2016-08-10 13:36
                            回复