|
@@ -101,6 +101,86 @@ ID 配置文件和数据配置文件可分别放置在 `$HOME/my-paotin/ids/`
|
|
|
|
|
|
|
|
# 特性介绍
|
|
# 特性介绍
|
|
|
|
|
|
|
|
|
|
+## 屏幕美化
|
|
|
|
|
+
|
|
|
|
|
+基本上每个刚刚接触 TinTin++ 的玩家,都会遇到 UTF-8 下字符不能对齐的问题。PaoTin++ 内置插件 `lib/ui/beautify` 很好地解决了这个问题。
|
|
|
|
|
+
|
|
|
|
|
+如果你看到 PaoTin++ 中渲染出来的表格线或者划线明显比文字内容要短,那可能是因为 `lib/ui/beautify` 插件工作不正常导致的。这通常是因为你的 TinTin++ 版本不正确导致的。建议通过 Docker 方式运行 PaoTin++,或者采用本文档推荐的 TinTin++ 版本,就可以解决该问题。
|
|
|
|
|
+
|
|
|
|
|
+如果你看到 PaoTin++ 中渲染出来的表格线或者划线严重超长,比一般的文字内容要长一倍,那可能是因为你的终端设置中,开启了亚洲字符双宽度显示功能导致。请检查你的终端设置,关闭该功能即可解决。
|
|
|
|
|
+
|
|
|
|
|
+## 灵活的提示栏
|
|
|
|
|
+
|
|
|
|
|
+PaoTin++ 内置插件 `lib/ui/prompt` 提供了一个非常灵活的提示栏界面。该插件的亮点功能有:
|
|
|
|
|
+
|
|
|
|
|
+* 支持通过外置配置文件自定义提示栏信息,无需修改代码即可实现个性化需求
|
|
|
|
|
+* 简便的排版布局定制
|
|
|
|
|
+* 支持空数据自动隐藏,使得较小的屏幕可以容纳更多的信息
|
|
|
|
|
+* 支持倒计时提示信息
|
|
|
|
|
+* 支持信息过期自动隐藏
|
|
|
|
|
+* 支持定制主题配色
|
|
|
|
|
+
|
|
|
|
|
+## 事件驱动编程
|
|
|
|
|
+
|
|
|
|
|
+PaoTin++ 内置插件 `lib/event` 提供了一个事件驱动编程框架。其 API 非常简单、易用。
|
|
|
|
|
+
|
|
|
|
|
+* `event.Define` 声明事件,语法格式为:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+event.Define {char/status} {无参} {char/status} {已经获取到 status_me 命令输出结果,并更新 char[STATUS]。};
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+四个参数分别为:
|
|
|
|
|
+
|
|
|
|
|
+1. 事件名称
|
|
|
|
|
+2. 事件类型,有参数的事件写「有参」,无参数的事件写「无参」。参见下方事件发射和事件订阅 API 的说明。
|
|
|
|
|
+3. 事件所属模块,这里一般建议写发射事件一方的模块名称。
|
|
|
|
|
+5. 事件说明。给人看的,方便用户知道你这个事件是做什么用的。
|
|
|
|
|
+
|
|
|
|
|
+* `event.Emit` 发射事件,语法格式为:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+#nop 对于无参数事件只需要两个参数即可;
|
|
|
|
|
+event.Emit {char/status} {}
|
|
|
|
|
+
|
|
|
|
|
+#nop 对于有参数事件则需要三个参数;
|
|
|
|
|
+event.Emit {GMCP.Move} {} {$GMCP[Move]}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+可以看到,根据事件是否携带参数,调用时所需要的参数个数也不一样。
|
|
|
|
|
+另外,第二个参数的含义表示触发哪些事件订阅者,默认全部触发,如有必要也可以在这里写正则表达式,来触发匹配的事件订阅者。
|
|
|
|
|
+
|
|
|
|
|
+* `event.Handle` 订阅事件,语法格式为:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+event.Handle {char/status} {prompt} {UI} {updateHP};
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+四个参数的含义分别为:
|
|
|
|
|
+
|
|
|
|
|
+1. 要订阅的事件名称
|
|
|
|
|
+2. 订阅方的身份ID,可供发射方过滤选择
|
|
|
|
|
+3. 订阅方的模块名称,给人看的,可不必十分准确
|
|
|
|
|
+4. 事件被触发后,需要执行的代码。可以是一个别名,也可以是一个代码块。
|
|
|
|
|
+
|
|
|
|
|
+上面表示本模块是 UI 模块,请求订阅事件 `char/status`,并且标识自己的订阅者身份ID为 `prompt`,如果事件发送者愿意,可以通过 `prompt` 来过滤并选择本次订阅。一旦事件被触发,则自动调用别名 `updateHP` 来更新 UI 显示。
|
|
|
|
|
+
|
|
|
|
|
+对于有参数事件,第四个参数一定要用别名,事件参数会作为别名的参数传递过去。
|
|
|
|
|
+
|
|
|
|
|
+* `event.HandleOnce` 仅订阅一次事件。类似于 `event.Handle`,不再赘述。
|
|
|
|
|
+
|
|
|
|
|
+* `event.UnHandle` 取消订阅。语法格式为:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+event.UnHandle {char/status} {prompt}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+两个参数分别为事件名称和订阅者名称。
|
|
|
|
|
+
|
|
|
|
|
+* `event.List` 查看事件系统现状。
|
|
|
|
|
+
|
|
|
|
|
+这个命令可以用来列出所有目前已定义的事件,以及它们的订阅情况。方便用户了解系统中都有哪些事件可供订阅,以及目前的订阅关系。
|
|
|
|
|
+
|
|
|
## 实用命令
|
|
## 实用命令
|
|
|
|
|
|
|
|
大部分自定义功能都采用 TinTin++ 的别名来实现,也有一部分是函数。考虑到命令行下也有手动输入的需要,
|
|
大部分自定义功能都采用 TinTin++ 的别名来实现,也有一部分是函数。考虑到命令行下也有手动输入的需要,
|
|
@@ -131,3 +211,12 @@ load-module fullskill {
|
|
|
* `list-modules`(短名称 `MODS`),查看所有已加载的模块清单。该命令无参数。
|
|
* `list-modules`(短名称 `MODS`),查看所有已加载的模块清单。该命令无参数。
|
|
|
* `look-module`(短名称 `MOD`),查看指定模块的详细说明。例如 `look-module foo`。
|
|
* `look-module`(短名称 `MOD`),查看指定模块的详细说明。例如 `look-module foo`。
|
|
|
* `load-lib`(短名称 `LL`),加载 library。例如 `load-lib event`,相当于 `load-module lib/event`。library 是一类更加基础的插件模块。一般在代码中使用 `load-lib` 来加载本模块所依赖的 library。
|
|
* `load-lib`(短名称 `LL`),加载 library。例如 `load-lib event`,相当于 `load-module lib/event`。library 是一类更加基础的插件模块。一般在代码中使用 `load-lib` 来加载本模块所依赖的 library。
|
|
|
|
|
+* `load-file`,加载文件。例如 `load-file plugins/quest/foo.tin`,类似于 `#read`,但是和 `#read` 有一点不同的是,`load-file` 支持文件重定位。也就是说,如果存在 `var/plugins/quest/foo.tin`,那么将会优先加载。通过这种方式,用户可以重写 PaoTin++ 默认的插件,以修复其中的错误或者实现自定义行为。
|
|
|
|
|
+
|
|
|
|
|
+## 命令行自动补全
|
|
|
|
|
+
|
|
|
|
|
+PaoTin++ 中无需手动维护,基础框架会为每个符合条件的别名自动添加命令行自动补全。假设有个模块叫做 `foo`,其中有个别名叫做 `foo.Bar`,那么 `load-module foo` 之后,用户就可以在命令行通过自动补全得到 `foo.Bar` 了。具体规则为:
|
|
|
|
|
+
|
|
|
|
|
+* 如果别名中没有小数点 `.`,那么只有第一个字母是大写字母的别名,才会自动补全。
|
|
|
|
|
+* 如果别名中存在小数点 `.`,那么只有最后一个小数点后面的第一个字母是大写字母的别名,才会自动补全。
|
|
|
|
|
+* 除了大小写字母、数字、连字符(即半角的减号)、小数点之外,别名中如果出现其它种类的字符,则不支持自动补全。
|