#nop vim: set filetype=tt:; /* 本文件属于 PaoTin++ 的一部分。 PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp ) 享有并保留一切法律权利 你可以在遵照 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; };