소스 검색

SQUASH: feat(pkuxkx): 增加 set 环境变量和 buff 周相关触发

dzp 1 년 전
부모
커밋
702d3fe135
2개의 변경된 파일127개의 추가작업 그리고 58개의 파일을 삭제
  1. 2 0
      mud/pkuxkx/framework/online.extra.tin
  2. 125 58
      mud/pkuxkx/plugins/basic/env.tin

+ 2 - 0
mud/pkuxkx/framework/online.extra.tin

@@ -36,3 +36,5 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
         ga.Sync;
     };
 };
+
+load-module basic/env;

+ 125 - 58
mud/pkuxkx/plugins/basic/env.tin

@@ -18,43 +18,101 @@ PaoTin++ © 2020~2024 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
 VAR {服务器环境变量}    {env.Var}   {};
 VAR {当前游戏周}        {env.Week}  {};
 
-#alias {env.List} {
-    #class env.List open;
-
-    #action {^你目前设定的环境变量有:{|ID=env.List}$} {
-        #action {~^%c\e[44;1m%S %s %c \e[1;37m%*%s%+1c$} {
-            #local key {%%%2};
-            #local value {%%%5};
-            #replace value {^"%*"$} {&1};
-            #var {env.Var[$key]} {$value};
+event.Define {env/set}          {无参} {$MODULE} {环境变量发生改变(set/unset)时发送本事件,本事件只会唤醒与变量名相匹配的钩子};
+event.Define {env/update}       {无参} {$MODULE} {环境变量列表已更新};
+event.Define {env/time/update}  {无参} {$MODULE} {当前游戏周的内容已更新};
+
+#alias {env.parse} {
+    #class env.parse open;
+
+    #var env.parse.old {$env.Var};
+
+    #action {~^%c\e[44;1m%S %s %c \e[1;37m%*%s%+1c$} {
+        #local key {%%2};
+        #local value {%%5};
+        #replace value {^"%*"$} {&1};
+        #var {env.Var[$key]} {$value};
+        #if { "$env.parse.old[$key]" !== "$value" } {
+            event.Emit {env/set} {env/$key};
         };
     };
 
-    #alias {env.List.done} {
-        #class env.List kill;
+    event.HandleOnce GA {basic/env} {basic/env} {
+        event.Emit env/update;
+        okLog 环境变量已更新。;
+        #class env.parse kill;
+        #0
     };
 
-    #class env.List close;
-
-    xtt.Send set;
-    sync.Wait {env.List.done};
+    #class env.parse close;
 };
 
-#alias {set} {
-    #if { "%0" == "" } {
-        env.List;
-    };
-    #else {
-        xtt.Send set %0;
+///=== {
+// ## env.Refresh
+//    向服务器发送 set 命令,以图刷新本地变量的值。
+// };
+#alias {env.Refresh} {
+    #class env.Refresh open;
+
+    #gag {^%*{|ID=basic/env}$};
+
+    #alias {env.Refresh.done} {
+        #class env.Refresh kill;
     };
+
+    event.ClassHandleOnce {env/update} {env.Refresh} {basic/env} {env.Refresh.done};
+    sync.ClassWait {env.Refresh.done};
+
+    #class env.Refresh close;
+
+    set;
 };
 
+///=== {
+// #@ env.Get <变量名>
+//    返回该环境变量的当前值。
+// };
 #func {env.Get} {
     #local key {%1};
 
     #return {$env.Var[$key]};
 };
 
+#action {^取消环境变量:%*$E} {
+    #local name {%1};
+    #local changed {0};
+
+    #if { "$env.Var[$name]" != "" } {
+        #local changed 1;
+    };
+
+    #unvar {env.Var[$name]};
+
+    #if { $changed } {
+        event.Emit {env/set} {env/$name};
+        okLog 环境变量已更新。;
+    };
+};
+
+#action {^设定环境变量:%S = %*$E} {
+    #local key {%1};
+    #local value {%2};
+
+    #local old {$env.Var[$key]};
+
+    #replace value {^"%*"$} {&1};
+    #var {env.Var[$key]} {$value};
+
+    #if { {$old} !== {$value} } {
+        event.Emit {env/set} {env/$key};
+        okLog 环境变量已更新。;
+    };
+};
+
+#action {^你目前设定的环境变量有:{|ID=basic/env}$} {
+    env.parse;
+};
+
 /*
 ╭───玄武之周┬──────────────────────────────────╮
 │    仆人      │玄武职业防御提升。                                                  │
@@ -68,54 +126,63 @@ VAR {当前游戏周}        {env.Week}  {};
 │ ▄▄  ▄▄   │☆侠纪年☆一六八二年八月十六日傍晚时分                              │
 ╰───────┴─────────────────────────北大侠客行────╯
 */
