欢迎光临散文网 会员登陆 & 注册

饥荒——摸索本地文件解锁“植物登记表”

2023-08-30 13:13 作者:樨山  | 我要投稿

前言:本文是一篇作者自己摸索尝试通过修改本地文件的形式来解锁“饥荒联机版”中“植物登记表”的记录和分析。

适用于喜欢饥荒种田,但是因为更换steam账号而需要重新解锁“植物登记表”的“新号老手”和初次接触饥荒种田而苦恼于各种植物生长阶段和配肥的“懒虫萌新”玩家,这是因为通过本文介绍的方法将会直接解锁“耕作者先驱帽”中的全部植物图鉴和全部肥料图鉴。

声明:本文更多是记录作者的尝试经历,作者本人并不提倡直接跨越饥荒种田的游戏历程,舍弃游戏探索过程中的经历和逐步解锁植物与肥料的累积喜悦感。希望各位玩家考虑清楚后再选择是否使用下文方法!

起因:作者在一个新号中耕种饥荒时,发现自己的“耕作者先驱帽”因为换号的原因没有解锁作物和肥料(注:相同账号下饥荒不同的档会通用一份“植物登记表”中的解锁),由于之前都解锁过,所以想能不能通过更改本地文件的方式,将“植物登记表”一步解锁开,以节省时间。(再次声明:不推荐新手玩家直接一次都不亲自解锁。)

过程:

0.猜想:由于我们知道关于有关“植物登记表”的文件科雷并不是云端存储,而是使用玩家本地存储,所以饥荒的配置文件中一定有一个文档是有关“植物登记表”的只需要更改这个文件就可以直接解锁全部的植物生长过程。

1.尝试:通过查阅我们得知有关文件是在"C:\Users\username\Documents\Klei\DoNotStarveTogether\*******\client_save"文件夹下的,可以通过游戏内“数据”按钮直接找到其父文件夹。

点击左下角“数据”
点击第一个“client_save”
找到“plantregistry”文件


此文件可以使用“记事本”打开,下文中我使用了“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

当然这里有一个关键点:last_selected_card中的值需要相应更改,默认可以改为,已解锁阶段的最大值。如上我将其改为:

asparagus=5,carrot=5,garlic=5,dragonfruit=5

但是当我满心以为问题迎刃而解重新打开饥荒后,却发现,“植物登记表”没有一丝更改,此时再次打开“plantregistry”文件,发现就连代码也被重新覆盖为了原样。

第一次尝试失败。

2.尝试:查阅百度饥荒贴吧之后,看到一条帖子:

“截图来自饥荒吧”(侵删)


由此我有了一个猜想,既然“植物登记表”还是在本地文件中读取,那么就算科雷修复也顶多是增加了新的检验机制。比如在我的尝试中,就是检验失败,所以文件被系统重写。那么,只需要找到饥荒系统是怎么检验的,即找到检验值文件,应该就可以了。

我直接在“client_save”文件夹下搜索字段“plantregistry”来找到所有有关植物登记的文件,果然这时候,另一个文件映入眼帘:

“keyvalue_plantregistry_prod”文件


很明显这个应该就是我要找的文件,而且他的关键词“keyvalue”(关键值)更让我确定了这一点。

打开该文件后代码结构如下:

