Преглед на файлове

feat(pkuxkx): HP 摘要改版,增加回精,以及吐纳模式

dzp преди 1 година
родител
ревизия
57993da05d
променени са 2 файла, в които са добавени 99 реда и са изтрити 27 реда
  1. 93 27
      mud/pkuxkx/plugins/basic/char/hp.tin
  2. 6 0
      plugins/lib/ga.tin

+ 93 - 27
mud/pkuxkx/plugins/basic/char/hp.tin

@@ -29,23 +29,28 @@ event.Define {char/hpneili}  {无参}  {$MODULE} {已经获取到 hp -neili 命
     #var char[HP][经验显示]     {1};
     #var char[HP][潜能]         {1};
     #var char[HP][潜能显示]     {1};
+    #var char[HP][上次内力]     {0};
     #var char[HP][当前内力]     {0};
     #var char[HP][最大内力]     {1};
     #var char[HP][加力]         {0};
     #var char[HP][内力百分比]   {0};
+    #var char[HP][上次精力]     {0};
     #var char[HP][当前精力]     {0};
     #var char[HP][最大精力]     {1};
     #var char[HP][精力百分比]   {0};
+    #var char[HP][上次气血]     {0};
     #var char[HP][当前气血]     {0};
     #var char[HP][有效气血]     {1};
     #var char[HP][最大气血]     {1};
     #var char[HP][气血百分比]   {0};
     #var char[HP][气血健康度]   {0};
+    #var char[HP][上次精神]     {0};
     #var char[HP][当前精神]     {0};
     #var char[HP][有效精神]     {1};
     #var char[HP][最大精神]     {1};
     #var char[HP][精神百分比]   {0};
     #var char[HP][精神健康度]   {0};
+    #var char[HP][上次真气]     {0};
     #var char[HP][当前真气]     {0};
     #var char[HP][最大真气]     {1};
     #var char[HP][真气减伤]     {0};
@@ -380,6 +385,9 @@ hp -neili 格式:
 //      - 回气: 由两个数组成,显示样式为为:气血恢复/气血治疗
 //          - 气血恢复: 展示为每分钟可以恢复的最大血量的比例(以百分比形式)
 //          - 气血治疗: 展示为每分钟可以治疗的最大血量的比例(以百分比形式)
+//      - 回精: 由两个数组成,显示样式为为:精神恢复/精神治疗
+//          - 精神恢复: 展示为每分钟可以恢复的最大精神的比例(以百分比形式)
+//          - 精神治疗: 展示为每分钟可以治疗的最大精神的比例(以百分比形式)
 //      - 精神: 由三个数组成,显示样式为为:精神百分比(每秒精神变化)/精神健康度
 //          - 精神百分比: 展示为当前精神占最大精神的比例,注意这里并没有采用有效精神。
 //          - 每秒精神变化: 正数展示为绿色,负数展示为红色,如果没有变化,则自动隐藏。
@@ -418,11 +426,11 @@ hp -neili 格式:
         };
     };
 
-    #local head     {};
-    #local tail     {};
-    #local safety   {};
-    #local label    {};
-    #local width    {@prompt.ScreenWidth{}};
+    #local head         {};
+    #local tail         {};
+    #local safety       {};
+    #local labelColor   {};
+    #local width        {@prompt.ScreenWidth{}};
 
     #if { $char[HP][气血百分比] < 30 || $char[HP][精神百分比] < 70 } {
         #local safety {危险};
@@ -432,7 +440,7 @@ hp -neili 格式:
     };
 
     #if { "$char[HP][战斗中]" == "true" } {
-        #local label  {<188>};
+        #local labelColor {<188>};
     };
 
     #local theme {@default{{$char.HPSummarize.Theme};{
@@ -486,13 +494,20 @@ hp -neili 格式:
         #local 每秒气血变化 {};
     };
 
+    #local label {气血};
+    #if { $char[HP][食物] <= 0 || $char[HP][饮水] <= 0 } {
+        #local label {<118>气血};
+    };
+
     #local 气血 {};
-    #format 气血 {$label气血: %s%s/%s}
-        {@char.hp.colorit{$char[HP][气血百分比]}} {${每秒气血变化}}
-        {@char.hp.colorit{$char[HP][气血健康度]}};
+    #if { !@char.InTuna{} || $width >= 70 } {
+        #format 气血 {$labelColor$label<298>: %s%s/%s}
+            {@char.hp.colorit{$char[HP][气血百分比]}} {${每秒气血变化}}
+            {@char.hp.colorit{$char[HP][气血健康度]}};
+    };
 
     #local 内力 {};
