本帖最后由 kukupapa 于 2018-11-5 13:10 编辑
改变培训、训练、研究的加成速度
物品 | | 诊断书柜 | | 治疗书柜 | | 药柜 | | 咖啡机 | | 超级计算机 | | 服务器 | | 百科全书I | | 百科全书II | | 解剖图海报 | | 脑部解剖图海报 | | 立体主义解剖图海报 | | 骷髅模型 | | 解剖模型 | |
这里主要考虑修改房间内的物品效果,这样可以方便的在游戏界面看到。依以下顺序打开:Assembly-CSharp > Assembly-CSharp.dll > TH20 >找到以下的几个类“ RoomModifierDiagnosis(诊断的修改)修改的方法分别为apply(放置物品时)、remove(移走物品时)、Description(这个是屏幕上显示的物品说明)。 RoomModifierTreatment(治疗的修改)修改的方法分别为apply、remove、Description。 RoomLogicResearch(研究的实际数值放置处)RoomModifierResearchRate(研究的在屏幕上的显示数值)、 RoomLogicTrainingRoom(训练的实际数值)、RoomModifierTrainingRate(训练的显示)、 GameAlgorithms.CalculateTrainingPointLearnRate(this._teacher, pupil, this._pupils.Count, this._room)(计算速度系数) 修改诊断和治疗的物品加成时应同时修改apply、remove、description以确保数据统一性。训练和研究的加成数据都是在游戏中开始一项科目的培训或一项研究时即时计算房间内物品的加成,所以有没有remove其实都无所谓。
修改的数值怎么得出来的 猜测的思路:以药柜为例,它在游戏的界面显示的治疗加成是1%(这个值是经过被%格式化的字符串),代码中和这个相关的是this._percentage/100,推测出this._percentage = 1,可以看出this.percentage就是代表物品本身固有的加成属性(这个值因该是固化在unity里的,我是没能力找到它的初始值在哪,哪位大神如果能有办法找出,还请不吝赐教),所以我们只能在程序把它读出来后进行修改。
既然this._percentage不能改,如果我想把它变成200%怎么办? 只要把代码改成:this._percentage*200/100(为尽量维护源代码的完整性,我把它写成this._percentage/100*200)即可。如果是药柜的话这个算式的值是2,经过格式化字符串显示出来就是200%。那么如果你想改成10%,则只要把代码改成:this._percentage*10/100,想增加百分之多少,依此类推即可。
我在修改中统统改成200%加成。
1、修改治疗的物品加成,找到RoomModifierTreatment类后,右键点击类名,选择“编辑类(C#)…“,
找到下图中的三行代码,对照下图红框位置(对于语句的定位可以用CTRL+F也可以参照图示中语句的行号大致定位)进行修改,在公式最后添加你想放大的倍数即可。修改完毕后点击”编译“。
2、修改诊断的物品加成,找到RoomModifierDiagnosis类后,右键点击类名,选择“编辑类(C#)…“,对照下图进行修改,在公式最后添加你想放大的倍数即可。修改完毕后点击”编译“。
3、修改培训的物品加成,先修改显示效果,找到RoomModifierTrainingRate类,右键点击类名,选择“编辑类(C#)…“,在弹出窗口中修改类中的Description()方法,这里是物品关于培训加成的描述,是游戏中鼠标指向物体时,显示的说明,并不实际改变培训速度。在公式最后添加你想放大的倍数即可。然后点击“编译“ 这个RoomModifierTrainingRate类中的Apply和Remove方法里都是空的,所以培训加成的实际数值已经改了算法,经过一番折腾,其实无非就是用关键字搜索而已,找到了RoomLogicTrainingRoom类中Tick(),可以看到培训是以老师到没到培训室作为培训开始动作的判断依据的,如果教师到场,学生没有到场,默认等待120秒(程序里是120f,我觉得应该是120秒的意思,没有深究),超过时间则取消培训。如果学生到场,教师也在培训室内,则开始培训,所以相关函数是UpdateLearning。点击UpdateLearning(或者直接在左边的栏中找),可以看到UpdateLearning方法中的IncreaseLearning函数是判断每个学生的培训进度,满了加点幸福值(这里你可以提高所加的幸福值,给点员工福利![](static/image/smiley/default/lol.gif) ) 赶出培训室,没满就继续培训。那么num值就是这个房间的单位时间培训速度加成的总和,我们可以直接改这个值,但是这样改了以后,无论你在房间里放多少物品,培训速度都不会改变了,那就失去很多乐趣了,所以我们去改给它赋值的函数GameAlgorithms类中的CalculateTrainingPointLearnRate方法。在这个方法中可以看到和培训加成总和相关的有:教师的教学加成trainingTeachingSpeed,学生的学习加成trainingLearningSpeed,还有个很有趣的系数:房间大小classSize(我觉得应该是),它的公式好像说明房间越大培训效果越差,有兴趣的不妨去研究下这个函数。最后一个num2就是我们要改的物品的加成了,看到那个熟悉的100f了吗,还犹豫啥,*200f直接怼了它。 依次找到GameAlgorithms类中的CalculateTrainingPointLearnRate方法。右键点选方法名,选择“编辑方法(C#)…”。红框内为物品的速度加成,在公式最后添加你想放大的倍数即可。改完后点击“编译“
4、修改研究的物品加成,同培训一样的思路,先改说明,找到RoomModifierResearchRate类,这个类里放置的时物品加成研究速度的说明。右键点击类名,选择“编辑类(C#)…“,找到类中的Description()方法,对照下图进行修改,在公式最后添加你想放大的倍数即可。修改完毕后点击”编译“。
改好显示的结果后,通过寻找修改培训的方法一样,找到RoomLogicResearch类中的tick()方法,这个方法中只修改物品对研究速度的加成。 < 这句代码是这个房间物品加成研究速度的初值,不要动它,改了虽然也能加快研究速度,但是在游戏界面上是看不到的,所以仍然改每个物品对研究速度的加成,通过查看后面的代码,可以看出后面的roomItem2是代表房间的物品对研究的速度加成的,所以其后foreach内的程序体就是对这个房间内所有物品的加成系数做汇总,我们改它就行了。 右键点击tick(),选择“编辑方法(C#…)”,对照下图在公式最后添加你想放大的倍数即可,点“编译”
最后HAPPY吧!
|