2.IL补丁

举一个IL的应用的例子,比如我想让蒸汽机输出石油
蒸汽机原来输出的是水,水在游戏里是water,所以直接在蒸汽机的config文件里搜索water就行了

在这里插入图片描述

在这里,然后点water,这里有游戏里所有液体的名称,石油的英文是petroleum,按ctrl+f搜他会发现有,所以石油的英文就是他了,如果不知道石油的英文怎么搜呢,打开poedit,搜石油你就会搜到了
然后回到上面图的位置,在water那右键编辑IL指令,你会看到这些玩意
在这里插入图片描述

water呢,没有water,还记得源码里把water赋给了destElem,这里有这个单词,那么会不会上面那个数字就是water呢,看到他前面那个ldc.i4表示这个数字是个int类型,恍惚间还记得当时点water的时候出现了water=一串数字,那个也是int型,把那串数字转成16进制会发现刚好等于0x6D796197,所以,这里这个数字就表示水,那么我们改石油的时候也需要填一个16进制的数字,回到刚才的页面看看石油的数字是多少,-486269331,把他转成16进制,-0x1CFBE193,也就是说要把0x6D796197改成-0x1CFBE193
然后开始写代码,这里直接贴出来吧,IL的代码都比较死板

在这里插入图片描述

第一行注意这里要补丁的方法是DoPostConfigureComplete,下面的方法体,改IL的全长这样,不管补丁的方法参数是什么返回值是什么,然后下面的code[34].operand = …,这里是所有IL代码唯一不同的地方,34就是要修改的数字的序号,就是IL指令第一列的那个,operand表示修改的是操作符

至于怎么修改操作码,百度,这里不教,改操作码的情况非常非常少,而且改操作码非常危险,很可能造成游戏崩溃
其实这个例子并没有那么好,改蒸汽机输出直接用后置补丁就行了,不过这里主要是为了教大家怎么读IL代码,跟游戏中一些莫名其妙的0x数字都是啥

IL更好的应用是下面这个,这里是修改挖掘不减半,代码大家自己看,并不难
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值