脚本示例

变量套变量写法

对比“变量中的变量”的新旧两种写法,说明嵌套解析顺序、常量变量与多层嵌套的用法和限制。

用途

说明“变量中的变量”(变量套变量)的写法变化:老写法要先把变量名拆开或格式化拼成一个字符串再取值,新写法可以把 () 里的变量直接用变量代替,并且所有变量由内向外逐步解析。

参考脚本

老写法为了实现变量中的变量必须要拆分去实现或格式化实现
#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> 等。

相关阅读