-    #if { $width >= 50 || $char[HP][当前内力] > $char[HP][上次内力] } {
+    #if { @char.InCombat{} || $width >= 80 || ($width >= 50 && !@char.InTuna{}) } {
         #local 每秒内力变化 {@speedo.GetSpeed{当前内力}};
         #if { ${每秒内力变化} > 0 } {
             #local 每秒内力变化 {(<128>${每秒内力变化}<298>)};
@@ -503,11 +518,11 @@ hp -neili 格式:
         #else {
             #local 每秒内力变化 {};
         };
-        #format 内力 { $label内力: %s%s} {@char.hp.colorit{$char[HP][内力百分比]}} {${每秒内力变化}};
+        #format 内力 { $labelColor内力: %s%s} {@char.hp.colorit{$char[HP][内力百分比]}} {${每秒内力变化}};
     };
 
     #local 精神 {};
-    #if { $width >= 80 } {
+    #if { @char.InCombat{} || @char.InTuna{} || $width >= 80 || $char[HP][精神百分比] < 70 || $char[HP][精神健康度] < 100 } {
         #local 每秒精神变化 {@speedo.GetSpeed{当前精神}};
         #if { ${每秒精神变化} > 0 } {
             #local 每秒精神变化 {(<128>${每秒精神变化}<298>)};
@@ -518,13 +533,43 @@ hp -neili 格式:
         #else {
             #local 每秒精神变化 {};
         };
-        #format 精神 { $label精神: %s%s/%s}
+        #local label {精神};
+        #if { $char[HP][食物] <= 0 || $char[HP][饮水] <= 0 } {
+            #local label {<118>精神};
+        };
+        #format 精神 { $labelColor$label<298>: %s%s/%s}
             {@char.hp.colorit{$char[HP][精神百分比]}} {${每秒精神变化}}
             {@char.hp.colorit{$char[HP][精神健康度]}};
     };
 
+    #local 回气 {};
+    #if { (@char.InCombat{} || $width >= 80 && !@char.IsBusy{}) && ($char[HP][气血百分比] < 100 || $char[HP][气血健康度] < 100) } {
+        #nop 气血恢复的数值展示为每分钟可以恢复的最大血量的倍数(以百分比形式);
+        #local {气血恢复} {@math.Int{@math.Eval{$char[STATUS][气血恢复] * 100 * 60 / $char[HP][最大气血]}}};
+        #nop 气血治疗的数值展示为每分钟可以治疗的最大血量的倍数(以百分比形式);
+        #local {气血治疗} {@math.Int{@math.Eval{$char[STATUS][气血治疗] * 100 * 60 / $char[HP][最大气血]}}};
+        #local label {回气};
+        #if { !@char.IsBusy{} && $char[HP][食物] > 0 && $char[HP][饮水] > 0 && ($char[HP][气血百分比] < 100 || $char[HP][气血健康度] < 100) } {
+            #local label {<128><588>回气\e[25m};
+        };
+        #format {回气} { $labelColor$label: %s/%s} {@char.hp.colorit{${气血恢复}}} {@char.hp.colorit{${气血治疗}}};
+    };
+
+    #local 回精 {};
+    #if { (@char.InCombat{} || $width >= 80 && !@char.IsBusy{}) && ($char[HP][精神百分比] < 100 || $char[HP][精神健康度] < 100) } {
+        #nop 精神恢复的数值展示为每分钟可以恢复的最大精神的倍数(以百分比形式);
+        #local {精神恢复} {@math.Int{@math.Eval{$char[STATUS][精神恢复] * 100 * 60 / $char[HP][最大精神]}}};
+        #nop 精神治疗的数值展示为每分钟可以治疗的最大精神的倍数(以百分比形式);
+        #local {精神治疗} {@math.Int{@math.Eval{$char[STATUS][精神治疗] * 100 * 60 / $char[HP][最大精神]}}};
+        #local label {回精};
+        #if { !@char.IsBusy{} && $char[HP][食物] > 0 && $char[HP][饮水] > 0 && ($char[HP][精神百分比] < 100 || $char[HP][精神健康度] < 100) } {
+            #local label {<128><588>回精\e[25m};
+        };
+        #format {回精} { $labelColor$label: %s/%s} {@char.hp.colorit{${精神恢复}}} {@char.hp.colorit{${精神治疗}}};
+    };
+
     #local 精力 {};
-    #if { ($width >= 100 && !@char.InCombat{}) || $char[HP][当前精力] > $char[HP][上次精力] || $char[HP][精力百分比] < 30 } {
+    #if { @char.InTuna{} || $width >= 120 || $char[HP][精力百分比] < 50 } {
         #local 每秒精力变化 {@speedo.GetSpeed{当前精力}};
         #if { ${每秒精力变化} > 0 } {
             #local 每秒精力变化 {(<128>${每秒精力变化}<298>)};
