《双点医院》修改员工XP经验详细教程
《双点医院》中的员工经验一般情况下增长的比较缓慢,往往想培养员工还需要等经验才可以培训,那么小编下面为大家分享《双点医院》修改员工XP经验详细教程,希望对大家有用。
前期准备
首先,打开dnSpy,选中dnSpy左边窗口的全部文件按下Del键(这只会关闭文件而非删除,这样做可以防止一些诡异的编译失败的问题,特别是在你希望修改不止一个游戏的时候)
dnSpy下载地址:点击进入
之后用dnSpy打开游戏目录\TPH_Data\Managed\Assembly-CSharp.dll
修改教程
最开始,让我们介绍一种常规(但不适合修改员工XP)的修改方法
首先根据英语,员工是staff,经验是experience,多半会简写成xp,exp之类的东西
依此搜索,搜索可能是改游戏时候最耗时的一步,毕竟知道从哪里下手之后,做什么都会很方便。
当我们输入exp staff的时候,我们看到
请注意我是故意用exp的,因为游戏里面用的名称是XP,我们本应搜不到任何有用的信息
然而谁让Initialise这个可以被理解成“初始化”的单词以e结尾呢
点开InitialiseXP
这里我们看到,这个函数主要操纵了变量this.XP,这说明this.XP就是我们要修改的目标(或者,查文件的开头可以看到,这里的this指的应该是staff,也就是说我们的目标是staff里面一个叫做XP的变量)
看到this.XP之后,我们其实就找到了我们要修改的目标,理论上我们就可以不要客气了,右键怼它:)
我们得到了有个菜单,里面有一个“分析”,这是dnSpy里面最好用的一个功能
我们看到了两个下拉菜单,一个叫get,一个叫set,字面意义上,set是“设置”,是赋值的意思,而get是获取,是读的意思,也就是,如果我们要改这个数据,我们应该找set,看看到底是哪个函数set了它,
然而我们想多了
只有一个函数使用了set,而这个函数正是我们打开的这个初始化的函数
会有程序用初始化这种方法对变量进行更新吗?
或者说,会有人用格式化这种方法往硬盘里面存数据吗?
显然不对,然鹅,对一般数据,或者说我从Reus一路改过来改了那么多游戏,从未见过哪个函数不是直接用set进行赋值的,也就是说,一般情况下,只要找到set顺蔓摸瓜就可以了。
错误原因
原因很简单,因为这个作死的程序是用get进行赋值,甚至越过了get使用了他们自己定义的AttributeFloat进行赋值的。
先说get,这个时候,在常规方法失效的时候,其实就是大家发挥自己想象力的时候了。
点开get,如果有足够耐心,可以一个个看下去,然鹅大家都没有耐心,于是,一个好方法是通过名字以及对游戏的了解进行修改
首先,游戏里面只有医生看病人的时候才会进行经验上的修改,所以我们要看update,而非其他的东西
在get方法里面带update的只有两个,都是带patient的,把这两个都改掉,我们会发现,助理的等级哗哗哗往上涨拦都拦不住
然而大夫还是一脸萌萌哒,这时候,我们不得不去仔细检查那个modify到底是怎么完成的,
搜索相关代码(右键怼modify选择分析,强行阅读相关代码),在AttributeFloat attribute = attributes.GetAttribute(enumValue);一句里面,出现了一个可以绕过this.XP来强行读取并修改XP的
这句话最终在attribute.Modify(this._amount, attributesInterface.GetAttributeMultiplier(enumValue));一句完成了修改
既然知道了这一点,我们只需要修改相关代码拦截住这一段内容,就可以让员工XP(或许要除去那群可怜的助理)蹭蹭蹭网上涨了
这里选择修改更为保险的GetAttributeMultiplier
反正我们可以查到XP的enumValue是9(善用鼠标左键双击以及右键硬怼即可)
最后找到public float GetAttributeMultiplier(CharacterAttributes.Type type)
在这里进行修改,反正只要随手一改就好,我改了return:return Mathf.Max(this._getAttributeMultiplierParam.Multiplier, (type == CharacterAttributes.Type.XP) * 100f);
之后,终于不用为了升个级等一个小时了
相关内容请关注:双点医院专区