脚本示例
变量套变量写法
对比“变量中的变量”的新旧两种写法,说明嵌套解析顺序、常量变量与多层嵌套的用法和限制。
用途
说明“变量中的变量”(变量套变量)的写法变化:老写法要先把变量名拆开或格式化拼成一个字符串再取值,新写法可以把 () 里的变量直接用变量代替,并且所有变量由内向外逐步解析。
参考脚本
老写法为了实现变量中的变量必须要拆分去实现或格式化实现
#if
True
#Act
Mov S11 <$Str(G
Inc S11 <$Str(S12)>
Inc S11 >
Mov M11 <$Str(S11)>
新写法可以将()内的变量也直接用变量来代替
#if
True
#Act
Mov M11 <$Str(G<$Str(S12)>)>
比如<$TARINFO_STATID> 配合个人自定变量
#if
True
#Act
Mov STARINFO_STAT <$Human(攻击ID
Inc STARINFO_STAT <$TARINFO_STATID>
Inc STARINFO_STAT )>
新写法可以省略上面的步骤,直接将攻击ID变量给套进去
#IF
#SAY
<$Human(攻击ID<$TARINFO_STATID>)>
常量变量用发
#DEFINE $(统计变量) G15
<$Str($(统计变量))> 即为G15的值
普通变量用发
Mov S统计变量 G15
<$Str(<$Str(S统计变量)>)> 这样也是G15的值
多个普通变量用发
MOV S1 S2
MOV S2 S3
MOV S3 S4
MOV S4 结果
<$Str(<$Str(<$Str(<$Str(S1)>)>)>)>
往下解析因为S1=S2 所以上面里面的嵌套<$Str(S1)>=S2
方便观看直接<$Str(S1)> 替换为S2得到以下结果
<$Str(<$Str(<$Str(S2)>)>)>
因为S2=S3 所以上面里面的嵌套<$Str(S2)>=S3
方便观看直接<$Str(S2)> 替换为S3得到以下结果
<$Str(<$Str(S3)>)>
因为S3=S4 所以上面里面的嵌套<$Str(S3)>=S4
方便观看直接<$Str(S3)> 替换为S4得到以下结果
<$Str(S4)>
即 <$Str(<$Str(<$Str(<$Str(S1)>)>)>)> =<$Str(S4)>的结果
所有的变量由内向外逐步解析,理论可以解析999个
正确的组合<$Str(S1)>,我们可以把<$Str()>看做一个整体,()内的S1可以是任何变量,比如可以是<$TARINFO_STATID> 也可以是<$Str(M7)> <$LEVEL> 均可以搭配
但是()内的结果格式不能变
即()里面的内容和外边的必须可以组成一个正常变量
如:
Mov S1 1
<$Str(<$Str(S1)>)> 结果为<$Str(1)> 这种为非正常变量 就无法正常解析。
关键点
- 主题是“变量中的变量”:
<$Str(...)>里括号内的内容本身可以再是变量,解析顺序是由内向外逐步进行,资料中给出的理论上限是 999 层。 - 老写法要先把变量名拼成一个字符串再取值:
Mov S11 <$Str(G、Inc S11 <$Str(S12)>、Inc S11 >,最后Mov M11 <$Str(S11)>。同理$Human(攻击ID...)也要先拼名字再套用。 - 新写法可以把变量直接套进括号里,省掉拼接步骤:
Mov M11 <$Str(G<$Str(S12)>)>,以及直接写<$Human(攻击ID<$TARINFO_STATID>)>。 - 常量变量:先用
#DEFINE $(统计变量) G15定义,再用<$Str($(统计变量))>取到G15的值。 - 普通变量:
Mov S统计变量 G15之后,<$Str(<$Str(S统计变量)>)>得到的同样是G15的值。 - 多层嵌套:当
MOV S1 S2、MOV S2 S3、MOV S3 S4、MOV S4 结果时,<$Str(<$Str(<$Str(<$Str(S1)>)>)>)>的结果等于<$Str(S4)>,可以从S1一路解析到S4。 - 限制:括号内的内容与外面的写法必须能组成一个正常变量。例如
S1=1时<$Str(<$Str(S1)>)>会变成<$Str(1)>,这不是一个正常变量,无法继续解析。 - 括号内可以搭配的取值不限于
S变量,资料中列出的还有<$TARINFO_STATID>、<$Str(M7)>、<$LEVEL>等。
