skills.tin 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. #nop vim: set filetype=tt:;
  2. #var basic_char_skills[META] {
  3. {NAME} {技能列表}
  4. {DESC} {解析 skills 命令的输出结果,并写入到 char[Skills]}
  5. {AUTHOR} {担子炮}
  6. {NOTE} {技能小点和激发关系分别由 skbrief 和 jifa 命令提供,都合并在一起}
  7. {CONFIG} {
  8. }
  9. };
  10. #nop ╭───技能列表(共十六项)─┬─────────────┬──────┬──────┬──────╮
  11. #nop │名称 │ID │描述 │级别 │最大级别 │
  12. #nop ├───一项职业技能────┼─────────────┼──────┼──────┼──────┤
  13. #nop │ 占卜之术 │divination │不足挂齿 │82.0 │387 │
  14. #nop ├───六项基本知识────┼─────────────┼──────┼──────┼──────┤
  15. #nop │ 禅宗心法 │buddhism │半生不熟 │153.0 │- │
  16. #nop │ 鉴定之术 │identification │初窥门径 │54.0 │- │
  17. #nop │ 读书写字 │literate │半生不熟 │152.0 │- │
  18. #nop │ 医术 │medical-skill │新学乍用 │30.0 │- │
  19. #nop │ 妙手空空 │stealing │新学乍用 │10.0 │- │
  20. #nop │ 道家养生术 │taoism │深不可测 │948.23 │- │
  21. #nop ├───六项基本功夫────┼─────────────┼──────┼──────┼──────┤
  22. #nop │ 基本拳法 │cuff │半生不熟 │386.0 │387 │
  23. #nop │ 基本轻功 │dodge │半生不熟 │386.0 │387 │
  24. #nop │ 基本内功 │force │半生不熟 │386.0 │387 │
  25. #nop │ 基本招架 │parry │半生不熟 │386.0 │387 │
  26. #nop │ 基本剑法 │sword │半生不熟 │386.0 │387 │
  27. #nop ├───四项特殊功夫────┼─────────────┼──────┼──────┼──────┤
  28. #nop │□太极剑法 │taiji-jian │半生不熟 │386.0 │387 │
  29. #nop │□太极拳 │taiji-quan │半生不熟 │386.0 │387 │
  30. #nop │□太极神功 │taiji-shengong │第五重楼 │387.0 │387 │
  31. #nop │□梯云纵 │tiyunzong │半生不熟 │386.0 │387 │
  32. #nop ╰─────────────┴─────────────┴──────┴────北大侠客行────╯
  33. #nop;
  34. load-lib event;
  35. event.Define {char/skills} {无参} {$MODULE} {已经获取到 skills 命令输出结果,并更新 char[Skills]。};
  36. event.Define {char/skbrief} {无参} {$MODULE} {已经获取到 skbrief 命令输出结果,并更新 char[Skills]。};
  37. #func {basic_char_skills.Init} {
  38. #class data/basic/char open;
  39. #var char[Skills] {};
  40. #class data/basic/char close;
  41. #delay char.skills.init {skills;jifa} 1;
  42. #return true;
  43. };
  44. #alias {skills} {char.Skills};
  45. #alias {sk} {char.Skills};
  46. #alias {cha} {char.Skills};
  47. #alias {skbrief} {char.Skbrief {%1} nogag};
  48. #alias {char.Skills} {
  49. #local args {%0};
  50. #if { "$args" == "" } {
  51. #line oneshot #action {^╭───技能列表(共%*项){(─|┬)*}──╮$} {
  52. #var char[Skills][count] {@c2d{%%1}};
  53. char.skills.parse.output;
  54. };
  55. };
  56. xtt.Send skills %0;
  57. };
  58. #alias {char.skills.parse.output} {
  59. #class {ParseSkills} open;
  60. #var char[Skills][currentType] {};
  61. #var char[Skills][nameList] {};
  62. #gag {^│名称};
  63. #action {^├───%%1项%%2──} {
  64. #var char[Skills][currentType] {%%2};
  65. };
  66. #local RST {\e[0m};
  67. #local RST__ {\e[2;37;0m};
  68. #local __I__ {$RST__│};
  69. #action {~^$RST│%*│%*│%*│%*│%*│{|ID=char.skills}} {
  70. #local line {%%0};
  71. #local code {%%2};
  72. #local level {%%4};
  73. #local limit {%%5};
  74. #replace {code} {\x1b[2;37;0m} {};
  75. #replace {level} {\x1b[2;37;0m} {};
  76. #replace {limit} {\x1b[2;37;0m} {};
  77. #replace level {+} {};
  78. #if { "$limit" == "%s%d%s" } {
  79. #math limit {$limit + 0};
  80. };
  81. #elseif { "$limit" == "%s-%s" } {
  82. #nop 知识类技能没有上限;
  83. #local limit {0};
  84. };
  85. #else {
  86. #return;
  87. };
  88. #nop 给技能加上彩色进度条,用来表示当前级别距离上限的程度;
  89. #local newCode {@__char_skills_colorit__{{$code};$level;$limit}};
  90. #replace code { } {};
  91. #replace line {$code\x1b[2;37;0m%s} {$newCode\e[0m};
  92. #echo {%s} {@Beautify{{$line}}};
  93. #local line {Skill/%%1/%%2/%%3/%%4/$limit};
  94. #replace line { } {};
  95. #showme {$line};
  96. #line gag;
  97. };
  98. #action {^Skill/{□|Θ|}%%2/%%3/%%4/%%5/%%6$} {
  99. #local type ${char[Skills][currentType]};
  100. #local enabled {%%1};
  101. #local name {%%2};
  102. #local code {%%3};
  103. #local rank {%%4};
  104. #local level {%%5};
  105. #local limit {%%6};
  106. #replace name { } {};
  107. #if { "$enabled" == "□" } {
  108. #format enabled {true};
  109. };
  110. #else {
  111. #format enabled {false};
  112. };
  113. #list char[Skills][nameList] add {$name};
  114. #var {char[Skills][$name]} {
  115. $char[Skills][$name]
  116. {name}{$name}
  117. {type}{$type}
  118. {enabled}{$enabled}
  119. {code}{$code}
  120. {rank}{$rank}
  121. {level}{$level}
  122. {limit}{$limit}
  123. };
  124. #line gag;
  125. };
  126. #action {^╰───{(┴|─)*}─%S────╯{|ID=char.skills}$} {
  127. char.skills.parse.done;
  128. };
  129. #action {^你不是查看过吗?{|ID=char/skills}$} {
  130. char.skills.parse.done;
  131. };
  132. #alias {char.skills.parse.done} {
  133. #local __unused {%%0};
  134. event.UnHandle GA {char.skills};
  135. #local nameList {$char[Skills][nameList]};
  136. #local count {$char[Skills][count]};
  137. #unvar char[Skills][currentType];
  138. #unvar char[Skills][nameList];
  139. #unvar char[Skills][count];
  140. #class {ParseSkills} kill;
  141. #if { &nameList[] != $count } {
  142. #line sub var #delay 0 {
  143. errLog skills 命令结果解析不完整,识别到了 &nameList[] 条记录。数据可能有误,请联系开发者。;
  144. };
  145. #return;
  146. };
  147. #list nameList collapse {|};
  148. #local skillName {};
  149. #foreach {*char[Skills][]} {skillName} {
  150. #if { "$skillName" != "{$nameList}" } {
  151. #unvar {char[Skills][$skillName]};
  152. };
  153. };
  154. };
  155. event.HandleOnce GA {char.skills} {char} {char.skills.parse.done};
  156. #class {ParseSkills} close;
  157. };
  158. #func {__char_skills_colorit__} {
  159. #local code {%1};
  160. #local level {%2};
  161. #local limit {%3};
  162. #local p {};
  163. #math p {$level * 100 / $limit};
  164. #format p {%d} {$p};
  165. #local color {};
  166. #if { $p < 15 } {
  167. #format color {%s} {<071>};
  168. };
  169. #elseif { $p < 30 } {
  170. #format color {%s} {<171>};
  171. };
  172. #elseif { $p < 60 } {
  173. #format color {%s} {<003>};
  174. };
  175. #elseif { $p < 90 } {
  176. #format color {%s} {<074>};
  177. };
  178. #elseif { $p < 100 } {
  179. #format color {%s} {<134>};
  180. };
  181. #elseif { $p == 100 } {
  182. #format color {%s} {<132>};
  183. };
  184. #elseif { $p > 100 } {
  185. #format color {%s} {<506>};
  186. };
  187. #local len {};
  188. #local len2 {};
  189. #local len3 {};
  190. #format {len} {%L} {$code};
  191. #format {code} {%p} {$code};
  192. #format {len2} {%L} {$code};
  193. #math len3 {$len - $len2};
  194. #format {code} {%s%${len3}s} {$code} {$p%};
  195. #local leftLen {};
  196. #math leftLen {$len * $level / $limit};
  197. #format leftLen {%d} {$leftLen};
  198. #local left {};
  199. #format {left} {${color}%.${leftLen}s<070>} {$code};
  200. #local right {};
  201. #local rightLen {};
  202. #math rightLen {$len - $leftLen};
  203. #format {right} {%r} {$code};
  204. #format {right} {%.${rightLen}s} {$right};
  205. #format {right} {<g08>%r} {$right};
  206. #return {$left$right};
  207. };
  208. #alias {char.Skbrief} {
  209. #local id {%1};
  210. #line oneshot #action {^系统回馈:R:skbrief-begin$} {
  211. #class char-skbrief-parse-output open;
  212. #line oneshot #action {^#%d/%d{|ID=char/skbrief}$} {
  213. #local skill {};
  214. #foreach {*char[Skills][]} {skill} {
  215. #if { "$char[Skills][$skill][code]" == "%1" } {
  216. #var char[Skills][$skill][lvl] {%%%1};
  217. #var char[Skills][$skill][point] {%%%2};
  218. event.Emit {char/skbrief};
  219. #break;
  220. };
  221. };
  222. #local gag {@default{%2;gag}};
  223. #if { "$gag" == "gag" } {
  224. #line gag;
  225. };
  226. };
  227. #line oneshot #action {^系统回馈:R:skbrief-end$} {
  228. #line gag;
  229. #class char-skbrief-parse-output kill;
  230. };
  231. #class char-skbrief-parse-output close;
  232. #line gag;
  233. };
  234. #if { "$id" == "" } {
  235. #return;
  236. };
  237. #send {#response R:skbrief-begin;skbrief $id;response R:skbrief-end#};
  238. };