Просмотр исходного кода

feat(pkuxkx): 增加三个新的 API:char.CanLianxi/CanLingwu/CanXiulian

dzp 1 неделя назад
Родитель
Сommit
9b728dc368
1 измененных файлов с 99 добавлено и 3 удалено
  1. 99 3
      mud/pkuxkx/plugins/basic/char/skills.tin

+ 99 - 3
mud/pkuxkx/plugins/basic/char/skills.tin

@@ -294,7 +294,16 @@ event.Define {char/skbrief} {无参}  {$MODULE} {已经获取到 skbrief 命令
 };
 
 ///=== {
-// #@ char.SkillLimit [<技能名称>]
+// #@ char.SkillID <技能中文名称>
+//    返回技能的 ID。支持且仅支持所有玩家 skills 命令中可以看到的技能。
+// };
+#func {char.SkillID} {
+    #local skill {%1};
+    #return {$char[Skills][$skill][code]};
+};
+
+///=== {
+// #@ char.SkillLimit [<技能中文名称>]
 //    如果指定了技能名称,则返回该技能所能达到的技能上限。
 //    如果没有指定或者技能不存在,则返回本人的武功技能上限。
 //    如果技能上限获取失败,默认值为基本内功的上限,如果基本内功上限也没有获取到,则默认为 1。
@@ -307,7 +316,7 @@ event.Define {char/skbrief} {无参}  {$MODULE} {已经获取到 skbrief 命令
 };
 
 ///=== {
-// #@ char.SkillType <技能名称>
+// #@ char.SkillType <技能中文名称>
 //    返回该技能的技能类别。
 //    常见的技能类别有:
 //        - 基本功夫
@@ -394,7 +403,7 @@ event.Define {char/skbrief} {无参}  {$MODULE} {已经获取到 skbrief 命令
         #return {$char[Skills][$arg][jifa-to]};
     };
     #else {
-        #return;
+        #return {};
     };
 };
 
@@ -421,6 +430,93 @@ event.Define {char/skbrief} {无参}  {$MODULE} {已经获取到 skbrief 命令
     #return {@defaultNum{$char[Skills][$skill][jifa-level];$level}};
 };
 
+///=== {
+// #@ char.CanLianxi [<基本武功>]
+//    如果某项武功可以练习,则返回真,否则返回假。
+//    如果省略参数,则默认为基本招架。
+//    注意: 这里不考虑游戏特定的限制,只做简单的等级比较。
+// };
+#func {char.CanLianxi} {
+    #local skill {@default{%1;基本招架}};
+
+    #if { "$skill" != "基本%*" || "$skill" == "基本内功" } {
+        #return 0;
+    };
+
+    #local baseLvl  {@char.SkillLevel{$skill}};
+    #local skill    {@char.GetJifaSkill{$skill}};
+    #local level    {@char.SkillLevel{$skill}};
+
+    #if { "$skill" == "" || $baseLvl == 0 || $level == 0 } {
+        #return 0;
+    };
+
+    #if { @math.Floor{$baseLvl} > @math.Floor{$level} } {
+        #return 1;
+    };
+    #else {
+        #return 0;
+    };
+};
+
+///=== {
+// #@ char.CanLingwu [<基本武功>]
+//    如果某项武功可以领悟,则返回真,否则返回假。
+//    如果省略参数,则默认为基本内功。
+// };
+#func {char.CanLingwu} {
+    #local skill {@default{%1;基本内功}};
+
+    #if { "$skill" != "基本%*" } {
+        #return 0;
+    };
+
+    #local baseLvl  {@char.SkillLevel{$skill}};
+    #local skill    {@char.GetJifaSkill{$skill}};
+    #local level    {@char.SkillLevel{$skill}};
+
+    #if { "$skill" == "" || $baseLvl == 0 || $level == 0 } {
+        #return 0;
+    };
+
+    #if { @math.Floor{$baseLvl} <= @math.Floor{$level} } {
+        #return 1;
+    };
+    #else {
+        #return 0;
+    };
+};
+
+///=== {
+// #@ char.CanXiulian [<内功中文名称>]
+//    如果角色拥有足够的潜能(暂定为 10w),并且内功等级尚未达到上限,则返回真,否则返回假。
+//    可选的内功名称参数用来指定具体的内功,如果省略则取当前激发的内功。
+// };
+#func {char.CanXiulian} {
+    #local force    {%1};
+
+    #if { "$force" == "" } {
+        #local force {@char.GetJifaSkill{基本内功}};
+    };
+
+    #if { "$force" == "" } {
+        #return 0;
+    };
+
+    #local level    {@char.SkillLevel{$force}};
+    #local limit    {@char.SkillLimit{$force}};
+
+    #if { @defaultNum{$char[HP][潜能];0} < 100000 } {
+        #return 0
+    };
+
+    #if { $level < 100 || $level >= $limit } {
+        #return 0;
+    };
+
+    #return 1;
+};
+
 #action {^你的「%*」进步了!$E} {
     #local name {%1};