#nop vim: set filetype=tt:; /* 本文件属于 PaoTin++ 的一部分 =========== PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp ) 享有并保留一切法律权利 你可以在遵照 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} { {经验} {经验} {combat_exp} {经验} {潜能} {潜能} {potential} {潜能} {最大内力} {最大内力} {max_neili} {最大内力} {内力} {当前内力} {neili} {当前内力} {最大精力} {最大精力} {max_jingli} {最大精力} {精力} {当前精力} {jingli} {当前精力} {最大气血} {最大气血} {max_qi} {最大气血} {有效气血} {有效气血} {eff_qi} {有效气血} {气血} {当前气血} {qi} {当前气血} {最大精神} {最大精神} {max_jing} {最大精神} {有效精神} {有效精神} {eff_jing} {有效精神} {精神} {当前精神} {jing} {当前精神} {真气} {当前真气} {vigour/qi} {当前真气} {真元} {真元} {vigour/yuan} {真元} {食物} {食物} {food} {食物} {饮水} {饮水} {water} {饮水} {忙} {忙} {is_busy} {忙} {战意} {战意} {fighter_spirit} {战意} {战斗中} {战斗中} {is_fighting} {战斗中} } {档案} { {头衔} {头衔} {title} {头衔} {门派} {门派} {family/family_name} {门派} {级别} {人物等级} {level} {人物等级} {ID} {账号} {id} {账号} {姓名} {大名} {name} {大名} } {天赋} { {容貌} {容貌} {per} {容貌} {膂力} {膂力} {str} {膂力} {悟性} {悟性} {int} {悟性} {根骨} {根骨} {con} {根骨} {身法} {身法} {dex} {身法} } }; #alias {char.gmcp.status} { #local busy {}; #local fight {}; #local hasHP {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 hasHP {1}; #if { "$name" == "{当前.*|经验|潜能|食物|饮水}" } { speedo.Set {$name} {$value} {true} {10}; }; #if { "$name" == "当前%*" } { #local bakName {@str.Replace{$name;当前;上次}}; #local pctName {@str.Replace{$name;当前%*;&1百分比}}; #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}; #local health {@str.Replace{$name;最大%*;&1健康度}}; #local needUpdate[$health] {true}; }; #else { #if { "$name" == "忙" } { #local busy {$value}; }; #elseif { "$name" == "战斗中" } { #local fight {$value}; }; }; #var char[HP][$name] {$value}; #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 { $hasHP } { #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] }; }; }; event.Emit char/hpbrief; char.HPSummarize; }; #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 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}};