{"Events":{  

 "COOKBOOK":{"KeyValues":{"baconeggs"://无关代码},"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":{//无关代码},"Revision":29,"Unchanged":false},   

 "SCRAPBOOK1":{"KeyValues":{//无关代码},"Revision":29,"Unchanged":false},    

"SCRAPBOOK10":{"KeyValues":{//无关代码},"Revision":31,"Unchanged":false},    

"SCRAPBOOK11":{"KeyValues":{//无关代码},"Revision":32,"Unchanged":false},  

  "SCRAPBOOK12":{"KeyValues":{//无关代码},"Revision":44,"Unchanged":false},    

"SCRAPBOOK13":{"KeyValues":{//无关代码},"Revision":41,"Unchanged":false},   

 "SCRAPBOOK14":{"KeyValues":{//无关代码},"Revision":29,"Unchanged":false},   

 "SCRAPBOOK15":{"KeyValues":{//无关代码},"Revision":25,"Unchanged":false},    

"SCRAPBOOK2":{"KeyValues":{//无关代码},"Revision":35,"Unchanged":false},    

"SCRAPBOOK3":{"KeyValues":{//无关代码},"Revision":38,"Unchanged":false},   

 "SCRAPBOOK4":{"KeyValues":{//无关代码},"Revision":28,"Unchanged":false},   

 "SCRAPBOOK5":{"KeyValues":{//无关代码},"Revision":43,"Unchanged":false},   

 "SCRAPBOOK6":{"KeyValues":{//无关代码},"Revision":34,"Unchanged":false},   

 "SCRAPBOOK7":{"KeyValues":{//无关代码},"Revision":38,"Unchanged":false},    

"SCRAPBOOK8":{"KeyValues":{//无关代码},"Revision":24,"Unchanged":false},    

"SCRAPBOOK9":{"KeyValues":{//无关代码},"Revision":35,"Unchanged":false},

"SKILLTREE":{"Revision":1,"Unchanged":true}}}

很明显一眼就能看到和“plantregistry”有关的“keyvalues”:

"asparagus":"1c",                    

"carrot":"1e",                    

 "garlic":"8",                     

"dragonfruit":"c"

我猜测每个作物对应的值就是检验值,但是这其中的值又含有什么信息呢?如果有一点计算机基础的小伙伴应该很容易发现每个作物后的数是“十六进制数”。

所以我列出如下表:

起先我还在看解锁阶段和十进制数的关系,但是很快,就会发现,实际是解锁阶段对应的是二进制数。二进制数00000从低位到高位分别对应作物生长的五个阶段,解锁了的阶段就会被从0置1。比如芦笋的3、4、5阶段已经解锁,所以第3、4、5位0就被置为1,在转化为十六进制为“1c”。

由此,我在按照之前的想法更改了“plantregistry”文件的基础上,同时更改了文件“keyvalue_plantregistry_prod”中的代码,将对应的作物都改为了“1f”(“1f”的二进制位“11111”对应的五个阶段都被解锁)。

当我怀揣着忐忑的心再次打开饥荒的时候,终于看到“植物登记表”中相应的四个作物已经被解锁全阶段:

全解锁“芦笋”
全解锁“胡萝卜”
全解锁“火龙果”
全解锁“大蒜”


第二次尝试成功!

3.解锁:后面的事情就很简单了,那就是找到所有有关作物的代码,然后根据其拥有的阶段数,将其全部选择“置1”获得其十六进制数就可以了。

下面废话不多说,直接上代码:

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(犁地草:四个阶段)。

相应的文件中就分别是:{true,true,true}、{true,true,true,true}和“7”、“f”(分别对应十六进制“111”、“1111”)。

做完上述这些改动之后重启你 的饥荒你就会看到自己的“植物登记表”中的所有作物已经全部解锁开啦!

“植物登记表”作物全解锁


4.肥料:解锁完作物后,我们不难发现,其实肥料代码应该在“plantregistry”文件中的“fertilizers={}”代码段中。

经过查阅B站博主:呐年丶韶华似水在2020年更新的一篇名为【饥荒联机】代码——农务篇(截止到12月16日种瓜得瓜更新)的帖子,可以得知部分肥料的代码:

帖子中给出的肥料(侵删)


这里对其给出一定更正:首先,饥荒后来额外添加了一种肥料:树果酱(treegrowthsolution)。其次,催长剂使用soil_amender是无法解锁“催长剂起子”的。需要将其分别改写为“soil_amender_low”、“soil_amender_med”、“soil_amender_high”,分别对应着“催长剂起子”、“正在发酵的催长剂”、“已经发酵的催长剂”。代码如下:

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)

“植物登记表”中“肥料”已全解锁


总结:截止目前为止,通过作者的尝试可以看到科雷确实仍将“植物登记表”的有关文件都保存在玩家本地,也说明了通过修改文件解锁全作物阶段和肥料是完全可行的。

最后仍需说明:本文不是单一解锁攻略,略显啰嗦,这是因为对于作者本人也是一次解锁过程的记录,如给读者冗长感受,略表歉意。再者就是,本文仅代表作者探寻的一种可能性,并不代表作者本人支持通过这种方式来跨越游戏体验(详见前文声明),请各位玩家慎用。

(看到最后,请给新人up一个关注,或者一个赞吧!)




饥荒——摸索本地文件解锁“植物登记表”的评论 (共 条)

分享到微博请遵守国家法律