| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #nop vim: set filetype=tt:;
- /*
- 本文件属于 PaoTin++ 的一部分。
- PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
- 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
- */
- ///=== {
- ///// busy 模块向其它模块提供 busy 检查机制。
- ///// };
- #var basic_busy[META] {
- {NAME} {busy检查}
- {DESC} {检查角色是否处于 busy 状态,并在 busy 结束时回调代码}
- {AUTHOR} {担子炮}
- };
- #func {basic_busy.Init} {
- event.Handle {char/nobusy} {busy.on-idle} {basic/busy} {busy.on-idle};
- #return {true};
- };
- VAR {正在等待的回调列表} busy.wait-list {};
- ///=== {
- // ## busy.Wait <回调代码>
- // 检查角色是否处于 busy 状态,如果是,则等待 busy 状态结束后执行回调代码。
- // 否则立即执行回调代码。
- // };
- #alias {busy.Wait} {
- #local code {%1};
- #local len {&busy.wait-list[]};
- #list busy.wait-list add {{$code}};
- #if { $len == 0 } {
- #if { @isTrue{$char[HP][忙]} } {
- #delay busy.checkbusy {checkbusy} 10;
- };
- #else {
- #delay busy.checkbusy {checkbusy} 0;
- };
- };
- };
- ///=== {
- // ## busy.Halt <回调代码>
- // 检查角色是否处于 busy 状态,如果是,则用 halt 解除 busy,解除成功后,执行回调代码。
- // 否则立即执行回调代码。
- // };
- #alias {busy.Halt} {
- #local code {%1};
- #if { "$code" == "" } {
- #local code {#untick busy.Halt};
- };
- #else {
- #local code {
- #untick busy.Halt;
- $code;
- };
- };
- busy.Wait {$code};
- #if { @isTrue{$char[HP][忙]} } {
- halt;
- };
- #tick busy.Halt {halt; checkbusy} 1;
- };
- #alias {busy.on-idle} {
- #undelay busy.checkbusy;
- #undelay busy.on-idle;
- #untick busy.Halt;
- #local todo {$busy.wait-list};
- #var busy.wait-list {};
- #while { &todo[] > 0 } {
- #local code {$todo[1]};
- #list todo delete 1;
- $code
- };
- };
- #action {^你正忙{|ID=basic/busy}$} {
- #undelay busy.on-idle;
- #if { &busy.wait-list[] == 0 } {
- #return;
- };
- #if { @isTrue{$gGMCP[Channels][Status]} } {
- #delay busy.checkbusy {checkbusy} 10;
- };
- #else {
- #delay busy.checkbusy {checkbusy} 1;
- };
- #line gag;
- };
- #action {^你不忙{|ID=basic/busy}$} {
- #undelay busy.checkbusy;
- #delay {busy.on-idle} {busy.on-idle} 0;
- #line gag;
- };
|