#nop vim: set filetype=tt:; /* 本文件属于 PaoTin++ 的一部分 =========== PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp ) 享有并保留一切法律权利 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。 =========== */ #var basic_char_skills[META] { {NAME} {技能列表} {DESC} {解析 skills 命令的输出结果,并写入到 char[Skills]} {AUTHOR} {担子炮} {NOTE} {技能小点和激发关系分别由 skbrief 和 jifa 命令提供,都合并在一起} {CONFIG} { } }; #nop ╭───技能列表(共十六项)─┬─────────────┬──────┬──────┬──────╮ #nop │名称 │ID │描述 │级别 │最大级别 │ #nop ├───一项职业技能────┼─────────────┼──────┼──────┼──────┤ #nop │ 占卜之术 │divination │不足挂齿 │82.0 │387 │ #nop ├───六项基本知识────┼─────────────┼──────┼──────┼──────┤ #nop │ 禅宗心法 │buddhism │半生不熟 │153.0 │- │ #nop │ 鉴定之术 │identification │初窥门径 │54.0 │- │ #nop │ 读书写字 │literate │半生不熟 │152.0 │- │ #nop │ 医术 │medical-skill │新学乍用 │30.0 │- │ #nop │ 妙手空空 │stealing │新学乍用 │10.0 │- │ #nop │ 道家养生术 │taoism │深不可测 │948.23 │- │ #nop ├───六项基本功夫────┼─────────────┼──────┼──────┼──────┤ #nop │ 基本拳法 │cuff │半生不熟 │386.0 │387 │ #nop │ 基本轻功 │dodge │半生不熟 │386.0 │387 │ #nop │ 基本内功 │force │半生不熟 │386.0 │387 │ #nop │ 基本招架 │parry │半生不熟 │386.0 │387 │ #nop │ 基本剑法 │sword │半生不熟 │386.0 │387 │ #nop ├───四项特殊功夫────┼─────────────┼──────┼──────┼──────┤ #nop │□太极剑法 │taiji-jian │半生不熟 │386.0 │387 │ #nop │□太极拳 │taiji-quan │半生不熟 │386.0 │387 │ #nop │□太极神功 │taiji-shengong │第五重楼 │387.0 │387 │ #nop │□梯云纵 │tiyunzong │半生不熟 │386.0 │387 │ #nop ╰─────────────┴─────────────┴──────┴────北大侠客行────╯ #nop; load-lib event; event.Define {char/skills} {无参} {$MODULE} {已经获取到 skills 命令输出结果,并更新 char[Skills]。}; event.Define {char/skbrief} {无参} {$MODULE} {已经获取到 skbrief 命令输出结果,并更新 char[Skills]。}; #func {basic_char_skills.Init} { #class data/basic/char open; #var char[Skills] {}; #class data/basic/char close; #delay char.skills.init {skills;jifa} 1; #return true; }; #alias {skills} {char.Skills}; #alias {sk} {char.Skills}; #alias {cha} {char.Skills}; #alias {skbrief} {char.Skbrief {%1} nogag}; #alias {char.Skills} { #local args {%0}; #if { "$args" == "" } { #line oneshot #action {^╭───技能列表(共%*项){(─|┬)*}──╮$} { #var char[Skills][count] {@math.ParseCN{%%1}}; char.skills.parse.output; }; }; xtt.Send skills %0; }; #alias {char.skills.parse.output} { #class {ParseSkills} open; #var char[Skills][currentType] {}; #var char[Skills][nameList] {}; #gag {^│名称}; #action {^├───%%1项%%2──} { #var char[Skills][currentType] {%%2}; }; #local RST {\e[0m}; #local RST__ {\e[2;37;0m}; #local __I__ {$RST__│}; #action {~^$RST│%*│%*│%*│%*│%*│{|ID=char.skills}} { #local line {%%0}; #local code {%%2}; #local level {%%4}; #local limit {%%5}; #replace {code} {\x1b[2;37;0m} {}; #replace {level} {\x1b[2;37;0m} {}; #replace {limit} {\x1b[2;37;0m} {}; #replace level {+} {}; #if { "$limit" == "%s%d%s" } { #math limit {$limit + 0}; }; #elseif { "$limit" == "%s-%s" } { #nop 知识类技能没有上限; #local limit {0}; }; #else { #return; }; #nop 给技能加上彩色进度条,用来表示当前级别距离上限的程度; #local newCode {@__char_skills_colorit__{{$code};$level;$limit}}; #replace code { } {}; #replace line {$code\x1b[2;37;0m%s} {$newCode\e[0m}; #echo {%s} {@Beautify{{$line}}}; #local line {Skill/%%1/%%2/%%3/%%4/$limit}; #replace line { } {}; #showme {$line}; #line gag; }; #action {^Skill/{□|Θ|}%%2/%%3/%%4/%%5/%%6$} { #local type ${char[Skills][currentType]}; #local enabled {%%1}; #local name {%%2}; #local code {%%3}; #local rank {%%4}; #local level {%%5}; #local limit {%%6}; #replace name { } {}; #if { "$enabled" == "□" } { #format enabled {true}; }; #else { #format enabled {false}; }; #list char[Skills][nameList] add {$name}; #var {char[Skills][$name]} { $char[Skills][$name] {name}{$name} {type}{$type} {enabled}{$enabled} {code}{$code} {rank}{$rank} {level}{$level} {limit}{$limit} }; #line gag; }; #action {^╰───{(┴|─)*}─%S────╯{|ID=char.skills}$} { char.skills.parse.done; }; #action {^你不是查看过吗?{|ID=char/skills}$} { char.skills.parse.done; }; #alias {char.skills.parse.done} { #local __unused {%%0}; event.UnHandle GA {char.skills}; #local nameList {$char[Skills][nameList]}; #local count {$char[Skills][count]}; #unvar char[Skills][currentType]; #unvar char[Skills][nameList]; #unvar char[Skills][count]; #class {ParseSkills} kill; #if { &nameList[] != $count } { #line sub var #delay 0 { errLog skills 命令结果解析不完整,识别到了 &nameList[] 条记录。数据可能有误,请联系开发者。; }; #return; }; #list nameList collapse {|}; #local skillName {}; #foreach {*char[Skills][]} {skillName} { #if { "$skillName" != "{$nameList}" } { #unvar {char[Skills][$skillName]}; }; }; }; event.HandleOnce GA {char.skills} {char} {char.skills.parse.done}; #class {ParseSkills} close; }; #func {__char_skills_colorit__} { #local code {%1}; #local level {%2}; #local limit {%3}; #local p {@math.Int{@math.Eval{$level * 100 / $limit}}}; #local color {@util.Grade{$p;<071>;15;<171>;30;<003>;60;<074>;90;<134>;100;<132>;101;<506>}}; #local spaceLen {@str.Len{$code}}; #local code {@str.Trim{$code}}; #local textLen {@str.Len{$code}}; #math spaceLen {$spaceLen - $textLen}; #cat code {@str.AlignRight{{$p%}; $spaceLen}}; #local {rest} {@math.Eval{100 - $p}}; #return {@util.ColorBar{{$code};$color;$p;;$rest}}; }; #alias {char.Skbrief} { #local id {%1}; #line oneshot #action {^系统回馈:R:skbrief-begin$} { #class char-skbrief-parse-output open; #line oneshot #action {^#%d/%d{|ID=char/skbrief}$} { #local skill {}; #foreach {*char[Skills][]} {skill} { #if { "$char[Skills][$skill][code]" == "%1" } { #var char[Skills][$skill][lvl] {%%%1}; #var char[Skills][$skill][point] {%%%2}; event.Emit {char/skbrief}; #break; }; }; #local gag {@default{%2;gag}}; #if { "$gag" == "gag" } { #line gag; }; }; #line oneshot #action {^系统回馈:R:skbrief-end$} { #line gag; #class char-skbrief-parse-output kill; }; #class char-skbrief-parse-output close; #line gag; }; #if { "$id" == "" } { #return; }; #send {#response R:skbrief-begin;skbrief $id;response R:skbrief-end#}; };