فهرست منبع

feat(pkuxkx): 更美观的 skbrief 输出

dzp 1 هفته پیش
والد
کامیت
332cb45b8c
1فایلهای تغییر یافته به همراه66 افزوده شده و 19 حذف شده
  1. 66 19
      mud/pkuxkx/plugins/basic/char/skills.tin

+ 66 - 19
mud/pkuxkx/plugins/basic/char/skills.tin

@@ -68,6 +68,8 @@ event.Define {char/skbrief} {无参}  {$MODULE} {已经获取到 skbrief 命令
 #alias {cha}        {char.Skills};
 #alias {skbrief}    {char.Skbrief {%1} nogag};
 
+VAR {技能 ID 到技能名称的转换} char.skills.id2name {};
+
 #alias {char.Skills} {
     #local args {%0};
 
@@ -148,6 +150,8 @@ event.Define {char/skbrief} {无参}  {$MODULE} {已经获取到 skbrief 命令
             {limit}     {$limit}
         };
 
+        #var char.skills.id2name[$code] {$name};
+
         #if { $char-skill-limit < $limit } {
             #var char-skill-limit $limit;
         };
@@ -249,31 +253,74 @@ event.Define {char/skbrief} {无参}  {$MODULE} {已经获取到 skbrief 命令
 };
 
 #alias {char.Skbrief} {
-    #local id   {%1};
+    #local skillID {%1};
 
-    #if { "$id" == "" } {
+    #if { "$skillID" == "" } {
         errLog 用法: skbrief <技能ID>;
         #return;
     };
 
-    #alias {char.Skbrief.parse} {
+    #alias {char.Skbrief.update} {
+        #local lvl      {%%1};
+        #local point    {%%2};
+
+        #local skillID  {%1};
+
+        #local skillName {$char.skills.id2name[$skillID]};
+        #if { "$skillName" == "" } {
+            errLog skills 相关触发出现 BUG,请联系开发者。;
+            #return;
+        };
+
+        #local delta {@math.Eval{$point - $char[Skills][$skillName][point]}};
+        #if { $char[Skills][$skillName][lvl] != $lvl } {
+            #local delta 0;
+        };
+
+        #var char[Skills][$skillName][lvl]      {$lvl};
+        #var char[Skills][$skillName][point]    {$point};
+
+        #local level {};
+
+        #nop 领悟有时候会领悟过头,小点偶尔会超过等级的平方。;
+        #nop XXX: 这个时候就强制限制到 xxx.99,以免引起重大误解。;
+        #if { $point >= $lvl ** 2 } {
+            #local level {@math.Eval{$lvl + 0.99}};
+        };
+        #else {
+            #math level {$lvl*1.0000000000000000 + $point*1.00 / ($lvl ** 2)};
+            #replace level {^%*.%.%.%*$} {&1.&2&3};
+        };
+
+        #var char[Skills][$skillName][level]    {$level};
+
+        #local limit    {@char.SkillLimit{$skillName}};
+        #local jifa     {@char.GetJifaSkill{$skillName}};
+        #local jifaLvl  {@char.SkillLevel{$jifa}};
+        #local delta    {@str.FormatIfElse{$delta > 0; {(<129>+<299>%s)}; {}; $delta}};
+        #local desc     {<== <039>$level<299> / <069>$limit<299> <== <Ffc0>$skillName<299>};
+
+        #if { "$jifa" != "" } {
+            #cat desc { 当前激发至 <059>$jifa<299>($jifaLvl)};
+        };
+        #else {
+            #cat desc { <019>该技能尚未激发<299>};
+        };
+
+        #line sub var #line oneshot #sub {^#{$lvl}/{$point}$} {#<129>$lvl<299>/<029>$point<299>$delta $desc};
+
+        event.Emit {char/skbrief};
+    };
+
+    #line oneshot #alias {char.Skbrief.parse} {
         #line oneshot #action {^系统回馈:R:skbrief-begin-%%1$} {
             #class char-skbrief-parse-output-%%1 open;
             #line oneshot #action {^#%d/%d{|ID=char/skbrief-%%1}$} {
-                #local skill {};
-                #foreach {*char[Skills][]} {skill} {
-                    #if { "$char[Skills][$skill][code]" == "%%2" } {
-                        #var char[Skills][$skill][lvl]      {%%%%1};
-                        #var char[Skills][$skill][point]    {%%%%2};
-                        #local level {};
-                        #math level {
-                                $char[Skills][$skill][lvl]*1.00
-                            +   $char[Skills][$skill][point]*1.00 / ($char[Skills][$skill][lvl] ** 2)};
-                        #var char[Skills][$skill][level]    {$level};
-                        event.Emit {char/skbrief};
-                        #break;
-                    };
-                };
+                #local lvl      {%%%%1};
+                #local point    {%%%%2};
+
+                char.Skbrief.update {$lvl} {$point};
+
                 #local gag {@default{%2;gag}};
                 #if { "$gag" == "gag" } {
                     #line gag;
@@ -289,8 +336,8 @@ event.Define {char/skbrief} {无参}  {$MODULE} {已经获取到 skbrief 命令
     };
 
     #local uuid {@uuid{}};
-    char.Skbrief.parse $uuid $id;
-    xtt.Send {#response R:skbrief-begin-$uuid;skbrief $id;response R:skbrief-end-$uuid#};
+    char.Skbrief.parse $uuid $skillID;
+    xtt.Send {#response R:skbrief-begin-$uuid;skbrief $skillID;response R:skbrief-end-$uuid#};
 };
 
 ///=== {