導(dǎo) 《饑荒》海難大家是否遇到火山時(shí)間錯(cuò)亂了呢?這可是非常讓人頭疼的,這次就為大家?guī)?lái)了饑荒海難海難火山時(shí)間錯(cuò)亂怎么辦,告訴大家火山時(shí)間錯(cuò)亂及解決辦法,被這個(gè)問(wèn)題所困擾的玩家可以學(xué)習(xí)下,一起來(lái)看吧。 ...

《饑荒》海難大家是否遇到火山時(shí)間錯(cuò)亂了呢?這可是非常讓人頭疼的,這次就為大家?guī)?lái)了饑荒海難海難火山時(shí)間錯(cuò)亂怎么辦,告訴大家火山時(shí)間錯(cuò)亂及解決辦法,被這個(gè)問(wèn)題所困擾的玩家可以學(xué)習(xí)下,一起來(lái)看吧。

饑荒海難火山時(shí)間錯(cuò)亂怎么辦 時(shí)間錯(cuò)亂解決辦法

首先,如果你的檔時(shí)間已經(jīng)亂掉了,那么下面的辦法是不能將這個(gè)錯(cuò)改回去的。

因?yàn)閿?shù)據(jù)破壞已經(jīng)發(fā)生了,你可以使用控制臺(tái)GetClock().numcycles = [天數(shù)] 將時(shí)間強(qiáng)制重設(shè),注意火山里的時(shí)間和外面是分開(kāi)的,需要在你認(rèn)為錯(cuò)亂的里面進(jìn)行改動(dòng)。

但是這樣的話季節(jié)百分比之類的也會(huì)是錯(cuò)的,需要使用GetSeasonManager().percent_season = [季節(jié)內(nèi)百分比,小數(shù)表示],來(lái)改回。比如GetSeasonManager().percent_season = 0.5即可設(shè)置為當(dāng)前季節(jié)的一半。

類似的,GetSeasonManager().current_season = "spring" 可以將當(dāng)前季節(jié)設(shè)置為春天。

當(dāng)然還有其他的影響,不過(guò)一般來(lái)說(shuō)影響不大。

設(shè)置完成后要小退再進(jìn)一下,否則插件們還會(huì)顯示舊值。

解決方法

好了,下面是免疫辦法(其實(shí)是修BUG):

打開(kāi)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è)計(jì)上有點(diǎn)奇怪==他不是采用統(tǒng)一的時(shí)間,而是每個(gè)世界(包括洞穴,火山)都有一一個(gè)獨(dú)立的時(shí)間,只有當(dāng)前世界的表會(huì)走。這樣跳世界的時(shí)候時(shí)間會(huì)不一致。

按理說(shuō)用跳之前世界的時(shí)間蓋掉新世界的時(shí)間不就簡(jiǎn)單了嗎?可是作者想允許不同世界的時(shí)間不一樣,所以要用player_age(即玩家年齡)來(lái)同步兩個(gè)世界(ROG和SW跳除外)。(這個(gè)設(shè)計(jì)真的是無(wú)力吐槽)

然后呢,當(dāng)檢測(cè)到用戶是從一個(gè)世界跳到另一個(gè)世界的時(shí)候,它就觸發(fā)這個(gè)同步的代碼。跳世界(travel)的方式總共有:"ascend""descend"(上下洞穴)"shipwrecked"(跳ROG和SW)"ascend_volcano""descend_volcano"(進(jìn)出火山)這幾種。

當(dāng)上下洞穴和進(jìn)出火山的時(shí)候都需要同步時(shí)間(跳ROG和SW不需要),所以要在加載世界的時(shí)候需要檢測(cè)下是不是要同步:

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

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

所以現(xiàn)在你看出問(wèn)題來(lái)了嗎,作者在這里漏掉了"volcano_ascend"和"travel_direction"這兩條。一旦你在火山里呆的時(shí)間超過(guò)一天,這個(gè)時(shí)間就應(yīng)該要同步,但是由于作者的大意,這個(gè)同步永遠(yuǎn)不可能發(fā)生。。。

然后接下來(lái)問(wèn)題得以擴(kuò)散,整個(gè)世界都會(huì)亂掉。。。

當(dāng)然了,這個(gè)同步錯(cuò)誤僅僅會(huì)在游戲中跳世界時(shí)發(fā)生,如果你發(fā)現(xiàn)時(shí)間不對(duì),退了再讀次檔也會(huì)沒(méi)問(wèn)題。(但是我不確定會(huì)不會(huì)一直沒(méi)問(wèn)題)

全新檔使用GetClock():OnUpdate()模擬時(shí)間增長(zhǎng)的方法下進(jìn)出火山多次

測(cè)試通過(guò)。

補(bǔ)充更正

進(jìn)一步看了下代碼,之前有的地方說(shuō)得不大對(duì),更正如下:

饑荒累積時(shí)間單位是秒,所以在火山里面就算不夠一天,出來(lái)的時(shí)間也會(huì)錯(cuò)開(kāi)。

這個(gè)bug的觸發(fā)條件比較苛刻,因?yàn)閷?shí)際上如果你連著玩,catch_up這個(gè)值在GetClock()中就會(huì)獲取到,前面那個(gè)大分支都不會(huì)進(jìn)而直接LongUpdate更新時(shí)間,這時(shí)BUG是不會(huì)觸發(fā)的。但是如果前面發(fā)生特殊情況(比方說(shuō)進(jìn)出火山的時(shí)候崩潰了,就會(huì)導(dǎo)致catch_up為nil從而進(jìn)入那個(gè)有問(wèn)題的分支。

如轉(zhuǎn)載涉及版權(quán)等問(wèn)題,請(qǐng)作者與我司聯(lián)系,我司將在第一時(shí)間刪除或支付稿酬。