共享血量 - woshiermuqwq/mythic-chinese GitHub Wiki
假设有3个实体, 它们同时生成, 且您想让三者之一死亡后另外俩实体也随之死亡
如果用 Remove 与 @MIR ~onDeath的话
假设1个实体的最大生命是50, 共享血量只需要 玩家对这三个实体造成的总伤害为 50 就能让三者全部死亡
而 Remove 则需要你去打死三者之一, 如果我打掉每个实体的一半血量(总伤害为75) 那就和预期不一致
[]
因为这3个实体的血量要统一, 所以我们干脆给它们一个统一的虚拟血条
现在, 我们先让这三个实体拥有 "虚拟血条"
共享血量实体:
Type: zombie
Faction: 无
Options:
PreventSunburn: true
NoAI: true
Skills:
- setvariable{var=caster.共享血量;type=float;value="100"} @self ~onSpawn
- skill:共享血量-伤害抵消{sync=true} @trigger ~onDamaged
生成后 设置位于自身身上的变量: 共享血量 的值为 100 (100就是共享血量的最大值)
受伤后 强制(因cancelevent必须被强制激活) 对 攻击自身的实体 激活技能组: 共享血量-伤害抵消
大前提是这些实体在同一阵营 (Faction)
共享血量-伤害抵消:
TriggerConditions:
- samefaction false
Conditions:
- variableinrange{var=caster.共享血量;v=>0}
Skills:
- cancelevent @self
- setvariable{var=caster.共享血量;type=float;value="<caster.var.共享血量> - <skill.var.damage-amount>"} @self
- skill:共享血量-计算 @EIR{r=16}
- damage{a=0;pk=true;pi=true} @self
技能组: 共享血量-伤害抵消的条件为:
触发者(攻击施法者的实体)与施法者不在同一阵营
施法者(实体本身) 身上的变量: 共享血量 的值≥0
这里用到了 MythicMobs 异步, 即 条件一定比技能行更快一步激活
受伤后最先执行的是取消受伤事件(即被左键了什么反应都没有, 包括受伤变红)
随后设置自身身上的变量: 共享血量 的值为 自身身上的变量: 共享血量的值 - 自身最后一次所受到的伤害值
最后由于取消了受伤事件, 受伤变红也没了 所以这边damage自己一下(即使伤害为0也仍有变红效果)
这样, 这个虚拟血条就跟护盾一样, 剩余虚拟血条 > 0 时不会受到任何伤害
不会受到伤害的同时 虚拟血条的值被减了, 相当于护盾消耗 剩余虚拟血条 <0 时相当于无护盾
自身不会受到伤害的同时会和正常受伤一样令自身短暂变红,与自身共享生命的实体也会变红
既然是共享血量,那就得对所有拥有共享血量的实体(@EIR)激活一个技能组...
共享血量-计算:
TargetConditions:
- samefaction
Skills:
- setvariable{var=target.共享血量;type=float;value="<caster.var.共享血量> - <skill.var.damage-amount>"}
- damage{a=0;pk=true;pi=true}
技能组:共享血量-计算 对每个技能目标 (由@EIR所选取的实体) 的要求是 处在同一阵营
@EIR不会选取自己, 所以只会计算位于 符合条件的实体 身上的变量: 共享血量
再次强调, 符合条件的实体 就是 拥有虚拟血条的实体.
技能组内容是 设置位于每个符合条件的实体身上的变量: 共享血量 值为 它们各自身上的变量: 共享血量 的值 - 施法者最后一次所受到的伤害值
这里的 施法者最后一次所受到的伤害值 与 第一个技能组的 自身最后一次所受到的伤害值 是同一个实体
Q: 受伤事件不是被取消了嘛? 为啥还能读取到 自身最后一次所受到的伤害值?
E: 这可能也是MythicMobs的异步, 占位符 又比 条件 更快一步读取
Q:为什么damage自己不会被取消?因为damage自己后,自己成了这个技能组的触发者(~onDamaged)
E: 而触发者条件写了 不在相同阵营 实体检测自己 那肯定在相同阵营 故不符合条件 不激活下方的取消事件