遊戲資訊
饑荒 Don't Starve
  • 發售: 更新:2024-11-11
  • 發行: 平台:PC 掌機
  • 開發: Klei Entertainment Inc.
  • 平台: 發售:2013-04-23
  • 類型: 冒險遊戲
  • 語言: 簡中 英文
《饑荒(Don't Starve)》是由Klei Entertainment製作發行的一款動作冒險類求生遊戲,遊戲講述的是關於一名科學家被惡魔傳送到了一個神秘的世界,玩家將在這個異世界生存並逃出這個異世界的故事。在《饑荒》裡,玩家必須利用異世界中的自然資源讓自己存活下去,並且抵禦各種異世界生物的威脅。

饑荒海難火山時間錯亂解決方法 火山時間錯亂怎麽辦

2016-07-30

饑荒海難火山時間錯亂解決方法

首先,如果你的檔時間已經亂掉了,那麽下面的辦法是不能將這個錯改回去的。

因為數據破壞已經發生了,你可以使用控制台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"這兩條。一旦你在火山裡呆的時間超過一天,這個時間就應該要同步,但是由於作者的大意,這個同步永遠不可能發生。。。

然後接下來問題得以擴散,整個世界都會亂掉。。。

當然了,這個同步錯誤僅僅會在遊戲中跳世界時發生,如果你發現時間不對,退了再讀次檔也會沒問題。(但是我不確定會不會一直沒問題)

全新檔使用GetClock():OnUpdate()模擬時間增長的方法下進出火山多次

測試通過。

補充更正

進一步看了下代碼,之前有的地方說得不大對,更正如下:

饑荒累積時間部門是秒,所以在火山裡面就算不夠一天,出來的時間也會錯開。

這個bug的觸發條件比較苛刻,因為實際上如果你連著玩,catch_up這個值在GetClock()中就會獲取到,前面那個大分支都不會進而直接LongUpdate更新時間,這時BUG是不會觸發的。但是如果前面發生特殊情況(比方說進出火山的時候崩潰了,就會導致catch_up為nil從而進入那個有問題的分支。

獲得更多的電玩狂人最新消息
按讚加入粉絲團