jobquery.tin 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  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. 2024-12-01 11:33:51 INPUT: jq
  15. ╭─┬─北侠任务查询助理──────┬────────────────────╮
  16. │ │类型│名称 │状态 │
  17. │ 1│门派│门忠任务 │门忠任务细节请用loyalty list查询 │
  18. │ 2│门派│门派任务 │现在即可接到下个任务。 │
  19. │ 3│新手│送信 │现在即可接到下个任务。 │
  20. │ 4│新手│唱戏 │现在即可接到下个任务。 │
  21. │ 5│新手│灵鹫护卫 │现在即可接到下个任务。 │
  22. │ 6│主 │慕容◆(38) │现在即可接到下个任务。 │
  23. │ 7│主 │韩员外◆◆ │现在即可接到下个任务。 │
  24. │ 8│主▎│刺杀◆◆ │现在即可接到下个任务。 │
  25. │ 9│主▎│胡一刀◆◆ │未达成条件:级别必须达到22。 │
  26. │10│主 │萧峰◆ │现在即可接到下个任务。 │
  27. │11│主▎│韩世忠◆ │现在即可接到下个任务。 │
  28. │12│主 │公孙止◆ │现在即可接到下个任务。 │
  29. │13│主 │万安塔 │现在即可接到下个任务。 │
  30. │14│主 │破阵(73) 71.6% │现在即可接到下个任务。 │
  31. │15│主▎│天珠◆◆(907) 91.8% │现在即可接到下个任务。 │
  32. │16│主▎│偷学◆ │未达成条件:级别必须达到30。 │
  33. │17│主 │宋远桥◆(1) │现在即可接到下个任务。 │
  34. │18│主 │谍报◆ │现在即可接到下个任务。 │
  35. │19│主▎│海棠(10) │现在即可接到下个任务。 │
  36. │20│主▎│捉蛊◆◆ │未达成条件:身上必须有蛊盒。 │
  37. │21│主▎│神游八方 │未达成条件:级别必须达到65。 │
  38. │22│主▎│苗王◆◆ │现在即可接到下个任务。 │
  39. │23│主▎│活人祭◆◆ │未达成条件:蛊术低于100级。 │
  40. │24│主▎│见性成佛 │未达成条件:经验必须达到5000000。 │
  41. │25│主▎│心上人◆◆ │现在即可接到下个任务。 │
  42. │26│主 │暗杀◆◆ │未达成条件:杀手帮积分积累20点。 │
  43. │27│主▎│纪晓芙◆◆(4) │现在即可接到下个任务。 │
  44. │28│主▎│南国围猎 │未达成条件:级别必须达到25。 │
  45. │29│主▎│山宗锄奸 │未达成条件:级别必须达到30。 │
  46. │30│主 │西行 │未达成条件:级别必须达到35。 │
  47. │31│主▎│香闺怨 │未达成条件:级别必须达到40。 │
  48. │32│主▎│破解武功 │未达成条件:级别必须达到60。 │
  49. │33│主▎│采药◆◆ │未达成条件:级别必须达到32。 │
  50. │34│主▎│追查◆◆ │未达成条件:级别必须达到45。 │
  51. │35│主▎│打擂◆◆ │未达成条件:韩世忠任务需完成1000次。 │
  52. │36│主▎│按图索骥 │未达成条件:级别必须达到35。 │
  53. │37│主▎│失散古谱◆ │未达成条件:级别必须达到50。 │
  54. │38│特殊│华山送信(10) │现在即可接到下个任务。 │
  55. │39│特殊│投名状(36) │现在即可接到下个任务。 │
  56. │40│特殊│萧半和 │现在即可接到下个任务。 │
  57. │41│特殊│鄱阳湖寻宝(5) │现在即可接到下个任务。今日剩余5次 │
  58. │42│特殊│运镖(825) │任务已经失败。 │
  59. │43│限制│藏经阁 │未达成条件:经验必须达到15000000。 │
  60. │44│限制│大唐爵位 │现在即可接到下个任务。 │
  61. │45│限制│锻造 │现在即可接到下个任务。 │
  62. │46│限制│铜雀台 │现在即可接到下个任务。 │
  63. │47│限制│百晓生 │现在即可接到下个任务。 │
  64. │48│限制│公孙绿萼 │ │
  65. ╰─┴──┴────────────┴────────────────────╯
  66. ╭──────────────────────────┬───────────╮
  67. │ │jobquery支持参数++/-- │
  68. │ │增加/ 减少任务到自定义│
  69. │ │列表,参数intro 给出所│
  70. │ │有任务简介。 │
  71. ╰──────────────────────────┴──北大侠客行────╯
  72. */
  73. event.Define {jobquery} {无参} {$MODULE} {任务CD状态查询结果已更新,内容在变量 gJobState 中};
  74. load-module basic/cmds/link;
  75. /*
  76. jobquery 本来就有两个别名:
  77. 1. jobquery 长一些,不方便输入,用的较少,因此重定义其行为,默认屏蔽系统输出
  78. 2. jq 短一些,平时用的比较多,则不屏蔽系统输出,以免影响玩家使用习惯。
  79. */
  80. #alias {jobquery_gag} {job.Query gag {%0}};
  81. #alias {jobquery} {job.Query nogag {%0}};
  82. #alias {jq} {job.Query nogag {%0}};
  83. VAR {任务CD状态查询结果} gJobState {};
  84. #func {basic_cmds_jobquery.Init} {
  85. #class data/basic/cmds/jobquery open;
  86. #var gJobStateUpdate {0};
  87. #class data/basic/cmds/jobquery close;
  88. #return true;
  89. };
  90. #alias {job.Query} {
  91. #local gag {%1};
  92. #local args {%2};
  93. #nop 如果命令不是预期的格式,则直接透传给服务器,不予处理。;
  94. #if { "$args" != "{|-m|-x|-z|-t|-zn|-cur|-avail|[0-9]+}" } {
  95. xtt.Send {jobquery $args};
  96. #return;
  97. };
  98. #class job.Query open;
  99. #highlight {^你刚刚查询过任务,请稍后再查。$} {bold light red};
  100. #if { "$gag" == "gag" } {
  101. #action {^%*{|ID=cmds/jobquery}$} {
  102. #line gag;
  103. } {5.1};
  104. };
  105. #line oneshot #action {^你刚刚查询过任务,请稍后再查。$} {
  106. #class job.Query kill;
  107. #local now {};
  108. #local cd {0};
  109. #format now {%T};
  110. #math cd {$gJobStateUpdate + 11 - $now};
  111. #if { $cd < 0 } {
  112. #local cd {10};
  113. };
  114. #delay jobquery {job.Query {%1} {%2}} $cd;
  115. };
  116. #line oneshot #action {@re.TableHeader{北侠任务查询助理}} {
  117. option.Push HighlightBlue false;
  118. jobquery.parse.output {%1};
  119. #if { "%1" == "gag" } {
  120. #line gag;
  121. };
  122. };
  123. #line oneshot #action {{*UTF8}{^}╰─{(─|┴)+}──{\p{Han}+}────╯{|ID=cmds/jobquery}$} {
  124. option.Pop HighlightBlue;
  125. #class jobquery-parser kill;
  126. #class job.Query kill;
  127. #if { "%1" == "gag" } {
  128. #line gag;
  129. };
  130. #delay 0 jobquery.parse.done;
  131. };
  132. #class job.Query close;
  133. xtt.Send {jobquery $args};
  134. };
  135. #alias {jobquery.parse.output} {
  136. #local gag {%1};
  137. #class jobquery open;
  138. #var gJobState {};
  139. #var gJobStateUpdate {0};
  140. #class jobquery close;
  141. #var env.Week[best] {};
  142. #var env.Week[buff] {};
  143. #var env.Week[debuff] {};
  144. #var env.Week[normal] {};
  145. #class jobquery-parser open;
  146. link.Enable jobquery 0 {藏经阁;大唐爵位任务};
  147. #nop 这里一共有 7 个占位符;
  148. #local jobLeader {│%!s%d│{门派|新手|特殊|限制|主|主▎}%!s│%S{?:(?:◆)*}{|\(([0-9万+]+)\)} {|([0-9.]+)%}%!s};
  149. #local jobEnd {%!s│};
  150. #alias {jq.set} {
  151. #local {rawLine} {%%1};
  152. #local {type} {%%3};
  153. #local {name} {%%4};
  154. #local {times} {%%5};
  155. #local {pct} {%%7};
  156. #local {reason} {%%10};
  157. #replace type {▎} {};
  158. #if { "$type" == "主" } {#local type {主流}};
  159. #if { "$times" != "" } {#local {times} {%%6}};
  160. #if { "$pct" != "" } {#local {pct} {%%8}};
  161. #replace {reason} {。$} {};
  162. #if { "$times" == "%d万+" } {
  163. #replace times {万+} {};
  164. #math times {$times * 10000};
  165. };
  166. #local color {\e\[[0-9;]+m};
  167. #replace {rawLine} {^%*│%!c{(主|特殊)($color(($color)+)▎$color|)}%!C│%!+1c%+0..2c$name{(?:\e\[2;37;0m($color)+◆)*}%*} {
  168. {type} {&3}
  169. {group} {&5}
  170. {buff} {&7}
  171. {color} {&8}
  172. };
  173. #local moreInfo {$rawLine};
  174. #if { "$moreInfo[buff]" != "" } {#local moreInfo[buff] {@str.Color{$moreInfo[buff]}}};
  175. #if { "$moreInfo[group]" != "" } {#local moreInfo[group] {@str.Color{$moreInfo[group]}}};
  176. #if { "$moreInfo[color]" != "" } {
  177. #replace moreInfo[color] {\e[2;37;0m{(\e\[([0-9;]+)m)+}◆} {@str.Replace{{&3};{;};{-}};};
  178. #replace moreInfo[color] {;$} {};
  179. };
  180. #switch {"$moreInfo[buff]"} {
  181. #case {"42;1;1;37"} {#local moreInfo[buff] {最佳}; #var env.Week[best] {@sset.Add{{$env.Week[best]};$name}}};
  182. #case {"1;32"} {#local moreInfo[buff] {上升}; #var env.Week[buff] {@sset.Add{{$env.Week[buff]};$name}}};
  183. #case {"31"} {#local moreInfo[buff] {下降}; #var env.Week[debuff] {@sset.Add{{$env.Week[debuff]};$name}}};
  184. #case {"2;37;0"} {#local moreInfo[buff] {正常}; #var env.Week[normal] {@sset.Add{{$env.Week[normal]};$name}}};
  185. };
  186. #local cd {%%9};
  187. #local next {0};
  188. #if { $cd >= 0 } {
  189. #local next {@math.Eval{@time.Now{} + $cd}};
  190. };
  191. #var gJobState[$name] {
  192. {ID} {%%2}
  193. {类型} {$type}
  194. {名称} {$name}
  195. {次数} {$times}
  196. {成功率} {$pct}
  197. {CD} {$cd}
  198. {NEXT} {$next}
  199. {附加信息} {$reason}
  200. {增益} {$moreInfo[buff]}
  201. {增益联动} {$moreInfo[group]}
  202. {名号加成} {$moreInfo[color]}
  203. };
  204. #if { "%1" == "gag" } {
  205. #line gag;
  206. };
  207. };
  208. #action {^$jobLeader│任务已经失败。$jobEnd$} {
  209. jq.set {%%99} {%%1} {%%2} {%%3} {%%4} {%%5} {%%6} {%%7} {-3} {任务已经失败。};
  210. };
  211. #action {^$jobLeader│仍需%S才能接到下个任务。$jobEnd$} {
  212. jq.set {%%99} {%%1} {%%2} {%%3} {%%4} {%%5} {%%6} {%%7} {@time.ParseDoC{%%8}} {等待CD中};
  213. };
  214. #action {^$jobLeader│现在即可接到下个任务。%S$jobEnd$} {
  215. jq.set {%%99} {%%1} {%%2} {%%3} {%%4} {%%5} {%%6} {%%7} {0} {%%8};
  216. };
  217. #action {^$jobLeader│任务正在进行中。%S$jobEnd$} {
  218. jq.set {%%99} {%%1} {%%2} {%%3} {%%4} {%%5} {%%6} {%%7} {-2} {%%8};
  219. };
  220. #action {^$jobLeader│未达成条件:%S$jobEnd$} {
  221. jq.set {%%99} {%%1} {%%2} {%%3} {%%4} {%%5} {%%6} {%%7} {-1} {%%8};
  222. };
  223. #class jobquery-parser close;
  224. };
  225. #alias {jobquery.parse.done} {
  226. #format gJobStateUpdate {%T};
  227. #local name {};
  228. #local cdStr {};
  229. #local doingStr {};
  230. #foreach {*gJobState[]} {name} {
  231. #if { $gJobState[$name][CD] > 0 } {
  232. #local cdStr {$cdStr <139>$name<299>(<119>$gJobState[$name][CD]s<299>)};
  233. };
  234. #elseif { $gJobState[$name][CD] == -2 } {
  235. #local doingStr {$doingStr <129>$name<299>(<139>$gJobState[$name][附加信息]<299>)};
  236. };
  237. };
  238. #if { "$doingStr$cdStr" == "" } {
  239. okLog 任务 CD 状态已更新,没有任务处于 CD 中。;
  240. };
  241. #elseif { "$doingStr" == "" } {
  242. okLog 任务 CD 状态已更新,以下任务仍然处于 CD 中:$cdStr;
  243. };
  244. #elseif { "$cdStr" == "" } {
  245. okLog 任务 CD 状态已更新,以下任务正在进行中:$doingStr;
  246. };
  247. #else {
  248. okLog 任务 CD 状态已更新,以下任务正在进行中:$doingStr,以下任务仍然处于 CD 中:$cdStr;
  249. };
  250. event.Emit env/week/update;
  251. prompt.Set {{weekBest}{$env.Week[best]}};
  252. prompt.Set {{weekBuff}{$env.Week[buff]}};
  253. prompt.Set {{weekNormal}{$env.Week[normal]}};
  254. prompt.Set {{weekDebuff}{$env.Week[debuff]}};
  255. event.Emit {jobquery};
  256. };