@@ -535,31 +580,26 @@ hp -neili 格式:
         #else {
             #local 每秒精力变化 {};
         };
-        #format 精力 { $label精力: %s%s} {@char.hp.colorit{$char[HP][精力百分比]}} {${每秒精力变化}};
-    };
-
-    #local 回气 {};
-    #if { $width >= 110 || @char.InCombat{} } {
-        #nop 气血恢复的数值展示为每分钟可以恢复的最大血量的倍数(以百分比形式);
-        #local {气血恢复} {@math.Int{@math.Eval{$char[STATUS][气血恢复] * 100 * 60 / $char[HP][最大气血]}}};
-        #nop 气血治疗的数值展示为每分钟可以治疗的最大血量的倍数(以百分比形式);
-        #local {气血治疗} {@math.Int{@math.Eval{$char[STATUS][气血治疗] * 100 * 60 / $char[HP][最大气血]}}};
-        #format {回气} { $label回气: %s/%s} {@char.hp.colorit{${气血恢复}}} {@char.hp.colorit{${气血治疗}}};
+        #format 精力 { $labelColor精力: %s%s} {@char.hp.colorit{$char[HP][精力百分比]}} {${每秒精力变化}};
     };
 
     #local 食水 {};
     #if { $width >= 110 } {
+        #local label {食水};
+        #if { $char[HP][食物] <= 0 || $char[HP][饮水] <= 0 } {
+            #local label {<118><588>食水\e[25m<288>};
+        };
         #if { @char.InCombat{} } {
-            #format {食水} { 食水: %s/%s} {$char[HP][食物]} {$char[HP][饮水]};
+            #format {食水} { $label: %s/%s} {$char[HP][食物]} {$char[HP][饮水]};
         };
         #else {
-            #format {食水} { 食水: %s/%s(%s/%s)}
+            #format {食水} { $label: %s/%s(%s/%s)}
                     {$char[HP][食物]} {$char[HP][饮水]}
                     {@speedo.GetSpeed{食物;60}} {@speedo.GetSpeed{饮水;60}};
         };
     };
 
-    #local summarize {<099>$head〔HP摘要〕<298>${气血}${内力}${回气}${精神}${精力}${食水}$tail<099>};
+    #local summarize {<099>$head〔HP摘要〕<298>${气血}${内力}${回气}${精神}${回精}${精力}${食水}$tail<099>};
     #showme $summarize;
 };
 
@@ -721,6 +761,32 @@ event.Handle {option/changed} {opt/HPSummarize.Pause/pkuxkx} {$MODULE} {char.HPS
     };
 };
 
+///=== {
+// #@ char.InDazuo
+//    如果角色正在打坐,则返回真,否则返回假。无参数。
+// };
+#func {char.InDazuo} {
+    #if { @char.IsBusy{} && "@ga.LastCmd{}" == "{exercise|dazuo} %*" } {
+        #return 1;
+    };
+    #else {
+        #return 0;
+    };
+};
+
+///=== {
+// #@ char.InTuna
+//    如果角色正在吐纳,则返回真,否则返回假。无参数。
+// };
+#func {char.InTuna} {
+    #if { @char.IsBusy{} && "@ga.LastCmd{}" == "{respirate|tuna} %*" } {
+        #return 1;
+    };
+    #else {
+        #return 0;
+    };
+};
+
 ///=== {
 // #@ char.InCombat
 //    如果角色正处于战斗中,则返回真,否则返回假。无参数。

+ 6 - 0
plugins/lib/ga.tin

@@ -20,6 +20,7 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
 #func {lib_ga.Init} {
     #class data/lib/ga open;
     #list gXttPipeLine create {};
+    #var gXttLastCmd {};
     #class data/lib/ga close;
 
     ttevent.Handle {SENT OUTPUT}        {lib/ga} {lib/ga} {ga.send-output};
@@ -54,6 +55,7 @@ event.Define {GA} {有参} {$MODULE} {接收到 IAC GA 时发射本事件,参
     #if { &gXttPipeLine[] > 0 } {
         #local cmd {$gXttPipeLine[1]};
         #list gXttPipeLine delete {1};
+        #var gXttLastCmd {$cmd};
     };
 
     event.Emit GA {} {$cmd};
@@ -140,6 +142,10 @@ event.Define {GA} {有参} {$MODULE} {接收到 IAC GA 时发射本事件,参
     #return {$gXttPipeLine[1]};
 };
 
+#func {ga.LastCmd} {
+    #return {$gXttLastCmd};
+};
+
 #func {ga.IsUnderway} {
     #if { &gXttPipeLine[] > 1 } {
         #return 1;