queue 队列执行指令 - Natsukage/PostNamazu GitHub Wiki

执行指令

OverlayPlugin 回调指令:callOverlayHandler({call:'PostNamazu', c:'queue', p:'{队列指令JSON字符串}'});
Triggernometry 具名回调指令:queueDoQueueActions
HTTP 请求调用路径:http://127.0.0.1:{你设置的端口}/queue
指令内容为全部指令打包成的Json数组,例如[{"c":"command","p":"/e 123"},{"c":"command","p":"/e 456","d":2000},{"c":"place","p":"{\"A\":{\"Active\":false},\"B\":{\"X\":-63.199,\"Y\":18.0,\"Z\":-3.915,\"Active\":true}}","d":2000}]

指令内容格式

[{
  "c": "preset", //指令种类
  "p": "{...(省略)}", //指令内容
  //d可忽略,默认为0。即本条指令立刻执行。
},
{
  "c": "command", //指令种类
  "p": "/waymark preset 5", //指令内容
  "d": 200 //本指令执行之前延时毫秒数,默认为0,可忽略
}]
  • 需要注意的是,queue动作接受的是一个Json数组,即使整个队列中只有一条指令,也需要用 中括号[] 外包在整个指令的外面!

c - command

指令种类,可以使用鲶鱼精邮差支持的所有指令种类。在确保正确转义的前提下,也可以嵌套queue指令。
通过queue执行的指令时,queue与对应指令需同时处于启用状态。如果目标指令未开启,则此条指令依然不会执行(不会影响延时与其他指令的处理)
queue本身不会检查目标指令的开关状态与合法性。

p - payload

指令内容,和目标指令相同。
需要注意的是,当出现JSON嵌套时,需对目标指令正确进行转义。
例如通过queue执行place、preset、mark动作时,需要如下面的范例所示,对p中的指令内容进行转义。
[{"c":"place","p":"{\"A\":{\"Active\":false},\"B\":{\"X\":-63.199,\"Y\":18.0,\"Z\":-3.915,\"Active\":true}}","d":2000}]

d - delay

本指令执行 之前 延时毫秒数,默认为0,可忽略。
一组Queue中的每一条指令将会按照顺序,在上一条指令执行后延时执行,单位为毫秒、
即使queue中只有一条指令,也可以通过设置d的数值来实现延时执行的效果。
例如[{"c":"command","p":"/e 123","d":2000}]会在接收到指令2秒后执行/e 123的command动作。

当接收到多条queue动作指令时

每次接收并执行的queue动作相互独立,不会影响之前已经触发且尚未执行完毕的queue动作。
除非指令密集到超过了邮差或者FF14游戏的处理速度,否则不同的queue动作之间不会相互影响。
例如连续发送2次[{"c":"command","p":"/e 123"},{"c":"command","p":"/e 456","d":200}]指令,邮差的执行结果将为

/e 123
/e 123
/e 456
/e 456

打断执行中的队列

通过在队列中执行qid指令,可以为本条队列设置队列标识符(QueueID),格式为{"c":"qid","p":"test"},其中test为本次动作注册的qid。
注册了qid的队列在执行完毕之前,都可以被stop指令打断,指令格式为{"c":"stop","p":"test"},其中test为要打断动作的qid。 此方法通常用于在团灭重置时停止之前尚未执行完毕的延时动作。

qid指令只能在队列中执行,在队列以外执行时不会生效。qid同样遵循队列的规则,与其他指令顺序执行,并遵循延时设置。

stop指令可以在所有地方直接执行并打断对应队列。例如直接执行{"c":"stop","p":"test"}将会打断所有qid为test的队列。
此外,all为保留关键字,执行{"c":"stop","p":"all"}将会直接打断所有尚未执行完毕的注册了qid的队列。
虽然邮差没有禁止将all注册为qid,但是您需要理解使用all作为qid带来的隐藏风险,即您只能通过{"c":"stop","p":"all"}打断qid为all的队列,这个行为会同时打断所有尚未执行完毕的注册了qid的队列。

没有注册qid的指令不会受到stop的影响而打断,即使{"c":"stop","p":"all"}也不会打断没有注册qid的队列。
因此如果不希望你的队列被意外打断,就不要给自己的动作注册qid。只需要为有挨打需求的队列注册qid。

qid并不一定要放在队列的开头,可以在队列的任意位置,甚至在延时后设置。
在执行qid动作注册的时点开始,队列才可以被对应的stop指令打断。

qid指令可以重复执行,同一队列中后执行的qid将会覆盖之前注册的qid。
例如先通过{"c":"qid","p":"test"}将队列的qid注册为test,然后执行{"c":"qid","p":"test2",d:2000}在2秒后将当前队列的qid改为test2,则在2秒过后,当前队列的qid将变为test2,将不再能被{"c":"stop","p":"test"}指令打断。

不同的queue可以注册同一个qid。 例如存在3个队列的qid都为test,使用{"c":"stop","p":"test"}时候会将这3个队列都打断。

qid指令的p内容可以设置为空白字符串,则当前队列将会恢复没有注册qid的状态,不再会被任何stop指令打断。

stop指令的p接受正则表达式,但是会强制对正则表达式进行首尾闭合。
例如{"c":"stop","p":"test"}匹配的是所有符合^test$的qid,也就是只严格匹配test,不会匹配test2、Atest等。
如果想要匹配以test开头的所有qid,例如test,test2,testAA……则应使用{"c":"stop","p":"test.*"},运行后会打断所有qid符合正则表达式^test.*$的队列。

例如执行以下队列

[
    {"c":"qid","p":"test"},
    {"c":"command","p":"/e 111"},
    {"c":"command","p":"/e 222","d":1000},
    {"c":"stop","p":"test","d":1000},
    {"c":"command","p":"/e 333","d":1000}
]

则运行结果为

/e 111
/e 222
要求打断test队列
队列test被要求中断

/e 333将不会被执行