Skip to content

排错与测试

GTSkillView 涉及 GTCore、外部技能插件、客户端 UI、资源包、权限、PAPI 和公式。排错时先把链路拆开,不要同时改多个文件。

启动后插件停止

控制台出现:

text
GTSkillView 未通过 GTCore 统一授权,插件已停止。

处理:

  1. 检查 GTCore 是否加载成功。
  2. 检查 GTCore 授权配置是否已按购买说明填写。
  3. 仍无法启动时联系作者 QQ 1415375222

/gtsv open 打不开界面

检查:

  1. 玩家是否有 gtskillview.gui
  2. ui.prefer-client-ui 是否为 true
  3. 当前 UI 插件是否安装并加载。
  4. client-ui/providers.yml 中对应 provider 是否启用。
  5. fallback-to-vanilla 是否开启。
  6. 控制台是否有客户端 UI 注册报错。

快速判断原版 GUI 是否正常:

yaml
ui:
  default: vanilla
  prefer-client-ui: false
  fallback-to-vanilla: true

重载后执行:

text
/gtsv open

原版 GUI 正常,客户端 UI 异常时,继续查 PaiUI、AX、KongCore 或 DragonCore。

技能不显示

检查 skills.yml

  1. skills.<id>.enabled 是否为 true
  2. group 是否存在。
  3. visible.permissions 是否满足。
  4. visible.conditions 是否成立。
  5. YAML 缩进是否正确。
  6. /gtsv reload 是否成功。

先把可见条件清空测试:

yaml
visible:
  permissions: []
  conditions: []

如果清空后能显示,问题在权限或条件。

学不了技能

检查:

  1. 技能点是否足够。
  2. learn.conditions 是否成立。
  3. learn.permissions 是否满足。
  4. learn.costs.money 是否足够。
  5. learn.costs.items 是否满足。
  6. 技能是否已经达到 max-level

临时给技能点:

text
/gtsv points set 玩家名 20

临时降低学习条件:

yaml
learn:
  conditions: []
  costs:
    points: 0
    money: 0
    items: []

技能释放失败

按顺序查:

  1. 玩家是否已经学习技能。
  2. 技能是否绑定到槽位。
  3. /gtsv cast 技能ID 是否能释放。
  4. /gtsv cast 槽位 是否能释放。
  5. MP 是否足够。
  6. 冷却是否结束。
  7. conditions 是否成立。
  8. bind.provider 是否正确。
  9. bind.id 是否真实存在。
  10. 外部技能插件是否加载。

MythicMobs 技能失败:

yaml
bind:
  provider: mythicmobs
  id: "ThunderSlash"

确认 MythicMobs 中有同名技能 ThunderSlash。大小写和空格按 MythicMobs 实际配置。

SkillAPI 技能失败:

yaml
bind:
  provider: skillapi
  id: "Blink Step"

确认 SkillAPI 中技能名一致。

MP 一直显示在聊天栏

GTSkillView 默认不在聊天栏刷 MP。先检查:

yaml
mana:
  actionbar:
    enabled: false

如果聊天栏仍刷 MP:

  1. 确认服务器加载的是当前版本。
  2. 检查是否有旧版插件还在 plugins 中。
  3. 检查其他插件是否也在发送 MP 文本。
  4. 检查客户端 UI 是否把调试文本发到聊天。

AX 报 Top level is not a Map

常见日志:

text
Cannot load configuration from stream
Top level is not a Map.

含义:AX 正在把一段不是 YAML Map 的内容当 UI 配置解析。

检查:

  1. 使用当前版本 GTSkillView。
  2. 覆盖或删除旧的 plugins/GTSkillView/client-ui/ax/main.yml
  3. 确认 client-ui/ax/main.yml 顶层是 ui:controls:
  4. 不要把文件路径字符串当成 AX UI YAML 内容。

更新插件后旧模板不会自动覆盖。测试新模板时先备份旧文件,再覆盖:

text
plugins/GTSkillView/client-ui/ax/main.yml
plugins/GTSkillView/client-ui/ax/hud.yml

AX 左键攻击触发技能

检查:

  1. release.vanilla.require-sneak-for-system 是否为 true
  2. release.vanilla.combos 是否写了普通 LEFT_LEFTRIGHT_RIGHT
  3. AX HUD 是否用了点击事件释放技能。
  4. AX key_bind 是否只监听 R/T/Z/X/C 等明确按键。
  5. AX PACKET 标识是否为 gtskillviewgtskillview:action

AX 按键应走:

text
plugins/ArcartX/key_bind/simple_key/GTSkillView.yml

不要把普通左键攻击当技能键。

AX 按键无效

