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

rimworld的mod制作——反编译与瘟疫枪

2023-05-20 14:47 作者:PLucker518  | 我要投稿

今天原本想讲一下反编译的。但是看到了wiki上瘟疫枪的教程,他写的很详细和全面,我打算简单介绍一下他的内容,水一篇。

github网址我贴不上来。大家可以在github上搜索PlagueGun。会有好多个版本。。。我也不知道哪个是正版。。。wiki上说是名叫Jecrell编写的,链接给的是dninemfive。

dninemfive/PlagueGun: The completed mod from the tutorial (github.com)


瘟疫枪作者打算在游戏中添加一把枪,功能是这把枪射出的子弹,有概率会给目标添加一个“瘟疫”debuff。


about目录与def目录的内容我就不重复了。之前我都介绍过该怎么写了。有兴趣大家可以自己去作者github下载。

重点说一下CS,我注释了他的代码。代码还是很简单的。

编译时注意要添加对Assembly-CSharp.dll、UnityEngine.dll和UnityEngine.CoreModule.dll的引用。注意引用不要选复制本地。


下面介绍一下反编译工具。我用的是dnSpy。

先用编辑器打开Assembly-CSharp.dll。然后就看到了左方红框中的内容。然后看下方红箭头的地方搜索你想要的内容,比如我这里就查找Bullet这个原始代码类。想看一下它干了什么。

搜索到后,在上方代码就显示出了impact类。就是作者继承改写的类。

这段代码实现了在 RimWorld 游戏中,弹药撞击一个目标时的具体逻辑与效果。

首先,保存当前所在地图和位置信息。接下来,调用基类(base)的 Impact 方法,处理当前物体与目标之间的撞击情况,并记录战斗日志(battleLogEntry_RangedImpact)。然后,调用 NotifyImpact 来通知游戏系统有一个物体发生了撞击。

如果当前物体撞击到了一个有效的目标(即非 null),则构造伤害信息 dinfo,并将伤害应用于目标 hitThing,在战斗日志中记录该次伤害(AssociateWithLog)。如果目标是角色(pawn2),通知其进入受挫状态(stagger)。特别地,如果当前物体存在额外伤害(extraDamages),则遍历每个额外伤害形成的 DamageInfo 并随机使用其中的一部分应用于目标 hitThing。

最后,如果目标 hitThing 是角色并且满足触发条件(bulletChanceToStartFire),则可能引起角色着火。否则,如果当前物体未被护盾拦截,则根据撞击地面的位置、所在地图等信息确定造成撞击的效果和声音,同时也可能引发地面着火。

……

……

无聊且痛苦的内容。



rimworld的mod制作——反编译与瘟疫枪的评论 (共 条)

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