伤害转化 - woshiermuqwq/mythic-chinese GitHub Wiki

情景

实体A可将自身受到的所有伤害等值转化为技能伤害 将技能伤害多次给予给其它实体(单次伤害受伤害次数影响)

  • 本教程所用机制占比:占位符 100%
  • 对版本的最低需求是 4.11 付费版

https://i.ibb.co/jZqNMmy/Iteming.gif

原理 (无载体)

使用 变量:<skill.var.damage-amount> 以读取最后一次受到的伤害数值
将所读取到的数值加到另一个变量上面
然后给予伤害的伤害数值直接在 damage 的修改项: Amount 内进行计算.

注意

此教程用到的所有占位符(包括变量)全都位于施法者身上, 下文将忽略

涉及技能 / 条件

实体配置

伤害转化:
 Type: villager
 Health: 100
 Options:
  NoAI: true
 Skills:
# 初始化部分 
 - setvar{var=caster.伤害数值;t=float;v="0"} @self ~onSpawn
 - setvar{var=caster.提示数值保留小数位;t=float;v="5"} @self ~onSpawn
# 自定义数值部分
 - setvar{var=caster.伤害段数;t=float;v="5"} @self ~onSpawn
 - setvar{var=caster.伤害范围;t=float;v="5"} @self ~onSpawn
#决定重复伤害次数
 - setvar{var=caster.伤害转化-百分比;t=float;v="0.7"} @self ~onSpawn
#决定伤害转化比例, 1=100%
 - setvar{var=caster.伤害吸收-持续-攻击;t=float;v="3"} @self ~onSpawn
#决定转化持续时间, 单位: 秒
 - setvar{var=caster.伤害间隔;t=float;v="0.05"} @self ~onSpawn
#决定每段回血/伤害的间隔, 单位: 秒

#核心技能部分
 - skill:伤害吸收-攻击 @self ~onInteract

右键后激活技能组: 伤害吸收-攻击
这里只是举个例子, 想怎样触发就自己套

技能组配置(变量位于施法者)

伤害吸收-攻击:
  Skills:
  - ondamaged{os=机制初始化;n=伤害吸收-攻击模式;oh=伤害吸收;oe=伤害释放-攻击-效果;d=<caster.var.伤害吸收-持续-攻击>*20;c=500}

为自身创建一个
创建后激活技能组: 机制初始化, 持续时间为变量: 伤害吸收-持续-攻击 的值 x 20 刻
受伤后激活技能组: 伤害吸收
结束后激活技能组: 伤害释放-攻击-效果 的光环

机制初始化:
  Skills:
  - setvar{var=caster.伤害数值;t=float;v="0"}
  - setvar{var=caster.释放数值;t=float;v="0"}
  - setvar{var=caster.判定;t=float;v="0"}

重设相关变量值

伤害释放-攻击-效果:
  Skills:
  - setvar{var=caster.伤害数值-转化;t=float;v="<caster.var.伤害数值>*<caster.var.伤害转化-百分比>"}
  - setvar{var=caster.释放数值;t=float;v="<caster.var.伤害数值-转化>/<caster.var.伤害段数>"}
  - setvar{var=caster.伤害数值;t=integer;v="<caster.var.伤害数值>*(10^<caster.var.提示数值保留小数位>)"}
  - setvar{var=caster.伤害数值;t=float;v="<caster.var.伤害数值>/(10^<caster.var.提示数值保留小数位>)"}
  - m{m="<caster.name>吸收了<&sp><caster.var.伤害数值>点伤害, 转化为<&sp><caster.var.伤害数值-转化>点<&sp>技能伤害给予给<&sp>半径<caster.var.伤害范围>格<&sp>球体范围内的所有实体"} @eir{r=16}
  - setvar{var=caster.伤害数值;t=float;v="0"}
  - d{a=<caster.var.释放数值>;pk=true;pi=true;i=true;repeat=<caster.var.伤害段数>-1;repeatInterval=<caster.var.伤害间隔> *20} @eir{r=<caster.var.伤害范围>}

设置变量: 伤害数值-转化 的值为: 伤害数值 的值 x 伤害转化-百分比
设置变量: 释放数值 的值为: 伤害数值-转化 的值 / 伤害段数
设置变量: 伤害数值 的值为: 伤害数值 * 10的n次方(n = 变量: 提示数值保留小数位 的值)
发送信息
设置变量: 伤害数值 的值为: 0
对 以自身为中心, n格方块半径球体范围(n = 变量: 伤害范围 的值)内的所有实体 造成伤害
伤害等值于变量: 释放数值 的值, 无视护甲, 无视受伤间隔, 不会造成击退, 重复激活, 重复间隔为
变量: 伤害间隔 的值 x 20, 重复次数为 变量: 伤害段数 的值 -1.

关于为何要多创建一个变量(伤害数值-转化)

因为这边要做一个, 能自动省略所设置小数位后面的数字
虽然处理数值那部分不需要多一个变量
但提示信息需要同时提示 所受到的所有伤害 的值 和 转化后的数值
如果只用1个变量的话, 1个变量不可能同时拥有两个值

