《饑荒》海難大家是否遇到火山時間錯亂了呢?這可是非常讓人頭疼的,這次就為大家?guī)砹损嚮暮ky海難火山時間錯亂怎么辦,告訴大家火山時間錯亂及解決辦法,被這個問題所困擾的玩家可以學(xué)習(xí)下,一起來看吧。
首先,如果你的檔時間已經(jīng)亂掉了,那么下面的辦法是不能將這個錯改回去的。
因為數(shù)據(jù)破壞已經(jīng)發(fā)生了,你可以使用控制臺GetClock().numcycles = [天數(shù)] 將時間強制重設(shè),注意火山里的時間和外面是分開的,需要在你認(rèn)為錯亂的里面進(jìn)行改動。
但是這樣的話季節(jié)百分比之類的也會是錯的,需要使用GetSeasonManager().percent_season = [季節(jié)內(nèi)百分比,小數(shù)表示],來改回。比如GetSeasonManager().percent_season = 0.5即可設(shè)置為當(dāng)前季節(jié)的一半。
類似的,GetSeasonManager().current_season = "spring" 可以將當(dāng)前季節(jié)設(shè)置為春天。
當(dāng)然還有其他的影響,不過一般來說影響不大。
設(shè)置完成后要小退再進(jìn)一下,否則插件們還會顯示舊值。
解決方法
好了,下面是免疫辦法(其實是修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,")" )
閑話:饑荒的作者在日期設(shè)計上有點奇怪==他不是采用統(tǒng)一的時間,而是每個世界(包括洞穴,火山)都有一一個獨立的時間,只有當(dāng)前世界的表會走。這樣跳世界的時候時間會不一致。
按理說用跳之前世界的時間蓋掉新世界的時間不就簡單了嗎?可是作者想允許不同世界的時間不一樣,所以要用player_age(即玩家年齡)來同步兩個世界(ROG和SW跳除外)。(這個設(shè)計真的是無力吐槽)
然后呢,當(dāng)檢測到用戶是從一個世界跳到另一個世界的時候,它就觸發(fā)這個同步的代碼。跳世界(travel)的方式總共有:"ascend""descend"(上下洞穴)"shipwrecked"(跳ROG和SW)"ascend_volcano""descend_volcano"(進(jìn)出火山)這幾種。
當(dāng)上下洞穴和進(jìn)出火山的時候都需要同步時間(跳ROG和SW不需要),所以要在加載世界的時候需要檢測下是不是要同步:
if travel_direction == "ascend" or travel_direction == "descend" then
print ("Catching up world", catch_up, "(", player_age,"/",world_age,")" )
所以現(xiàn)在你看出問題來了嗎,作者在這里漏掉了"volcano_ascend"和"travel_direction"這兩條。一旦你在火山里呆的時間超過一天,這個時間就應(yīng)該要同步,但是由于作者的大意,這個同步永遠(yuǎn)不可能發(fā)生。。。
然后接下來問題得以擴(kuò)散,整個世界都會亂掉。。。
當(dāng)然了,這個同步錯誤僅僅會在游戲中跳世界時發(fā)生,如果你發(fā)現(xiàn)時間不對,退了再讀次檔也會沒問題。(但是我不確定會不會一直沒問題)
全新檔使用GetClock():OnUpdate()模擬時間增長的方法下進(jìn)出火山多次
測試通過。
補充更正
進(jìn)一步看了下代碼,之前有的地方說得不大對,更正如下:
饑荒累積時間單位是秒,所以在火山里面就算不夠一天,出來的時間也會錯開。
這個bug的觸發(fā)條件比較苛刻,因為實際上如果你連著玩,catch_up這個值在GetClock()中就會獲取到,前面那個大分支都不會進(jìn)而直接LongUpdate更新時間,這時BUG是不會觸發(fā)的。但是如果前面發(fā)生特殊情況(比方說進(jìn)出火山的時候崩潰了,就會導(dǎo)致catch_up為nil從而進(jìn)入那個有問題的分支。
如轉(zhuǎn)載涉及版權(quán)等問題,請作者與我司聯(lián)系,我司將在第一時間刪除或支付稿酬。
全部評論