语法
LibDogTag-3.0标签本质是一些以方括号括起来的普通标签文本,例如 这是一个[标签] 。一般的语法是“OO [标签] XX”这样的形式,其中oo和xx都是普通的文字,而 [标签] 会被替换成其所代表的动态文字。所有的标签和操作符都不是大小写敏感的,但是如果标签没写错,将会被自动纠正为正常的大小写格式。给一些没什么基础的同学先解释一下“返回”的概念:以第一个标签为例,写出[Alt]这个标签表示我在问系统“alt键被按下了吗?”系统回答我True(按下的),这个动作就是返回,True就叫返回值。或者大家也可以认为这些有返回值的标签都是一个变量,他们根据对应的情况变化他们的值(value),我们则是在向系统询问这些值。接下来你会看到的介绍中会大量出现“返回”这个词。
修饰符
修饰符用于更改标签的输出文字的样子。例如 :Hide(0) 修饰符在标签输出结果等于数字 0 的时候会隐藏该结果文本,因此 [HP:Hide(0)] 将会显示玩家当前的HP值,等到HP值为0时则什么都不显示。你也可以连续设置多个修饰符,例如:[MissingHP:Hide(0):Red] 将会以红色显示当前缺少的HP值,并且在该值为0时不显示东西。修饰符其实是一种标签的语法简化,所以 [HP:Hide(0)] 和 [Hide(HP, 0)] 的作用是完全一致的。所有的修饰符都可以这样使用,同时所有的标签都可以当作参数,前提是这个修饰符接受参数。
参数
标签和修饰符都可以接受参数,以类似 [标签(参数)] 或者 [标签:修饰符(参数)] 这样的格式输入。你也可以不按照顺序来指定参数,但是要附带参数名称,例如 [HP(unit='player')] ,这跟 [HP('player')] 以及 ['player':HP] 的效果是一样的。
文本
字符串需要用双引号或者单引号括起来,例如 ["你" '好'] 。数字则可以正常按照数字输入,例如 [1234 56.78 1e6] 。也有跟标签同样作用的文本,例如 nil,true 以及 false 。(最后这三个叫做“布尔值”,True-真,False-假,nil-空或者说未知,后面我们要用到这个概念)
逻辑判断 ( if 语句 )
运算符 & 以及 and 实现了逻辑与的效果,例如 [OO and XX] 将会检查OO是不是值为 非false ,如果是,则运行XX。
运算符 || 以及 or 实现了逻辑或的效果,例如 [OO or XX] 将会检查OO是不是值为 false ,如果是,则运行XX,否则显示OO。
运算符 ? 实现了 if 语句的效果,它可以与 ! 运算符结合用以创建一个 if-else 语句。例如 [IsPlayer ? "Player"] 或者 [IsPlayer ? "Player" ! "NPC"] 。
运算符 if 实现了 if 语句的效果,它可以与 else 运算符结合用以创建一个 if-else 语句。例如 [if IsPlayer then "Player" end] or [if IsPlayer then "Player" else "NPC" end] 或者 [if IsPlayer then "Player" elseif IsPet then "Pet" else "NPC"] 。
运算符 not 以及 ~ 会将一个 false 值转为 true ,或者将一个 true 值转为 false 。例如 [not IsPlayer] 或者 [~IsPlayer]
举例
[Status || FractionalHP(known=true) || PercentHP] 将会返回以下列几种情况其中的一种(只会是一种):
[Status || (IsPlayer ? HP(known=true)) || PercentHP:Percent] 会返回跟上面差不多的结果,其中的细微差别已经表现的很明显。
不过还是要说明清楚,嵌套句 (IsPlayer ? HP(known=true)) 创建了一个 if 语句,该语句描述了如果 IsPlayer 的值为 false ,那么整个标签值就为 false ,如果你都能读到这里,你应该被奖励一块饼干。假如 IsPlayer 值为 true ,在这个例子里,这个嵌套句的实际返回值应该遵循逻辑与的规则,即返回的是 HP(known=true) 。所以这行代码在 IsPlayer 值为 true 的情况下(即单位是一个玩家单位)将会显示 HP(known=true) 的值。
[if IsFriend then -MissingHP:Green else HP:Red end] 将会返回以下列几种情况其中的一种(只会是一种):
目标指定
一般使用DogTag的插件会预先定义好所作用于的单位了,比如 "player" 或者 "mouseover" 以及其他的。你也可以指定一个单位覆盖掉标签或者修饰符默认的,以这样的形式:[标签(unit="myunit")] 或者 [标签:修饰符(unit="myunit")]。例如 [HP(unit='player')] 会返回玩家自己的生命值。
示例单位列表
player - 你自己的角色
target - 你的目标
targettarget - 你的目标的目标
pet - 你的宠物
mouseover - 你当前鼠标所指向的单位
focus - 你的焦点目标
party1 - 你小队里的第一名队友
partypet2 - 你小队里的第二名队友的宠物
raid3 - 你团队里的第三名队友
raidpet4 - 你团队里的第四名队友的宠物
算术运算符
可以在你的DogTag序列里面使用算术运算符,它们符合算术的常规运算顺序规则。
比较运算符
你可以在你的DogTag序列里面使用比较运算符,就像使用算术运算符那样。
拼接
拼接(将两个文本连在一起)非常简单,你只需要将每个字符串一个接一个放置,每两个之间添加一个空格,例如 ['你' "好"] =>; "你好"。举个更现实点的例子,[HP '/' MaxHP] => "50/100" 。
语法就这么多,但是你实际上最需要知道的是:我手上到底有哪些牌。这决定了我到底能做到什么。