变量 - woshiermuqwq/mythic-chinese GitHub Wiki

变量介绍

变量于 MM 4.6 加入, 于 MM 4.10 成熟
同时属于付费版内容 变量与占位符是俩种不同事物
变量被设置后, 通过占位符的形式读取
变量格式: 变量类型.变量名, 占位符格式: 变量类型.var.变量名
诸如 <caster.name>/<trigger.name> 的占位符 请见-> 点我

变量是此插件有关机制的最难的内容,您可以设置变量以存储数值或字符
也可以设置变量以存储其它变量的值,所设置的变量可以是暂时的.

调用不存在的变量, 该占位符会返还"Null"
在 MM 4.14.2, 返还的是"Undefined", 而不是"Null"

变量类型

变量有3种类型.

类型 描述
INTEGER 整数.
FLOAT 浮点数
STRING 字符串

Float为浮点数类型,通俗来讲就是小数.

当类型为 IntegerFloat 时,变量值只能是数值.
但在Set Variable
变量值可为 变量值为纯数字(可包含运算符号)的占位符.

当类型为String时,变量值没有任何限制. 但使用Set Variable时, 若变量值填写 其它类型为 Integer或Float 的变量
所设置变量的值将会是 其它类型为Integer或Float 的 变量的变量名 , 而不是变量值
若变量值填写 其它类型为String的变量,所设置变量的值将包含 其它类型为String的变量的变量值, 而不是变量名

讲解

Skills:
- setvariable{var=caster.变量A;type=float;value="1"} @self
- setvariable{var=caster.变量B;type=string;value="<caster.var.变量A>"} @self

激活上述技能组之后,变量B的值将为"<caster.var.变量A>",而不是"1",因为在设置变量B时
变量值为 类型为Float的变量A的变量名 而不是 类型为Float的变量A的变量值.

若这么写,变量B的变量值将会变为"1",而不是上述的"<caster.var.变量A>":

Skills:
- setvariable{var=caster.变量A;type=string;value="1"} @self
- setvariable{var=caster.变量B;type=string;value="<caster.var.变量A>"} @self

相同,Integer与Float类型的变量无法读取与 <target.name> 一样,变量值为非纯数字的变量.

变量种类

变量有4种种类:

种类 描述
SKILL 作用于技能组
CASTER 作用于施法者
TARGET 作用于技能目标
WORLD 作用于世界
GLOBAL 作用于服务器

且在使用Set Variable时就确立了
变量种类,变量种类的作用有俩种:

讲解

某技能组:
  Skills:
  - setvariable{var=caster.变量A;type=float;value="1"} @self
  - setvariable{var=target.变量B;type=float;value=<caster.var.变量A>} @target

施法者A将自身当前目标身上的 变量B 的值设为"1"

为何变量B在自身当前目标身上?
因为设置变量B时scope(变量名的前缀)为target,target作用于技能目标,而技能目标就是@target,也就是自身当前目标.

为何变量B的值为"1"?
因为设置变量B时value填写了 <caster.var.变量A>,也就是所设置变量的值为 施法者身上的变量A的值.

当激活此技能组后,当前目标作为另一个施法者时,当前目标身上被设置的变量如何调用?
使用占位符: <caster.var.变量B>是因为之前施法者A将变量设置到了"target"身上
(为何在target身上请看第一个解答) 而现在,"target"作为一个施法者,应该在调用
变量B时将scope(变量名前缀)设为caster,以确认要调用的变量是自己身上的.

变量技能

技能名 描述
Variable Set 创建指定数值变量(存在则替换)
Variable Add 增加指定数值变量的变量值
Variable Subtract 减少指定数值变量的变量值
Variable Math 计算指定数值变量的变量值

变量条件

条件名 描述
Variable Equals 若指定变量的值为
Variable Is Set 若拥有指定变量
Variable In Range 若指定变量的值在范围内

变量运算

出生后32格内的每个玩家都会为施法者提供10%的额外最大生命(4.12)

测试:
 Type: husk
 Skills:
 - skill{s=[
    - setvariable{var=caster.amount;value=<skill.targets>} @playersinradius{radius=32}
    - delay 1
    - setmaxhealth{amount=<caster.mhp>*(1+0.1*<caster.var.amount>)} @self
    - heal{amount=9999} @self
    ]} @self ~onspawn 

4.12以下

测试:
 Type: husk
 Skills:
 - skill{s=[
    - sudoskill{cat=true;s=[  - modifytargetscore{o=amount;v=1;a=add} @trigger ]} @playersinradius{radius=32}
    - delay 1
    - setmaxhealth{amount=<caster.mhp>*(1+0.1*<caster.score.amount>)} @self
    - heal{amount=9999} @self
    ]} @self ~onspawn 

在技能组内使用占位符

Skills:
- damage{a=占位符名} @target

读取玩家占位符

这里用读取原版等级做示范

Skills:
- setvar{var=caster.somevar;v="%player_level%"} @trigger ~onDeath

死亡后读取击杀者的原版等级

⚠️ **GitHub.com Fallback** ⚠️