服务端(Go): - GM 塞背包/带属性装备发放:在线角色推送 op14 增量物品行,背包实时刷新,无需回角色选择界面 - GM 改金币/改等级:去掉在线拒绝,落库后推送 op14 钱包/op37 等级状态,在线实时刷新 - 等级端点统一切换到新版 GMSetCharacterLevel(自带在线刷新) - 无限/锁死疲劳模式 + 燃烧疲劳:每房间消耗 2 点、打怪与通关经验双倍 - 燃烧疲劳开关时给所有在线角色推送系统提示(op12 mode 0) - 深渊史诗掉率:GM 全局倍率 + 城镇增益药剂窗口倍率,真实接入掉落结算 启动器(Python/JS): - 标题栏自绘、窗口 1204x717、禁止拖拽改大小、仅最小化/关闭 - GM 工具:疲劳与燃烧、深渊史诗掉率、拍卖行上架(单一定价对齐) - 拍卖行上架前端对齐服务端单一价格语义,修复 400 报错
5.8 KiB
技能树工具
入口:打开 PVF 后,在“工具”菜单末尾选择“技能树”。选择职业、转职及 SP / TP;顶部显示该职业的通用技能,点击技能可查看其 [explain] 描述(解析字符串引用并保留换行),或打开技能文件。同一坐标的技能合为一个图标,角标标出数量,默认显示文件中靠后的技能,点击后通过右侧列表切换。每个位置的选择在当前归档会话中独立保留,切换技能树或关闭弹窗后仍有效,保留原位置与文件顺序。支持画布缩放,图标复用现有 NPK 图片索引。未配置客户端资源时显示占位图标。
数据来源
clientonly/skillshoptreespindex.co、clientonly/skillshoptreetpindex.co的[skill tree]按职业 token / 相对路径读取,路径相对于clientonly/。- 树文件中的每个
[character job]独立保留,第二个值none表示未转职;不将未转职树合并进已转职树。 - 技能定义从
skill/skilllist.lst注册的职业列表查找。ID 属于职业上下文,通用技能也必须通过当前职业的列表解析,不能共用全局 ID 索引。 clientonly/commonskilllist.co的[common skill]保留顺序;合并所有匹配职业的[except skill info]/[info]排除项。[next skill]允许重复出现,每个值依源顺序保留。连线只连接同一分支存在的目标;缺失目标显示数据提示,不推断服务器学习条件。
坐标
使用 testdata/110US.pvf 检查了全部 17 个职业的 34 个 SP / TP 注册及所有转职分支。样例中的 [cell pos] 是列、行,换算为 x = 列 × 47、y = 行 × 67;[icon pos] 是直接像素坐标。两种写法可在同一分支混用,缔造者还使用 23、117 等半格横向偏移,不能先取整成网格坐标。
这些间距来自真实数据的规律,尚未通过客户端代码验证;未来遇到不同版本的布局参数时应独立扩展换算策略。SP 画布左侧显示该行最左侧技能的 [required level],同位置按文件顺序取第一个;缺失等级或空行不显示数值。TP 不显示等级标注。技能卡片下方显示技能名,不模拟玩家学习等级。
技能卡片在 47×67 网格内居中显示,连线及拖拽预览跟随显示偏移,不修改文件中的坐标;原有半格偏移仍保留。
关闭弹窗后,在本次应用会话中保留职业、转职及 SP / TP 选择;重开时重新读取所选技能树,若归档不再包含该选项则回退到首个可用选项。Cmd / Ctrl + 单击左下角路径可在编辑器打开技能树源文件。
浏览优先使用当前编辑器草稿;尚无草稿时读取归档覆盖层。拖拽只修改草稿,关闭弹窗仍保留。点击“保存到工作区”将当前技能树草稿应用到覆盖层,主工具栏的保存/另存为才写入 PVF 文件。未知转职 token 原样显示。拖拽保留原始坐标种类、技能顺序和后继关系,只替换坐标数字。
点击空白格添加技能
点击空白网格,在选择框中按技能名或 ID 搜索当前职业的已注册技能,确认后添加到当前转职分支。候选项排除该分支已有的技能 ID;不会创建新的技能定义文件。空分支也可直接点击网格添加。
新增记录使用 [cell pos],插在当前 [character job] 的结束标签前,不改变其他分支及已有记录。修改进入同一份编辑器草稿,沿用“保存到工作区”和 PVF 保存流程。选择期间切换归档、分支或修改文本会取消该次操作。
拖拽编辑
- 同位置技能整组移动,包含当前隐藏的技能记录。
- 落点吸附到 47×67 网格,必须位于当前画布内,且不能与其他技能卡片交叠;半格位置的卡片也参与碰撞校验。画布末尾始终保留一行空白落点,拖入后自动补出下一行,可继续向下扩展。
- 绿色预览表示允许放置,红色表示无效;无效放置、取消拖拽或归档/文本发生变化时,不应用该次移动。
- 保留
cell pos/icon pos各自的写法,移动一组混合坐标时分别换算。通用技能栏不参与拖拽。 - 草稿与文本编辑器共用。打开源文件可以继续编辑;文本更新后重新解析,避免用旧坐标覆盖新改动。
删除技能
右键技能选择“从技能树删除当前技能”,或在右侧信息面板点击同名按钮,可移除当前分支中选中的一条技能记录;同位置其他技能保留。删除同时移除当前分支指向它的全部 [next skill] 数值,其他分支及技能定义文件不变。通用技能栏不提供删除。修改进入草稿,沿用现有保存流程。当前树内的拖拽、添加、删除和保存均保留画布,避免重新解析时滚动条跳回顶部。
画布关联编辑
- 选中技能,拖动卡片右侧的绿色圆点到目标技能,新增一条有方向的
[next skill]关联。 - 点击已有连线,拖动箭头端的绿色圆点到其他技能,可替换该条关联的目标,原有顺序保持不变。
- 右键连线可“修改关联目标”或“删除这条关联”;右键技能可“添加后继关联”,随后点击目标技能。Esc 或点击空白处取消连线。
- 目标来自当前分支,不能指向自身或新增重复目标;原文件已有的重复关联保留,按条目分别编辑。新增关联追加在该技能记录末尾,修改和删除只操作对应的数值,保留其他字段、注释及换行。重叠技能之间的关联以绕过卡片的折线展示。
- 修改先进入共享草稿,保存方式与技能移动相同,画布滚动位置保持不变。
验证
go test ./...
PVF_TESTFILE="$PWD/testdata/110US.pvf" go test ./services -run 'TestSkillTree|TestCommonSkillsJobExclusions' -v
cd frontend && npm test && npm run build