queue 队列执行指令 - Natsukage/PostNamazu GitHub Wiki
执行指令
OverlayPlugin 回调指令:
callOverlayHandler({call:'PostNamazu', c:'queue', p:'{队列指令JSON字符串}'});
Triggernometry 具名回调指令:
queue
或DoQueueActions
HTTP 请求调用路径:
http://127.0.0.1:{你设置的端口}/queue
指令内容格式
指令内容为全部指令打包成的Json数组。如:
[{
"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
将不会被执行