-#alias {env.Time} {
-    #class env.Time open;
+#action {^╭───%*之周┬─{(─)+}──╮{|ID=env/Time/parse}$} {
+    #var env.Week[name] {%1之周};
 
-    #action {^╭───%*之周┬─{(─)+}──╮{|ID=env.Time}$} {
+    #class env.Time.parse open;
 
-        #var env.Week[name] {%%1之周};
+    #action {^│%*│剩余时间:%*。%s│{|ID=env/Time/parse}$} {
+        #var env.Week[remaining] {@time.ParseDoC{%%2}};
+        prompt.Set {{week}{$env.Week[name]($env.Week[remaining])}};
+    };
 
-        #class env.Time open;
+    #action {^│%*│{↑|→|↓}%*│{|ID=env/Time/parse}$} {
+        #local jobs {%%3};
+        #replace jobs {。%*} {};
+        #replace jobs {、} {;};
+        #replace jobs {及} {;};
 
-        #action {^│%*│剩余时间:%*。%s│{|ID=env.Time}$} {
-            #var env.Week[remaining] {@time.ParseDoC{%%%2}};
-            prompt.Set {{week}{$env.Week[name]($env.Week[remaining])}};
+        #switch {"%%2"} {
+            #case {"↑"} {#var env.Week[buff]   {$jobs}};
+            #case {"→"} {#var env.Week[normal] {$jobs}};
+            #case {"↓"} {#var env.Week[debuff] {$jobs}};
         };
+    };
 
-        #action {^│%*│{↑|→|↓}%*│{|ID=env.Time}$} {
-            #local jobs {%%%3};
-            #replace jobs {。%*} {};
-            #replace jobs {、} {;};
-            #replace jobs {及} {;};
-
-            #switch {"%%%2"} {
-                #case {"↑"} {#var env.Week[buff]   {$jobs}};
-                #case {"→"} {#var env.Week[normal] {$jobs}};
-                #case {"↓"} {#var env.Week[debuff] {$jobs}};
-            };
-        };
+    event.HandleOnce GA {basic/env} {basic/env} {
+        event.Emit env/time/update;
+        okLog 当前游戏周已更新。;
+        #class env.Time.parse kill;
+        #0
+    };
 
-        #line oneshot #action {^╰──{(─|┴)*}───%S─{(─)+}─╯{|ID=env.Time}$} {
-            #class env.Time kill;
-        };
+    #class env.Time.parse close;
+};
 
-        #class env.Time close;
-    };
+#alias {env.Time} {
+    #class env.Time open;
 
-    #class env.Time close;
+    #gag {^%*{|ID=env/Time}$};
 
-    xtt.Send time;
-};
+    #alias {env.Time.done} {
+        #class env.Time kill;
+    };
 
-#alias {time} {env.Time};
+    time;
 
-#action {^取消环境变量:%*$E} {
-    #unvar {env.Var[%1]};
-};
+    event.ClassHandleOnce {env/time/update} {env.Time} {basic/env} {env.Time.done};
+    sync.ClassWait {env.Time.done};
 
-#action {^设定环境变量:%S = %*$E} {
-    #local key {%1};
-    #local value {%2};
-    #replace value {^"%*"$} {&1};
-    #var {env.Var[$key]} {$value};
+    #class env.Time close;
 };
+
+#action {^【江湖】%*等任务奖励下降,%*等任务奖励不变,%*等任务奖励上升,%*奖励最佳。$E} {
+    #line gag;
+    jhLog %99;
+} {4.000};
+
+#action {^【江湖】经推算,本周为%*,%*!$E} {
+    #line gag;
+    jhLog %99;
+    env.Time;
+} {4.000};