Преглед изворни кода

feat(framework): 为 load-file 增加一种增量继承式扩展机制

dzp пре 2 година
родитељ
комит
98ff573cd0
2 измењених фајлова са 25 додато и 1 уклоњено
  1. 11 1
      framework/doc.tin
  2. 14 0
      framework/main.tin

+ 11 - 1
framework/doc.tin

@@ -35,7 +35,8 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
 ///// 下面是 PaoTin++ 增加的语义扩展关键字。
 //
 // ## load-file <文件名>
-//    规范的脚本文件加载方法。假设文件名是 foo/bar.tin,则本命令会从以下位置按照从上到下的顺序进行查找:
+//    规范的脚本文件加载方法。类似于 #read 指令,但支持文件重定位。
+//    具体来说,假设文件名是 foo/bar.tin,则本命令会从以下位置按照从上到下的顺序进行查找:
 //
 //      - 1. 玩家自定义位置: var/foo/bar.tin
 //      - 2. MUD定制版位置:  mud/$MUD/foo/bar.tin
@@ -44,6 +45,15 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
 //    如果前面的某个位置找到了相应的文件,则不再继续查找。
 //    其中 $MUD 代表当前选择的游戏服务器,可通过 #var gCurrentMUDLIB 查看。
 //
+//    这意味着,PaoTin++ 框架下所有的文件 TinTin++ 脚本,都支持重载机制,也就是说允许
+//    用户修改。但是要注意,用户必须在修改之前,将其拷贝一份副本,放置在 var 目录下,
+//    这样就会被优先加载。而且也只有这样修改才不会影响 Git 仓库。
+//
+//    另外,除了文件的覆盖式重载机制之外,PaoTin++ 还提供了一种文件的继承式修改机制。
+//    即:对于 foo/bar.tin 来说,不论最终加载的是前述哪个路径,加载之后,如果发现存在
+//    mud/$MUD/foo/bar.extra.tin,或者 var/foo/bar.extra.tin,则它们将会在 foo/bar.tin
+//    加载后,进行补充式加载。最终加载结果类似于将上述文件的内容合并在一起之后加载。
+//
 // ## load-config <配置文件名>
 //    规范的配置加载方法。假设配置文件名是 foo/bar,则本命令相当于 load-file etc/foo/bar.tin,
 //    也就是说,配置文件 foo/bar 对应的实际物理文件可能是:

+ 14 - 0
framework/main.tin

@@ -123,6 +123,20 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 
     };
 
     #read $file;
+
+    #replace file {.tin$} {.extra.tin};
+
+    #local output {};
+    #script output {test -f mud/$gCurrentMUDLIB/$file && echo true || echo false};
+    #if { "$output[1]" == "true" } {
+        #read mud/$gCurrentMUDLIB/$file;
+    };
+
+    #local output {};
+    #script output {test -f var/$file && echo true || echo false};
+    #if { "$output[1]" == "true" } {
+        #read var/$file;
+    };
 };
 
 #alias {init} {