gmcp.tin 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分
  4. ===========
  5. PaoTin++ © 2020~2022 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  6. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  7. ===========
  8. */
  9. #var basic_char_gmcp[META] {
  10. {NAME} {GMCP角色信息}
  11. {DESC} {解析 GMCP.Status 事件提供的角色信息}
  12. {AUTHOR} {担子炮}
  13. {NOTE} {本文件属于 PaoTin++ 的一部分}
  14. };
  15. load-lib event;
  16. load-lib speedo;
  17. event.Define {char/busy} {无参} {$MODULE} {角色被 busy 了};
  18. event.Define {char/nobusy} {无参} {$MODULE} {角色解除 busy 了};
  19. event.Define {char/fight} {无参} {$MODULE} {角色战斗开始};
  20. event.Define {char/nofight} {无参} {$MODULE} {角色脱离战斗};
  21. #function {basic_char_gmcp.Init} {
  22. event.Handle {GMCP.Status} {char/gmcp} {basic/char/gmcp} {char.gmcp.status};
  23. };
  24. #var {gmcp-name-map} {
  25. {HP} {
  26. {经验} {经验} {combat_exp} {经验}
  27. {潜能} {潜能} {potential} {潜能}
  28. {最大内力} {最大内力} {max_neili} {最大内力}
  29. {内力} {当前内力} {neili} {当前内力}
  30. {最大精力} {最大精力} {max_jingli} {最大精力}
  31. {精力} {当前精力} {jingli} {当前精力}
  32. {最大气血} {最大气血} {max_qi} {最大气血}
  33. {有效气血} {有效气血} {eff_qi} {有效气血}
  34. {气血} {当前气血} {qi} {当前气血}
  35. {最大精神} {最大精神} {max_jing} {最大精神}
  36. {有效精神} {有效精神} {eff_jing} {有效精神}
  37. {精神} {当前精神} {jing} {当前精神}
  38. {真气} {当前真气} {vigour/qi} {当前真气}
  39. {真元} {真元} {vigour/yuan} {真元}
  40. {食物} {食物} {food} {食物}
  41. {饮水} {饮水} {water} {饮水}
  42. {忙} {忙} {is_busy} {忙}
  43. {战意} {战意} {fighter_spirit} {战意}
  44. {战斗中} {战斗中} {is_fighting} {战斗中}
  45. }
  46. {档案} {
  47. {头衔} {头衔} {title} {头衔}
  48. {门派} {门派} {family/family_name} {门派}
  49. {级别} {人物等级} {level} {人物等级}
  50. {id} {账号}
  51. {name} {大名}
  52. }
  53. {天赋} {
  54. {容貌} {容貌} {per} {容貌}
  55. {膂力} {膂力} {str} {膂力}
  56. {悟性} {悟性} {int} {悟性}
  57. {根骨} {根骨} {con} {根骨}
  58. {身法} {身法} {dex} {身法}
  59. }
  60. };
  61. #alias {char.gmcp.status} {
  62. #local busy {};
  63. #local fight {};
  64. #local hasHP {};
  65. #local key {};
  66. #foreach {*gGMCP[Status][]} {key} {
  67. #local value {$gGMCP[Status][$key]};
  68. #local name {$gmcp-name-map[HP][$key]};
  69. #if { "$name" != "" } {
  70. #local hasHP {true};
  71. #if { "$name" == "{当前.*|经验|潜能|食物|饮水}" } {
  72. speedo.Set {$name} {$value} {true} {10};
  73. };
  74. #if { "$name" == "当前%*" } {
  75. #local bakName {$name};
  76. #replace bakName {当前} {上次};
  77. #var char[HP][$bakName] {$char[HP][$name]};
  78. #var char[HP][$name] {$value};
  79. #local maxName {$name};
  80. #replace maxName {当前} {最大};
  81. #if { "$gGMCP[Status][$maxName]" != "" } {
  82. #var char[HP][$maxName] {$gGMCP[Status][$maxName]};
  83. };
  84. #local pctName {$name};
  85. #replace pctName {当前%*} {&1百分比};
  86. #if { "$name" == "当前{内力|精力}" } {
  87. #math char[HP][$pctName] { $char[HP][$name] * 50 / $char[HP][$maxName] };
  88. };
  89. #else {
  90. #math char[HP][$pctName] { $char[HP][$name] * 100 / $char[HP][$maxName] };
  91. };
  92. #continue;
  93. };
  94. #else {
  95. #if { "$name" == "忙" } {
  96. #local busy {$value};
  97. };
  98. #elseif { "$name" == "战斗中" } {
  99. #local fight {$value};
  100. };
  101. #var char[HP][$name] {$value};
  102. #continue;
  103. };
  104. };
  105. #local name {$gmcp-name-map[档案][$key]};
  106. #if { "$name" != "" } {
  107. #var char[档案][$name] {$value};
  108. #continue;
  109. };
  110. #local name {$gmcp-name-map[天赋][$key]};
  111. #if { "$name" != "" } {
  112. #var char[档案][天赋][$name] {$value};
  113. #continue;
  114. };
  115. warnLog 未能识别的 GMCP 状态信息 $key => $value;
  116. };
  117. #if { "$hasHP" == "true" } {
  118. event.Emit char/hpbrief;
  119. #delay {gmcp.HPSummarize} {char.HPSummarize} {0};
  120. };
  121. #if { "$busy" == "true" } {event.Emit char/busy};
  122. #elseif { "$busy" == "false" } {event.Emit char/nobusy};
  123. #if { "$fight" == "true" } {event.Emit char/fight};
  124. #elseif { "$fight" == "false" } {event.Emit char/nofight};
  125. };