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

MC的暴击,并不等于跳劈

2023-02-07 13:31 作者:道家深湖  | 我要投稿

“暴击”,或者“会心”,指的都是同一件事,用英文说就是Critical。之后我们统一用暴击来称呼。

mcwiki上的Damage词条,里面的暴击章节

https://minecraft.fandom.com/zh/wiki/%E8%BF%91%E6%88%98%E6%94%BB%E5%87%BB

中文的wiki不在伤害词条里,在单独的近战攻击词条里。如下:

mcwiki,中文版的解释

我们截取一下1.12.2Forge版,EntityPlayer的相关源码:

其中,

也就是说,暴击是仅通过以下逻辑决定的,不含随机要素:

  1. 攻击蓄力90%以上。tick的计数按照+0.5tick计算;

  2. 下落距离>0;

  3. 不在地面上;

  4. 并非正在爬梯子;

  5. 并不在水体里(但下雨淋湿无所谓);

  6. 没有获得致盲效果;

  7. 并未处在骑乘状态;

  8. 目标必须是LivingBase,即对弹射物等的攻击不会暴击,但对船、盔甲架可以;

  9. 不能处于冲刺状态;

  10. 伤害必须大于0(在省略的代码部分里);

  11. Forge所发布的事件未取消暴击。

“跳劈”是个很不精确的描述。在跳起来后,上升的过程中是不会暴击的,下落的过程中会——但某些模组通过持续清空下落距离来实现免疫摔落伤害,这样就会导致不会暴击,且《原神12》的下落攻击也无法触发。(正确的免疫摔落伤害应该在摔落事件里处理伤害系数,不应该处理下落高度)。

即使如此,上升过程中不暴击,下落过程中会。但,如果在下落的过程中,因为获得失重DEBUFF,或者因为二段跳等原因又开始上升,那么这时候它还是可以暴击的。因为,上升的过程并不会减少或清空下落高度,触地才会。

Forge知道玩家想改变这个逻辑,做什么暴击率之类的东西,所以给了个事件,CriticalHitEvent。你可以在这里手动覆盖暴击逻辑,自行判断决定是否需要暴击(通过修改Result),还可以修改暴击后的伤害系数。从前面可以看到,暴击伤害默认为1.5倍。


但既然这玩意都写在EntityPlayer了,各位也就明白了,怪物是不会走这套暴击逻辑的。跳起来也一样。

还有一件事容易忽略,那就是这个是attackTargetEntityWithCurrentItem,他只在普通近战攻击里才会调用。箭矢等弹射物暴击不吃这套。

箭矢确实有个Critical字段,但那主要决定是否有暴击粒子,并不会走这个事件。箭矢的那个critical数据为true的时候,伤害会如下方式进行增加:

也就是约莫会增加0~50%的伤害。这个过程不受CriticalEvent的控制,且怪物和玩家的箭矢都受到影响。

如果你想把暴击系统补全的完善一点,还是相当麻烦的。你得设法抵消原版的箭矢暴击,给玩家的非近战补上暴击,还要给怪物的全都来一遍。原神12基于CrticalEvent引入了暴击率、暴击伤害系统,但那没有正确地处理玩家箭矢的问题。

另一个尴尬的问题在于,假如你实现了“暴击率”系统,通过你的暴击率来重新进行随机判定是否暴击,那你只能覆盖原有的结果。如果其他mod也引入了一共暴击率系统,那你们就会各自为战,很可能干扰对方的“是否暴击”,然后还把暴击伤害倍率给搞的乱七八糟。这点没什么特别好的办法,只能随缘。毕竟,你写的再规范也架不住对方直接给覆盖了。

MC的暴击,并不等于跳劈的评论 (共 条)

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