饑荒——摸索本地文件解鎖“植物登記表”

前言:本文是一篇作者自己摸索嘗試通過修改本地文件的形式來解鎖“饑荒聯(lián)機版”中“植物登記表”的記錄和分析。
適用于喜歡饑荒種田,但是因為更換steam賬號而需要重新解鎖“植物登記表”的“新號老手”和初次接觸饑荒種田而苦惱于各種植物生長階段和配肥的“懶蟲萌新”玩家,這是因為通過本文介紹的方法將會直接解鎖“耕作者先驅(qū)帽”中的全部植物圖鑒和全部肥料圖鑒。
聲明:本文更多是記錄作者的嘗試經(jīng)歷,作者本人并不提倡直接跨越饑荒種田的游戲歷程,舍棄游戲探索過程中的經(jīng)歷和逐步解鎖植物與肥料的累積喜悅感。希望各位玩家考慮清楚后再選擇是否使用下文方法!
起因:作者在一個新號中耕種饑荒時,發(fā)現(xiàn)自己的“耕作者先驅(qū)帽”因為換號的原因沒有解鎖作物和肥料(注:相同賬號下饑荒不同的檔會通用一份“植物登記表”中的解鎖),由于之前都解鎖過,所以想能不能通過更改本地文件的方式,將“植物登記表”一步解鎖開,以節(jié)省時間。(再次聲明:不推薦新手玩家直接一次都不親自解鎖。)
過程:
0.猜想:由于我們知道關(guān)于有關(guān)“植物登記表”的文件科雷并不是云端存儲,而是使用玩家本地存儲,所以饑荒的配置文件中一定有一個文檔是有關(guān)“植物登記表”的只需要更改這個文件就可以直接解鎖全部的植物生長過程。
1.嘗試:通過查閱我們得知有關(guān)文件是在"C:\Users\username\Documents\Klei\DoNotStarveTogether\*******\client_save"文件夾下的,可以通過游戲內(nèi)“數(shù)據(jù)”按鈕直接找到其父文件夾。



此文件可以使用“記事本”打開,下文中我使用了“VScode”編輯此文件,如下:
KLEI ? ? 1 return {last_selected_card={ ? ?
asparagus=5,carrot=5,garlic=4,dragonfruit=4}, ??
?filters={tab=2}, ??
?pictures={}, ? ?
plants={asparagus={[3]=true,[4]=true,[5]=true}, ? ? ? ? ??
?carrot={[2]=true,[3]=true,[4]=true,[5]=true}, ? ? ? ? ? ?
garlic={[4]=true}, ? ? ? ? ??
?dragonfruit={[3]=true,[4]=true}}, ? ?
fertilizers={}}
而我自己的新號的“植物登記表如下圖”:





通過這一段代碼不難看出,作物后跟的“[n]”代表的就是該作物的第n階段是否解鎖。按照這個思路,我將上述四種作物全部改為:
[1]=true,[2]=true,[3]=true,[4]=true,[5]=true
當(dāng)然這里有一個關(guān)鍵點:last_selected_card中的值需要相應(yīng)更改,默認可以改為,已解鎖階段的最大值。如上我將其改為:
asparagus=5,carrot=5,garlic=5,dragonfruit=5
但是當(dāng)我滿心以為問題迎刃而解重新打開饑荒后,卻發(fā)現(xiàn),“植物登記表”沒有一絲更改,此時再次打開“plantregistry”文件,發(fā)現(xiàn)就連代碼也被重新覆蓋為了原樣。
第一次嘗試失敗。
2.嘗試:查閱百度饑荒貼吧之后,看到一條帖子:

由此我有了一個猜想,既然“植物登記表”還是在本地文件中讀取,那么就算科雷修復(fù)也頂多是增加了新的檢驗機制。比如在我的嘗試中,就是檢驗失敗,所以文件被系統(tǒng)重寫。那么,只需要找到饑荒系統(tǒng)是怎么檢驗的,即找到檢驗值文件,應(yīng)該就可以了。
我直接在“client_save”文件夾下搜索字段“plantregistry”來找到所有有關(guān)植物登記的文件,果然這時候,另一個文件映入眼簾:

很明顯這個應(yīng)該就是我要找的文件,而且他的關(guān)鍵詞“keyvalue”(關(guān)鍵值)更讓我確定了這一點。
打開該文件后代碼結(jié)構(gòu)如下:
{"Events":{ ?
?"COOKBOOK":{"KeyValues":{"baconeggs"://無關(guān)代碼},"Revision":151,"Unchanged":true}, ? ?
"GENERIC_KV":{"Revision":1,"Unchanged":true}, ??
?"PLANTREGISTRY":{"KeyValues":{ ? ? ? ? ? ? ? ? ? ?
????????????????????????????"asparagus":"1c", ? ? ? ? ? ? ? ? ??
?????????????????????????????"carrot":"1e", ? ? ? ? ? ? ? ? ? ?
????????????????????????????"garlic":"8", ? ? ? ? ? ? ? ? ? ?
????????????????????????????"dragonfruit":"c"},"Revision":21,"Unchanged":false}, ? ?
"SCRAPBOOK0":{"KeyValues":{//無關(guān)代碼},"Revision":29,"Unchanged":false}, ??
?"SCRAPBOOK1":{"KeyValues":{//無關(guān)代碼},"Revision":29,"Unchanged":false}, ? ?
"SCRAPBOOK10":{"KeyValues":{//無關(guān)代碼},"Revision":31,"Unchanged":false}, ? ?
"SCRAPBOOK11":{"KeyValues":{//無關(guān)代碼},"Revision":32,"Unchanged":false}, ?
??"SCRAPBOOK12":{"KeyValues":{//無關(guān)代碼},"Revision":44,"Unchanged":false}, ? ?
"SCRAPBOOK13":{"KeyValues":{//無關(guān)代碼},"Revision":41,"Unchanged":false}, ??
?"SCRAPBOOK14":{"KeyValues":{//無關(guān)代碼},"Revision":29,"Unchanged":false}, ??
?"SCRAPBOOK15":{"KeyValues":{//無關(guān)代碼},"Revision":25,"Unchanged":false}, ? ?
"SCRAPBOOK2":{"KeyValues":{//無關(guān)代碼},"Revision":35,"Unchanged":false}, ? ?
"SCRAPBOOK3":{"KeyValues":{//無關(guān)代碼},"Revision":38,"Unchanged":false}, ??
?"SCRAPBOOK4":{"KeyValues":{//無關(guān)代碼},"Revision":28,"Unchanged":false}, ??
?"SCRAPBOOK5":{"KeyValues":{//無關(guān)代碼},"Revision":43,"Unchanged":false}, ??
?"SCRAPBOOK6":{"KeyValues":{//無關(guān)代碼},"Revision":34,"Unchanged":false}, ??
?"SCRAPBOOK7":{"KeyValues":{//無關(guān)代碼},"Revision":38,"Unchanged":false}, ? ?
"SCRAPBOOK8":{"KeyValues":{//無關(guān)代碼},"Revision":24,"Unchanged":false}, ? ?
"SCRAPBOOK9":{"KeyValues":{//無關(guān)代碼},"Revision":35,"Unchanged":false},
"SKILLTREE":{"Revision":1,"Unchanged":true}}}
很明顯一眼就能看到和“plantregistry”有關(guān)的“keyvalues”:
"asparagus":"1c", ? ? ? ? ? ? ? ? ? ?
"carrot":"1e", ? ? ? ? ? ? ? ? ? ?
?"garlic":"8", ? ? ? ? ? ? ? ? ? ??
"dragonfruit":"c"
我猜測每個作物對應(yīng)的值就是檢驗值,但是這其中的值又含有什么信息呢?如果有一點計算機基礎(chǔ)的小伙伴應(yīng)該很容易發(fā)現(xiàn)每個作物后的數(shù)是“十六進制數(shù)”。
所以我列出如下表:

起先我還在看解鎖階段和十進制數(shù)的關(guān)系,但是很快,就會發(fā)現(xiàn),實際是解鎖階段對應(yīng)的是二進制數(shù)。二進制數(shù)00000從低位到高位分別對應(yīng)作物生長的五個階段,解鎖了的階段就會被從0置1。比如蘆筍的3、4、5階段已經(jīng)解鎖,所以第3、4、5位0就被置為1,在轉(zhuǎn)化為十六進制為“1c”。
由此,我在按照之前的想法更改了“plantregistry”文件的基礎(chǔ)上,同時更改了文件“keyvalue_plantregistry_prod”中的代碼,將對應(yīng)的作物都改為了“1f”(“1f”的二進制位“11111”對應(yīng)的五個階段都被解鎖)。
當(dāng)我懷揣著忐忑的心再次打開饑荒的時候,終于看到“植物登記表”中相應(yīng)的四個作物已經(jīng)被解鎖全階段:




第二次嘗試成功!
3.解鎖:后面的事情就很簡單了,那就是找到所有有關(guān)作物的代碼,然后根據(jù)其擁有的階段數(shù),將其全部選擇“置1”獲得其十六進制數(shù)就可以了。
下面廢話不多說,直接上代碼:
plants={weed_forgetmelots={true,true,true,true,true}, ? ? ? ? ??
asparagus={true,true,true,true,true}, ? ? ? ? ? ?
carrot={true,true,true,true,true}, ? ? ? ? ? ?
garlic={true,true,true,true,true}, ? ? ? ? ? ?
dragonfruit={true,true,true,true,true}, ? ? ? ? ? ?
pomegranate={true,true,true,true,true}, ? ? ? ? ? ?
watermelon={true,true,true,true,true}, ? ? ? ? ? ?c
orn={true,true,true,true,true}, ? ? ? ? ? ?
onion={true,true,true,true,true}, ? ? ? ? ? ?
tomato={true,true,true,true,true}, ? ? ? ? ??
?pumpkin={true,true,true,true,true}, ? ? ? ? ??
?pepper={true,true,true,true,true}, ? ? ? ? ??
?durian={true,true,true,true,true}, ? ? ? ? ? ?
weed_ivy={true,true,true}, ? ? ? ? ? ?
weed_firenettle={true,true,true,true}, ? ? ? ? ? ?
weed_tillweed={true,true,true,true}, ? ? ? ? ? ?
potato={true,true,true,true,true}, ? ? ? ? ? ?
eggplant={true,true,true,true,true}}
(“plantregistry”文件中的plants)
last_selected_card={ ? ?weed_forgetmelots=5,asparagus=5,carrot=5,garlic=5,dragonfruit=5,pomegranate=5,watermelon=5,corn=5,onion=5,tomato=5,pumpkin=5,pepper=5,durian=5,weed_ivy=3,weed_firenettle=4,weed_tillweed=4,potato=5,eggplant=5}
(“plantregistry”文件中的last_selected_card)
"PLANTREGISTRY":{"KeyValues":{ ? ? ? ?
"corn":"1f", ? ? ??
?"durian":"1f", ? ? ??
?"eggplant":"1f", ? ? ? ?
"onion":"1f", ? ? ??
?"pepper":"1f", ? ? ??
?"potato":"1f", ? ? ??
?"pumpkin":"1f", ? ? ??
?"tomato":"1f", ? ? ??
?"asparagus":"1f", ? ? ??
?"carrot":"1f", ? ? ? ?
"garlic":"1f", ? ? ? ?
"dragonfruit":"1f", ? ? ? ?
"pomegranate":"1f", ? ? ??
?"watermelon":"1f", ? ? ? ?
"weed_forgetmelots":"1f", ? ? ? ?
"weed_ivy":"7", ? ? ? ?
"weed_firenettle":"f", ? ? ? ?
"weed_tillweed":"f"},"Revision":**,"Unchanged":false},
(“keyvalue_plantregistry_prod”文件中的"PLANTREGISTRY"。注:“**”中填寫自己的修訂碼。)
值得注意的是,在作物中有三種作物不是五個階段:weed_ivy(刺針旋花:三個階段), weed_firenettle(火蕁麻:四個階段),weed_tillweed(犁地草:四個階段)。
相應(yīng)的文件中就分別是:{true,true,true}、{true,true,true,true}和“7”、“f”(分別對應(yīng)十六進制“111”、“1111”)。
做完上述這些改動之后重啟你 的饑荒你就會看到自己的“植物登記表”中的所有作物已經(jīng)全部解鎖開啦!

4.肥料:解鎖完作物后,我們不難發(fā)現(xiàn),其實肥料代碼應(yīng)該在“plantregistry”文件中的“fertilizers={}”代碼段中。
經(jīng)過查閱B站博主:吶年丶韶華似水在2020年更新的一篇名為【饑荒聯(lián)機】代碼——農(nóng)務(wù)篇(截止到12月16日種瓜得瓜更新)的帖子,可以得知部分肥料的代碼:

這里對其給出一定更正:首先,饑荒后來額外添加了一種肥料:樹果醬(treegrowthsolution)。其次,催長劑使用soil_amender是無法解鎖“催長劑起子”的。需要將其分別改寫為“soil_amender_low”、“soil_amender_med”、“soil_amender_high”,分別對應(yīng)著“催長劑起子”、“正在發(fā)酵的催長劑”、“已經(jīng)發(fā)酵的催長劑”。代碼如下:
fertilizers={spoiled_fish_small=true, ? ? ? ? ? ? ? ?
spoiled_fish=true, ? ? ? ? ? ? ? ?
soil_amender_low=true, ? ? ? ? ? ? ? ?
soil_amender_med=true, ? ? ? ? ? ? ? ?
soil_amender_high=true, ? ? ? ? ? ? ??
?soil_amender_fermented=true, ? ? ? ? ? ? ? ?
spoiled_food=true, ? ? ? ? ? ? ??
?rottenegg=true, ? ? ? ? ? ? ? ?
compost=true, ? ? ? ? ? ? ? ?
compostwrap=true, ? ? ? ? ? ? ??
?poop=true, ? ? ? ? ? ? ? ?
guano=true, ? ? ? ? ? ? ? ?
fertilizer=true, ? ? ? ? ? ? ? ?
glommerfuel=true, ? ? ? ? ? ? ? ?
treegrowthsolution=true}
(“plantregistry”文件中的fertilizers)

總結(jié):截止目前為止,通過作者的嘗試可以看到科雷確實仍將“植物登記表”的有關(guān)文件都保存在玩家本地,也說明了通過修改文件解鎖全作物階段和肥料是完全可行的。
最后仍需說明:本文不是單一解鎖攻略,略顯啰嗦,這是因為對于作者本人也是一次解鎖過程的記錄,如給讀者冗長感受,略表歉意。再者就是,本文僅代表作者探尋的一種可能性,并不代表作者本人支持通過這種方式來跨越游戲體驗(詳見前文聲明),請各位玩家慎用。
(看到最后,請給新人up一個關(guān)注,或者一個贊吧?。?/strong>