hp.tin 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分
  4. ===========
  5. PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  6. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  7. ===========
  8. */
  9. #var basic_char_hp[META] {
  10. {NAME} {HP 信息解析}
  11. {DESC} {解析 hp 和 hpbrief 两个命令的内容,并储存到变量 char[HP]}
  12. {AUTHOR} {担子炮}
  13. {NOTE} {本文件属于 PaoTin++ 的一部分}
  14. };
  15. load-lib event;
  16. load-lib speedo;
  17. event.Define {char/hp} {无参} {$MODULE} {已经获取到 hp 命令输出结果,并更新 char[HP]。};
  18. event.Define {char/hpbrief} {无参} {$MODULE} {已经获取到 hpbrief 命令输出结果,并更新 char[HP]。};
  19. event.Define {char/hpneili} {无参} {$MODULE} {已经获取到 hp -neili 命令输出结果,并更新 char[HP]。};
  20. #func {basic_char_hp.Init} {
  21. #class data/basic/char open;
  22. #var char[HP] {};
  23. #var char[HP][经验] {1};
  24. #var char[HP][经验显示] {1};
  25. #var char[HP][潜能] {1};
  26. #var char[HP][潜能显示] {1};
  27. #var char[HP][上次内力] {0};
  28. #var char[HP][当前内力] {0};
  29. #var char[HP][最大内力] {1};
  30. #var char[HP][内力上限] {1};
  31. #var char[HP][加力] {0};
  32. #var char[HP][内力百分比] {0};
  33. #var char[HP][上次精力] {0};
  34. #var char[HP][当前精力] {0};
  35. #var char[HP][最大精力] {1};
  36. #var char[HP][精力上限] {1};
  37. #var char[HP][精力百分比] {0};
  38. #var char[HP][上次气血] {0};
  39. #var char[HP][当前气血] {0};
  40. #var char[HP][有效气血] {1};
  41. #var char[HP][最大气血] {1};
  42. #var char[HP][气血百分比] {0};
  43. #var char[HP][气血健康度] {0};
  44. #var char[HP][上次精神] {0};
  45. #var char[HP][当前精神] {0};
  46. #var char[HP][有效精神] {1};
  47. #var char[HP][最大精神] {1};
  48. #var char[HP][精神百分比] {0};
  49. #var char[HP][精神健康度] {0};
  50. #var char[HP][上次真气] {0};
  51. #var char[HP][当前真气] {0};
  52. #var char[HP][最大真气] {1};
  53. #var char[HP][真气减伤] {0};
  54. #var char[HP][真元] {0};
  55. #var char[HP][当前食物] {0};
  56. #var char[HP][最大食物] {200};
  57. #var char[HP][饥饿] {};
  58. #var char[HP][当前饮水] {0};
  59. #var char[HP][最大饮水] {200};
  60. #var char[HP][口渴] {};
  61. #var char[HP][气势] {0};
  62. #var char[HP][状态] {};
  63. #var char[HP][毒] {};
  64. #class data/basic/char close;
  65. set hpbrief long,report;
  66. #delay {char.Init} {char.GetHP; char.GetHP2} {1};
  67. #return true;
  68. };
  69. /*
  70. hp 有两种格式,非战斗状态:
  71. ┌───个人状态────────────┬───────────────────┐
  72. │【精神】 5978 / 5978 [103%] │【精力】 12102 / 6051 (+ 0) │
  73. │【气血】 23372 / 23372 [101%] │【内力】 5369 / 7063 (+ 1) │
  74. │【真气】 1367 / 1367 [ 9%] │【静气】 101% [正常] │
  75. │【食物】 874 / 900 [正常] │【潜能】 7.67万 │
  76. │【饮水】 874 / 900 [正常] │【经验】 1349.88万 │
  77. ├───────────────────┴───────────────────┤
  78. │【状态】 健康、怒、星宿火毒、星宿毒掌毒 │
  79. └──────────────────────────────北大侠客行────┘
  80. 战斗状态:
  81. */
  82. #alias {char.hp.parse.hp} {
  83. #class char-hp-parse-hp open;
  84. #action {^│【精神】%s%d%s/%s%d%s[%s%d\%]%!s│【精力】%s%d%s/%s%d%s(+%s%d)%!s│$} {
  85. #var char[HP][当前精神] {%%2};
  86. #var char[HP][有效精神] {%%5};
  87. #var char[HP][当前精力] {%%10};
  88. #var char[HP][最大精力] {%%13};
  89. speedo.Set {当前精神} {$char[HP][当前精神]} {true} {10};
  90. speedo.Set {当前精力} {$char[HP][当前精力]} {true} {10};
  91. };
  92. #action {^│【气血】%s%d%s/%s%d%s[%s%d\%]%!s│【内力】%s%d%s/%s%d%s(+%s%d)%!s│$} {
  93. #var char[HP][当前气血] {%%2};
  94. #var char[HP][有效气血] {%%5};
  95. #var char[HP][当前内力] {%%10};
  96. #var char[HP][最大内力] {%%13};
  97. #var char[HP][加力] {%%16};
  98. speedo.Set {当前气血} {$char[HP][当前气血]} {true} {10};
  99. speedo.Set {当前内力} {$char[HP][当前内力]} {true} {10};
  100. };
  101. #action {^│【真气】%!s%d%!s/%!s%d%!s[%!s%d\%]%!s│【%!*】%!s%!d\%%!s[%!*]%!s│$} {
  102. #var char[HP][当前真气] {%%1};
  103. #var char[HP][最大真气] {%%2};
  104. #var char[HP][真气减伤] {%%3};
  105. speedo.Set {当前真气} {$char[HP][当前真气]} {true} {10};
  106. };
  107. #action {^│【食物】%s%d%s/%s%d%s[%S]%!s│【潜能】%s%S%!s│$} {
  108. #var char[HP][当前食物] {%%2};
  109. #var char[HP][最大食物] {%%5};
  110. #var char[HP][饥饿] {%%7};
  111. #var char[HP][潜能显示] {%%9};
  112. speedo.Set {当前食物} {$char[HP][当前食物]} {true} {10};
  113. };
  114. #action {^│【饮水】%s%d%s/%s%d%s[%S]%!s│【经验】%s%S%!s│$} {
  115. #var char[HP][当前饮水] {%%2};
  116. #var char[HP][最大饮水] {%%5};
  117. #var char[HP][口渴] {%%7};
  118. #var char[HP][经验显示] {%%9};
  119. speedo.Set {当前饮水} {$char[HP][当前饮水]} {true} {10};
  120. };
  121. #action {^│【气势】%s%d%s\%%s 【平衡】%s%d%s\%%!s│$} {
  122. #var char[HP][气势] {%%2};
  123. };
  124. #action {^├───────────────────────────────────┤$} {
  125. #nop;
  126. };
  127. #action {~【状态】%*│} {
  128. #local status {%%1};
  129. #replace status { } {};
  130. #replace status {{\033\[[0-9;]+m}} {};
  131. #replace status {、} {;};
  132. #var char[HP][状态] {$status};
  133. #local item {};
  134. #local poison {};
  135. #foreach {$status} {item} {
  136. #if { "$item" == "{.*毒|火焰刀焚伤|生死符}" } {
  137. #local poison {$poison$item;};
  138. };
  139. };
  140. #replace poison {;$} {};
  141. #var char[HP][毒] {$poison};
  142. };
  143. #action {@re.TableTail{char/hp}} {
  144. #math char[HP][气血百分比] { $char[HP][当前气血] * 100 / $char[HP][最大气血] };
  145. #math char[HP][精神百分比] { $char[HP][当前精神] * 100 / $char[HP][最大精神] };
  146. #math char[HP][内力百分比] { $char[HP][当前内力] * 50 / $char[HP][最大内力] };
  147. #math char[HP][精力百分比] { $char[HP][当前精力] * 50 / $char[HP][最大精力] };
  148. #math char[HP][气血健康度] { $char[HP][有效气血] * 100 / $char[HP][最大气血] };
  149. #math char[HP][精神健康度] { $char[HP][有效精神] * 100 / $char[HP][最大精神] };
  150. #math char[HP][真气百分比] { $char[HP][当前真气] * 100 / $char[HP][最大真气] };
  151. #math char[HP][食物百分比] { $char[HP][当前食物] * 100 / $char[HP][最大食物] };
  152. #math char[HP][饮水百分比] { $char[HP][当前饮水] * 100 / $char[HP][最大饮水] };
  153. event.Emit char/hp;
  154. char.hp.parse.done;
  155. };
  156. #alias {char.hp.parse.done} {
  157. #class char-hp-parse-hp kill;
  158. #class char.GetHP kill;
  159. };
  160. event.ClassHandleOnce GA {char.hp} {char} {
  161. char.hp.parse.done;
  162. #nop 吞参数专用,不要删除本行,也不要在末尾加分号或是别的语句
  163. };
  164. #class char-hp-parse-hp close;
  165. };
  166. /*
  167. hp -neili 格式:
  168. 2024-03-26 12:13:46 INPUT: hp -neili(无内功)
  169. ╭───内功信息────────────────────────────────╮
  170. │暂无 │
  171. ├───其他信息────────────┬───────────────────┤
  172. │【走火入魔】 0.00% │【极限内力】 0 │
  173. │【恢复效率】 0.00% │【精纯程度】 0.00% │
  174. │【压缩内力】 无 │【内视加成】 无 │
  175. ╰───────────────────┴──────────北大侠客行────╯
  176. 2024-03-26 12:14:53 INPUT: hp -neili(单一内功)
  177. ╭───内功信息────────────────────────────────╮
  178. │雪山内功(xueshan-neigong) ★★★★★ - 11675/ 11675(11675) │
  179. ├───其他信息────────────┬───────────────────┤
  180. │【走火入魔】 0.00% │【极限内力】 11675 │
  181. │【恢复效率】 829.00% │【精纯程度】 100.00% │
  182. │【压缩内力】 无 │【内视加成】 无 │
  183. ╰───────────────────┴──────────北大侠客行────╯
  184. 2024-03-26 12:15:53 INPUT: hp -neili(多种内功)
  185. ╭───内功信息────────────────────────────────╮
  186. │北冥神功(beiming-shengong) ★★★☆ - 8385/ 8385(9157) │
  187. │逍遥派内功(xiaoyao-neigong) ★★★★☆ - 2789/ 2889(4710) │
  188. ├───其他信息────────────┬───────────────────┤
  189. │【走火入魔】 0.00% │【极限内力】 12347 │
  190. │【恢复效率】 471.00% │【精纯程度】 100.00% │
  191. │【压缩内力】 无 │【内视加成】 无 │
  192. ╰───────────────────┴──────────北大侠客行────╯
  193. */
  194. #alias {char.hp.parse.hp-neili} {
  195. #class char-hp-parse-hp-neili open;
  196. #action {^│%S(%S) %s %S %s - %s %d/%s%d(%d{|\)}%s│{|ID=char/hp-neili}$} {
  197. #local name {@str.Trim{%%1}};
  198. #local id {@str.Trim{%%2}};
  199. #local stars {@str.Trim{%%4}};
  200. #local current {@str.Trim{%%7}};
  201. #local max {@str.Trim{%%9}};
  202. #local limit {@str.Trim{%%10}};
  203. #local line {%%99};
  204. #if { "$line" == "%c│%c\e[42;1m%*" } {
  205. #local name {$char[Skills][基本内功][jifa-to]};
  206. #var char[HP][当前内力] {$current};
  207. #var char[HP][最大内力] {$max};
  208. #var char[HP][内力上限] {$limit};
  209. };
  210. #if { "$char[Skills][$name]" != "" } {
  211. #var char[Skills][$name][neili] {$current};
  212. #var char[Skills][$name][max-neili] {$max};
  213. #var char[Skills][$name][stars] {$stars};
  214. #var char[Skills][$name][neili-limit] {$limit};
  215. };
  216. };
  217. #action {~^%*【恢复效率】%*%+1..c{[0-9.]+}\%%*{|ID=char/hp-neili}$} {
  218. #local name {$char[Skills][基本内功][jifa-to]};
  219. #if { "$name" != "" } {
  220. #local multiple {@math.Eval{%%4 / 100}};
  221. #var char[Skills][$name][multiple] {$multiple};
  222. };
  223. #echo {%s} {@Beautify{%%1【恢复效率】%%2%%3@str.Left{{@str.Format{{%.2f};$multiple} };@math.Eval{@str.Width{%%4}}} %%5}};
  224. #line gag;
  225. };
  226. #action {^│【走火入魔】 %*% %s│【极限内力】 %d%s │{|ID=char/hp-neili}$} {
  227. #var char[HP][走火入魔] {@str.Trim{%%1}};
  228. };
  229. #action {@re.TableTail{char/hp-neili}} {
  230. char.hp-neili.parse.done;
  231. };
  232. #alias {char.hp-neili.parse.done} {
  233. #local __unused {%%0};
  234. #class char-hp-parse-hp-neili kill;
  235. #class char.GetHP kill;
  236. event.DelayEmit char/hpneili;
  237. };
  238. event.ClassHandleOnce GA {char.hp-neili} {char} {char.hp-neili.parse.done};
  239. #class char-hp-parse-hp-neili close;
  240. };
  241. #nop hpbrief 格式:
  242. #nop 第一行: 经验,潜能,最大内力,当前内力,最大精力,当前精力
  243. #nop 第二行: 最大气血,有效气血,当前气血,最大精神,有效精神,当前精神
  244. #nop 第三行: 真气,真元,食物,饮水,是否战斗,是否busy
  245. #nop #69407,853,992,992,844,1398
  246. #nop #771,776,776,397,397,397
  247. #nop #0,0,30,43
  248. #nop;
  249. #nop 第一行: 经验,潜能,最大内力,当前内力,最大精力,当前精力;
  250. #nop 第二行: 最大气血,有效气血,当前气血,最大精神,有效精神,当前精神;
  251. #action {^{|>|> }#%1,%2,%3,%4,%5,%6$} {
  252. #if { "${char.parsingHP}" == "" } {
  253. #var char[HP][经验显示] {%1};
  254. #var char[HP][经验] {@char.hp.expandBigNumber{%1}};
  255. #var char[HP][潜能显示] {%2};
  256. #var char[HP][潜能] {@char.hp.expandBigNumber{%2}};
  257. #var char[HP][最大内力] {@char.hp.expandBigNumber{%3}};
  258. #var char[HP][当前内力] {@char.hp.expandBigNumber{%4}};
  259. #var char[HP][最大精力] {@char.hp.expandBigNumber{%5}};
  260. #var char[HP][当前精力] {@char.hp.expandBigNumber{%6}};
  261. speedo.Set {经验} {$char[HP][经验]} {true} {10};
  262. speedo.Set {潜能} {$char[HP][潜能]} {true} {10};
  263. speedo.Set {当前内力} {$char[HP][当前内力]} {true} {10};
  264. speedo.Set {当前精力} {$char[HP][当前精力]} {true} {10};
  265. #math char[HP][内力百分比] { $char[HP][当前内力] * 50 / $char[HP][最大内力] };
  266. #math char[HP][精力百分比] { $char[HP][当前精力] * 50 / $char[HP][最大精力] };
  267. #var char.parsingHP {true};
  268. #line gag;
  269. };
  270. #else {
  271. #var char[HP][最大气血] {@char.hp.expandBigNumber{%1}};
  272. #var char[HP][有效气血] {@char.hp.expandBigNumber{%2}};
  273. #var char[HP][当前气血] {@char.hp.expandBigNumber{%3}};
  274. #var char[HP][最大精神] {@char.hp.expandBigNumber{%4}};
  275. #var char[HP][有效精神] {@char.hp.expandBigNumber{%5}};
  276. #var char[HP][当前精神] {@char.hp.expandBigNumber{%6}};
  277. speedo.Set {当前气血} {$char[HP][当前气血]} {true} {10};
  278. speedo.Set {当前精神} {$char[HP][当前精神]} {true} {10};
  279. #math char[HP][精神百分比] { $char[HP][当前精神] * 100 / $char[HP][最大精神] };
  280. #math char[HP][气血百分比] { $char[HP][当前气血] * 100 / $char[HP][最大气血] };
  281. #math char[HP][气血健康度] { $char[HP][有效气血] * 100 / $char[HP][最大气血] };
  282. #math char[HP][精神健康度] { $char[HP][有效精神] * 100 / $char[HP][最大精神] };
  283. #unvar char.parsingHP;
  284. #line gag;
  285. };
  286. } {2.1};
  287. #nop 第三行: 真气,真元,食物,饮水;
  288. #action {^#%1,%2,%3,%4,{0|1},{0|1}$} {
  289. #var char[HP][当前真气] {@char.hp.expandBigNumber{%1}};
  290. #var char[HP][当前真元] {@char.hp.expandBigNumber{%2}};
  291. #var char[HP][当前食物] {@char.hp.expandBigNumber{%3}};
  292. #var char[HP][当前饮水] {@char.hp.expandBigNumber{%4}};
  293. speedo.Set {当前真气} {$char[HP][当前真气]} {true} {10};
  294. speedo.Set {当前食物} {$char[HP][当前食物]} {true} {10};
  295. speedo.Set {当前饮水} {$char[HP][当前饮水]} {true} {10};
  296. #math char[HP][真气百分比] { $char[HP][当前真气] * 100 / $char[HP][最大真气] };
  297. #if { "%5" == "1" } {
  298. char.set-flag 战斗中 true false;
  299. };
  300. #else {
  301. char.set-flag 战斗中 false false;
  302. };
  303. #if { "%6" == "1" } {
  304. char.set-flag 忙 true false;
  305. };
  306. #else {
  307. char.set-flag 忙 false false;
  308. };
  309. event.Emit char/hpbrief;
  310. #unvar char.parsingHP;
  311. char.HPSummarize 自动;
  312. #line gag;
  313. } {2.0};
  314. ///=== {
  315. // ## char.HPSummarize [<总是|自动>]
  316. // 显示〔HP摘要〕提示条。
  317. //
  318. // 注意 HP 摘要提示条并不一定总是会显示,实际上会受到变量 char.HPSummarize.Echo 的控制。
  319. // char.HPSummarize.Echo 可以在 ui-settings.tin 配置中进行修改,它有三种选择: 从不、自动、总是。
  320. // - 从不: 无论如何都不会显示 HP 摘要。
  321. // - 总是: 只要有 GMCP.Status 事件则必然显示。
  322. // - 自动: 只有 #var gmcp-name-map[HP主要] 里的数值发生变化时才会显示。
  323. //
  324. // 可选的参数用来说明要进行何种程度的显示。
  325. // - 总是: 只有 char.HPSummarize.Echo 设置为「总是」时,才会显示。
  326. // - 自动: 不论 char.HPSummarize.Echo 设置为「总是」还是「自动」,都会显示。
  327. // - 如果省略该参数,则不论 char.HPSummarize.Echo 如何设置,都会显示。
  328. //
  329. // HP 摘要被设计成了响应式布局的,它会根据屏幕的宽度,自动隐藏相对次要的数据,确保最终显示不会折行。
  330. //
  331. // 下面是 HP 摘要的全部字段说明:
  332. // - HP摘要: HP摘要是个固定的头部,但整个HP摘要条的颜色会根据 ID 的当前状态有不同的表示,并可通过 char.HPSummarize.Theme 进行定制:
  333. // - 平常(不忙): 显示样式:$char.HPSummarize.Theme[背景][平常]$char.HPSummarize.Theme[前景][平常]〔HP摘要〕<299>
  334. // - 忙(非战斗): 显示样式:$char.HPSummarize.Theme[背景][正忙]$char.HPSummarize.Theme[前景][正忙]〔HP摘要〕<299>
  335. // - 忙(战斗中): 显示样式:$char.HPSummarize.Theme[背景][战忙]$char.HPSummarize.Theme[前景][战忙]〔HP摘要〕<299>
  336. // - 战斗(一般): 显示样式:$char.HPSummarize.Theme[背景][战斗]$char.HPSummarize.Theme[前景][战斗]〔HP摘要〕<299>
  337. // - 战斗(安全): 显示样式:$char.HPSummarize.Theme[背景][战安]$char.HPSummarize.Theme[前景][战安]〔HP摘要〕<299>
  338. // - 战斗(危险): 显示样式:$char.HPSummarize.Theme[背景][战危]$char.HPSummarize.Theme[前景][战危]〔HP摘要〕<299>
  339. // - 战斗(危急): 显示样式:$char.HPSummarize.Theme[背景][危急]$char.HPSummarize.Theme[前景][危急]〔HP摘要〕<299>
  340. // - 其中战斗状态下的「安全」、「危险」、「危急」的判断标准分别为
  341. // - 安全: 气血百分比 > 80% 并且精神百分比 > 95%
  342. // - 危险: 气血百分比 < 30% 或者精神百分比 < 70%
  343. // - 危急: 危险并且被 busy
  344. // - 气血: 由三个数组成,显示样式为:气血百分比(每秒气血变化)/气血健康度
  345. // - 气血百分比: 展示为当前气血占最大气血的比例,注意这里并没有采用有效气血。
  346. // - 每秒气血变化: 正数展示为绿色,负数展示为红色,如果没有变化,则自动隐藏。
  347. // - 气血健康度: 展示为有效气血占最大气血的比例。
  348. // - 内力: 由两个数组成,显示样式为:内力百分比(每秒内力变化)
  349. // - 内力百分比: 以最大内力的两倍为百分之百展示。
  350. // - 每秒内力变化: 正数展示为绿色,负数展示为红色,如果没有变化,则自动隐藏。
  351. // - 回气: 由两个数组成,显示样式为为:气血恢复/气血治疗
  352. // - 气血恢复: 展示为每分钟可以恢复的最大血量的比例(以百分比形式)
  353. // - 气血治疗: 展示为每分钟可以治疗的最大血量的比例(以百分比形式)
  354. // - 回精: 由两个数组成,显示样式为为:精神恢复/精神治疗
  355. // - 精神恢复: 展示为每分钟可以恢复的最大精神的比例(以百分比形式)
  356. // - 精神治疗: 展示为每分钟可以治疗的最大精神的比例(以百分比形式)
  357. // - 精神: 由三个数组成,显示样式为为:精神百分比(每秒精神变化)/精神健康度
  358. // - 精神百分比: 展示为当前精神占最大精神的比例,注意这里并没有采用有效精神。
  359. // - 每秒精神变化: 正数展示为绿色,负数展示为红色,如果没有变化,则自动隐藏。
  360. // - 精神健康度: 展示为有效精神占最大精神的比例。
  361. // - 精力: 由两个数组成,显示样式为:精力百分比(每秒精力变化)
  362. // - 精力百分比: 以最大精力的两倍为百分之百展示。
  363. // - 每秒精力变化: 正数展示为绿色,负数展示为红色,如果没有变化,则自动隐藏。
  364. // - 食水: 由四个数组成,显示样式为:当前食物/当前饮水(每分钟食物变化/每分钟饮水变化)
  365. // - 战斗标志: 如果角色处于战斗状态,则显示「战」。
  366. // - 气势: 如果在战斗中捕获到气势数据,则会在「战」标志后,展示当前气势。
  367. // - 安危标志: 战斗状态下,会自动根据 ID 状态,显示「安」或「危」标志。
  368. // - 忙标志: 如果角色处于忙状态,则显示「忙」。
  369. // };
  370. #alias {char.HPSummarize} {
  371. #local level {@default{%1;强制}};
  372. #if { "$level" != "强制" } {
  373. #if { @option.IsEnable{HPSummarize.Pause} } {
  374. #local time {@option.Get{HPSummarize.PauseTime}};
  375. #if { $time > @time.Now{} } {
  376. #return;
  377. };
  378. #elseif { $time > 0 } {
  379. okLog HP 摘要抑制时间已结束,现已重新开启。;
  380. option.Toggle HPSummarize.Pause;
  381. option.Set HPSummarize.PauseTime {0};
  382. };
  383. };
  384. #if { "$char.HPSummarize.Echo" == "从不" } {
  385. #return;
  386. };
  387. #if { "$char.HPSummarize.Echo" == "自动" && "$level" != "自动" } {
  388. #return;
  389. };
  390. };
  391. #local head {};
  392. #local tail {};
  393. #local safety {};
  394. #local labelColor {};
  395. #local width {@prompt.ScreenWidth{}};
  396. #if { $char[HP][气血百分比] < 30 || $char[HP][精神百分比] < 70 } {
  397. #local safety {危险};
  398. };
  399. #elseif { $char[HP][气血百分比] > 95 && $char[HP][精神百分比] > 98 } {
  400. #local safety {康泰};
  401. };
  402. #elseif { $char[HP][气血百分比] > 80 && $char[HP][精神百分比] > 95 } {
  403. #local safety {安全};
  404. };
  405. #if { "$char[HP][战斗中]" == "true" } {
  406. #local labelColor {<188>};
  407. };
  408. #local theme {@default{{$char.HPSummarize.Theme};{
  409. {前景} { {平常}{<168>} {战斗}{<118>} {战安}{<128>} {战危}{<118>} {战忙}{<138>} {危急}{<158>} {正忙}{<138>} }
  410. {背景} { {平常}{<099>} {战斗}{<B00A>} {战安}{<B040>} {战危}{<B600>} {战忙}{<B808>} {危急}{<BA00>} {正忙}{<B330>} }
  411. }}};
  412. #local char.hp.fight.target {};
  413. #if { @existsFunction{fight.target.Brief} } {
  414. #local char.hp.fight.target {@fight.target.Brief{}};
  415. };
  416. #switch {"$char[HP][战斗中]/$char[HP][忙]/$safety"} {
  417. #case {"false/false/%*"} {
  418. #local head {$theme[背景][平常]$theme[前景][平常]};
  419. #local tail {};
  420. };
  421. #case {"false/true/%*"} {
  422. #local head {$theme[背景][正忙]$theme[前景][正忙]};
  423. #local tail { $theme[前景][正忙]忙<298>};
  424. };
  425. #case {"true/false/"} {
  426. #local head {$theme[背景][战斗]$theme[前景][战斗]};
  427. #local tail { $theme[前景][战斗]战($char[HP][气势]) $char.hp.fight.target};
  428. };
  429. #case {"true/true/"} {
  430. #local head {$theme[背景][战忙]$theme[前景][战忙]};
  431. #local tail { $theme[前景][战斗]战($char[HP][气势]) $theme[前景][战忙]忙 $char.hp.fight.target<298>};
  432. };
  433. #case {"true/false/康泰"} {
  434. #local head {$theme[背景][战安]$theme[前景][战安]};
  435. #local tail { $theme[前景][战安]战($char[HP][气势]) $theme[前景][战安]泰 $char.hp.fight.target<298>};
  436. };
  437. #case {"true/true/康泰"} {
  438. #local head {$theme[背景][战忙]$theme[前景][战忙]};
  439. #local tail { $theme[前景][战安]战($char[HP][气势]) $theme[前景][战安]泰 $theme[前景][战忙]忙 $char.hp.fight.target<298>};
  440. };
  441. #case {"true/false/安全"} {
  442. #local head {$theme[背景][战安]$theme[前景][战安]};
  443. #local tail { $theme[前景][战斗]战($char[HP][气势]) $theme[前景][战安]安 $char.hp.fight.target<298>};
  444. };
  445. #case {"true/true/安全"} {
  446. #local head {$theme[背景][战忙]$theme[前景][战忙]};
  447. #local tail { $theme[前景][战斗]战($char[HP][气势]) $theme[前景][战安]安 $theme[前景][战忙]忙 $char.hp.fight.target<298>};
  448. };
  449. #case {"true/false/危险"} {
  450. #local head {$theme[背景][战危]$theme[前景][战危]};
  451. #local tail { $theme[前景][战斗]战($char[HP][气势]) $theme[前景][战危]危 $char.hp.fight.target<298>};
  452. };
  453. #case {"true/true/危险"} {
  454. #local head {$theme[背景][危急]$theme[前景][危急]};
  455. #local tail { $theme[前景][战斗]战($char[HP][气势]) $theme[前景][战危]危 $theme[前景][战忙]忙 $char.hp.fight.target<298>};
  456. };
  457. };
  458. #local 每秒气血变化 {@speedo.GetSpeed{当前气血}};
  459. #if { ${每秒气血变化} > 0 } {
  460. #local 每秒气血变化 {(<128>${每秒气血变化}<298>)};
  461. };
  462. #elseif { ${每秒气血变化} < 0 } {
  463. #local 每秒气血变化 {(<118>${每秒气血变化}<298>)};
  464. };
  465. #else {
  466. #local 每秒气血变化 {};
  467. };
  468. #local label {气血};
  469. #if { @char.MustEat{} || @char.MustDrink{} } {
  470. #local label {<118>气血};
  471. };
  472. #local 气血 {};
  473. #if { !@char.InTuna{} || $width >= 70 } {
  474. #format 气血 {$labelColor$label<298>: %s%s/%s}
  475. {@char.hp.colorit{$char[HP][气血百分比]}} {${每秒气血变化}}
  476. {@char.hp.colorit{$char[HP][气血健康度]}};
  477. };
  478. #local 内力 {};
  479. #if { @char.InCombat{} || $width >= 80 || ($width >= 50 && !@char.InTuna{}) } {
  480. #local 每秒内力变化 {@speedo.GetSpeed{当前内力}};
  481. #if { ${每秒内力变化} > 0 } {
  482. #local 每秒内力变化 {(<128>${每秒内力变化}<298>)};
  483. };
  484. #elseif { ${每秒内力变化} < 0 } {
  485. #local 每秒内力变化 {(<118>${每秒内力变化}<298>)};
  486. };
  487. #else {
  488. #local 每秒内力变化 {};
  489. };
  490. #format 内力 { $labelColor内力: %s%s} {@char.hp.colorit{$char[HP][内力百分比]}} {${每秒内力变化}};
  491. };
  492. #local 精神 {};
  493. #if { @char.InCombat{} || @char.InTuna{} || $width >= 80 || $char[HP][精神百分比] < 70 || $char[HP][精神健康度] < 100 } {
  494. #local 每秒精神变化 {@speedo.GetSpeed{当前精神}};
  495. #if { ${每秒精神变化} > 0 } {
  496. #local 每秒精神变化 {(<128>${每秒精神变化}<298>)};
  497. };
  498. #elseif { ${每秒精神变化} < 0 } {
  499. #local 每秒精神变化 {(<118>${每秒精神变化}<298>)};
  500. };
  501. #else {
  502. #local 每秒精神变化 {};
  503. };
  504. #local label {精神};
  505. #if { @char.MustEat{} || @char.MustDrink{} } {
  506. #local label {<118>精神};
  507. };
  508. #format 精神 { $labelColor$label<298>: %s%s/%s}
  509. {@char.hp.colorit{$char[HP][精神百分比]}} {${每秒精神变化}}
  510. {@char.hp.colorit{$char[HP][精神健康度]}};
  511. };
  512. #local 回气 {};
  513. #if { (@char.InCombat{} || $width >= 80 && !@char.IsBusy{}) && ($char[HP][气血百分比] < 100 || $char[HP][气血健康度] < 100) } {
  514. #nop 气血恢复的数值展示为每分钟可以恢复的最大血量的倍数(以百分比形式);
  515. #local {气血恢复} {@math.Int{@math.Eval{$char[STATUS][气血恢复] * 100 * 60 / $char[HP][最大气血]}}};
  516. #nop 气血治疗的数值展示为每分钟可以治疗的最大血量的倍数(以百分比形式);
  517. #local {气血治疗} {@math.Int{@math.Eval{$char[STATUS][气血治疗] * 100 * 60 / $char[HP][最大气血]}}};
  518. #local label {回气};
  519. #if { !@char.IsBusy{} && !@char.MustEat{} && !@char.MustDrink{} && ($char[HP][气血百分比] < 100 || $char[HP][气血健康度] < 100) } {
  520. #local label {<128><588>回气\e[25m};
  521. };
  522. #format {回气} { $labelColor$label: %s/%s} {@char.hp.colorit{${气血恢复}}} {@char.hp.colorit{${气血治疗}}};
  523. };
  524. #local 回精 {};
  525. #if { (@char.InCombat{} || $width >= 80 && !@char.IsBusy{}) && ($char[HP][精神百分比] < 100 || $char[HP][精神健康度] < 100) } {
  526. #nop 精神恢复的数值展示为每分钟可以恢复的最大精神的倍数(以百分比形式);
  527. #local {精神恢复} {@math.Int{@math.Eval{$char[STATUS][精神恢复] * 100 * 60 / $char[HP][最大精神]}}};
  528. #nop 精神治疗的数值展示为每分钟可以治疗的最大精神的倍数(以百分比形式);
  529. #local {精神治疗} {@math.Int{@math.Eval{$char[STATUS][精神治疗] * 100 * 60 / $char[HP][最大精神]}}};
  530. #local label {回精};
  531. #if { !@char.IsBusy{} && !@char.MustEat{} && !@char.MustDrink{} && ($char[HP][精神百分比] < 100 || $char[HP][精神健康度] < 100) } {
  532. #local label {<128><588>回精\e[25m};
  533. };
  534. #format {回精} { $labelColor$label: %s/%s} {@char.hp.colorit{${精神恢复}}} {@char.hp.colorit{${精神治疗}}};
  535. };
  536. #local 精力 {};
  537. #if { @char.InTuna{} || $width >= 120 || $char[HP][精力百分比] < 50 } {
  538. #local 每秒精力变化 {@speedo.GetSpeed{当前精力}};
  539. #if { ${每秒精力变化} > 0 } {
  540. #local 每秒精力变化 {(<128>${每秒精力变化}<298>)};
  541. };
  542. #elseif { ${每秒精力变化} < 0 } {
  543. #local 每秒精力变化 {(<118>${每秒精力变化}<298>)};
  544. };
  545. #else {
  546. #local 每秒精力变化 {};
  547. };
  548. #format 精力 { $labelColor精力: %s%s} {@char.hp.colorit{$char[HP][精力百分比]}} {${每秒精力变化}};
  549. };
  550. #local 食水 {};
  551. #if { $width >= 110 } {
  552. #local label {食水};
  553. #if { @char.MustEat{} || @char.MustDrink{} } {
  554. #local label {<118><588>食水\e[25m<288>};
  555. };
  556. #if { @char.InCombat{} } {
  557. #format {食水} { $label: %s/%s} {$char[HP][当前食物]} {$char[HP][当前饮水]};
  558. };
  559. #else {
  560. #format {食水} { $label: %s/%s(%s/%s)}
  561. {$char[HP][当前食物]} {$char[HP][当前饮水]}
  562. {@speedo.GetSpeed{当前食物;60}} {@speedo.GetSpeed{当前饮水;60}};
  563. };
  564. };
  565. #local summarize {<099>$head〔HP摘要〕<298>${气血}${内力}${回气}${精神}${回精}${精力}${食水}$tail<099>};
  566. #showme $summarize;
  567. };
  568. option.Define {HPSummarize.Pause} {Bool} {是否暂停 HP 摘要显示} {false};
  569. option.Define {HPSummarize.PauseTime} {Time} {暂停显示 HP 摘要截止时间} {0};
  570. event.Handle {option/changed} {opt/HPSummarize.Pause/pkuxkx} {$MODULE} {char.HPSummarize.onTogglePause};
  571. #alias {char.HPSummarize.onTogglePause} {
  572. #if { @option.IsEnable{HPSummarize.Pause} } {
  573. #local time {@math.Eval{@time.Now{} + 86400 * 7}};
  574. warnLog 你已选择临时抑制 HP 摘要。在 @time.Format{$time} 之前,你将不会再看到 HP 摘要。;
  575. warnLog HP 摘要是 PaoTin++ 非常有特色的功能,几乎每个用户都喜欢它。;
  576. warnLog 希望那时的你能够以更加开放的心态来迎接它。;
  577. option.Set HPSummarize.PauseTime {$time};
  578. };
  579. #else {
  580. okLog HP 摘要是 PaoTin++ 非常有特色的功能,几乎每个用户都喜欢它。欢迎体验。;
  581. option.Set HPSummarize.PauseTime {0};
  582. };
  583. };
  584. #func {char.hp.expandBigNumber} {
  585. #local number {%1};
  586. #replace number {K} {*1000};
  587. #replace number {M} {*1000000};
  588. #math number {$number};
  589. #return $number;
  590. };
  591. #func {char.hp.colorit} {
  592. #local percent {@math.Int{@defaultNum{%1;0}}};
  593. #local color {@default{{$char.HPSummarize.Theme[色卡]};{<218>;15;<118>;30;<238>;60;<138>;90;<128>;101;<168>}}};
  594. #return {@util.Grade{$percent;$color}$percent%<298>};
  595. };
  596. #alias {char.GetHP} {
  597. #class char.GetHP open;
  598. #nop ╭───个人状态────────────┬───────────────────╮;
  599. #action {@re.TableHeader{个人状态}} {
  600. #class char.GetHP kill;
  601. char.hp.parse.hp;
  602. };
  603. #nop ╭───内功信息────────────────────────────────╮;
  604. #action {@re.TableHeader{内功信息}} {
  605. #class char.GetHP kill;
  606. char.hp.parse.hp-neili;
  607. };
  608. #action {~^%c【状态】%*\e[2;37;0m{?:|、(.*)\x1b\[2;37;0m}%s%c$} {
  609. #var char[STATUS][健康状态] {%%2};
  610. #var char[STATUS][持续效果] {%%3};
  611. event.DelayEmit char/status;
  612. #class char.GetHP kill;
  613. } {4};
  614. #action {^你用HP太频繁了,请尽量使用hpbrief命令,节约系统资源,谢谢。$} {
  615. #class char.GetHP kill;
  616. };
  617. #class char.GetHP close;
  618. xtt.Send {hp %0};
  619. };
  620. #alias {char.GetHP2} {
  621. #class char.GetHP2 open;
  622. #gag {^你关闭了GMCP:Status频道。$};
  623. #gag {^你打开了GMCP:Status频道。$};
  624. #class char.GetHP2 close;
  625. tune gmcp status off;
  626. hpbrief;
  627. tune gmcp status on;
  628. sync.Wait {#class char.GetHP2 kill};
  629. };
  630. #alias {hp} {
  631. #if { "%0" == "{|-neili|-status}" } {
  632. char.GetHP %0;
  633. };
  634. #else {
  635. xtt.Send {hp %0};
  636. };
  637. };
  638. ///=== {
  639. // ## char.MarkBusy <布尔值>
  640. // 设置角色的忙状态。
  641. // };
  642. #alias {char.MarkBusy} {char.set-flag 忙 true};
  643. ///=== {
  644. // ## char.UnmarkBusy <布尔值>
  645. // 取消角色的忙状态。
  646. // };
  647. #alias {char.UnmarkBusy} {char.set-flag 忙 false};
  648. ///=== {
  649. // ## char.MarkFight <布尔值>
  650. // 设置角色的战斗状态。
  651. // };
  652. #alias {char.MarkFight} {char.set-flag 战斗中 true};
  653. ///=== {
  654. // ## char.UnmarkFight <布尔值>
  655. // 取消角色的战斗状态。
  656. // };
  657. #alias {char.UnmarkFight} {char.set-flag 战斗中 false};
  658. #alias {char.set-flag} {
  659. #local flag {%1};
  660. #local value {%2};
  661. #local summ {@default{%3;true}};
  662. #if { "$char[HP][$flag]" == "$value" } {
  663. #return;
  664. };
  665. #var char[HP][$flag] {$value};
  666. #switch {"$flag/$value"} {
  667. #case {"忙/true"} {event.Emit char/busy};
  668. #case {"忙/false"} {event.Emit char/nobusy};
  669. #case {"战斗中/true"} {event.Emit char/fight};
  670. #case {"战斗中/false"} {event.Emit char/nofight};
  671. };
  672. event.Emit char/hpbrief;
  673. #if { "$summ" == "true" } {
  674. char.HPSummarize 自动;
  675. };
  676. };
  677. ///=== {
  678. // #@ char.IsBusy
  679. // 如果角色正忙,则返回真,否则返回假。无参数。
  680. // };
  681. #func {char.IsBusy} {
  682. #if { "$char[HP][忙]" == "true" } {
  683. #return 1;
  684. };
  685. #else {
  686. #return 0;
  687. };
  688. };
  689. ///=== {
  690. // #@ char.IsIdle
  691. // 如果角色不忙,则返回真,否则返回假。无参数。
  692. // };
  693. #func {char.IsIdle} {
  694. #if { "$char[HP][忙]" == "false" } {
  695. #return 1;
  696. };
  697. #else {
  698. #return 0;
  699. };
  700. };
  701. ///=== {
  702. // #@ char.hp.GetPercent <属性名称>
  703. // 返回指定属性的当前百分比。
  704. // 参数说明:
  705. // - 属性名称: 支持 食物、饮水、气血、精神、内力、精力、真气。
  706. // 百分比由 PaoTin++ 根据 GMCP.Status 推送的当前值与最大值计算,是 PaoTin++ 的便利层。
  707. // 参数非法或数据未就绪时返回 -1。
  708. // };
  709. #func {char.hp.GetPercent} {
  710. #local name {%1};
  711. #if { "$name" != "{食物|饮水|气血|精神|内力|精力|真气}" } {
  712. xtt.Usage char.hp.GetPercent;
  713. #return -1;
  714. };
  715. #local percent {$char[HP][$name百分比]};
  716. #if { "$percent" == "" } {
  717. #return -1;
  718. };
  719. #return $percent;
  720. };
  721. ///=== {
  722. // #@ char.MustEat
  723. // 如果角色已经饿到极点(食物百分比 ≤ 0),则返回真,否则返回假。
  724. // 百分比数据未就绪时,按当前食物值保守估计。
  725. // };
  726. #func {char.MustEat} {
  727. #if { @char.hp.GetPercent{食物} <= 0 } {
  728. #return 1;
  729. };
  730. #else {
  731. #return 0;
  732. };
  733. };
  734. ///=== {
  735. // #@ char.MustDrink
  736. // 如果角色已经渴到极点(饮水百分比 ≤ 0),则返回真,否则返回假。
  737. // 百分比数据未就绪时,按当前饮水值保守估计。
  738. // };
  739. #func {char.MustDrink} {
  740. #if { @char.hp.GetPercent{饮水} <= 0 } {
  741. #return 1;
  742. };
  743. #else {
  744. #return 0;
  745. };
  746. };
  747. ///=== {
  748. // #@ char.NeedEat
  749. // 如果角色饿了(食物百分比 ≤ 50),则返回真,否则返回假。
  750. // 百分比数据未就绪时,按当前食物值保守估计。
  751. // };
  752. #func {char.NeedEat} {
  753. #if { @char.hp.GetPercent{食物} <= 50 } {
  754. #return 1;
  755. };
  756. #else {
  757. #return 0;
  758. };
  759. };
  760. ///=== {
  761. // #@ char.NeedDrink
  762. // 如果角色渴了(饮水百分比 ≤ 50),则返回真,否则返回假。
  763. // 百分比数据未就绪时,按当前饮水值保守估计。
  764. // };
  765. #func {char.NeedDrink} {
  766. #if { @char.hp.GetPercent{饮水} <= 50 } {
  767. #return 1;
  768. };
  769. #else {
  770. #return 0;
  771. };
  772. };
  773. ///=== {
  774. // #@ char.CanEatMore
  775. // 如果角色还能继续进食(食物百分比 ≤ 95),则返回真,否则返回假。
  776. // 百分比数据未就绪时,按当前食物值保守估计。
  777. // };
  778. #func {char.CanEatMore} {
  779. #if { @char.hp.GetPercent{食物} <= 95 } {
  780. #return 1;
  781. };
  782. #else {
  783. #return 0;
  784. };
  785. };
  786. ///=== {
  787. // #@ char.CanDrinkMore
  788. // 如果角色还能继续饮水(饮水百分比 ≤ 95),则返回真,否则返回假。
  789. // 百分比数据未就绪时,按当前饮水值保守估计。
  790. // };
  791. #func {char.CanDrinkMore} {
  792. #if { @char.hp.GetPercent{饮水} <= 95 } {
  793. #return 1;
  794. };
  795. #else {
  796. #return 0;
  797. };
  798. };
  799. ///=== {
  800. // #@ char.InDazuo
  801. // 如果角色正在打坐,则返回真,否则返回假。无参数。
  802. // };
  803. #func {char.InDazuo} {
  804. #if { @char.IsBusy{} && "@ga.LastCmd{}" == "{exercise|dazuo} %*" } {
  805. #return 1;
  806. };
  807. #else {
  808. #return 0;
  809. };
  810. };
  811. ///=== {
  812. // #@ char.InTuna
  813. // 如果角色正在吐纳,则返回真,否则返回假。无参数。
  814. // };
  815. #func {char.InTuna} {
  816. #if { @char.IsBusy{} && "@ga.LastCmd{}" == "{respirate|tuna} %*" } {
  817. #return 1;
  818. };
  819. #else {
  820. #return 0;
  821. };
  822. };
  823. ///=== {
  824. // #@ char.InCombat
  825. // 如果角色正处于战斗中,则返回真,否则返回假。无参数。
  826. // };
  827. #func {char.InCombat} {
  828. #if { "$char[HP][战斗中]" == "true" } {
  829. #return 1;
  830. };
  831. #else {
  832. #return 0;
  833. };
  834. };
  835. ///=== {
  836. // #@ char.CanDazuo
  837. // 如果角色最大内力点数没有达到最大上限,则返回真,否则返回假。无参数。
  838. // };
  839. #func {char.CanDazuo} {
  840. #local limit {$char[HP][内力上限]};
  841. #if { $limit == 1 } {
  842. warnLog 无法获得角色内力上限,疑似数据未更新。;
  843. #return 0;
  844. };
  845. #if { $char[HP][最大内力] < $limit } {
  846. #return 1;
  847. };
  848. #return 0;
  849. };
  850. ///=== {
  851. // #@ char.CanTuna
  852. // 如果角色最大精力点数没有达到最大上限,则返回真,否则返回假。无参数。
  853. // };
  854. #func {char.CanTuna} {
  855. #local limit {$char[HP][精力上限]};
  856. #if { $limit == 1 } {
  857. warnLog 无法获得角色精力上限,疑似数据未更新。;
  858. #return 0;
  859. };
  860. #if { $char[HP][最大精力] < $limit } {
  861. #return 1;
  862. };
  863. #return 0;
  864. };
  865. ///=== {
  866. // #@ char.CanTichun
  867. // 如果角色拥有真气,并且真气不满,则返回真,否则返回假。无参数。
  868. // };
  869. #func {char.CanTichun} {
  870. #if { $char[HP][最大真气] > 1 && $char[HP][真气百分比] < 100 } {
  871. #return 1;
  872. };
  873. #return 0;
  874. };
  875. ///=== {
  876. // #@ char.IsPoisoned
  877. // 如果角色中毒了,则返回真,否则返回假。无参数。
  878. // };
  879. #func {char.IsPoisoned} {
  880. #if { "$char[HP][状态]" == "{.*毒.*|.*火焰刀.*}" || "$char[HP][毒]" !== "" } {
  881. #return 1;
  882. };
  883. #return 0;
  884. };
  885. ///=== {
  886. // #@ char.IsPoisonActive
  887. // 如果角色中毒了,且没有被压制,则返回真,否则返回假。无参数。
  888. // };
  889. #func {char.IsPoisonActive} {
  890. #if { @char.IsPoisoned{} && ! @sset.Contains{{$char[HP][状态]};毒性压制} } {
  891. #return 1;
  892. };
  893. #return 0;
  894. };
  895. #action {^虽然藏而不发,你仍在不断积蓄攻势。(气势:%d%)$E} {char.hp.set-qishi %1};
  896. #action {^你在攻击中不断积蓄攻势。(气势:%d%)$E} {char.hp.set-qishi %1};
  897. #action {^你蓄足攻势,在战斗中发出绝招「%*」。(气势:%d%)$E} {char.hp.set-qishi %2};
  898. #action {^你蓄势不足,目前只积累了%d%气势。$E} {char.hp.set-qishi %1};
  899. #action {^出招太猛,招式用老,你的气势降低了。(气势:%d%)$E} {char.hp.set-qishi %1};
  900. #action {^你暂缓了攻势。(气势:%d%)$E} {char.hp.set-qishi %1};
  901. #action {^你运用了「%*」,躲闪成功之后信心倍增。(气势:%d%)$E} {char.hp.set-qishi %2};
  902. #action {^你逐步从之前战斗的紧张气氛中平缓下来。(气势:%d%)$E} {char.hp.check-fight {%1}};
  903. #action {^经过一段时间后,你终于完全从紧张地战斗氛围中解脱出来。$E} {char.hp.check-fight {0}};
  904. #alias {char.hp.set-qishi} {
  905. #local qishi {%1};
  906. #var char[HP][气势] {$qishi};
  907. char.set-flag 战斗中 true;
  908. };
  909. #alias {char.hp.check-fight} {
  910. #local qishi {%1};
  911. #var char[HP][气势] {$qishi};
  912. #delay char.hp.check-fight {
  913. #if { @char.InCombat{} } {
  914. char.GetHP2;
  915. };
  916. } 3;
  917. };
  918. ///=== {
  919. // ## char.UncolorEnemy
  920. // 擦掉敌人的血量告警提示的颜色,防止麻痹眼睛。
  921. // };
  922. #alias {char.UncolorEnemy} {
  923. #class char.UncolorEnemy open;
  924. #nop 气血上限组;
  925. #nop 100; #sub {^( %+2..5u看起来气血充盈,并没有受伤。} {( %%1气血充盈};
  926. #nop 95+; #sub {^( %+2..5u似乎受了点轻伤,不过光从外表看不大出来。} {( %%1不似受伤};
  927. #nop 90+; #sub {^( %+2..5u看起来可能受了点轻伤。} {( %%1略有轻伤};
  928. #nop 80+; #sub {^( %+2..5u受了几处伤,不过似乎并不碍事。} {( %%1不大碍事};
  929. #nop 60+; #sub {^( %+2..5u受伤不轻,看起来状况并不太好。} {( %%1受伤不轻};
  930. #nop 40+; #sub {^( %+2..5u气息粗重,动作开始散乱,看来所受的伤著实不轻。} {( %%1着实不轻};
  931. #nop 30+; #sub {^( %+2..5u已经伤痕累累,正在勉力支撑著不倒下去。} {( %%1伤痕累累};
  932. #nop 20+; #sub {^( %+2..5u受了相当重的伤,只怕会有生命危险。} {( %%1生命危险};
  933. #nop 10+; #sub {^( %+2..5u伤重之下已经难以支撑,眼看就要倒在地上。} {( %%1伤重难支};
  934. #nop 5+; #sub {^( %+2..5u受伤过重,已经奄奄一息,命在旦夕了。} {( %%1奄奄一息};
  935. #nop 5-; #sub {^( %+2..5u受伤过重,已经有如风中残烛,随时都可能断气。} {( %%1随时断气};
  936. #nop 气血组;
  937. #nop 100; #sub {^( %+2..5u看起来充满活力,一点也不累。} {( %%1充满活力};
  938. #nop 95+; #sub {^( %+2..5u似乎有些疲惫,但是仍然十分有活力。} {( %%1有些疲惫};
  939. #nop 90+; #sub {^( %+2..5u看起来可能有些累了。} {( %%1有些累了};
  940. #nop 80+; #sub {^( %+2..5u动作似乎开始有点不太灵光,但是仍然有条不紊。} {( %%1不太灵光};
  941. #nop 60+; #sub {^( %+2..5u气喘嘘嘘,看起来状况并不太好。} {( %%1气喘吁吁};
  942. #nop 40+; #sub {^( %+2..5u似乎十分疲惫,看来需要好好休息了。} {( %%1十分疲惫};
  943. #nop 30+; #sub {^( %+2..5u已经一副头重脚轻的模样,正在勉力支撑著不倒下去。} {( %%1头重脚轻};
  944. #nop 20+; #sub {^( %+2..5u看起来已经力不从心了。} {( %%1力不从心};
  945. #nop 10+; #sub {^( %+2..5u摇头晃脑、歪歪斜斜地站都站不稳,眼看就要倒在地上。} {( %%1摇头晃脑};
  946. #nop 10-; #sub {^( %+2..5u已经陷入半昏迷状态,随时都可能摔倒晕去。} {( %%1随时晕倒};
  947. #class char.UncolorEnemy close;
  948. };
  949. #action {^你的内力增加了!!$E} {
  950. #local name {$char[Skills][基本内功][jifa-to]};
  951. #local limit {$char[Skills][$name][neili-limit]};
  952. #if { "$limit" != "" } {
  953. #local limit { / $limit};
  954. };
  955. #else {
  956. hp -neili;
  957. };
  958. fullskLog <139>$name<299> 的内力提升!当前进度: @math.Eval{$char[HP][最大内力] + 1}$limit;
  959. } {9.1};
  960. #action {^你的精力上限增加了!!$E} {
  961. #local limit {@math.Eval{@char.SkillJifaLevel{基本内功} * 10}};
  962. fullskLog <139>你的精力上限增加了!!<299> 当前进度: @math.Eval{$char[HP][最大精力] + 1} / $limit;
  963. } {9.1};