TModLoader制作带Chilled debuff的子弹出现HitNPC重写报错
问题排查与解决
报错直接原因
你在IceShot类中编写的OnHitNPC方法,和当前tModLoader版本中ModItem基类定义的可重写方法签名不匹配。
当前1.4版本tModLoader的ModItem.OnHitNPC完整方法签名为:public override void OnHitNPC(Player player, NPC target, int damage, float knockBack, bool crit)
你编写的方法缺失了代表攻击发起方的Player player参数,编译器无法找到匹配的可重写方法,因此抛出“No suitable method found to override”错误。
逻辑失效的深层原因
即便修正了方法签名,把命中逻辑放在子弹物品类中也不会生效:
ModItem.OnHitNPC的触发场景是玩家手持该物品作为近战武器直接命中NPC。- 你制作的是消耗类弹药(子弹),它的实际命中是由其生成的投射物完成的,物品本身的近战命中回调永远不会被触发。
正确实现方案
- 移除
IceShot物品类中整段错误编写的OnHitNPC方法。 - 打开你代码中已经关联的自定义投射物类
IceShotProjectile,在类中重写投射物的NPC命中方法,实现减益附加:
这里建议直接使用public override void OnHitNPC(NPC target, int damage, float knockback, bool crit) { // 为目标附加Chilled减益,持续180帧(3游戏秒) target.AddBuff(BuffID.Chilled, 180, false); }BuffID.Chilled替代硬编码的数字46,避免版本更新后buffID变动引发逻辑异常。 - 如果不想依赖自定义投射物,希望复用原版子弹投射物的行为,可以在子弹物品类中重写弹药专属的命中回调
OnHitNPCAsAmmo,该方法会在弹药被武器发射、命中NPC时触发,对应签名为:public override void OnHitNPCAsAmmo(Player player, NPC target, Item usedWeapon, int damage, float knockback, bool crit)
内容的提问来源于stack exchange,提问作者Henry Bass
相关产品推荐
相关产品推荐

