瀏覽代碼

feat(bot/gather): 采集机器人(采药和帮贡通用)

dzp 3 年之前
父節點
當前提交
329e140b5b
共有 1 個文件被更改,包括 185 次插入0 次删除
  1. 185 0
      mud/pkuxkx/plugins/bot/gather.tin

+ 185 - 0
mud/pkuxkx/plugins/bot/gather.tin

@@ -0,0 +1,185 @@
+#nop vim: set filetype=tt:;
+
+/*
+本文件属于 PaoTin++ 的一部分
+===========
+PaoTin++ © 2020~2024 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
+你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
+===========
+*/
+
+///=== {
+///// 采药/帮贡通用机器人
+///// };
+
+#var bot_gather[META] {
+    {NAME}      {采集机器人}
+    {DESC}      {采药、帮贡资材通用机器人}
+    {AUTHOR}    {担子炮}
+    {NOTE}      {本文件属于 PaoTin++ 的一部分}
+};
+
+#func {bot/gather.Init} {
+    #return true;
+};
+
+VAR {采集机器人工作模式,开始寻找}  {gather.find}   {bhfind};
+VAR {采集机器人工作模式,开始采集}  {gather.cmd}    {bhgather};
+VAR {采集机器人工作模式,移动角色}  {gather.move}   {bhmove};
+
+#alias {gather.Find} {
+    #local task {%1};
+
+    #if { "$task" == "{bh|bg|banghui|bangpai|banggong|帮派}" } {
+        #var gather.find    {bhfind};
+        #var gather.cmd     {bhgather};
+        #var gather.move    {bhmove};
+    };
+    #elseif { "$task" == "{yao|cy|caiyao|yaoshi|采药|药师}" } {
+        #var gather.find    {gather};
+        #var gather.cmd     {gather};
+        #var gather.move    {lookfor};
+    };
+
+    #class gather.lookfor open;
+
+    #var caiyao-move-dir {};
+
+    #alias {caiyao.lookfor.reset} {
+        #class {gather.lookfor} open;
+        #var caiyao-map-lineNo      {0};
+        #var caiyao-map-me          {};
+        #list caiyao-map-yao create {};
+        #class {gather.lookfor} close;
+    };
+
+    #alias {caiyao.lookfor.move} {
+        #local idx      {};
+        #local meRow    {$caiyao-map-me[row]};
+        #local meCol    {$caiyao-map-me[col]};
+
+        #local first-d      {9999};
+
+        #foreach {*caiyao-map-yao[]} {idx} {
+            #local yao {$caiyao-map-yao[$idx]};
+            #local row {$yao[row]};
+            #local col {$yao[col]};
+
+            #local distance {0};
+            #local row-diff {0};
+            #local col-diff {0};
+            #local cmd1     {};
+            #local cmd2     {};
+
+            #if { $row > $meRow } {
+                #math row-diff {$row - $meRow};
+                #format cmd1 {s};
+            };
+            #elseif { $meRow > $row } {
+                #math row-diff {$meRow - $row};
+                #format cmd1 {n};
+            };
+            #else {
+                #format row-diff {0};
+                #format cmd1 {};
+            };
+
+            #if { $col > $meCol } {
+                #math col-diff {$col - $meCol};
+                #format cmd2 {e};
+            };
+            #elseif { $meCol > $col } {
+                #math col-diff {$meCol - $col};
+                #format cmd2 {w};
+            };
+            #else {
+                #format col-diff {0};
+                #format cmd2 {};
+            };
+
+            #if { $row-diff > $col-diff } {
+                #format distance {$row-diff};
+            };
+            #else {
+                #format distance {$col-diff};
+            };
+
+            #if { $distance < $first-d } {
+                #format first-d         {$distance};
+                #format caiyao-move-dir {$cmd1$cmd2};
+            };
+        };
+
+        #if { $first-d < 9999 } {
+            #delay gather.move {$gather.move $caiyao-move-dir} 2;
+        };
+    };
+
+    #action {^看你手忙脚乱的!采药不是赶集。$} {
+        #delay gather.move { $gather.move $caiyao-move-dir} 1;
+    };
+
+    #action {^你现在搜索的位置似乎有些{药材|帮派资材},可以用{bh|}gather命令采集。$} {
+        $gather.cmd;
+    };
+
+    #action {^你采集到了一些%%1。$}                 { caiyaoLog %%0 };
+    #action {^可是什么也没有采到。$}                { caiyaoLog %%0 };
+    #action {^%*摘采难度大大超过了你能力范围%*$}    { caiyaoLog %%0 };
+    #action {^这里的药材被采完了。$}                { lookfor       };
+    #action {^你要采药,必须需要找个药锄来。$}      { wield yao chu };
+    #action {药锄,因为多次使用,已经被彻底损坏了$} { wield yao chu };
+
+    #action {^这里不是你要寻找帮派资材的地方。$}    { #class gather.lookfor kill };
+
+    #action {^这里的药材已经被采光了。$} {
+        okLog 采药完成。;
+        #class gather.lookfor kill;
+    };
+
+    #action {^$} {
+        #if { $caiyao-map-lineNo != 0 } {
+            caiyao.lookfor.move;
+            caiyao.lookfor.reset;
+        };
+    };
+
+    #action {^你发现了%%1份帮派资材,并运送回了} {
+        okLog 帮贡任务完成。;
+        gquery -me;
+        #class gather.lookfor kill;
+    };
+
+    #action {^{(█|★|♀)+}$} {
+        #local line {%%0};
+        #replace line {█} {.;};
+        #replace line {★} {O;};
+        #replace line {♀} {*;};
+
+        #math caiyao-map-lineNo  {$caiyao-map-lineNo + 1};
+        #local item     {};
+        #local index    {1};
+        #foreach {$line} {item} {
+            #if { "$item" == "*" } {
+                #var caiyao-map-me {
+                    {row}{$caiyao-map-lineNo}
+                    {col}{$index}
+                };
+            };
+            #elseif { "$item" == "O" } {
+                #local yao {
+                    {row}{$caiyao-map-lineNo}
+                    {col}{$index}
+                };
+
+                #list caiyao-map-yao add {{$yao}};
+            };
+
+            #math index {$index + 1};
+        };
+    };
+
+    #class gather.lookfor close;
+
+    $gather.find;
+};