From d772ed83b68763de0bfcbea375122af3cfc61959 Mon Sep 17 00:00:00 2001 From: dzp Date: Mon, 2 Dec 2024 17:44:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(pkuxkx):=20=E4=B8=BA=E9=94=A6=E5=9B=8A?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=A4=E4=B8=AA=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?gem.Value=20=E7=94=A8=E6=9D=A5=E4=BC=B0=E7=AE=97=E5=AE=9D?= =?UTF-8?q?=E7=9F=B3=E4=BB=B7=E5=80=BC=EF=BC=8Cgem.SafelyPack=20=E7=94=A8?= =?UTF-8?q?=E6=9D=A5=E5=8A=AA=E5=8A=9B=E6=94=B6=E7=BA=B3=E5=AE=9D=E7=9F=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mud/pkuxkx/etc/gem.tin | 26 ++++ mud/pkuxkx/plugins/basic/char/backpack.tin | 40 +++++- mud/pkuxkx/plugins/basic/char/sachet.tin | 141 ++++++++++++++++++++- 3 files changed, 197 insertions(+), 10 deletions(-) create mode 100644 mud/pkuxkx/etc/gem.tin diff --git a/mud/pkuxkx/etc/gem.tin b/mud/pkuxkx/etc/gem.tin new file mode 100644 index 00000000..9dfeb4a1 --- /dev/null +++ b/mud/pkuxkx/etc/gem.tin @@ -0,0 +1,26 @@ +#nop vim: set filetype=tt:; + +#var {gem.Price} { + {地} {2} + {山} {4} + {水} {13} + {风} {40} + {雷} {130} + {火} {400} + {泽} {1400} + {天} {4200} +}; + +#var {gem.PriceScale} { + {日魂} {9.10} + {月魄} {3.10} + {玄武甲} {1.60} + {凤凰羽} {1.50} + {麒麟角} {1.40} + {神龙骨} {1.30} + {木灵} {1.20} + {玉髓} {1.03} + {玄冰} {1.02} + {精金} {1.01} + {炎晶} {1.00} +}; diff --git a/mud/pkuxkx/plugins/basic/char/backpack.tin b/mud/pkuxkx/plugins/basic/char/backpack.tin index f6dbc01f..384ee9bb 100644 --- a/mud/pkuxkx/plugins/basic/char/backpack.tin +++ b/mud/pkuxkx/plugins/basic/char/backpack.tin @@ -103,7 +103,7 @@ event.Define {char/bag} {无参} {$MODULE} {look bag 命令运行完毕 #local type {Bag[$char.backpack.currentBag]}; }; - #if { "$type" != "{Item|Cash|Wear|Wield|Equip|Bag\[\d+\]}" } { + #if { "$type" != "{Item|Cash|Wear|Wield|Equip|Gem|Bag\[\d+\]}" } { #return; }; @@ -234,6 +234,10 @@ event.Define {char/bag} {无参} {$MODULE} {look bag 命令运行完毕 char.backpack.set {Equip} {%%1} {%%2} {%%3 %%4} {%%5}; } {4.3}; + #action {^{?:(?:(${汉字数词})颗)?}$GEM(%*)$} { + char.backpack.set {Gem} {%%1} {颗} {%%2} {%%3}; + } {4.2}; + #nop 其它物品; #action {^{?:(${汉字数词})(${汉字量词})|}%S(%*)$} { char.backpack.set {Item} {%%1} {%%2} {%%3} {%%4}; @@ -375,9 +379,11 @@ event.Define {char/bag} {无参} {$MODULE} {look bag 命令运行完毕 // 查询角色是否携带有某样物品。如果有,则返回 ID 和名称;否则返回空串。 // 查询范围: // Item: 所有物品(但不包括包袱里的内容) +// Cash: 现金 // Wear: 穿戴 // Wield: 手持的装备(武器或盾牌) // Equip: 携带的装备 +// Gem: 背包里的宝石 // Autoload: Autoload 的装备 // ItemID: id 命令看到的数据 // Bag: 包袱里的物品 @@ -387,16 +393,27 @@ event.Define {char/bag} {无参} {$MODULE} {look bag 命令运行完毕 #local key {%2}; #local func {@default{%3;char.backpack.Query}}; - #if { "$range" != "{Item|Cash|Wear|Wield|Equip|Autoload|ItemID}" } { + #if { "$range" != "{Item|Cash|Wear|Wield|Equip|Gem|Autoload|ItemID|Bag\s*\d+}" } { xtt.Usage $func; #return; }; + #local container {}; + + #if { "$range" == "Bag%s%d" } { + #local container {$range}; + #replace container {^Bag%s%d$} {&2}; + #local container {$char.Bag[$container]}; + }; + #else { + #local container {${char.$range}}; + }; + #local items {}; #local var {}; - #local items {@table.Keys{char.$range;{$key/%*}}}; + #local items {@table.Keys{container;{$key/%*}}}; #if { "$items" == "" } { - #local items {@table.Keys{char.$range;{%*/$key}}}; + #local items {@table.Keys{container;{%*/$key}}}; }; #return {$items}; @@ -427,7 +444,18 @@ event.Define {char/bag} {无参} {$MODULE} {look bag 命令运行完毕 #local range {%1}; #local key {%2}; - #local info {${char.${range}[$key]}}; + #local container {}; + + #if { "$range" == "Bag%s%d" } { + #local container {$range}; + #replace container {^Bag%s%d$} {&2}; + #local container {$char.Bag[$container]}; + }; + #else { + #local container {${char.$range}}; + }; + + #local info {$container[$key]}; #if { "$info" == "" } { #local items {@char.backpack.Query{{$range};{$key}}}; @@ -441,7 +469,7 @@ event.Define {char/bag} {无参} {$MODULE} {look bag 命令运行完毕 #return -1; }; - #local info {${char.${range}[$items]}}; + #return @char.backpack.Amount{$range;$items}; }; #return {@defaultNum{$info[amount];1}}; diff --git a/mud/pkuxkx/plugins/basic/char/sachet.tin b/mud/pkuxkx/plugins/basic/char/sachet.tin index f854ad2f..7d285e42 100644 --- a/mud/pkuxkx/plugins/basic/char/sachet.tin +++ b/mud/pkuxkx/plugins/basic/char/sachet.tin @@ -75,6 +75,10 @@ event.Define {char/sachet/remove} {无参} {$MODULE} {从宝石袋中取出 #local code {$gem.name2code[$name]}; #var gem.code2name[$code] {$name}; }; + + load-config gem; + + #return {true}; }; #var char[锦囊] {}; @@ -212,7 +216,7 @@ VAR {锦囊当前已经存储的宝石数量} {char.sachet.Amount} {0}; #local gem {$gem}; #if { &gem[] == 0 } { - #return; + #return {}; }; #return {$gem.name2code[$gem[种类]]$gem.name2code[$gem[等级]]@str.ToUpper{$gem.name2code[$gem[阴阳]]}}; @@ -234,7 +238,7 @@ VAR {锦囊当前已经存储的宝石数量} {char.sachet.Amount} {0}; #local gem {$gem}; #if { &gem[] == 0 } { - #return; + #return {}; }; #return {$gem.name2id[$gem[等级]] $gem.name2id[$gem[种类]]}; @@ -256,7 +260,7 @@ VAR {锦囊当前已经存储的宝石数量} {char.sachet.Amount} {0}; #local gem {$gem}; #if { &gem[] == 0 } { - #return; + #return {}; }; #return {$gem.code2name[$gem[等级]]$gem.code2name[@str.ToLower{$gem[阴阳]}]$gem.code2name[$gem[种类]]}; @@ -325,7 +329,7 @@ VAR {锦囊最近一次操作的宝石名称} {char.sachet.Gem} {}; }; #alias {sachet.find.bug} { - #if { &char.sachet.bak[] == 0 } { + #if { &char.sachet.bak[] == 0 || $char.sachet.Max == 10 } { #return; }; @@ -354,3 +358,132 @@ VAR {锦囊最近一次操作的宝石名称} {char.sachet.Gem} {}; 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{$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; + }; +};