jobquery.tin 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分。
  4. PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  5. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  6. */
  7. #var basic_cmds_jobquery[META] {
  8. {NAME} {任务查询}
  9. {DESC} {解析 jq 命令的输出结果,方便玩家使用}
  10. {NOTE} {重载了两个命令,jq 不 gag,jobquery 会 gag,两个命令的结果都会被解析}
  11. {AUTHOR} {担子炮}
  12. };
  13. /*
  14. 2023-12-15 22:58:47 INPUT: jq
  15. ╭──┬北侠任务查询助理──────────┬─────────────────────────────────────╮
  16. │编号│类型 │名称 │状态 │
  17. │[01]│[门] │门忠任务 │现在即可接到下个任务。 │
  18. │[02]│[门] │门派任务 │现在即可接到下个任务。 │
  19. │[03]│[新] │送信 │现在即可接到下个任务。 │
  20. │[04]│[新] │唱戏任务 │现在即可接到下个任务。 │
  21. │[05]│[新] │灵鹫护卫 │现在即可接到下个任务。 │
  22. │[06]│[主] │慕容(13) │现在即可接到下个任务。 │
  23. │[07]│[主] │韩员外 │现在即可接到下个任务。 │
  24. │[08]│[主] │都府刺杀 │现在即可接到下个任务。 │
  25. │[09]│[主] │胡一刀(1) 100.0% │现在即可接到下个任务。 │
  26. │[10]│[主] │萧峰(21) 84.0% │现在即可接到下个任务。 │
  27. │[11]│[主] │韩世忠(10) 100.0% │现在即可接到下个任务。 │
  28. │[12]│[主] │公孙止(10) 76.9% │现在即可接到下个任务。 │
  29. │[13]│[主] │万安塔(100) 82.6% │现在即可接到下个任务。 │
  30. │[14]│[主] │破阵 │现在即可接到下个任务。 │
  31. │[15]│[主] │天珠(10) 83.3% │现在即可接到下个任务。 │
  32. │[16]│[主] │偷学 │未满足接受此任务的所有条件,前置任务次数不够。 │
  33. │[17]│[主] │宋远桥 │现在即可接到下个任务。 │
  34. │[18]│[主] │谍报(10) 83.3% │现在即可接到下个任务。 │
  35. │[19]│[主] │海棠(65) │任务已经失败。 │
  36. │[20]│[主] │捉蛊 │未满足接受此任务的所有条件,身上必须有蛊盒。 │
  37. │[21]│[主] │神游八方 │未满足接受此任务的所有条件,级别必须达到60。 │
  38. │[22]│[主] │苗王 │现在即可接到下个任务。 │
  39. │[23]│[主] │活人祭 │未满足接受此任务的所有条件,蛊术的级别不足100级。 │
  40. │[24]│[主] │见性成佛 │现在即可接到下个任务。 │
  41. │[25]│[主] │心上人 │现在即可接到下个任务。 │
  42. │[26]│[主] │暗杀 │未满足接受此任务的所有条件,杀手帮积分至少积累20点。 │
  43. │[27]│[主] │纪晓芙(26) │现在即可接到下个任务。 │
  44. │[28]│[主] │南国围猎(26) 96.3% │现在即可接到下个任务。 │
  45. │[29]│[主] │山宗锄奸 │未满足接受此任务的所有条件,完成山宗上祭礼才能接到这个任务。 │
  46. │[30]│[主] │西行 │现在即可接到下个任务。 │
  47. │[31]│[主] │香闺怨 │未满足接受此任务的所有条件,级别必须达到40。 │
  48. │[32]│[主] │破解武功 │未满足接受此任务的所有条件,职业等阶必须达到1。 │
  49. │[33]│[主] │青城山采药(11) 100.0% │现在即可接到下个任务。 │
  50. │[34]│[主] │青城派追查 │未满足接受此任务的所有条件,经验必须达到30000000。 │
  51. │[35]│[主] │华山送信任务 │现在即可接到下个任务。 │
  52. │[36]│[主] │投名状任务 │现在即可接到下个任务。 │
  53. │[37]│[主] │萧半和任务 │现在即可接到下个任务。 │
  54. │[38]│[主] │鄱阳湖寻宝(19) │现在即可接到下个任务。 │
  55. │[39]│[主] │运镖(2384) │现在即可接到下个任务。[普通镖局] │
  56. │[40]│[特] │藏经阁 │现在即可接到下个任务。今天还能进行2次藏经阁任务。 │
  57. │[41]│[特] │大唐爵位任务 │现在即可接到下个任务。 │
  58. │[42]│[特] │锻造任务 │现在即可接到下个任务。 │
  59. │[43]│[特] │铜雀台任务 │现在即可接到下个任务。 │
  60. │[44]│[特] │百晓生任务 │现在即可接到下个任务。 │
  61. │[45]│[特] │公孙绿萼任务 │ │
  62. ╰──┴───┴──────────────┴─────────────────────────────────────╯
  63. ╭─────────────────────────────────────────┬─────────────────╮
  64. │全局事件 (天魔) 任务环剩余 │jobquery支持参数++/-- 增加/ 减少任│
  65. │胡一刀任务->韩员外任务->胡一刀任务->萧峰任务->护镖任务->天珠任务->破阵任务->破阵任│务到自定义列表,参数intro 给出所有│
  66. │务->绝情谷任务->绝情谷任务->宋远桥任务->萧峰任务->宋远桥任务->萧峰任务->谍报任务->│任务简介。 │
  67. │胡一刀任务->胡一刀任务->都府刺杀任务->胡一刀任务->都府刺杀任务。#(已完成:0) │ │
  68. ╰─────────────────────────────────────────┴────────北大侠客行────╯
  69. */
  70. event.Define {jobquery} {无参} {$MODULE} {任务CD状态查询结果已更新,内容在变量 gJobState 中};
  71. load-module basic/cmds/link;
  72. /*
  73. jobquery 本来就有两个别名:
  74. 1. jobquery 长一些,不方便输入,用的较少,因此重定义其行为,默认屏蔽系统输出
  75. 2. jq 短一些,平时用的比较多,则不屏蔽系统输出,以免影响玩家使用习惯。
  76. */
  77. #alias {jobquery_gag} {job.Query gag {%0}};
  78. #alias {jobquery} {job.Query nogag {%0}};
  79. #alias {jq} {job.Query nogag {%0}};
  80. VAR {任务CD状态查询结果} gJobState {};
  81. #func {basic_cmds_jobquery.Init} {
  82. #class data/basic/cmds/jobquery open;
  83. #var gJobStateUpdate {0};
  84. #class data/basic/cmds/jobquery close;
  85. #return true;
  86. };
  87. #alias {job.Query} {
  88. #local gag {%1};
  89. #local args {%2};
  90. #nop 如果命令不是预期的格式,则直接透传给服务器,不予处理。;
  91. #if { "$args" != "{|-m|-x|-z|-t|-zn|-cur|-avail|[0-9]+}" } {
  92. xtt.Send {jobquery $args};
  93. #return;
  94. };
  95. #class job.Query open;
  96. #highlight {^你刚刚查询过任务,请稍后再查。$} {bold light red};
  97. #if { "$gag" == "gag" } {
  98. #action {^%*{|ID=cmds/jobquery}$} {
  99. #line gag;
  100. } {5.1};
  101. };
  102. #line oneshot #action {^你刚刚查询过任务,请稍后再查。$} {
  103. #class job.Query kill;
  104. #local now {};
  105. #local cd {0};
  106. #format now {%T};
  107. #math cd {$gJobStateUpdate + 11 - $now};
  108. #if { $cd < 0 } {
  109. #local cd {10};
  110. };
  111. #delay jobquery {job.Query {%1} {%2}} $cd;
  112. };
  113. #line oneshot #action {^╭──┬北侠任务查询助理─{(─|┬)+}─╮$} {
  114. jobquery.parse.output {%1};
  115. #if { "%1" == "gag" } {
  116. #line gag;
  117. };
  118. };
  119. #line oneshot #action {{*UTF8}{^}╰─{(─|┴)+}──{\p{Han}+}────╯{|ID=cmds/jobquery}$} {
  120. #class jobquery-parser kill;
  121. #class job.Query kill;
  122. #if { "%1" == "gag" } {
  123. #line gag;
  124. };
  125. #delay 0 jobquery.parse.done;
  126. };
  127. #class job.Query close;
  128. xtt.Send {jobquery $args};
  129. };
  130. #alias {jobquery.parse.output} {
  131. #local gag {%1};
  132. #class jobquery open;
  133. #var gJobState {};
  134. #var gJobStateUpdate {0};
  135. #class jobquery close;
  136. #var env.Week[best] {};
  137. #var env.Week[buff] {};
  138. #var env.Week[debuff] {};
  139. #var env.Week[normal] {};
  140. #class jobquery-parser open;
  141. link.Enable jobquery 0 {藏经阁;大唐爵位任务};
  142. #nop 这里一共有 7 个占位符;
  143. #local jobLeader {│[%d]%!s│[{门|新|主|特}]%!s│%S{|\((\d+)\)} {|([0-9.]+)%}%!s};
  144. #local jobEnd {%!s│};
  145. #alias {jq.set} {
  146. #local {rawLine} {%%1};
  147. #local {name} {%%4};
  148. #local {times} {%%5};
  149. #local {pct} {%%7};
  150. #replace name {▎} {};
  151. #if { "$times" != "" } {#local {times} {%%6}};
  152. #if { "$pct" != "" } {#local {pct} {%%8}};
  153. #local color {\e\[[0-9;]+m};
  154. #replace {rawLine} {^%*[主]%C│%+1c{(($color)+)▎$color|}%+0..2c$name%*$} {
  155. {group} {&5}
  156. {buff} {&7}
  157. };
  158. #local moreInfo {$rawLine};
  159. #if { "$moreInfo[buff]" != "" } {#local moreInfo[buff] {@str.Color{$moreInfo[buff]}}};
  160. #if { "$moreInfo[group]" != "" } {#local moreInfo[group] {@str.Color{$moreInfo[group]}}};
  161. #switch {"$moreInfo[buff]"} {
  162. #case {"42;1;1;37"} {#local moreInfo[buff] {最佳}; #var env.Week[best] {@sset.Add{{$env.Week[best]};$name}}};
  163. #case {"1;32"} {#local moreInfo[buff] {上升}; #var env.Week[buff] {@sset.Add{{$env.Week[buff]};$name}}};
  164. #case {"31"} {#local moreInfo[buff] {下降}; #var env.Week[debuff] {@sset.Add{{$env.Week[debuff]};$name}}};
  165. #case {"2;37;0"} {#local moreInfo[buff] {正常}; #var env.Week[normal] {@sset.Add{{$env.Week[normal]};$name}}};
  166. };
  167. #var gJobState[$name] {
  168. {ID} {%%2}
  169. {类型} {%%3}
  170. {名称} {$name}
  171. {次数} {$times}
  172. {成功率} {$pct}
  173. {CD} {%%9}
  174. {附加信息} {%%10}
  175. {增益} {$moreInfo[buff]}
  176. {增益联动} {$moreInfo[group]}
  177. };
  178. #if { "%1" == "gag" } {
  179. #line gag;
  180. };
  181. };
  182. #action {^$jobLeader│任务已经失败。$jobEnd$} {
  183. jq.set {%%99} {%%1} {%%2} {%%3} {%%4} {%%5} {%%6} {%%7} {-3} {任务已经失败。};
  184. };
  185. #action {^$jobLeader│仍需%S才能接到下个任务。$jobEnd$} {
  186. jq.set {%%99} {%%1} {%%2} {%%3} {%%4} {%%5} {%%6} {%%7} {@time.ParseDoC{%%8}} {等待CD中};
  187. };
  188. #action {^$jobLeader│现在即可接到下个任务。%S$jobEnd$} {
  189. jq.set {%%99} {%%1} {%%2} {%%3} {%%4} {%%5} {%%6} {%%7} {0} {%%8};
  190. };
  191. #action {^$jobLeader│任务正在进行中。%S$jobEnd$} {
  192. jq.set {%%99} {%%1} {%%2} {%%3} {%%4} {%%5} {%%6} {%%7} {-2} {%%8};
  193. };
  194. #action {^$jobLeader│未满足接受此任务的所有条件,%S$jobEnd$} {
  195. jq.set {%%99} {%%1} {%%2} {%%3} {%%4} {%%5} {%%6} {%%7} {-1} {%%8};
  196. };
  197. #class jobquery-parser close;
  198. };
  199. #alias {jobquery.parse.done} {
  200. #format gJobStateUpdate {%T};
  201. #local name {};
  202. #local cdStr {};
  203. #local doingStr {};
  204. #foreach {*gJobState[]} {name} {
  205. #if { $gJobState[$name][CD] > 0 } {
  206. #local cdStr {$cdStr <139>$name<299>(<119>$gJobState[$name][CD]s<299>)};
  207. };
  208. #elseif { $gJobState[$name][CD] == -2 } {
  209. #local doingStr {$doingStr <129>$name<299>(<139>$gJobState[$name][附加信息]<299>)};
  210. };
  211. };
  212. #if { "$doingStr$cdStr" == "" } {
  213. okLog 任务 CD 状态已更新,没有任务处于 CD 中。;
  214. };
  215. #elseif { "$doingStr" == "" } {
  216. okLog 任务 CD 状态已更新,以下任务仍然处于 CD 中:$cdStr;
  217. };
  218. #elseif { "$cdStr" == "" } {
  219. okLog 任务 CD 状态已更新,以下任务正在进行中:$doingStr;
  220. };
  221. #else {
  222. okLog 任务 CD 状态已更新,以下任务正在进行中:$doingStr,以下任务仍然处于 CD 中:$cdStr;
  223. };
  224. event.Emit {jobquery};
  225. };