检查:

  1. providers.yml -> providers.ax.enabled 是否为 true
  2. providers.ax.mirror-keybind 是否为 true
  3. 是否生成 plugins/ArcartX/key_bind/simple_key/GTSkillView.yml
  4. 文件中 keys 是否是当前要监听的键。
  5. trigger 是否执行 /gtsv key SLOT_x ax
  6. /gtsv key SLOT_1 ax 是否能释放。

默认 AX 按键文件:

yaml
GTSkillView_SLOT_1:
  keys:
    - "R"
  trigger:
    - "让玩家发送消息{message = /gtsv key SLOT_1 ax}"

如果命令能释放,按键不能释放,问题在 AX key_bind 或客户端配置。

AX HUD 挡住鼠标

检查 AX HUD:

yaml
ui:
  isHud: "true"
  defaultOpen: "true"
  background: false
  through: "true"

HUD 文件应是:

text
client-ui/ax/hud.yml

主界面文件是:

text
client-ui/ax/main.yml

不要把主界面当 HUD 打开。主界面有交互区域,会接管鼠标。

PaiUI 按键无效

检查:

  1. providers.paiui.mirror-keyconfig 是否为 true
  2. plugins/PaiDaXingPlugins/advanced/KeyConfig/KeyConfig.yml 是否有 GTSkillView 键。
  3. 旧同名键是否占用了当前按键。
  4. 命令是否为 /gtsv key SLOT_x paiui
  5. /gtsv key SLOT_1 paiui 是否能释放。

KeyConfig 示例:

yaml
R:
  client: true
  name: "GTSkillView 技能槽 1"
  cooldown: 2
  commands:
    - "[op]gtsv key SLOT_1 paiui"

mirror-keyconfig-overwrite: false 时不会覆盖已有同名键。需要换键时,先处理 PaiUI KeyConfig 里的旧键。

PaiUI 图标不显示

检查:

  1. skills.yml 是否写了 texture
  2. 客户端资源包是否有对应图片。
  3. 路径是否一致。
  4. PaiUI HUD 是否启用动态物品。
  5. 主界面和 HUD 是否使用同一套图标逻辑。

技能图片:

yaml
texture: "textures/gtskillview/thunder_slash.png"

普通 HUD 优先用 texture,减少动态物品刷新。

DragonCore 或 KongCore 不生效

检查:

  1. 对应客户端插件是否加载。
  2. providers.yml 中对应 provider 是否启用。
  3. variable-prefix 是否与模板变量一致。
  4. 模板是否回传 key SLOT_x
  5. /gtsv key SLOT_1 dragoncore/gtsv key SLOT_1 kongcore 是否成功。

当前默认模板保留按钮点击。物理按键监听按对应 UI 引擎自己的按键系统配置,不在模板里猜。

更新后还是旧界面

原因:默认资源不会覆盖已经存在的文件。

处理:

  1. 停服。
  2. 备份:
text
plugins/GTSkillView/client-ui/
  1. 删除需要刷新的旧模板。
  2. 启动服务器重新生成。
  3. 把自定义内容重新合并回新模板。

只更新 AX:

text
plugins/GTSkillView/client-ui/ax/main.yml
plugins/GTSkillView/client-ui/ax/hud.yml

只更新 PaiUI:

text
plugins/GTSkillView/client-ui/paiui/webgui/gtskillview/
plugins/GTSkillView/client-ui/paiui/KeyConfig.yml

性能排查

HUD 卡顿:

  1. performance.hud-sync-interval-ticks 不要低于 5。
  2. 不要在客户端页面每帧请求服务端。
  3. 动态物品不要每帧刷新。
  4. 冷却遮罩用服务端下发的百分比,不要全量重建 DOM。
  5. AX/PaiUI HUD 不要放大面积动态模糊或持续动画。

技能释放卡顿:

  1. 检查 MythicMobs 技能本身是否耗时。
  2. 检查 actions 是否执行大量命令。
  3. 检查 PAPI 变量是否过多。
  4. 检查外部物品消耗是否每次扫描大量配置。

最小复现流程

排查任何问题前先做最小链路:

  1. 使用原版 GUI:
yaml
ui:
  default: vanilla
  prefer-client-ui: false
  1. 使用一个没有条件、0 消耗、0 冷却的技能。
  2. /gtsv cast 技能ID 测试。
  3. /gtsv bind 1 技能ID 绑定。
  4. /gtsv cast 1 测试。
  5. 再接客户端 UI。
  6. 最后接真实消耗、条件、权限和资源包。

这样可以分清问题在服务端技能逻辑、外部技能插件、客户端 UI,还是资源文件。