Просмотр исходного кода

feat(pkuxkx): 新增 busy.Halt

dzp 2 лет назад
Родитель
Сommit
f663f3d637
1 измененных файлов с 28 добавлено и 0 удалено
  1. 28 0
      mud/pkuxkx/plugins/basic/busy.tin

+ 28 - 0
mud/pkuxkx/plugins/basic/busy.tin

@@ -26,6 +26,7 @@ VAR {正在等待的回调列表}    busy.wait-list {};
 ///=== {
 // ## busy.Wait <回调代码>
 //    检查角色当前是否处于 busy 状态,当不在 busy 状态,或 busy 状态解除时,执行回调代码。
+//    否则直接执行回调代码。
 // };
 #alias {busy.Wait} {
     #local code {%1};
@@ -43,6 +44,33 @@ VAR {正在等待的回调列表}    busy.wait-list {};
     };
 };
 
+///=== {
+// ## busy.Halt <回调代码>
+//    检查角色当前是否处于 busy 状态,如果在 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} {
     #while { &busy.wait-list[] > 0 } {
         #local code {$busy.wait-list[1]};