| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501 |
- #nop vim: set filetype=tt:;
- /*
- 本文件属于 PaoTin++ 的一部分
- ===========
- PaoTin++ © 2020~2024 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
- 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
- ===========
- */
- #var basic_char_sachet[META] {
- {NAME} {锦囊管理}
- {DESC} {全生命周期维护锦囊数据,让你随时随地通过变量 char[锦囊] 掌握锦囊情况}
- {AUTHOR} {担子炮}
- {NOTE} {本文件属于 PaoTin++ 的一部分}
- };
- event.Define {char/sachet/sync} {无参} {$MODULE} {已经获取到 jiancha 命令输出结果,并更新 char[锦囊]。};
- event.Define {char/sachet/add} {无参} {$MODULE} {宝石已放入宝石袋,char[锦囊] 已同步更新。};
- event.Define {char/sachet/remove} {无参} {$MODULE} {从宝石袋中取出了宝石,char[锦囊] 已同步更新。};
- #var gem.name2code {
- {天} {8}
- {泽} {7}
- {火} {6}
- {雷} {5}
- {风} {4}
- {水} {3}
- {山} {2}
- {地} {1}
- {☆} {a}
- {★} {b}
- {◎} {c}
- {精金} {J}
- {木灵} {M}
- {玄冰} {B}
- {炎晶} {Y}
- {玉髓} {S}
- {月魄} {P}
- {日魂} {R}
- {神龙骨} {G}
- {凤凰羽} {F}
- {麒麟角} {Q}
- {玄武甲} {X}
- };
- #var gem.name2id {
- {天} {tian}
- {泽} {ze}
- {火} {huo}
- {雷} {lei}
- {风} {feng}
- {水} {shui}
- {山} {shan}
- {地} {di}
- {精金} {jin}
- {木灵} {mu}
- {玄冰} {bing}
- {炎晶} {yan}
- {玉髓} {sui}
- {月魄} {yue}
- {日魂} {ri}
- {神龙骨} {gu}
- {凤凰羽} {yu}
- {麒麟角} {jiao}
- {玄武甲} {jia}
- };
- #var gem.code2name {};
- #func {basic_char_sachet.Init} {
- #local name {};
- #var gem.code2name {};
- #foreach {*gem.name2code[]} {name} {
- #local code {$gem.name2code[$name]};
- #var gem.code2name[$code] {$name};
- };
- load-config gem;
- #return {true};
- };
- #var char[锦囊] {};
- VAR {锦囊最多可以存储的宝石数量} {char.sachet.Max} {10};
- VAR {锦囊当前已经存储的宝石数量} {char.sachet.Amount} {0};
- #list char[锦囊] create {};
- /*
- 宝石囊的名字现在有好几种版本:钵盂(僧侣)、布袋(丐帮)、人偶(五毒教)、锦囊(其他门派)
- 以上功能都一样,区别在于名字和 ID 不同。
- 另外,jiancha 命令现在要求必须带 ID 才能看到宝石内容,否则只能看到数量,因此实际上存在带参数
- 和不带参数两个版本。
- 格式分别如下:
- 不带参数:
- 钵盂[141/141]
- 带参数:
- 钵盂(Bo yu) [141/141]
- 这是一只紫金色的钵盂,在出家人手中很常见。
- ╭───五行宝石──┬─────────┬─────────┬──────────╮
- │[J4A]风☆精金*1 │[M5B]雷★木灵*17 │[B7A]泽☆玄冰*1 │[Y3B]水★炎晶*2 │
- │[J3A]水☆精金*2 │[M4B]风★木灵*48 │[B4A]风☆玄冰*4 │[Y2B]山★炎晶*1 │
- │[J2A]山☆精金*2 │[M3B]水★木灵*8 │[B3A]水☆玄冰*34 │[Y1B]地★炎晶*1 │
- │[J1A]地☆精金*1 │[M2B]山★木灵*2 │[B2A]山☆玄冰*1 │ │
- │ │[M1B]地★木灵*4 │ │ │
- ├───日月及中性五行宝石───────┴─────────┴──────────┤
- │[S4C]风◎玉髓*3 │
- │[S3C]水◎玉髓*1 │
- │[S2C]山◎玉髓*3 │
- ├───四灵宝石──────┬─────────────┬────────────┤
- │[G1B]地★神龙骨*1 │[Q4B]风★麒麟角*1 │[X2B]山★玄武甲*1 │
- │ │[Q1A]地☆麒麟角*1 │[X1B]地★玄武甲*1 │
- ╰─────────────┴─────────────┴───北大侠客行────╯
- 对玩家来说,jiancha 后面带不同 ID 颇有不便,所以现在改成统一 jiancha gem 表示查看详情。
- */
- #alias {jiancha} {char.sachet.jiancha};
- #alias {char.sachet.jiancha} {
- #local id {%0};
- #if { "$id" == "" } {
- xtt.Send {jiancha};
- #return;
- };
- #if { "$id" == "gem" } {
- #switch {"$char[档案][门派]"} {
- #case {"{少林派|峨嵋派|天龙寺|大轮寺}"} {#local id {bo yu}};
- #case {"五毒教"} {#local id {ren ou}};
- #case {"丐帮"} {#local id {baoshi dai}};
- #default {#local id {jin nang}};
- };
- };
- #var char.sachet.bak {$char[锦囊]};
- #list char[锦囊] create {};
- #line oneshot #action {^{人偶|布袋|钵盂|锦囊}(%*) [%*/%*]{|ID=char.sachet}$} {
- #var char.sachet.Amount {%%3};
- #var char.sachet.Max {%%4};
- char.sachet.parse.output;
- ga.Wait {sachet.find.bug};
- };
- xtt.Send {jiancha $id};
- };
- #alias {char.sachet.parse.output} {
- #class char-parse-sachet open;
- #action {^├───%*宝石───────┴─────────┴──────────┤$} {
- #nop;
- };
- #action {^│%*│$} {
- #local line {%%1};
- #replace line {│} {;};
- #local item {};
- #foreach {$line} {item} {
- #if { "$item" == "" } {
- #continue;
- };
- #nop {[M5B]雷★木灵*30};
- #local item {@__char_sachet_parse__{{$item}}};
- #var char[锦囊] {$char[锦囊]{$item[序号]}{$item}};
- };
- };
- #action {^╰──{(─|┴)+}─%S────╯{|ID=char.sachet}$} {
- #class char-parse-sachet kill;
- };
- event.HandleOnce GA {char.sachet} {char} {
- #class char-parse-sachet kill;
- okLog 锦囊数据已更新。;
- event.Emit char/sachet/sync;
- #nop 吞参数专用,不要删除本行,也不要在末尾加分号或是别的语句
- };
- #class char-parse-sachet close;
- };
- #func {__char_sachet_parse__} {
- #local item {%1};
- #nop 通过触发捕获到的星号可能是带斜杠的,所以这里要去掉。;
- #replace {item} {[%S]$GEMLVL$GEMGEN$GEMKIND{?:\\|}*%d} {
- {序号}{&1}
- {等级}{&2}
- {阴阳}{&3}
- {种类}{&4}
- {数量}{&5}
- };
- #return {$item};
- };
- ///=== {
- // #@ gem.NameToCode <宝石中文名>
- // 将宝石的中文名转换成锦囊中的英文序号。
- // };
- #func {gem.NameToCode} {
- #local gem {%1};
- #replace gem {$GEMLVL$GEMGEN{?: |}$GEMKIND} {
- {等级}{&1}
- {阴阳}{&2}
- {种类}{&3}
- };
- #local gem {$gem};
- #if { &gem[] == 0 } {
- #return {};
- };
- #return {$gem.name2code[$gem[种类]]$gem.name2code[$gem[等级]]@str.ToUpper{$gem.name2code[$gem[阴阳]]}};
- };
- ///=== {
- // #@ gem.NameToID <宝石中文名>
- // 将宝石的中文名转换成背包中的英文 ID。
- // };
- #func {gem.NameToID} {
- #local gem {%1};
- #replace gem {$GEMLVL$GEMGEN{?: |}$GEMKIND} {
- {等级}{&1}
- {阴阳}{&2}
- {种类}{&3}
- };
- #local gem {$gem};
- #if { &gem[] == 0 } {
- #return {};
- };
- #return {$gem.name2id[$gem[等级]] $gem.name2id[$gem[种类]]};
- };
- ///=== {
- // #@ gem.CodeToName <宝石序号>
- // 将锦囊中的宝石序号转换成中文名。
- // };
- #func {gem.CodeToName} {
- #local gem {%1};
- #replace gem {%.%.%.} {
- {种类}{&1}
- {等级}{&2}
- {阴阳}{&3}
- };
- #local gem {$gem};
- #if { &gem[] == 0 } {
- #return {};
- };
- #return {$gem.code2name[$gem[等级]]$gem.code2name[@str.ToLower{$gem[阴阳]}]$gem.code2name[$gem[种类]]};
- };
- ///=== {
- // #@ gem.CodeToNameB <宝石序号>
- // 将锦囊中的宝石序号转换成漂亮的中文名。
- // };
- #func {gem.CodeToNameB} {
- #local gem {@gem.CodeToName{%1}};
- #return {@Beautify{$gem}};
- };
- VAR {锦囊最近一次操作的宝石名称} {char.sachet.Gem} {};
- #action {^你从{锦囊|钵盂|布袋|人偶}里面取出一颗$GEM。$E} {
- #local gem {%2};
- #var char.sachet.Gem {$gem};
- #if { $char.sachet.Max == 10 } {
- jiancha gem;
- #return;
- };
- #local code {@gem.NameToCode{$gem}};
- math.Inc char.sachet.Amount -1;
- math.Inc char[锦囊][$code][数量] -1;
- #if { $char[锦囊][$code][数量] <= 0 } {
- #unvar char[锦囊][$code];
- };
- event.Emit char/sachet/remove;
- };
- #action {^你将手中$GEM放进了{锦囊|钵盂|布袋|人偶}。$E} {
- #local gem {%1};
- #var char.sachet.Gem {$gem};
- #if { $char.sachet.Max == 10 } {
- jiancha gem;
- #return;
- };
- #local code {@gem.NameToCode{$gem}};
- #replace gem {$GEMLVL$GEMGEN{?: |}$GEMKIND} {
- {等级}{&1}
- {阴阳}{&2}
- {种类}{&3}
- };
- #local gem {$gem};
- #if { "$char[锦囊][$code]" == "" } {
- #var char[锦囊][$code] {
- {序号} {$code}
- {数量} {0}
- {种类} {$gem[种类]}
- {等级} {$gem[等级]}
- {阴阳} {$gem[阴阳]}
- };
- };
- math.Inc char.sachet.Amount;
- math.Inc char[锦囊][$code][数量];
- event.Emit char/sachet/add;
- };
- #action {^$PLAYER给你一{颗|枚}$GEM。$E} {
- pack @gem.NameToID{%3};
- };
- #action {^从$NPC身上掉了出来一颗$GEM$E} {
- pack @gem.NameToID{%2};
- };
- #alias {sachet.find.bug} {
- #if { &char.sachet.bak[] == 0 || $char.sachet.Max == 10 } {
- #return;
- };
- #local found {0};
- #local code {};
- #foreach {*char[锦囊][]} {code} {
- #if { "$char[锦囊][$code][数量]" != "$char.sachet.bak[$code][数量]" } {
- #local found {1};
- #local count {$char.sachet.bak[$code][数量]};
- #local real {$char[锦囊][$code][数量]};
- errLog 发现 BUG:PaoTin++ 维护的锦囊数据中,@gem.CodeToNameB{$code}的数量为@defaultNum{$count;0},实际应为$real。;
- };
- #unvar char.sachet.bak[$code];
- };
- #if { &char.sachet.bak[] != 0 } {
- #local found {1};
- errLog 发现 BUG:PaoTin++ 维护的锦囊数据中,以下内容与实际锦囊情况不符:;
- #var char.sachet.bak;
- };
- #if { $found } {
- errLog 看来锦囊管理模块还需要持续完善呀。;
- };
- #else {
- okLog 锦囊数据核对无误。锦囊管理模块非常完美!;
- };
- };
- VAR {宝石金店价格表} {gem.Price} {};
- VAR {宝石价格系数} {gem.PriceScale} {};
- ///=== {
- // #@ gem.Value [ <中文名称> | <锦囊序号> ]
- // 对宝石进行估值。如果省略参数,则估算整个锦囊中的所有宝石的价值总和。
- // 参数可以是宝石的中文名称或锦囊序号。如天★木灵、M8B、m8b 都是可以的。
- // 估值结果受宝石金店价格表和宝石价格系数的影响,此二者玩家皆可自定义配置。
- // };
- #func {gem.Value} {
- #local gem {%1};
- #if { "$gem" == "" } {
- #return @gem.ValueAll{};
- };
- #if { "$gem" == "%+3w" } {
- #local gem {@gem.CodeToName{$gem}};
- };
- #replace gem {$GEMLVL$GEMGEN{?: |}$GEMKIND} {
- {等级}{&1}
- {阴阳}{&2}
- {种类}{&3}
- };
- #local gem {$gem};
- #if { &gem[] == 0 } {
- #return 0;
- };
- #local value {$gem.Price[$gem[等级]]};
- #local scale {$gem.PriceScale[$gem[种类]]};
- #math value {$value * $scale};
- #if { "$gem[阴阳]/$gem[种类]" == "◎/{神龙骨|凤凰羽|麒麟角|玄武甲}" } {
- #math value {$value * 2};
- };
- #return {$value};
- };
- ///=== {
- // #@ gem.ValueAll
- // 估算整个锦囊中的所有宝石的价值总和。
- // };
- #func {gem.ValueAll} {
- #local where {@str.Trim{%0}};
- #local sum {0};
- #if { "$where" == "" } {
- #local code {};
- #foreach {*char[锦囊][]} {code} {
- #local value {@gem.Value{$code}};
- #local amount {$char[锦囊][$code][数量]};
- #math sum {$sum + $value * $amount};
- };
- #return $sum;
- };
- #local bag {};
- #if { "$where" == "bag %d" } {
- #replace where {^bag } {};
- #local bag {$char.Bag[$where]};
- };
- #elseif { "$where" == "backpack" } {
- #local bag {$char.Gem};
- };
- #local key {};
- #foreach {*bag[]} {key} {
- #local name {$bag[$key][name]};
- #local amount {$bag[$key][amount]};
- #local value {@gem.Value{$name}};
- #math sum {$sum + $value * $amount};
- };
- #return {$sum};
- };
- ///=== {
- // ## gem.SafelyPack <宝石中文名称或锦囊序号>
- // 将宝石放入宝石袋。
- // 如果宝石囊已满,则会自动取出价值最低的宝石,好腾出空间放入新宝石。
- // 参数可以是宝石的中文名称或锦囊序号。如天★木灵、M8B、m8b 都是可以的。
- // 宝石价值按照宝石金店价格表和宝石价格系数计算。
- // };
- #alias {gem.SafelyPack} {
- #local gem {%1};
- #if { "$gem" == "%+3w" } {
- #local gem {@gem.CodeToName{@str.ToUpper{$gem}}};
- };
- #local gem {@gem.NameToID{$gem}};
- #if { "$gem" == "" } {
- xtt.Usage %90;
- #return;
- };
- #if { "$gem" == "" } {
- xtt.Usage %90;
- #return;
- };
- #if { $char.sachet.Amount < $char.sachet.Max } {
- pack $gem;
- #return;
- };
- #local minValue {999999};
- #local minCode {};
- #local code {};
- #foreach {*char[锦囊][]} {code} {
- #local value {@gem.Value{$code}};
- #if { $value < $minValue } {
- #local minValue {$value};
- #local minCode {@str.ToLower{$code}};
- };
- };
- #if { "$minCode" != "" } {
- pickgem $minCode;
- pack $gem;
- };
- };
|