···原愿望```

激活技能. 吸收X秒内的所有伤害, 技能结束后转化为技能伤害 伤害周围实体
激活技能. 吸收X秒内的所有伤害, 技能结束后转化为生命 恢复自身 激活技能. 吸收X秒内的所有伤害, 技能结束后若吸收值达到指定值 转化为生命 激活技能. 吸收X秒内的所有伤害, 技能结束后若吸收值达到指定值 转化为2倍技能伤害

将全部与数值有关的, 全都变量化

实体配置

伤害转化:
 Type: villager
 Health: 100
 Options:
  NoAI: true
 Skills:
# 初始化部分 
 - setvar{var=caster.伤害数值;t=float;v="0"} @self ~onSpawn
 - setvar{var=caster.提示数值保留小数位;t=float;v="5"} @self ~onSpawn
# 自定义数值部分
 - setvar{var=caster.伤害段数;t=float;v="5"} @self ~onSpawn
 - setvar{var=caster.回血段数;t=float;v="5"} @self ~onSpawn
 - setvar{var=caster.自伤段数;t=float;v="5"} @self ~onSpawn
 - setvar{var=caster.恢复段数;t=float;v="5"} @self ~onSpawn
 - setvar{var=caster.伤害范围;t=float;v="5"} @self ~onSpawn
#决定重复伤害/回血次数
 - setvar{var=caster.伤害转化-百分比;t=float;v="0.7"} @self ~onSpawn
 - setvar{var=caster.回血转化-百分比;t=float;v="0.7"} @self ~onSpawn
 - setvar{var=caster.自伤转化-百分比;t=float;v="0.7"} @self ~onSpawn
 - setvar{var=caster.恢复转化-百分比;t=float;v="0.7"} @self ~onSpawn
#决定伤害转化比例, 1=100%
 - setvar{var=caster.伤害吸收-持续-攻击;t=float;v="3"} @self ~onSpawn
 - setvar{var=caster.伤害吸收-持续-回血;t=float;v="3"} @self ~onSpawn
 - setvar{var=caster.伤害需求-持续-自伤;t=float;v="3"} @self ~onSpawn
 - setvar{var=caster.伤害需求-持续-回血;t=float;v="3"} @self ~onSpawn
#决定转化持续时间, 单位: 秒
 - setvar{var=caster.伤害间隔;t=float;v="0.05"} @self ~onSpawn
 - setvar{var=caster.回血间隔;t=float;v="0.05"} @self ~onSpawn
 - setvar{var=caster.自伤间隔;t=float;v="0.05"} @self ~onSpawn
 - setvar{var=caster.恢复间隔;t=float;v="0.05"} @self ~onSpawn
#决定每段回血/伤害的间隔, 单位: 秒
 - setvar{var=caster.伤害需求-伤害自身;t=float;v="20"} @self ~onSpawn
 - setvar{var=caster.伤害需求-恢复自身;t=float;v="20"} @self ~onSpawn
#决定伤害值需求

#核心技能部分
# - skill:伤害吸收-攻击 @self ~onInteract
 - skill:伤害吸收-回血 @self ~onInteract
# - skill:伤害需求-伤害自身 @self ~onInteract
# - skill:伤害需求-恢复生命 @self ~onInteract

技能组配置

伤害吸收:
  Skills:
  - setvar{var=caster.伤害数值;t=float;v="<caster.var.伤害数值>+<skill.var.damage-amount>"}
伤害吸收-攻击:
  Skills:
  - ondamaged{os=机制初始化;n=伤害吸收-攻击模式;oh=伤害吸收;oe=伤害释放-攻击-效果;d=<caster.var.伤害吸收-持续-攻击>*20;c=500}
伤害吸收-回血:
  Skills:
  - ondamaged{os=机制初始化;n=伤害吸收-恢复模式;oh=伤害吸收;oe=伤害释放-恢复-效果;d=<caster.var.伤害吸收-持续-回血>*20;c=500}
伤害需求-恢复自身:
  Skills:
  - ondamaged{os=机制初始化;n=伤害需求-恢复模式;oh=伤害吸收;oe=伤害释放-恢复自身-判定;d=<caster.var.伤害需求-持续-回血>*20;c=500}
伤害需求-伤害自身:
  Skills:
  - ondamaged{os=机制初始化;n=伤害需求-自伤模式;oh=伤害吸收;oe=伤害释放-伤害自身-判定;d=<caster.var.伤害需求-持续-自伤>*20;c=500}
机制初始化:
  Skills:
  - setvar{var=caster.伤害数值;t=float;v="0"}
  - setvar{var=caster.释放数值;t=float;v="0"}
  - setvar{var=caster.判定;t=float;v="0"}
伤害释放-攻击-效果:
  Skills:
  - setvar{var=caster.伤害数值-转化;t=float;v="<caster.var.伤害数值>*<caster.var.伤害转化-百分比>"}
  - setvar{var=caster.释放数值;t=float;v="<caster.var.伤害数值-转化>/<caster.var.伤害段数>"}
  - setvar{var=caster.伤害数值;t=integer;v="<caster.var.伤害数值>*(10^<caster.var.提示数值保留小数位>)"}
  - setvar{var=caster.伤害数值;t=float;v="<caster.var.伤害数值>/(10^<caster.var.提示数值保留小数位>)"}
  - m{m="<caster.name>吸收了<&sp><caster.var.伤害数值>点伤害, 转化为<&sp><caster.var.伤害数值-转化>点<&sp>技能伤害给予给<&sp>半径<caster.var.伤害范围>格<&sp>球体范围内的所有实体"} @eir{r=16}
  - setvar{var=caster.伤害数值;t=float;v="0"}
  - d{a=<caster.var.释放数值>;pk=true;pi=true;i=true;repeat=<caster.var.伤害段数>-1;repeatInterval=<caster.var.伤害间隔> *20} @eir{r=<caster.var.伤害范围>}
伤害释放-恢复-效果:
  Skills:
  - setvar{var=caster.伤害数值-转化;t=float;v="<caster.var.伤害数值>*<caster.var.回血转化-百分比>"}
  - setvar{var=caster.释放数值;t=float;v="<caster.var.伤害数值>/<caster.var.回血段数>"}
  - setvar{var=caster.伤害数值;t=integer;v="<caster.var.伤害数值>*(10^<caster.var.提示数值保留小数位>)"}
  - setvar{var=caster.伤害数值;t=float;v="<caster.var.伤害数值>/(10^<caster.var.提示数值保留小数位>)"}
  - m{m="<caster.name>吸收了<&sp><caster.var.伤害数值>点伤害, 对自身恢复<&sp><caster.var.伤害数值-转化>点<&sp>生命"} @eir{r=16}
  - setvar{var=caster.伤害数值;t=float;v="0"}
  - h{a=<caster.var.释放数值>*<caster.var.回血转化-百分比>;pk=true;pi=true;i=true;repeat=<caster.var.回血段数>-1;repeatInterval=<caster.var.回血间隔> *20} @self
伤害释放-恢复自身-判定:
  Skills:
  - setvar{var=caster.判定;t=float;v="<caster.var.伤害需求-恢复自身>/<caster.var.伤害数值>"} @self
  - skill:伤害释放-恢复自身-效果
伤害释放-恢复自身-效果:
  Conditions:
  - varrange{var=caster.判定;v=<1}
  Skills:
  - setvar{var=caster.判定;t=float;v="0"} @self
  - setvar{var=caster.伤害数值-转化;t=float;v="<caster.var.伤害数值>*<caster.var.恢复转化-百分比>"}
  - setvar{var=caster.释放数值;t=float;v="<caster.var.伤害数值>/<caster.var.恢复段数>"}
  - setvar{var=caster.伤害数值;t=integer;v="<caster.var.伤害数值>*(10^<caster.var.提示数值保留小数位>)"}
  - setvar{var=caster.伤害数值;t=float;v="<caster.var.伤害数值>/(10^<caster.var.提示数值保留小数位>)"}
  - m{m="<caster.name>吸收了<&sp><caster.var.伤害数值>点伤害, 对自身恢复<&sp><caster.var.伤害数值-转化>点<&sp>生命"} @eir{r=16}
  - setvar{var=caster.伤害数值;t=float;v="0"}
  - h{a=<caster.var.释放数值>;pk=true;pi=true;i=true;repeat=<caster.var.恢复段数>-1;repeatInterval=<caster.var.恢复间隔> *20} @self
伤害释放-伤害自身-判定:
  Skills:
  - setvar{var=caster.判定;t=float;v="<caster.var.伤害需求-伤害自身>/<caster.var.伤害数值>"} @self
  - skill:伤害释放-伤害自身-效果
伤害释放-伤害自身-效果:
  Conditions:
  - varrange{var=caster.判定;v=<1}
  Skills:
  - setvar{var=caster.判定;t=float;v="0"} @self
  - setvar{var=caster.伤害数值-转化;t=float;v="<caster.var.伤害数值>*<caster.var.自伤转化-百分比>"}
  - setvar{var=caster.释放数值;t=float;v="<caster.var.伤害数值-转化>/<caster.var.自伤段数>"}
  - setvar{var=caster.伤害数值;t=integer;v="<caster.var.伤害数值>*(10^<caster.var.提示数值保留小数位>)"}
  - setvar{var=caster.伤害数值;t=float;v="<caster.var.伤害数值>/(10^<caster.var.提示数值保留小数位>)"}
  - m{m="<caster.name>吸收了<&sp><caster.var.伤害数值>点伤害, 转化为<&sp><caster.var.伤害数值-转化>技能伤害给予给<&sp>自身"} @eir{r=16}
  - setvar{var=caster.伤害数值;t=float;v="0"}
  - d{a=<caster.var.释放数值>;pk=true;pi=true;i=true;repeat=<caster.var.自伤段数>-1;repeatInterval=<caster.var.自伤间隔> *20} @self
⚠️ **GitHub.com Fallback** ⚠️