You need to enable JavaScript to run this app. TModLoader制作带Chilled debuff的子弹出现HitNPC重写报错
优惠活动
大模型
产品
解决方案
定价
更多

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。
  • 你制作的是消耗类弹药(子弹),它的实际命中是由其生成的投射物完成的,物品本身的近战命中回调永远不会被触发。

正确实现方案

  1. 移除IceShot物品类中整段错误编写的OnHitNPC方法。
  2. 打开你代码中已经关联的自定义投射物类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变动引发逻辑异常。
  3. 如果不想依赖自定义投射物,希望复用原版子弹投射物的行为,可以在子弹物品类中重写弹药专属的命中回调OnHitNPCAsAmmo,该方法会在弹药被武器发射、命中NPC时触发,对应签名为:
    public override void OnHitNPCAsAmmo(Player player, NPC target, Item usedWeapon, int damage, float knockback, bool crit)

内容的提问来源于stack exchange,提问作者Henry Bass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 05:15:02