| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- #nop vim: set filetype=tt:;
- /*
- 本文件属于 PaoTin++ 的一部分
- ===========
- PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
- 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
- ===========
- */
- #var basic_char_gmcp[META] {
- {NAME} {GMCP角色信息}
- {DESC} {解析 GMCP.Status 事件提供的角色信息}
- {AUTHOR} {担子炮}
- {NOTE} {本文件属于 PaoTin++ 的一部分}
- };
- load-lib event;
- load-lib speedo;
- event.Define {char/busy} {无参} {$MODULE} {角色被 busy 了};
- event.Define {char/nobusy} {无参} {$MODULE} {角色解除 busy 了};
- event.Define {char/fight} {无参} {$MODULE} {角色战斗开始};
- event.Define {char/nofight} {无参} {$MODULE} {角色脱离战斗};
- #func {basic_char_gmcp.Init} {
- event.Handle {GMCP.Status} {char/gmcp} {basic/char/gmcp} {char.gmcp.status};
- };
- #var {gmcp-name-map} {
- {HP主要} {
- {最大内力} {最大内力} {max_neili} {最大内力}
- {内力} {当前内力} {neili} {当前内力}
- {最大精力} {最大精力} {max_jingli} {最大精力}
- {精力} {当前精力} {jingli} {当前精力}
- {最大气血} {最大气血} {max_qi} {最大气血}
- {有效气血} {有效气血} {eff_qi} {有效气血}
- {气血} {当前气血} {qi} {当前气血}
- {最大精神} {最大精神} {max_jing} {最大精神}
- {有效精神} {有效精神} {eff_jing} {有效精神}
- {精神} {当前精神} {jing} {当前精神}
- {真气} {当前真气} {vigour/qi} {当前真气}
- {忙} {忙} {is_busy} {忙}
- {战斗中} {战斗中} {is_fighting} {战斗中}
- }
- {HP次要} {
- {经验} {经验} {combat_exp} {经验}
- {潜能} {潜能} {potential} {潜能}
- {真元} {真元} {vigour/yuan} {真元}
- {食物} {食物} {food} {食物}
- {饮水} {饮水} {water} {饮水}
- {战意} {战意} {fighter_spirit} {战意}
- }
- {档案} {
- {头衔} {头衔} {title} {头衔}
- {门派} {门派} {family/family_name} {门派}
- {级别} {人物等级} {level} {人物等级}
- {ID} {账号} {id} {账号}
- {姓名} {大名} {name} {大名}
- }
- {天赋} {
- {容貌} {容貌} {per} {容貌}
- {膂力} {膂力} {str} {膂力}
- {悟性} {悟性} {int} {悟性}
- {根骨} {根骨} {con} {根骨}
- {身法} {身法} {dex} {身法}
- }
- };
- #alias {char.gmcp.status} {
- #local hasHP1 {0};
- #local hasHP2 {0};
- #local hasScore {0};
- #local id {$gGMCP[Status][id]};
- #if { "$id" == "" } {
- #local id {$gGMCP[Status][ID]};
- };
- #nop ID 中包含 # 号的,是 NPC,没有 # 号但和自己 ID 不同的,是玩家。;
- #nop 没有 ID 或者 ID 和自己相同的,才是自己的数据。;
- #if { "$id" != "" && "$id" != "$user[id]" } {
- #return;
- };
- #local needUpdate {};
- #local key {};
- #foreach {*gGMCP[Status][]} {key} {
- #local value {$gGMCP[Status][$key]};
- #local name {$gmcp-name-map[HP主要][$key]};
- #if { "$name" != "" } {
- #local hasHP1 {1};
- #if { "$name" == "当前%*" } {
- speedo.Set {$name} {$value} {true} {10};
- #local bakName {@str.Replace{$name;当前;上次}};
- #local pctName {@str.Replace{$name;当前%*;&1百分比}};
- #var char[HP][$bakName] {0};
- #var char[HP][$bakName] {$char[HP][$name]};
- #local needUpdate[$pctName] {true};
- };
- #elseif { "$name" == "有效{气血|精神}" } {
- #local health {@str.Replace{$name;有效%*;&1健康度}};
- #local needUpdate[$health] {true};
- };
- #elseif { "$name" == "最大{气血|精神|内力|精力}" } {
- #local pctName {@str.Replace{$name;最大%*;&1百分比}};
- #local needUpdate[$pctName] {true};
- #if { "$name" == "最大{气血|精神}" } {
- #local health {@str.Replace{$name;最大%*;&1健康度}};
- #local needUpdate[$health] {true};
- };
- };
- #else {
- #if { "$name" == "{忙|战斗中}" } {
- char.set-flag $name $value false;
- };
- };
- #var char[HP][$name] {$value};
- #continue;
- };
- #local name {$gmcp-name-map[HP次要][$key]};
- #if { "$name" != "" } {
- #local hasHP2 {1};
- #var char[HP][$name] {$value};
- #if { "$name" == "{经验|潜能}" } {
- speedo.Set {$name} {$value} {true} {600};
- };
- #elseif { "$name" == "{食物|饮水}" } {
- speedo.Set {$name} {$value} {true} {10};
- };
- #continue;
- };
- #local name {$gmcp-name-map[档案][$key]};
- #if { "$name" != "" } {
- #local hasScore {1};
- #if { "$name" == "{头衔|大名}" } {
- #var char[档案][彩色$name] {$value};
- #replace value {%+1..c} {};
- #var char[档案][$name] {$value};
- };
- #else {
- #var char[档案][$name] {$value};
- };
- #continue;
- };
- #local name {$gmcp-name-map[天赋][$key]};
- #if { "$name" != "" } {
- #local hasScore {1};
- #var char[档案][天赋][$name] {$value};
- #continue;
- };
- warnLog 未能识别的 GMCP 状态信息 $key => $value;
- };
- #if { $hasHP1 + $hasHP2 > 0 } {
- #foreach {*needUpdate[]} {key} {
- #if { "$key" == "%*百分比" } {
- #local current {@str.Replace{$key;%*百分比;当前&1}};
- #local maxName {@str.Replace{$key;%*百分比;最大&1}};
- #local scale {@if{"$key" == "{内力|精力}百分比";2;1}};
- #math char[HP][$key] { $char[HP][$current] * 100 / $char[HP][$maxName] / $scale };
- };
- #elseif { "$key" == "%*健康度" } {
- #local effName {@str.Replace{$key;%*健康度;有效&1}};
- #local maxName {@str.Replace{$key;%*健康度;最大&1}};
- #math char[HP][$key] { $char[HP][$effName] * 100 / $char[HP][$maxName] };
- };
- };
- #if { $hasHP1 } {
- char.HPSummarize 自动;
- };
- #else {
- char.HPSummarize 总是;
- };
- event.Emit char/hpbrief;
- };
- #if { $hasScore } {event.Emit char/score};
- #if { "$busy" == "true" } {event.Emit char/busy};
- #elseif { "$busy" == "false" } {event.Emit char/nobusy};
- #if { "$fight" == "true" } {event.Emit char/fight};
- #elseif { "$fight" == "false" } {event.Emit char/nofight};
- };
- #action {^GMCP 频道收听汇总:$E} {
- #class gmcp-channel-status open;
- #action {^%*(%*) %s {🔔|🔕}$} {
- #local channel {%%2};
- #local status {true};
- #if { "%%4" == "🔕" } {
- #local status {false};
- };
- #var {gGMCP[Channels][$channel]} {$status};
- };
- #action {^你接收GMCP信息的格式为%*,你可以用tune gmcp <channel> on/off开关GMCP频道。$} {
- #class gmcp-channel-status kill;
- };
- #class gmcp-channel-status close;
- };
- #action {^你打开了GMCP:%*频道。$} {#var gGMCP[Channels][%1] {true}};
- #action {^你关闭了GMCP:%*频道。$} {#var gGMCP[Channels][%1] {false}};
- #action {^你的GMCP:%*频道已经是打开的。$} {#var gGMCP[Channels][%1] {true}};
- #action {^你的GMCP:%*频道已经是关闭的。$} {#var gGMCP[Channels][%1] {false}};
|