Repository navigation
Releases
v0.15.13 — 总览排版可跨端搬运、批量参数改为运行期与识别更省 CPU
v0.15.13 — 总览排版可跨端搬运、批量参数改为运行期与识别更省 CPU
这一版有三块主要变化:用户总览的分组、列与列宽独立成 profile.json,可以上传到云端、
在另一台机器下载回来;批量配置组不再固化生命周期参数,参数改为「本次执行」的运行期设置,
并新增安卓「允许竖屏」启动;PC 端识别默认限到 2 线程,CPU 占用降到约三成,墙钟反而更快。
其余改动集中在稳定性:主页判定在 OCR 漏读小字号时用图标模板复核,同步通道遇到过期令牌
自动换一次再试,周期恢复不再用过期基线推算并覆盖其他设备的真实消耗。
⚠️ 不兼容变动与升级指引
用户总览的可见结构迁到 config/session/profile.json
- 现象: 总览的分组、组内列顺序、合计行开关与列宽从
config/session/interface.json
移到独立的config/session/profile.json。升级后第一次打开会一次性迁移,旧的
profile.*与ui_state.profile_overview节点会被清理,迁移前的内容写入
config/session/_backup-<时间戳>/profile-layout-before.json。 - 原因:
interface.json只是本机界面状态,换机器就丢,也没法参与云端同步;
列宽原来按下标数组保存,增删一列就要手工搬整段数组。 - 如何调整: 无需操作,自动迁移。若
profile.json内容损坏,程序保留原文件、
记错误日志并按默认结构展示,不会静默重建;需要回退时把备份文件内容手工恢复即可。
页面结构改为按按钮上传 / 下载,手机端只读
- 现象: 用户总览工具栏新增「上传排版」「下载排版」(原「上传页面结构 / 下载页面结构」
改名)。它们不参与常规同步:启动同步与定时同步都不会搬运它。上传时若云端版本来自
别的设备,会先给出确认(显示来源设备、时间与组/列数对比),默认不覆盖;下载固定两次
确认,落地前先校验内容,成功后把旧结构备份到_backup-<时间戳>/。手机端只能下载,
点击上传会提示「页面结构以 PC 为准」。 - 原因: 排版是用户手工排出来的,整体替换不能混进逐项合并的常规同步;写入也必须有
唯一权威来源,否则手机端会把 PC 的排版回退成旧版。 - 如何调整: 无需操作。想在新机器上恢复排版,登录后点「下载排版」并按两次确认。
批量配置组不再保存生命周期参数
- 现象: 旧
batch.json里的workflow_params不再读取,也不做迁移;配置组的生命
周期参数回落到工作流文件头的默认值,下次保存配置组时该字段自然消失。参数现在的编辑
入口是桌面「批量 → 参数」页与手机「执行」设置。 - 原因: 参数属于「这次怎么跑」而不是「配置组是什么」;原来存进配置组后,改参数
要进配置对话框,运行中也没法单独调整。 - 如何调整: 到「批量 → 参数」重新设置一次需要的值。启动时参数会冻结成执行快照,
运行中再改不影响当前批次,下一批才生效。
安卓批量「允许竖屏」需要异常恢复与条目准备
- 现象: 「批量 → 参数」新增「允许竖屏」。它只有在配置组同时配好「异常恢复」与
「条目准备」两个工作流时才可用;缺任一项时开关置灰,手机端保存会被拒绝。 - 原因: 竖屏起步时程序会先借异常恢复把客户端收回登录主页,之后只有条目准备能把人
重新送进游戏。少了条目准备,整批会停在登录页逐条失败。 - 如何调整: 在「工具 → 批量配置」为配置组补上这两个工作流,或先把手机转为横屏再跑。
武学、玩法、流派配置改为「名称 → 定义」映射
- 现象:
config/system/yysls/game_config/下三份配置从列表改成以名称为键的映射,
键序就是展示顺序。如果你在config/local/yysls/game_config/里保存过旧的列表格式,
升级后加载会报错并跳过这些条目,武学 / 玩法候选会缺项。 - 原因: 列表没有稳定键,改名会变成两条记录;映射让用户改动只覆盖对应的那一个键,
系统后续新增的条目仍然出现。 - 如何调整: 把本地覆盖文件改成映射格式,或删除
config/local里对应的覆盖,
改用随包配置。系统模式下三个配置面板支持拖动排序(用户模式没有排序入口,顺序由
系统配置决定)。
PC 端识别默认并行度改为 2 线程
- 现象: 未配置过这一项的用户,PC 识别默认使用 2 个识别线程、1 个并行算子线程,
CPU 占用明显下降(同帧实测约从 8.44 CPU 秒降到 2.38 CPU 秒),墙钟还略快。 - 原因: RapidOCR 出厂把检测 / 方向 / 识别三个模型都设为开满物理核,多个线程池互相
争抢,并行效率反而下降。 - 如何调整: 无需操作。若你的机器识别变慢或小字漏检增多,到「图像识别 → 识别配置 →
识别性能」调整识别线程数(1–16)、并行算子线程数(1–8)与检测输入短边(480–1920px);
保存后下一次识别自动重建会话,不需要重启。
主页布局、登录等待与自动剧情脚本的位置变化
- 现象:
game_main_page两端布局重新标定并新增图标模板(安卓ditu、桌面dongzuo),
主页判定在文字全部漏读时会改用该图标复核;登录加载等待从 10 拍放宽到 20 拍,主页确认
从 8 拍放宽到 10 拍。自动剧情跳过脚本从story/auto_skip.wf移到
standalone/story_auto_skip.wf(工作流 id 仍是story_auto_skip)。 - 原因: 「限时」等小字号入口在缩放、低对比与过场帧下会被 OCR 整批漏读,导致明明在
主页却被判成未知页面;弱网与慢机器的登录加载时间也超出旧轮数。 - 如何调整: 无需操作。如果你改过
config/local/layouts/里的主页布局、把登录或
页面判定工作流复制到了config/local/workflows/,或自定义脚本引用了旧的
story/auto_skip.wf路径,需要手动同步或改成新路径;config/local的覆盖优先于
随包内容。
✨ 新增功能
- 用户总览排版跨端搬运。 页面结构独立成
config/session/profile.json,工具栏新增
「上传排版 / 下载排版」;列宽按列 key 保存,增删列不再错位,用户名列宽只存一份、各分组
天然一致。跨机器按文件记录的字体像素与缩放比折算,再用当前字体实测表头宽度兜底,
折算结果不回写,避免两台机器互相拉扯。 - 「创建快照」挪到用户总览工具栏。 与上传 / 下载同属「云端基线」一组动作;PC 才能
创建,手机端点击会提示原因,未登录先提示登录。账户管理同步表因此去掉只为它存在的
「功能」列(6 列 → 5 列)。 - 批量生命周期参数改为运行期设置。 桌面在「批量 → 参数」编辑并防抖落盘,手机在
「执行」设置里调整;启动时冻结为执行快照,wf 脚本仍实时读取。档案键改名会同步改写
草稿里的profile_key,不会下次运行报「Profile key 不存在」。 - 安卓批量允许竖屏启动。 起步画面交换宽高后匹配布局时放行,先借异常恢复回到登录主页,
再按生命周期进入游戏;缺少恢复或条目准备工作流时开关置灰并说明原因。 - 批量脚本页「全不选」改为「反选」。 逐行翻转勾选状态,按当前行序重建执行顺序并写入
草稿;运行期间同样锁定。 - 识别配置新增「识别性能」分组。 可调识别线程数、并行算子线程数与检测输入短边;
改配置后下一次识别自动重建会话,不用重启。 - DSL 新增单行守卫与
to_flag。if <任意条件> -> <一条语句>与env:"x" -> ...
归一到同一个If节点;to_flag(x)按if $x的真值口径把结果压成 1 / 0,方便返回
页面判定或累加计数。 - 主页判定增加图标模板复核通道。 文本通道全部未命中时,安卓只扫
ditu、桌面只扫
dongzuo做模板匹配;只认本端指定的区域,对应区域未绑定模板按配置错误终止。 - 游戏配置支持系统模式拖动排序。 流派、武学、玩法三份配置的键序即展示顺序,按属性
分组展开;武学删除守卫补上玩法arts引用检查。 - 数据模型复制定义原样带出 Key 与标签。 复制后所有字段照抄,Key 仍可编辑;沿用原 Key
保存仍按占用校验拒绝,不会意外覆盖已有定义。
🔧 修复
- 同步通道遇到过期令牌会一直报「未登录」。 别处刷新过令牌后,每分钟的自动同步与手动
「立即同步」会持续失败,直到心跳把令牌刷回来。现在收到unauthorized/token_expired
时换一次令牌重试,只重试一次,非鉴权错误不触发刷新。 - 周期恢复用过期基线覆盖其他设备的真实消耗。 启动后首次拉取完成前,本地锚点还是上次
同步的状态,推算出的准点恢复被写成绝对值上行(体力 450 被覆盖成 2500)。现在本进程
未完成首次干净拉取前不推算、不物化周期恢复;确实没有登录凭据时照常本地推进,凭据库
读不到时按「可能有登录态」保守拦住。 - 空闲断流后横幅消不掉、「重新检查」无效。 断开目标或切换目标时横幅会残留;空闲状态
点「重新检查」只往没人等待的事件上 set 一次。现在横幅按目标归属管理,断开前先收起,
切换目标跟随;空闲重查直接重建画面流,成功即收起横幅,失败把原因留在横幅上可再试。
连接信息列按运行状态着色(未运行 / 运行中 / 暂停中 / 异常),选中行不覆盖高亮。 - 登录与主页等待轮数不够。 登录加载等待 10 → 20 拍、主页确认 8 → 10 拍;记「最后一轮
决策帧」的判断同步改为引用变量,不再写死在旧的 8 拍上。 - 主页文字漏读导致误判不在主页。 「限时」等小字号条目整批漏读时,导航与批量会把主页
判成未知页面并反复 pause;现在由本端图标模板复核,背包页仍统一排除。 - wf 语言服务器 Outline 整体失败。 单行守卫没有
end却被当成块开头,符号范围退化成
零宽区间,客户端校验selectionRange不合法后 Outline 全部失败;现在按语法识别真正
需要end的块,未闭合时退到最后一个非空行。 - 「创建快照」在账户管理里位置不对。 它改的是总览数据本身,却挂在同步表里;现在搬到
用户总览工具栏,并去掉只为它存在的「功能」列。
📦 重构
- 登录态收敛为进程内单会话,刷新改单飞。 账号对话框、页面结构上传下载与手机端账户
桥接原来各自持有AccountSession,同时刷新会把对方的令牌顶掉;现在共用唯一会话,
同一会话的刷新串行执行,内存里已是新令牌就直接复用。 - 系统工作流的单步早退改用单行守卫。 登录、导航、页面判定、江湖任务、批量恢复等脚本
的if 条件 / 一条语句 / end统一写成if 条件 -> 语句,行为不变,脚本更短。 - 自动剧情跳过归到
standalone/。 只支持安卓、不可批量执行,与其它独立活动脚本放在
一起;文件内容与 id 不变。 - 删除从未被引用的
huoyun_card占位场景,并同步去掉组件分组登记与空壳桌面布局。 - 三份游戏配置的加载与保存按映射结构重写。 变更判定改为按序列化文本比对,只调整顺序
也会写盘;resolve_school命中多个流派时记 warning。
📚 文档
- 新增「系统脚本」用户指南章节(6.7),补齐工作流清单、分层与选择口径。
- 新增页面结构的需求与存储契约文档(
20-requirements/40-profile/06-overview-layout-sync.md
与 Profile 架构小节),说明profile.json字段、迁移、列宽折算与上传下载边界。 - 新增南吕赛季说明与装备词条清单(
docs/10-game/07-nanlu-season.md、
docs/10-game/affix-compendium.md),并把通用判定口径上移到调律规则总览,各流派文件
只保留差异。 - 语法与感知文档按「公共语义集中、分篇只留差异」重整,补齐
to_flag与单行守卫的
权威说明;内置函数文档去掉会漂移的汇总数字。 - 中文 README 重写并新增英文版,同步补充 CLI 与脚本编写相关说明。
📝 变更统计
相对 v0.15.12(不含本文件的发布准备提交):
- 提交 44 个:
docs12、feat11、fix10、refactor5、chore3、test2、config1 - 文件变更 278 个,新增 9,183 行、删除 3,035 行
⚠️ 免责声明
本项目仅供学习与技术研究使用。使用自动化工具操作游戏可能违反相关游戏的用户协议,
由此产生的后果由使用者自行承担。升级前请备份个人配置与数据库。
📄 许可证
PolyForm Noncommercial License 1.0.0 — 非商业使用许可
v0.15.12 — 十二种界面语言、画面流故障等待恢复与配置不再冻住
v0.15.12 — 十二种界面语言、画面流故障等待恢复与配置不再冻住
这一版最大的变化是界面语言从 2 种扩到 12 种(新增繁中、日、韩、德、法、西、葡、俄、泰、越),
并修掉 v0.15.11 打包漏带翻译文件、语言下拉框只剩简体中文的问题。其次是画面流:
连接断掉以后不再拿着冻结的最后一帧继续识别和点击,而是进入等待恢复。
其余改动集中在两件事:把「静默失败」改成「当场报错并说明原因」;让用户自己改过的配置
不再挡住后续版本新增的内容。
⚠️ 不兼容变动与升级指引
画面流断开后不再在冻结画面上继续点击
- 现象: 手机息屏、数据线松动、投屏窗口被关闭后,任务会停下等待恢复并给出提示
(红色横幅;有运行实例时另外弹窗)。等不到恢复就报「执行通道中断」并结束本次运行。
只有点击、不含截图的动作脚本也一样受保护。 - 原因: 旧实现断流后
capture()继续返回最后一帧,识别和点击全在冻结画面上进行,
跑完还写「(正常完成)」。用户看到的是「任务说成功了,游戏里什么都没发生」。 - 如何调整: 无需操作。若某个脚本确实需要在断流后立刻结束而不是等待,把
「建立流式传输尝试次数」调成 1。
批量任务遇到执行通道中断会整批中止
- 现象: 过去通道坏掉之后,批量的每一项都算一次「条目失败」并继续下一项,跑完仍写
「(正常完成)」「脚本执行 0 次」。现在整批中止,报告写「执行通道中断,整批中止」并给出
归因、次数、耗时、条目、用户与脚本。 - 原因: 通道故障是设备/会话级问题,逐项重试只会空转;继续跑也拿不到可用的画面。
- 如何调整: 无需操作。恢复连接后重新运行即可。批处理历史里这类记录的状态是
channel_fault,与普通失败区分开。
Android 连接恢复次数默认 3 → 5,并新增「建立流式传输尝试次数」
- 现象: 新装用户或从未改过这一项的用户,默认阶梯变成「流式 5 次 → 代理重连 5 次 →
ADB 5 次」,间隔 2 秒,仍不可用则无限等待人工处理。已经存过 3 次的老用户不会被改,
仍按 3 次跑。分组名也从「Android 连接恢复」改为「Android 连接设置」。 - 原因: 3 次在弱网、scrcpy 启动慢的情况下常常一次失败就要人工介入。
- 如何调整: 想用新默认值,到「高级设置 → Android 连接设置」把三项改成 5(或改成你想要
的值)。存量配置不会被自动重写。
系统配置里的显示名改成了中英双语映射
- 现象:
config/system/app.yaml里环境名、方案名、等待参数标签的值从单个字符串变成
{zh_CN: 安卓, en_US: Android}。英文界面下这些名字终于显示英文。 - 原因: 界面文案属于软件,配置显示名属于配置数据,两者所有者与生命周期不同,不能放进
同一张翻译表;写进配置自己身上才能随界面语言切换。 - 如何调整: 无需操作。如果你自己改过这些名字(改动落在
config/local/app.yaml),
你的纯字符串覆盖依然生效,英文界面下显示的就是你写的那个名字;想看到随包译名请删掉
local 里对应的那条覆盖。
改过环境名或方案名之后,后续版本新增的仍然会出现
- 现象: 以前只要改过某个环境或方案的名字,
config/local/app.yaml就把整张envs/
plans冻住,之后版本新增的环境、方案在这台机器上永远不出现,除非手动删掉本地覆盖。
现在 local 只记录你真正动过的那几条。 - 原因: 整键替换改成按稳定 key / id 的增量合并(
__added__)。 - 如何调整: 无需操作,下次在设置页保存时会把旧的整表覆盖自动转成增量形式。注意预置
环境与方案在用户层不可删除——可以改值、可以新增自己的,但不能删掉随包内容。
✨ 新增功能
- 十二种界面语言。 除简体中文与英文外,新增繁体中文、日本語、한국어、Deutsch、
Français、Español、Português、Русский、ไทย、Tiếng Việt。设置页「界面语言」下拉框直接切换,
保存后提示重启生效(提示语用你刚选的那门语言显示)。各地语言的完成度与生成方式见
多语言词表现状。 - 画面流健康判定与等待恢复。 断流判定按四条事实组合(socket EOF、亮屏 3 秒零字节、
亮屏 5 秒无新帧、连续解码失败),息屏与尺寸切换期间豁免。故障后进入「等待恢复」,
设备状态仍算已连接,不会因为「请先连接设备」把开始与批量挡在外面。 - 语句执行前校验画面通道。 每条语句前查一次通道健康(健康时只是一次布尔判断),
纯输入脚本因此一并受保护;运行期取帧改走capture_for_run(),故障时阻塞等恢复或抛
ChannelFaultError,不再把陈旧帧交给识别。 - 在线配置改为后台下载。 启动不再等下载,窗口立刻出现;下载到的修订在下次启动、读取配置
之前安装,本次运行不替换配置;设置页显示已下载待安装的修订号。边界见
在线配置后台下载与下次启动安装。 - 游戏配置支持删除自建套装。 表格上方新增「删除套装」,选中后二次确认;被同一份配置里
的攻具套装登记为关联防具时,确认框会列出引用者,删除后自动解开这条关联。备战方案与装备
记录里引用该套装的部位按未知套装处理,不会自动清空。新套装编号取当前最大序号加一,
不补中间空号;删掉最大编号后新建会复用它。 - 词条配置右侧拆成基础属性 / 等级属性两个子 Tab,整页滚动,长列表不再把页面撑到几千像素。
- 窗口尺寸、位置与最大化状态会被还原。 重启后窗口回到上次的大小、屏幕位置与最大化状态,
连接分栏宽度一并保存。此前只存了尺寸,换显示器或改缩放比例后会被还原到不适用的位置。 - 数据模型定义支持右键复制,「变更记录」对话框统一并扩充为同一套视图。
🔧 修复
- 语言下拉框只剩简体中文。 v0.15.11 的发行包漏带
config/i18n,界面语言列表扫描不到
任何语言文件,只显示简体中文且不报错。本版发行包随包携带翻译目录。 - 断流后把冻结画面当成正常画面(现象与影响见「不兼容变动」第一节):识别读到的是上一帧,
点击落在游戏已经变化的界面上。 - 批量「正常完成」的口径(见「不兼容变动」第二节):通道中断不再算逐项失败后继续跑完。
- 重启后窗口大小变化很大。 旧实现只存窗口尺寸、且没有位置与最大化状态,多显示器与
缩放比例变化后还原到错误的位置或尺寸。 - 无毕业率模型时不再抛异常。 例如 110 阶的「鸣金·霆」没有模型,最优组合页过去直接抛
「未找到对应流派的毕业率方案」,改为空状态提示并说明该流派/阶数暂无模型。 - 切换执行目标后,任务候选集没有跟随该目标的环境,导致可运行列表与实际目标不匹配。
- 回放同步没有写入本地账本。 从其他设备回放过来的记录过去只进内存视图,重启后消失;
行身份改用「来源设备 + 来源 local_id」,重复回放不再产生重复行。
📦 重构
- 翻译词表按模块拆分。 从三个大文件拆成
config/i18n/{lang}/*.yaml(19 个模块文件 +
主文件只留meta),每个模块内按源文件命名段落,zh_CN侧是en_US每个键的同名自映射。
加载器合并读取,tr()调用方无感。 - 在线配置下载与安装解耦。 同步段只保留本地回滚(
recover_installation()),下载进后台
线程,候选登记到更新暂存区;prune_archives()把待安装候选算进保留集合,否则下次启动会
把刚下载的内容当垃圾清掉。会员候选只暂存密文,安装时重新取一次授权解密,不把会员明文
留在磁盘上。 envs/plans改为按身份增量合并(见「不兼容变动」第五节)。
📚 文档
- 新增 10 种语言的词表现状(多语言词表现状),
说明各语言的来源、完成度与生成方式,明确「英文回退」的完成度指覆盖率而非本地化程度。 - 新增游戏术语中英对照:
docs/10-game/20-translation/下 7 张分类对照表,以及国际服客户端
翻译文件的位置、容器格式与解码方式。 - 新增「配置显示名的载体」需求与架构小节,把「配置显示名走
tr()词表」这句过期说法改正,
并补上tr_in()的用途与边界。 - 更正 v0.15.11 说明里两处过宽的说法(历史发布说明保持原样,以本节为准):
- 「下一个任务就会读到新的配置」:只有
.wf脚本正文、YAML 缓存(按修改时间与大小失效)
和每次开跑前读取的布局会立即生效。场景注册表、游戏配置、调律规则、OCR 清洗组是进程单例,
不随任务重建;Git 拉取与外部编辑需要界面刷新或重启。 - 「未建模来源不会静默按零计入」:数值上先按 0 参与求值,同时进入
unmodeled清单并写日志,
属性来源里可见,由 residual 兜底。
- 「下一个任务就会读到新的配置」:只有
- 补一张刷新语义表(用户指南):立即生效 / 需界面刷新 / 需重启三类分别是哪些内容。
AGENTS.md2.5 改正:任务快照只覆盖环境、参数、用户、脚本与执行顺序;配置直接读磁盘,
进程单例由程序内变更通知维护,并明确不得把任务配置快照重新引入。
📝 变更统计
相对 v0.15.11(不含本文件的发布准备提交):
- 提交 50 个:
feat18、fix14、chore7、docs6、refactor4、test1 - 文件变更 411 个,新增 102,478 行、删除 6,796 行
- 其中
config/i18n252 个文件(新增 248 个),+91,539 / −4,175
⚠️ 免责声明
本项目仅供学习与技术研究使用。使用自动化工具操作游戏可能违反相关游戏的用户协议,
由此产生的后果由使用者自行承担。升级前请备份个人配置与数据库。
📄 许可证
PolyForm Noncommercial License 1.0.0 — 非商业使用许可
v0.15.11 — 鸣金·霆与双枪、风沙酒肆夜宿谜影、配置写入纠偏
v0.15.11 — 鸣金·霆与双枪、风沙酒肆夜宿谜影、配置写入纠偏
这一版有两个重点:新增流派「鸣金·霆」与双枪玩法,并把新流派接进毕业率;新增独立脚本「风沙酒肆·夜宿谜影」,桌面端用键盘走位、安卓端推摇杆扫房间,同一个入口。
其余改动集中在「把静默失败改成当场报错」:脚本加载期检查作用域与参数元数据、字段赋值越界直接抛错、游戏配置保存只写真正变化的文件。
基线说明: 本版相对 v0.15.10。v0.15.10 的代码已在
master,但该版本没有单独发布 Release(标签未推送),因此从 v0.15.9 升级的用户会在本版一并拿到 v0.15.10 的全部内容;逐条说明见 v0.15.10,下面只重申会阻断升级的条目。
⚠️ 不兼容变动与升级指引
脚本里的 add() / sub() / mul() / div() 已移除
- 现象: 升级后调用这四个函数的脚本在加载时报「未知内置函数」,脚本无法运行。
- 原因: 它们与文法里的
+ - * /完全重复,变参形式还容易让人误以为能一次连加多值。 - 如何调整: 换成运算符,如
$a = $b + $c。mod/min/max/abs保留(运算符表达不了)。内置函数从 103 个变为 99 个,语法文档已同步。
参数 type 写错会让脚本加载失败
- 现象: 参数元数据里写了
type: int之类的非法类型,脚本直接打不开,提示「未知类型 'int',必须是 select / number / bool / checkgroup / text 之一」。 - 原因: 过去非法类型被静默丢弃:参数在界面上不显示、批量不注入,脚本里的
default继续生效,用户完全看不到「参数消失了」。 - 如何调整: 按提示改成合法类型。整数与小数统一用
number;int/float/string都不是合法值。
过程中读取未声明的变量会在加载期报错
- 现象: 脚本加载失败,提示某个变量「没有在本过程赋值、不是形参、也没有 global 声明」。
- 原因: 这类读取过去恒为
null,拼错变量名或漏写global都静默失效,要等运行到那一行才发现。 - 如何调整: 按提示补
global $name或在本过程内赋值。确实要从外部拿的变量,在用到它的过程里显式global。
字段赋值失败改为报错
- 现象:
eval $x.y = ...遇到非字典根、列表下标、非字符串动态 key 时,直接抛错中断,而不是像以前那样打一行日志、继续往下跑。 - 原因: 旧值原地不动,脚本看起来像赋值成功,数据却在后面莫名其妙地不对。
- 如何调整: 按报错提示改:给列表追加请用
append();动态 key 先转成字符串;对非字典值不要做字段赋值。读取路径($list[0])行为不变。
任务不再使用配置快照,改为直接读磁盘
- 现象: 任务运行期间在别处改了场景、脚本或游戏配置,下一个任务就会读到新内容(以前要重启);任务里的写盘也真正落到
config/system或config/local,不再写进随任务销毁的临时副本。 - 原因: 去掉「任务开始时复制整棵配置」的快照机制,避免同一份配置在任务内外出现两个版本。
- 如何调整: 无需操作。若依赖「任务内改动只在本任务生效」,请改为显式判断后再写。
在线配置只在启动读盘前安装
- 现象: 运行中不再下载或替换
config/system,设置里切换「在线配置」也要下次启动才生效。 - 原因: 运行中替换系统配置会让正在跑的任务读到半新半旧的内容。
- 如何调整: 切换后重启一次应用。
本版同时包含 v0.15.10 的不兼容变动
以下条目在 v0.15.9 上仍然成立,从 v0.15.9 升级的用户需要逐条确认(详细说明见 v0.15.10):
- 登录后不再自动同步:需要先点一次「初始同步」,之后才恢复增量同步。无需其它操作。
- 初始同步在云端已有数据时会备份并替换本地三件套:本地
users/、profile.db、profile.yaml会移入config/session/_backup-initialsync-<时间戳>/,可手工找回。 - 「清除同步」会清空云端:需要密码确认;清空后回到未建立状态,点「初始同步」重新播种。
- 新实例不再自动创建
default用户:在「用户管理」创建,或登录后点「初始同步」把云端用户拉回。 - 只读实例禁用账户管理:同一安装目录的第二个窗口里账户相关入口是灰的;只读实例的其它改动仍会被主实例同步发现。
- 手机端只拉不推定义与快照:定义在 PC 端改,手机同步时拉取;云端没有快照时提示先在 PC 完成初始同步。
- 头像不再随常规同步自动上传/下载:本版改为用户管理里的「同步全部头像」按钮,见下方新增功能。
- 会话文件改为首次使用时创建:
config/session下部分文件不再启动即建空文件,无需操作。
✨ 新增功能
新增独立脚本「风沙酒肆·夜宿谜影」
- 「活动」分组新增可运行脚本:从客栈房间内部开始跑(不需要站在从拾香旁),看到「躺下」触发一次(重复触发会起身)。PC 用 W/A/S/D 扫房间找床边;安卓端推摇杆、每轮右转 45° 扫一圈。
- 多人模式躺下后会等队友都躺下再开始守夜,随后连续接待 5 位访客;默认只放第 2、第 5 位,另有「识别优先」「只看序号」「只信识别」三种判断策略,配合保守放行序号、演练模式、连刷轮数与床位设置。
- 找床、开门、关弹窗、开下一局四个能力按平台拆成
_desktop/_android过程,其余逻辑只保留一份;旧的移动端专用入口并入android.wf。 - 目前只实机验证过「只开 2、5」策略,其余策略建议先用演练模式确认。
新流派「鸣金·霆」与双枪玩法
- 流派、两门武学(决狱悬锋枪 / 拨山取月枪)、玩法「双枪」、定音词条、套装与会意规则同步登记;web 端与遥测词表已重新导出。
- 转律词条库按调律规则的
transmute_priority排序,与鸣金·虹 / 鸣金·影 一致。 - 110 阶暂无毕业率模型,最优组合页会提示「未找到对应流派的毕业率方案」,不会算错。
毕业率支持新流派,不再有平行白名单
- 能否计算改由模型文件自身决定:导入一份模型即生效,不再需要在代码里另加流派名。
- 新增 115 阶「鸣金·霆」基础方案(33 个输入,满值回算 100%,基准 DPS 147337.30)。霆的两门武学暂不在 DIY 计算器天赋表中,按「未建模」登记,属性来源里可见,不会静默按零计入。
- 毕业率转换器不再把模板遗留、本流派用不到的武器增伤行当成导入错误;不认识的简称仍然报错。
9 个流派的 115 阶毕业率表格更新
- 新版表格补录未央城 P1 蹊跷(满值「最小外功 / 攻击」+12),基准 DPS 提升 0.08%–0.21%,公式、轴与环境参数未变。属性模型同步登记该地图收集,110 / 115 两条基线期望值随之更新。
- 旧表归档到「过期版本」,被取代的旧模型删除,每个流派每个等级仍只保留一份。鸣金·虹、鸣金·影 没有新版 115 阶表,保持原样。
游戏配置可以新增套装
- 攻具 / 防具套装表右上角新增「添加套装」:只填名称,稳定 key 由界面生成(
custom_N)。名称是可改的展示 label,key 才是配装方案、装备记录与协议引用的身份。
帮助菜单新增「赞助」
- 帮助 → 赞助(反馈下方):微信 / 支付宝收款码并排展示,可刷新、可直接打开站点赞助页。二维码按需下载并缓存在系统临时目录,换码不需要发版;一张都取不到时会直接给出「打开赞助页面」的出口。
头像同步改为手动按钮
- 用户管理对话框底部左侧新增「同步全部头像」,仅登录后可见,只读实例不显示。
- 双向合并:本地有云端无则上传、云端有本地无则下载、内容相同跳过、两边都不同按修改时间裁决;单张上限 1 MB,不做删除同步。
本版同时包含 v0.15.10 的新增功能
初始同步与数据同步页、账户自助服务(导出 / 清除 / 注销)、云端被清空后自动复位、文档增量同步(按修订号)、离线包可声明不携带总览数据。详见 v0.15.10。
🔧 修复
- 赛季上半结束日期写错一天: 南吕相和上半 42 天,最后一天是 11-05;原值写成 11-06(下半开始日),会让上半 / 下半判定整体晚一天。
- 游戏配置保存误报「磁盘配置已更新」: 编辑基线只在进程首次读取时记录,对话框打开时虽已读到最新内容,保存却仍拿启动那一刻的字节比对。现在打开与撤销时对齐基线,打开之后发生的真实并发写入仍会被拦下。
- 只改一个领域却写七份配置: 保存过去无条件写七份文件、每份单独做并发检查,改词条别名也会因另一个文件被别的窗口保存而整次失败。现在只写业务内容真正变化的文件。
- 扫描备战方案因形近字整条跳过: OCR 把「拨」读成「拔」时,与本地武学的逐字比较失败,方案被跳过且日志看不出差异。现在按配置武学表做唯一匹配纠正,纠正不了会报出原始文本,真不一致时打印两边值。
- 定音词条漏识别: 装备词条清洗组补「拔山取月 → 拨山取月」,并把方案名列表也纳入该清洗组,识别与写入使用同一份名字。
- 定音简称缺失: 斩雪刀法 / 悬锋取月的「派生技定音」补进简称表。
- 空区间被当成错误:
[10...5]过去记 error 日志,而range()同样情形返回空列表。现在两者一致空转;三个系统脚本改用区间语法。 - 安卓端找床冲过头: 前进止点与右后斜移的偏移量收紧,并关掉拖拽端点随机抖动,走位距离可校准。
- 周期重置被计入上行: reset 留在本地历史,不再进入上传与待上行计数;回放配额时上一周期的增量直接丢弃。
- 同步:旧账挡住新修改: 早于快照的账本记录跳过并计入结果,其后的新修改照常入库;跟随必须带上用户确认的动作,未确认不剪切本地。
- 同步:初始同步播种 / 跟随不完整: 没有快照时先占锁,空总览也能建立水位为 0 的第一份基线;已有快照时确认框写出来源、时间与条目数,失败会把本地文件搬回。
- 本版同时包含 v0.15.10 的修复清单: 全新实例拉不到用户、本地
profile.yaml缺失不拉取、名册缺文件时上传空资料、云端定义被旧版本回推、便利贴重复上传、总览快照落地慢、文档与头像逐份请求慢、桌面端凭据降级。详见 v0.15.10。
📦 重构
- 任务配置快照整体移除: 不再复制整棵配置、不再创建
.task代次目录;get_resolver()固定返回进程单例,引擎在任务起点清空读取缓存;批量任务与各配置单例不再按快照另建实例。 - 夜宿谜影按环境拆分: 平台相关能力按
_desktop/_android分发,其余过程只保留一份(细节见「新增功能」)。 - 二维码缓存移到临时目录: 临时目录优先、
config/session兜底,两者都不可写时只在内存里用;下载、体积上限与图片头校验抽成共用模块,赞助收款码与交流群码共用一套规则。 - 游戏配置保存:只写变化文件并返回写入列表,测试同时钉住「顶层键必须登记归属」。
📚 文档
- 语法文档同步移除四则运算内置函数后的写法。
- 实例并发文档补回状态行基线,修复发布门禁。
- AGENTS 补充长命令执行与源码文本锚点的约定。
📝 变更统计
- 相对 v0.15.10 共 31 个开发/维护提交,另有 1 个发布准备提交。
- 除
docs/外 146 个文件变更,新增 16745 行、删除 1400 行;docs/22 个文件。 - 按发布流程本地执行
add_content_version --check、Ruff、mypy 与全量 pytest
(QT_QPA_PLATFORM=offscreen);云端 Windows/Android 构建、签名核验与产物核验
由发布流水线执行,结果通过执行反馈报告。
⚠️ 免责声明
本项目仅供学习与技术研究使用。使用自动化工具操作游戏可能违反相关游戏的用户协议,
由此产生的后果由使用者自行承担。升级前请备份个人配置与数据库。
📄 许可证
PolyForm Noncommercial License 1.0.0 — 非商业使用许可
v0.15.10 — 初始同步、文档增量与账户安全
v0.15.10 — 初始同步、文档增量与账户安全
这一版把账户同步从「登录就自动全量对账」改成显式的初始同步 + 增量对账:登录后先建立一次同步状态,之后每次同步只拉云端变化、只推本地改动。同时收紧了三处写权限——定义与快照只由 PC 写、只读实例不参与账户操作、手机端只拉不推。
不登录、不点同步的用法保持原样:任务、批量、档案都还在本机。
⚠️ 不兼容变动与升级指引
登录后不再自动同步,必须先「初始同步」
- 现象: 登录账户后「立即同步」不可用、60 秒自动同步也不跑,直到点过一次「初始同步」。
- 原因: 同步状态必须先显式建立,避免新实例一登录就静默上传或拉取。
- 如何调整: 点一次「初始同步」即可,此后照常。
初始同步在云端已有数据时会备份并替换本地三件套
- 现象: 本地的
users/、profile.db、profile.yaml以及yysls/play_styles.json等会话级同步文档,会被移入config/session/_backup-initialsync-<时间戳>/,随后以云端数据为准重建。 - 原因: 云端是唯一权威;本机已有数据与云端同名时,不允许两边各留一份。
- 如何调整: 无需操作。被移走的本地数据仍在备份目录,可手工找回。云端为空时不会备份,改为直接上传本地并创建初始快照。
「清除同步」现在会清空云端
- 现象: 该按钮会清空云端的定义、用户、文档、总览账本与快照(账号与登录态保留),需要密码确认;此前版本只清本地进度。
- 原因: 需要一条「彻底清空远端、重新开始」的路径。
- 如何调整: 清空后回到未建立状态,点「初始同步」重新播种即可,不必重新登录。
新实例不再自动创建 default 用户
- 现象: 全新实例打开后没有用户,状态栏提示先创建用户或登录账户。
- 原因: 去掉「没有用户就默认造一个 default」的行为。
- 如何调整: 在「用户管理」创建用户;或登录后点「初始同步」把云端用户拉回本地。
只读实例禁用账户管理
- 现象: 同一安装目录的第二个实例(窗口标题带
[只读实例])里,「通用 → 账户管理」是灰的,不会自动登录,也不做任何同步。 - 原因: 登录态与同步状态只归主实例;两个进程同时读写同步水位会互相覆盖。
- 如何调整: 无需操作。只读实例里的文档、便利贴、装备方案等改动,主实例下一轮同步会自动发现并上传。命令行
--read-only同样适用。
手机端只拉不推定义与快照
- 现象: 手机不再把
profile.yaml上传云端,也不能创建总览快照;云端没有快照时提示「请先在 PC 端完成初始同步后继续」。 - 原因: 手机上的定义是离线包副本,上行会把云端定义回退成旧版;快照必须代表全网基线,只能由 PC 建立。
- 如何调整: 无需操作。定义改动在 PC 端做,手机同步时自动拉取。
头像同步暂停
- 现象: 头像不再随账户同步上传或下载。
- 原因: 头像同步正在重新设计,本版先停用。
- 如何调整: 无需操作。本地与云端已有的头像数据都保留不动。
会话文件改为首次使用时创建
- 现象:
config/session/yysls/play_styles.json等文件不再在启动时生成空文件,而是第一次用到对应功能时才创建。 - 原因: 启动即建空文件会被同步当成「本地有改动」,可能把空内容推上云端覆盖真实数据。
- 如何调整: 无需操作。
✨ 新增功能
初始同步
- 云端为空时:上传定义、名册、文档,并用本地总览数据创建初始快照,一步完成播种。
- 云端已有数据时:先把本地用户目录、总览库、定义与会话文档备份到
config/session/_backup-initialsync-<时间戳>/,再拉取云端四通道。 - 该按钮与「清除同步」互斥占同一个位置:未建立时显示初始同步,建立后显示清除同步。
数据同步页
- 同步表固定四行:定义 / 用户 / 文档 / 总览,实时显示上行、下行与失败数。
- 只有「总览」行有「创建快照」按钮,其余三行留白——快照只服务总览回放。
- 页面高度不再随状态文字出现或消失而跳动。
账户自助服务
- 账户管理对话框右上角新增「自助服务…」,在浏览器打开自助操作页:导出数据、清除数据、注销账号。
- 「清除数据」为新增能力:清空云端全部同步数据(名册、文档、定义、账本、快照、分享链接),保留账号与登录态,供重新做一次初始同步。
云端被清空后自动复位
- 云端数据被清空(网页、另一台 PC 或管理员操作)后,本机下次同步会识别到服务端的明确空状态,自动退回「未建立」并提示点「初始同步」。
- 判定只认服务端显式返回的空状态标记;网络或鉴权失败一律按「未知」处理,不会误清本机同步状态。
文档增量同步
- 云端为每个文档维护递增修订号,客户端记录已看到的修订水位与本地改动集合:
没有变化时一次轻量请求即结束;只有一端变化时只传变化的部分;两端都变才做全量对比并按时间裁决。
离线包可声明不携带总览数据
- PC 云端模式下发的配置包不再包含总览库与定义(
manifest.profile=false),手机总览改由账户同步更新;安装端会校验声明与包内容一致,旧包缺省按携带处理。
🔧 修复
- 全新实例登录同步拉不到任何用户: 下行不再要求本地先有该用户,云端用户会直接创建到本地并纳入名册。
- 本地
profile.yaml缺失时不从云端拉取: 现在缺失会拉回并重载定义(初始同步备份后依赖此路径)。 - 名册有名字但本地缺资料文件会上传空资料: 会把云端真实属性冲成空对象;现在缺文件的行直接跳过,只从云端补回。
- 定义改动后云端定义不跟随: 以前只在本地文件变化时才核对云端,云端被旧版本回推后永远发现不了;现在每次同步都核对云端 sha。
- 便利贴每轮重复上传: 加密迁移钩子的判断条件写反,云端已是密文时仍反复重推;现在只在云端还是明文时才重推。
- 「清除同步」不清远端: 改为真正清空云端数据并回读确认。
- 总览快照落地慢: 逐条写入改为按用户批量事务,千余条从分钟级降到秒级。
- 文档与头像逐份请求慢: 改为批量拉取(文档每批 20 份、头像每批 10 个),并限制单个头像不超过 1 MB。
- 桌面端凭据降级: 系统凭据库不可用时不再把刷新令牌明文写进
config/session,改为明确报错;凭据与账号状态文件也已加入忽略列表。
📦 重构
- 文档通道由「每轮全量对账」改为「修订号增量 + 本地改动集合」。
- 头像退出同步通道,保留数据。
- 同步水位与签名集中存放在
config/session/account.json,由主实例独占写入。 - 定义与快照改为 PC 独占写权限,底层做硬门禁。
📚 文档
- 无独立文档变更;本版的行为变化已在发布说明与界面文案中体现。
📝 变更统计
- 相对 v0.15.9 共 27 个开发/维护提交,另有 1 个发布准备提交。
- 除
docs/外 37 个文件变更(含版本号三处),新增 1829 行、删除 268 行;
docs/2 个文件,新增 131 行、删除 1 行。 - 按发布流程本地执行
add_content_version --check、Ruff、mypy 与全量 pytest
(QT_QPA_PLATFORM=offscreen);云端 Windows/Android 构建、签名核验与产物核验
由发布流水线执行,结果通过执行反馈报告。
⚠️ 免责声明
本项目仅供学习与技术研究使用。使用自动化工具操作游戏可能违反相关游戏的用户协议,
由此产生的后果由使用者自行承担。升级前请备份个人配置与数据库。
📄 许可证
PolyForm Noncommercial License 1.0.0 — 非商业使用许可
v0.15.9 — 账户同步与总览多端账本
v0.15.9 — 账户同步与总览多端账本
这一版的核心是:电脑可以登录账户,把角色名册、文档和玩家档案总览同步到云端;手机可以选择跟云端对等同步,或继续只用电脑下发的离线包。档案历史改成能多端回放的账本。结果文件和锁文件换了存放位置。
不登录、不点同步的用法保持原样:任务、批量、档案都还在本机。
⚠️ 不兼容变动与升级指引
工作流结果 JSON 改存 logs/output/
-
现象: 任务与批量的结果文件从
config/session/output/{用户}/{年-月}/{日}/改到logs/output/{用户}/{年-月}/{日}/,与任务日志(logs/daily)、批量报告(logs/batch)、调律说明(logs/tuning)同根。任务历史里点开结果与日志的行为不变。 -
原因:
config/session/只放用户数据与运行状态。产出堆在里面时,打包 session 排查问题会把整批结果 JSON 一起带走。 -
如何调整: 不迁移也能继续用。历史记录里存的是相对客户端目录的路径,旧记录仍指向旧目录,旧文件照旧打得开。想把旧结果收拢到新目录(需要本机有 Python;脚本不随安装包分发):
python scripts/one_off/migrate_output_to_logs.py # 干跑,只列计划 python scripts/one_off/migrate_output_to_logs.py --apply # 执行脚本把
config/session/output下的文件搬到logs/output,并改写历史库里指向旧目录的result_path/log_path/report_path/markdown_path。默认干跑;先移文件后改库,中断可重跑。目标位置已有不同内容的同名文件时不覆盖。改写前把数据库备份到logs/one_off/migrate-output-<时间戳>/。旧目录不会被自动删除。自己的脚本若按config/session/output取结果,改成logs/output。回传同时接受新旧两种路径前缀。
锁文件统一到 config/session/.locks/
-
现象: 运行时锁不再散落在数据目录旁(不再产生
users/.lock/、yysls/.locks/、session.json.lock这类侧车),集中到config/session/.locks/,文件名是<类型>_<摘要8位>.lock。 -
原因: 旧锁目录换过几套命名,数据目录里留下一批分不清是否仍在使用的残留。
-
如何调整: 无需操作,下次启动按需重建。退出全部律匠窗口后,可用一次性脚本清掉旧位置的残留(需要本机有 Python;脚本不随安装包分发):
python scripts/one_off/cleanup_obsolete_locks.py --config config python scripts/one_off/cleanup_obsolete_locks.py --config config --apply
玩家档案历史改为账本
- 现象: 档案库首次启动升到 schema v9。历史里的
action/override/undo统一变成set;tick(自动恢复)和reset(周期归零)保留。历史窗口的类型标签是「覆盖 / 增量 / 恢复 / 重置」。撤销不再改旧行,而是再写一条反向记录,来源为「撤销:原来源」,所以撤销本身还能再撤销。同时去掉两张只给迁移核对用的表(profile_history_legacy、profile_key_renames)。 - 原因: 总览要在多端按账本回放,必须分清这条记录给的是绝对值还是增量。旧库里绝对写入也记成
action,无法还原。 - 如何调整: 无需操作,启动时自动升级。已有数值不丢。自己写的脚本若按旧的历史类型字符串过滤,改为
set/delta/tick/reset。
百业声望绕梁的注册 key 改名
- 现象: 系统注册表里的
baiye_raoliang_shengwang_of_month改为baiye_rl_sw_of_month(标签仍是「百业绕梁之音·声望」,月上限 2)。declare_profiles只认注册表里的名字;脚本仍声明旧 key 时,这一次声明整批失败,不会创建其中任何一个 key。已经写在profile.yaml里的旧 key 和它的数值不会被升级程序改掉。 - 原因: 注册名缩短。声明只创建缺失项,不负责把已有档案改名。
- 如何调整: 自己的百业脚本里把声明和记账 key 改成
baiye_rl_sw_of_month。希望账面也改到新 key 时,在数据模型编辑器里重命名;重命名会带走全部用户的当前值和历史。不改脚本、不重命名也能继续用旧 key 上已有的数,只是新注册名不会自动接上旧数据。
第二个实例可以保存配置
- 现象: 同一安装目录里后打开的实例不再被拦下「不能保存」。配置、场景、脚本、批量配置、用户数据和档案定义都能写盘。窗口标题仍标
[只读实例]。它不注册全局热键,也不能启动智能调律的 MCP 服务。同一用户仍然不能被两个实例同时执行。 - 原因: 原先用「只读」同时表达了「不能抢热键」和「不能写任何配置」,后面这条会挡住正常的多开编辑。写入冲突改由文件锁、内容版本和覆盖确认处理。
- 如何调整: 无需操作。若你的自动化依赖「第二个实例保存一定失败」,这个拒绝不再出现。命令行
--read-only仍然只影响热键和 MCP。
✨ 新增功能
账户、名册与总览同步
- 主窗口可打开「账户管理」:登录、修改密码、查看本账号下的设备。登录对话框提供注册入口和密码可见切换。登录后按分钟自动同步,也可以手动同步或停止。同步表分四行:定义(
profile.yaml)、名册、文档、总览,并带逐行进度。 - 总览同步分两层。定义是各端共用的 key 列表。账本是每个用户的数值变更:电脑或手机写出的覆盖、增量和周期归零会上传;另一端先拉定义,再按时间回放。周期中的自动恢复不逐条上传。云端还没有快照时,需要先在一台电脑上「刷新快照」。
- 在数据模型里重命名 key 后,会给仍有数值的用户补一行当前值,随下次同步让其他设备落到新 key。脚本和注册表里的字面 key 不会被自动替换。
- 便利贴和角色基础属性在本机仍是明文。上传到云端时用登录口令派生的密钥加密,服务器只存密文。解不开时保留本机文件,不用云端内容覆盖。改密码之后,下一次同步会用新密钥重新上传。
手机总览来源
- 手机设置里可以选择总览从哪来。云端(默认):在线同步先拉定义和账本,再把这台手机自己写下的变更传上去。PC 端:总览随电脑下发的离线包整库更新,在线同步跳过总览。
- 从 PC 端改到云端之前,要先「清除本地总览数据」,否则手机会拒绝用云端快照覆盖已有库。从云端改到 PC 端可以随时切,切之前会二次确认并提示未同步的变更数。下发配置时,手机的登录状态和实例标识会保留。
- 悬浮窗收成两种形态。未启动时并排显示当前用户和任务,下面是「启动任务」和「关闭悬浮窗」。运行中显示任务名、计时和日志,操作是暂停、结束;需要确认时换成确认和拒绝。
江湖弈
- 内置场景补了单人流程和结算相关区域。注册表新增
wulujuan_level(乌鹭卷等级,赛季配额)。你自己录过同名场景时,自建场景仍盖住内置版本。
🔧 修复
- 按速率恢复的数值(心力等)记错账: 一次消耗会把「上次写入至今自动恢复的部分」和这次消耗写进同一条历史,恢复量对不上。现在先落一条「自动恢复」,再记这次消耗。已经写过的历史不回改。
📦 重构
- 账户管理重做为页签布局,登录与账号操作、数据同步进度、设备管理分开承载。
- 设备身份拆成机器级和实例级,凭据按实例隔离;同一安装目录内第二个实例的保存范围放宽(见「不兼容变动」)。
- 文档同步通道改为声明制,core 不再硬编码插件文件。
- 离线包改为按文件覆盖安装,不再整目录替换
config。 - 结果文件、锁文件等落盘位置调整见「不兼容变动」。
📚 文档
- 新增 《config/session 数据划分与读写方》,按用户域、历史与产出、实例状态、平台接入和锁,说明
config/session里各项的归属。 - 用户指南写明第二个实例的保存范围,以及手机悬浮窗的两种形态、历史回传不再限定主实例。
📝 变更统计
- 相对 v0.15.8 共 109 个开发/维护提交,另有 1 个发布准备提交。
- 除
docs/外 143 个文件变更(含版本号三处),新增 11384 行、删除 3202 行;
docs/19 个文件,新增 487 行、删除 152 行。 - 按发布流程本地执行
add_content_version --check、Ruff、mypy 与全量 pytest
(QT_QPA_PLATFORM=offscreen);云端 Windows/Android 构建、签名核验与产物核验
由发布流水线执行,结果通过执行反馈报告。
⚠️ 免责声明
本项目仅供学习与技术研究使用。使用自动化工具操作游戏可能违反相关游戏的用户协议,
由此产生的后果由使用者自行承担。升级前请备份个人配置与数据库。
📄 许可证
PolyForm Noncommercial License 1.0.0 — 非商业使用许可
v0.15.8 — 玩家档案 key 锁定、内置函数浏览面板与外置脚本函数
v0.15.8 — 玩家档案 key 锁定、内置函数浏览面板与外置脚本函数
发布日期 2026-11-02。
⚠️ 不兼容变动与升级指引
百业商店周期配额拆为四份,baiye_raoliang_of_month 的来源收敛
- 现象: 新增
baiye_raoliang_shengwang_of_month(银百叶页内绕梁之音的声望货币
那份,月上限 2);baiye_raoliang_of_month的「来源」由「百业声望 + 银百叶」收敛为
仅「银百叶」。已有档案文件里这两个 key 的定义不会被改写:declare_profiles只创建
缺失项,不覆盖既有定义。 - 原因: 银百叶页内「绕梁之音」有两种货币各 2 个,「百业惊喜礼盒」有月/周两种库存,
屏幕上完全同名。原先只用一份 key 记账,买到哪一行都记同一项,账面无法区分。 - 如何调整: 不处理也能继续用——新 key 会在下次运行时自动创建,历史数据按 key 归属
存在档案库里,不受定义变化影响。若希望来源标签与新定义一致,删掉profile.yaml里
baiye_raoliang_of_month那一段,下次运行会按注册表重建(数值不会丢)。
如果你自己的脚本在为百业采购记账,注意声望货币那份要记到
baiye_raoliang_shengwang_of_month——继续记旧 key 会让两份绕梁挤在同一条配额上。
百业商店场景删除三个区域
- 现象:
baiye_main场景移除restock(补货周期)、quantity(购买数量)、
purchase_glow(购买按钮金色)三个区域,双端布局同步删除,content_version递增。
同批把reputation区域的显示名从「百业声望」改为「金百叶」,银百叶入口坐标上移。 - 原因: 购买判定只用
purchase按钮文本与stock周期标签,这三个区域从 0.15.7
起已无任何工作流引用;金百叶已无可买商品,这一栏实际是金百叶页签。 - 如何调整: 若你自己的脚本或自建场景引用了
restock/quantity/
purchase_glow,删掉对应引用即可。reputation只是显示名变化,按 key 引用的脚本
不受影响。
八音窍商店场景随版本内置(名称 shop_bayinqiao)
- 现象: 这个商店的场景不需要自己录制了:版本自带场景(17 个区域)与安卓布局。
如果你此前自己录过同一商店的场景,自建那份仍会覆盖内置版本,页签可能报
「页面归属无法解析」。 - 原因: 自建场景的两个视图没有声明页面归属与页签跳转,内置版本补齐了这两项。
- 如何调整: 删掉自建的那份场景,脚本里改用
shop_bayinqiao。PC 端坐标尚未取证,
需要在电脑上跑这个商店的话,自行补一份 layout 即可。
自动剧情:匹配阈值改为随配置文件保存,_settings.json 移除
-
现象: 每个文案库文件(
tools/auto_plot/<文件名>.json)现在自带
match_threshold;切换配置文件时「匹配阈值」跟着换成该文件的值,改完即写回该文件。
原来那个全局参数文件_settings.json不再读写,可以直接删除。 -
原因: 阈值原先全局一份,放在「配置文件」下方却与所选项无关——切文件不变、
保存任何文件都会覆改全局值;而且单独一个_settings.json让"一个文件就是一个
完整文案库"这件事不成立,拷走文件也不会带上自己的阈值。 -
如何调整: 升级后各文件若还没有
match_threshold,按默认值 0.7 生效;想保留
以前调过的全局值,用一次性脚本把它搬进各文件(干跑先看清单):python scripts/one_off/migrate_story_threshold.py python scripts/one_off/migrate_story_threshold.py --apply --delete-legacy之后
_settings.json可以删除。合并激活时按命中条目所属文件的阈值判分,
不同文件之间互不影响。
✨ 新增功能
脚本编辑器「内置函数」浏览面板
- 脚本编辑对话框新增第三个页签,按 15 个分类列出全部 103 个内置函数(core 76 +
yysls 插件 27):分组树、参数表(参数名与默认值取自真实签名)、返回值说明、
试算与「定位到用法」。 - 内置函数元数据(分组、摘要、参数含义、返回类型)随函数对象登记进注册表,打包后
仍可读;新增describe_function/signature_params/validate_function_meta
查询与校验接口,并加了元数据一致性门禁。 - 浏览是纯静态扫描(你自己写在用户脚本目录里的函数也会一并列出),不执行脚本。
DSL 支持 import 外置 Python 脚本注册函数
- 脚本里
import "辅助函数.py"即可把该文件里@builtin_func声明的函数注册给当前
任务。只允许放在用户脚本目录(安装目录下的config/local/workflows),指向版本内置
目录时直接报错,避免随版本下发的配置通道变成任意代码执行入口。 - 注册进引擎私有命名空间,不污染全局函数表,并发引擎互不覆盖;生命周期绑定单次任务,
批处理相邻任务彼此隔离。 - 首参
_engine自动注入并提供should_stop(),长循环可自行响应停止;每次执行从源码
重新编译,改完即生效(不受__pycache__同秒旧字节码影响)。 - 编辑器 LSP 放行
.pyimport,并按与引擎一致的层级规则给出诊断。 ⚠️ import的.py等价于直接运行一个 Python 脚本(顶层代码、第三方 import
都会真实执行,能读写本机文件与网络)。只 import 你自己写的或逐行看过的脚本;别人
发来的.py不要放进配置目录,更不要提示试算就点。试算会真的执行脚本,耗时脚本
会让界面一直等它返回。
玩家档案:按用户锁定 key
- Profile 总览右键菜单新增「锁定 / 解锁」(位于「查看历史记录」上方,二次确认)。
锁定后该用户这个 key 视为物理失效:单元格显示为深灰空白且不可编辑,合计行与
告警都不再统计它,用户详情页同样留空。 - 引擎侧完全忽略锁定值:
profile_get返回空、任何写入立即被拒并记 error 日志、
周期重置与 regen 计算停止、快照写回(CAS)与历史撤销一并拒绝。值永久停在锁定
时的状态,随时可解锁恢复。 - 新增内置函数
profile_locked(key, username?),供工作流先判锁再决定购买或记账。
档案库版本升到 v8(profile_entries增加locked列,升级前自动备份)。 - 工作流作者注意: 锁定后
profile_all里该项的value为 null(保留 key 的
存在性并带locked: true),与profile_get口径一致;不要拿它跟上限比较。
江湖号令:「多人模式保持」参数
- 新增开关
keep_multiplayer(默认关)。不勾选时脚本结束一定回到单人模式,不会把
账号留在多人状态;勾选后,如果本次脚本从未切换过模式,就保持用户原有模式不动。 - 起始模式改为在脚本本就打开菜单页时顺带读「模式」标签(不做额外点击);收尾按
「脚本切过 / 勾选保持 / 起始即单人且未切过 / 起始多人或未识别」四种情况分别处理,
避免无谓地多开一次菜单再关掉。
二级密码弹窗检测与无人值守感知
- 新增
is_unattended():批量勾选无人值守或命令行执行时为真,普通界面执行为假。 - 购买心法心得在回收确认后检查标题亮字是否出现「输入密码」:有人值守时暂停等待用户
处理;无人值守时自动点取消、逐级返回并记录password_dialog事件后结束,避免书票
不足后空转。 general_control场景登记密码验证视图与三个区域(取消、确认、标题),双端坐标已
取证(取消配 ESC、确认配 SPACE),PC 与安卓均自动生效。
🔧 修复
- 并发时脚本函数串桶: 脚本注册捕获栈改为线程隔离。工作流跑在任务线程、面板试算
跑在界面线程,原先共用全局栈会让一方的函数落进另一方的桶;面板with变换同时
补齐_engine/_wf首参注入,与调用规则一致。 - 批量「恢复默认顺序」后开始按钮不刷新: 刷新发生在重建执行顺序之前,读到旧空表
导致「请至少勾选一个脚本」提示与灰按钮残留,只有切换配置组才恢复。现在重建执行顺序
的函数自己重算开始状态,调用顺序不再影响结果(脚本页与单元页都修)。 - 编辑器插件对 CRLF 文档误报语法错: 解析入口统一把 CRLF / 纯 CR 归一为 LF。
引擎读文件时本来就做了通用换行,而插件直接看文档原文,导致同一份脚本「本地能跑、
插件语法错」。 - 日志占位符静默丢参数: 9 个模块原先用
logging.getLogger与 loguru 混用,
printf 风格占位符在 loguru 下会静默丢参数;统一改为直连 loguru,44 处占位符
改为{},exc_info改为opt(exception=True)。 - 八音窍场景视图不可达: 两个视图补
kind: page并给在售/公示页签声明跳转目标,
validate_transitions不再报「页面归属无法解析」。
📚 文档
- 语法文档:内置函数计数更新为 103(core 76 + 插件 27)、15 类,补
profile_locked
与.pyimport 说明,注明「运行中途 import 子.wf会重载全部已登记脚本」; - 用户指南:脚本编写补充外置函数导入与内置函数面板用法;
- AGENTS:说明
content_version随内容修改在同一次改动内递增。
📝 变更统计
- 相对 v0.15.7 共 30 个开发/维护提交,另有 1 个发布准备提交。
- 除
docs/外 118 个文件变更(含版本号三处),新增 8459 行、删除 3465 行;
docs/8 个文件,新增 305 行、删除 11 行。 - 按发布流程本地执行
add_content_version --check、Ruff、mypy 与全量 pytest
(QT_QPA_PLATFORM=offscreen);云端 Windows/Android 构建、签名核验与产物核验
由发布流水线执行,结果通过执行反馈报告。 - 建议实机复核:档案总览锁定/解锁(锁定后自动任务不再动该 key)、脚本编辑器内置函数
面板、import外置脚本、江湖号令「多人模式保持」两种取值、无人值守下的密码弹窗
取消分支、八音窍商店与百业商店改版后的坐标。
⚠️ 免责声明
本项目仅供学习与技术研究使用。使用自动化工具操作游戏可能违反相关游戏的用户协议,
由此产生的后果由使用者自行承担。升级前请备份个人配置与数据库。
📄 许可证
PolyForm Noncommercial License 1.0.0 — 非商业使用许可
v0.15.7 — 全局窗口热键、启动前占用预检与定音识别修复
v0.15.7 — 全局窗口热键、启动前占用预检与定音识别修复
发布日期 2026-10-31。
⚠️ 不兼容变动与升级指引
破竹·樽 防具定音「悬身断水·浓醺技能增伤」升级后毕业率可能变化
- 现象: 破竹·樽 防具定音「悬身断水·浓醺技能增伤」此前因词条名带间隔号一直
识别失败,装备上显示为 <止戈定音>,本版已修复。升级后相关装备的定音统计与
毕业率会随之变化,并非计算口径变更。 - 原因: 它是 60 条定音词条中唯一带间隔号的,旧版匹配不做去标点比对,
整条定音判失败、收益从毕业率里消失。 - 如何调整: 重扫相关装备即可恢复,无需其他操作。
其余变更均为向后兼容:定音词条更名为无间隔号写法后,识别端对带/不带间隔号的
旧名双向兼容,引用旧名的本地配置无需调整。本版本其余无不兼容变动。
✨ 新增功能
「最小化 / 恢复窗口」全局热键(默认 Alt+F8)
- 新增
toggle_window热键动作:最小化主窗口后按组合键原地恢复;可在设置页更换修饰键,
非法写法回退默认,与其余动作键整组查重,撞键则整组回退。 - 该键走 Windows
RegisterHotKey原生注册,不依赖 pynput 组合键状态机:Windows 上
Alt 的释放事件会被系统菜单吞掉,组合键状态机残留一次后该组合永久不再触发,
原生注册从根上规避。 - 热键设置页新增一行(候选含修饰键),提示按钮移到标题侧,五个下拉框统一宽度。
启动前预检设备执行占用
- 手机端仍在执行其它任务时,桌面端启动任务此前要到引擎
control_begin才失败,
用户看到的是「点下去一闪就结束 + 一行 ERROR 日志」。现在日常 Tab 与插件 Tab
两条启动路径都在占用本地目标之前先试取一次设备占用(拿到即释放,判据与正式执行
相同,不会预检放行、真跑被拒),被占用直接弹窗说明原因并中止启动。 - 窗口模式、纯 ADB 输入等无代理能力的后端直接放行。
悬浮窗任务列表行尾「⋮」直达参数设置
- 悬浮窗「选择任务」列表每行新增
⋮入口,点开菜单直达该任务的参数设置页,
无需先选中;底部原有「设置任务参数」按钮移除,选择视图底部只留「返回」,
并隐藏与「返回」易混的常驻「收起」(返回主面板后恢复)。 - 面板日志由次要灰 10sp 改为主文字色 12sp,叠在游戏画面上可读。
🔧 修复
- 本机模拟器多开实例互相覆盖执行目标:同一镜像克隆出的模拟器实例共享
android_id、ro.serialno甚至boot_id,只按稳定身份算target_id会让后连接的
实例覆盖先连接的实例,且旧目标被静默 dispose。现在本机回环地址
(127.0.0.1 / localhost / ::1 / emulator-XXXX)并入身份哈希,多实例各成一个目标;
真机不受影响,USB 与无线两条 transport 仍归并为同一目标。 - 定音词条一个间隔号导致整条定音判失败:60 条定音词条中唯一带间隔号的
「悬身断水·浓醺技能增伤」统一为无间隔号写法,playstyles、110/115 两份毕业方案
与统计端词表同步重新导出;定音匹配增加去标点比对,游戏内文本带「·」、配置名不带
两种写法都能识别。长词条(≥6 字)允许编辑距离 1 的模糊匹配,覆盖 OCR 整字丢失
(悬身断水浓技能增伤 → 悬身断水浓醺技能增伤);4~5 字短词条不启用,避免把
止戈定音与乱码吞进普通定音槽。模糊纠正记 notice + warning 留痕,疑似误读在
解析器层面立刻 warning,正常数据不再淹没日志。 - 源码安装可能装到不兼容的新版 PyQt6:非 darwin 平台 PyQt6 约束加上界
<6.12,
避免依赖解析选中尚未兼容的版本。
📚 文档
- 全局热键说明随新增动作更新(快速上手、主界面、基础配置);
- 并发执行架构文档补充设备占用预检与本机多实例身份判定的例外说明;
- 武学与玩法模型文档、门派体系文档随定音词条更名同步;
- 悬浮窗任务参数入口说法随「⋮」菜单更新。
📝 变更统计
- 相对 v0.15.6 共 6 个开发/维护提交,另有 1 个发布准备提交。
- 除
docs/与packaging/外 25 个文件变更,新增 820 行、删除 73 行;
docs/7 个文件,新增 26 行、删除 8 行。 - 按发布流程本地执行
add_content_version --check、Ruff、mypy 与全量 pytest
(QT_QPA_PLATFORM=offscreen);云端 Windows/Android 构建、签名核验与四项产物
核验由发布流水线执行,结果通过执行反馈报告。 - Alt+F8 热键建议桌面端验证一次最小化/恢复;设备占用预检建议手机执行任务时从桌面
再启动一次确认弹窗;悬浮窗 ⋮ 菜单与日志样式建议手机端过一遍。
⚠️ 免责声明
本项目仅供学习与技术研究使用。使用自动化工具操作游戏可能违反相关游戏的用户协议,
由此产生的后果由使用者自行承担。升级前请备份个人配置与数据库。
📄 许可证
PolyForm Noncommercial License 1.0.0 — 非商业使用许可
v0.15.6 — 自动剧情文案库、命令行执行入口与悬浮窗贴边吸附
v0.15.6 — 自动剧情文案库、命令行执行入口与悬浮窗贴边吸附
发布日期 2026-10-30。
⚠️ 不兼容变动与升级指引
改过 daily_checkin.wf 或 activity_main 场景/布局本地覆盖的用户拿不到页签适配
- 现象: 游戏 UI 改造后活动页左侧新增「活动 / 新内容 / 推荐」页签,进入时若停留在
非「活动」页签,每日签到的列表扫描会落空。本版本为activity_main场景新增
tab_activity/tab_new页签区域并按实机标定坐标,签到流程进活动页后先切回
「活动」页签,点击前还会先确认区域内识别到「活动」二字,识别不到时截图提醒并跳过,
不在未确认的位置上盲点。覆盖过config/local同路径文件的用户那里这些修正不生效。 - 原因:
config/local无条件优先于config/system,场景、布局与工作流文件是
整文件覆盖而不是合并。 - 如何调整: 删除本地对应覆盖,或手动把系统新版改动同步进本地文件。
其余变更均为向后兼容的新增能力与内部修正;SyncTargetDef 新增的 lock_on_cap
字段默认保持原有满值锁定行为,旧配置无需调整。本版本其余无不兼容变动。
✨ 新增功能
自动剧情文案库(通用工具)
- 新入口「工具 → 自动剧情」:维护剧情选项文案库,任务运行时按 OCR 相似度自动选择
匹配的答案。 - 文案库按配置组管理(
config下tools/auto_plot/<组名>.json,一组一个文件),
可新建、删除、保存到本地或系统层;同名组本地条目覆盖系统条目,激活时合并全部组。 - 匹配阈值可在对话框顶部调整,单独存于全局参数文件。
- DSL 新增
story_options/story_pick/story_learn内置函数与
ocr_region_blocks块级 OCR 匹配原语,内置auto_skip.wf提供可直接调度的
自动跳过剧情工作流。
命令行执行入口 lvjiang-cli
- 不开界面即可列出与执行任务,用于计划任务与外部编排;与 GUI 共用同一套引擎、
配置快照与用户锁。 - 动作采用扁平参数:
--list列出全部脚本或配合--id/--name查看参数,
--exec执行任务;脚本选择统一为--id/--name/--file三选一。 - 插件严格按
-reg/--all显式加载,不再默认全量;--list纯查询不装配插件与
崩溃防护。单任务执行日志自动落盘。 python -m lvjiang与打包的lvjiang-cli.exe行为一致,详见新增
「附录 D:命令行」用户文档。
手机悬浮窗贴边吸附与 Material 3 视觉
- 悬浮球拖到屏幕边缘后动画收起为细把手,拖出或点击恢复;「悬浮控制」卡片底部新增
「悬浮球贴边吸附」开关。 - 悬浮球与面板按 Material 3 重构:三级状态色、Filled/Tonal/Text 分级按钮、统一
文字层级,并跟随系统深浅色;面板按钮缩小,「回到最新」并入收起行,移除已完成
状态行。
同步目标逐条满值锁定
- 同步目标达硬上限时是否把源 key 锁成
—并禁止编辑,改为按边配置
(新增「满值锁定」列,默认勾选保持原行为)。 - 取消锁定后目标满只表示增量不再写入该目标,源 key 仍照常展示和记账——适用于
心力等真实资源与每周消耗等派生计数器等多源场景。 - 锁定时总览单元格与右键菜单行为一致,只保留只读的历史入口。
同步目标编辑改为级联 key 选择
- 新建同步目标时目标 key 改为级联下拉选择,不再手填。
移动端用户数据页全用户视图与分组筛选
- 每个 key 行右侧新增「全部」入口,进入单 key 的全用户视图,按「模型·分组」组织
所有用户实时值,可累加模型附合计。 - 用户数据页新增分组下拉筛选,局部刷新、不反写配置;全用户视图返回改用固定
AppBar 导航。
🔧 修复
- 本版本无面向上一版本遗留问题的独立修复;每日签到页签适配见上文新增功能与
不兼容变动说明。
📦 重构
- 命令行动作扁平化:移除
run/list/schema子命令,统一为--exec/
--list动作开关,--list纯查询最高优先级截断(该重构发生在 CLI 入口同一
发布周期内,无旧参数用户)。 - 悬浮窗视觉重构:Material 3 卡片与分级按钮替换旧样式,符号重绘后改为代码
染色;拆分启动图标ic_launcher,修复重绘符号后桌面图标丢失。
📚 文档
- 新增「附录 D:命令行」用户文档(
docs/60-userguide/appendix-d-command-line.md); - Profile 模型文档补充
lock_on_cap语义; - 游戏 UI 页面关系文档随活动页签微调。
📝 变更统计
- 相对 v0.15.5 共 10 个开发/维护提交,另有 1 个发布准备提交。
- 除
docs/与packaging/外 43 个文件变更,新增 3530 行、删除 198 行;
docs/与packaging/7 个文件,新增 150 行。 - 按发布流程本地执行
add_content_version --check、Ruff、mypy 与全量 pytest
(QT_QPA_PLATFORM=offscreen);云端 Windows/Android 构建、签名核验与四项产物
核验由发布流水线执行,结果通过执行反馈报告。 - 自动剧情建议在桌面与手机各跑一次
auto_skip.wf;悬浮窗贴边吸附与全用户视图
建议手机端验证;lvjiang-cli.exe建议在打包产物中验证一次--list与单任务执行。
⚠️ 免责声明
本项目仅供学习与技术研究使用。使用自动化工具操作游戏可能违反相关游戏的用户协议,
由此产生的后果由使用者自行承担。升级前请备份个人配置与数据库。
📄 许可证
PolyForm Noncommercial License 1.0.0 — 非商业使用许可
v0.15.5 — 批量单任务停止、悬浮窗快捷关闭与安卓任务快照修复
v0.15.5 — 批量单任务停止、悬浮窗快捷关闭与安卓任务快照修复
发布日期 2026-10-27。
⚠️ 不兼容变动与升级指引
批量弹窗里的「停止任务」现在只结束当前这一条
- 现象: 批量执行过程中,某个任务弹出询问窗时点「停止任务」,以前会把整批全部停掉;
现在只结束当前这一条任务,批量继续跑同一条目的下一个任务(没有下一个任务就进下一个
用户/单元),报表里这一条记为「已停止」。 - 原因: 以前弹窗的「停止任务」和主界面停止按钮共用同一个整批停止信号,批量里一按就
全部终止。 - 如何调整: 想结束整批,请用主界面的停止按钮(F10)。无需其他操作。
改过 daily_checkin.wf 或 page_action.wf 本地覆盖的用户拿不到本次流程调整
- 现象: 每日签到领奖后自动关闭物品获得提示,以及关闭提示最多点 10 次的兜底,在覆盖过
config/local同路径文件的用户那里不生效。 - 原因:
config/local无条件优先于config/system,工作流文件是整文件覆盖而不是合并。 - 如何调整: 删除本地对应覆盖,或手动把系统新版改动同步进本地文件。
✨ 新增功能
手机悬浮窗支持快捷关闭
- 空闲态顶部由单个「启动任务」拆为「启动任务 | 关闭悬浮窗」;点「关闭悬浮窗」直接收起面板、
移除悬浮图标并结束前台服务。 - 「用户:XXX / 任务:YYY」两行 label 与下面一排选择按钮压缩为两行:固定文案的
「选择用户 / 选择任务」按钮 + 右侧展示当前值的纯文本,当前值超长自动省略。
批量脚本与单元列表支持 Shift 区间勾选
- 按住 Shift 点击某行的勾选框,以最近一次普通勾选行为锚点,把锚点到点击行之间的全部选项
一并勾选(目标行原本已勾则一并取消)。无锚点、整表刷新或拖拽重排后退化为普通单行勾选。
🔧 修复
- 安卓批量/单任务报
Read-only file system: '/.task':任务配置快照此前固定写到工作目录
下的.task,安卓工作目录是只读根/,一跑批量就失败。现在安卓端改用客户端自身根目录
$HOME/lvjiang/.task,桌面端行为不变。 - 安卓升级后启动报「无法确认原始预置基底」:预置安装校验拿旧代次归档比对同版本内的新
预置内容,内容一变就误判损坏并打断启动。已移除该整树摘要硬校验,保留逐文件与清单自洽校验。 - 批量弹窗「停止任务」导致全部任务结束:见上文不兼容变动;根因是弹窗停止与整批停止共用
一个信号。 - 每日签到领奖后物品获得提示残留:领奖成功后现在会自动点击空白处并关闭物品获得提示;
关闭提示的公共子过程增加 10 次上限,点不掉时记 error 后结束,不再可能无限循环。
📦 重构
- 异常按「是否记录堆栈」分类并统一记账入口:业务主动拒绝(
profile_reject)、写入冲突、
历史操作被拒、脚本可预期错误等只记一行原因(级别 WARNING/ERROR),不再打印引擎内部帧的
完整堆栈;意外异常仍保留堆栈,并且同一异常穿透嵌套只记一次。运行线程、批量收尾、Profile
回写与历史撤销/删除统一走同一入口。
📚 文档
- 补全
result_records.wf、daily_jianghu.wf、login.wf、visual_state.wf等过程注释; - 新增「异常记账」架构说明(
docs/30-architecture/33-engine/03-error-reporting.md),
并同步 Profile 拒绝与历史撤销的记账语义。
📝 变更统计
- 相对 v0.15.4 共 10 个开发/维护提交,另有 1 个发布准备提交。
- 除
docs/与packaging/外 36 个文件变更,新增 980 行、删除 140 行;docs/3 个文件,
新增 60 行。 - 按发布流程本地执行
add_content_version --check、Ruff、mypy 与全量 pytest
(QT_QPA_PLATFORM=offscreen);云端 Windows/Android 构建、签名核验与四项产物核验由
发布流水线执行,结果通过执行反馈报告。 - 悬浮窗关闭、Shift 区间勾选与批量单任务停止建议在桌面与手机各验证一次;安卓
.task修复
需重新出包后跑一次手机批量任务确认。
⚠️ 免责声明
本项目仅供学习与技术研究使用。使用自动化工具操作游戏可能违反相关游戏的用户协议,
由此产生的后果由使用者自行承担。升级前请备份个人配置与数据库。
📄 许可证
PolyForm Noncommercial License 1.0.0 — 非商业使用许可
v0.15.4 — 装备养成承音与传律石估算、多实例并发写与退出稳定性
v0.15.4 — 装备养成承音与传律石估算、多实例并发写与退出稳定性
发布日期 2026-10-24。
⚠️ 不兼容变动与升级指引
多实例同时修改同一份配置时,可能有一方的改动不生效
- 现象: 同时开两个客户端,两边几乎同时修改同一份配置(会话参数、界面状态、游戏配置、
Profile 定义、场景与图库文档)时,可能出现一方看不到另一方的改动,或自己刚保存的那一次
被对方的写入覆盖。 - 原因: 第二个实例不再被「只读节点」拦住,任一实例都可落盘;写入用跨进程文件锁串行化
「读盘 → 合并 → 替换」,语义是「最多丢一次更新」,不保证两边并发修改都保留。 - 如何调整: 无需操作,重新保存一次即可。想彻底避免,一次只用一个窗口改配置;任务执行
读的是启动时冻结的快照,运行中改配置只影响下一次任务。
第二个实例现在会真的写入配置
- 现象: 以前在第二个窗口里保存配置会被拒绝(「只读节点」),看起来像保存失败;现在会
正常落盘。 - 原因: 主节点限制只保留给整目录替换的操作(更新包安装、离线包导入、历史回传),
其余配置与运行状态任一实例都可写。 - 如何调整: 无需操作。如果你以前依赖「第二个窗口改不动」来保护数据,请改为只开一个
实例,或使用完全离线模式。
已承音的装备现在可以继续承音到下一阶
- 现象: 以前 110 阶已承音装备再也承音不上去,提示「该装备已经承音」;现在可以逐阶承音
(105 → 110 → 115)。 - 原因: 不可撤销的只是「已承音」这个状态,不是等级上限;旧规则把两者混为一谈,连等级
下拉都一起锁死了。 - 如何调整: 无需操作。仍然只能一阶一阶走,105 直接跳到 115 会被拒绝。
承音合并的可选候选会比以前少
- 现象: 装备「承音合并」里不再出现 96→100、100→105 这类跨赛季作废线的候选;两条都未
承音、只是等级不同的记录也不再被判为同一件装备的前后版本。 - 原因: 这两类关系本赛季造不出来,旧规则会把它们当成升阶并删除旧记录、迁移方案引用,
且删除不可撤销,属于误删。 - 如何调整: 无需操作。如果你在本版本之前已按旧规则合并过,被删掉的旧记录无法恢复,
用「装备库 → 重新扫描」补齐当前装备即可。
本地覆盖过 basic.yaml 的用户拿不到新增的传律石比例
- 现象: 传律石估算按每条词条满值的 4.5% 计算,这个比例来自系统配置
yysls/game_config/basic.yaml新增的chuanlv_stone_percent。改过同路径本地文件的用户
读不到这个字段(估算退化为缺省 4.5%)。 - 原因:
config/local无条件优先于config/system,实体文件是整文件覆盖而不是合并。 - 如何调整: 在本地那份
basic.yaml里手动补上chuanlv_stone_percent: 4.5,或删除
本地覆盖改用系统配置。
✨ 新增功能
装备养成按目标等级估算传律石
- 「词条配置」组底部实时显示「当前装备承音喂满需要 N 个传律石(X 阶承音上限)」,逐条明细
(当前值 → 承音上限、每石增量)在问号提示里。 - 一次传律提升一条词条,增量是该词条在目标等级普通满值的 4.5%(可在「游戏配置 → 基础配置 →
装备养成」校正);五条普通词条各自向上取整后求和。定音是独立槽、不受承音限制,不参与估算。 - 终点读该词条的承音上限配置原值,不按 94% 手算:最大外功 131.2 只占满值 139.6 的 93.98%,
按 94% 判会以为还能提升,实际已经到头。
承音改为直接勾选,等级可按目标等阶选择
- 养成的「承音」不再用单独按钮,直接勾选复选框:勾选会把等级带到承音目标、按升级表给被合并
的词条改名、把数值截断到新等级承音上限;已承音的装备只读展示并提示可继续承音到哪一阶。 - 真实装备的等级下拉开放,只列这件装备合法能到的等阶,可按任一目标等级估算传律石。
装备新增「假设同级承音」开关
- 满承音假设此前只对已承音装备生效,同等级的未承音装备(例如 115 级 83% 的枪)即使开了满承音
也按原值算。新增的assume_chengyin字段可以显式声明「这件装备按承音上限计算」,在装备属性
的「状态」与「引用方案」之间勾选,只对本赛季等级、且尚未承音的装备开放。 - 应用带「同等级承音假设」的最优组合时,会自动为对应装备勾选该开关,不再丢失假设状态。
多实例并发写
- 第二个实例(只读节点)不再被拦:session、界面状态、
profile.yaml、游戏配置、场景与图库
文档都可保存。
🔧 修复
- 退出时崩溃:每次正常退出都在最后打印
QThread: Destroyed while thread '' is still running
然后进程直接崩掉。启动期网络线程没有协作取消接口,关闭收尾时仍在运行,窗口销毁时 Qt 直接
中止进程;关闭过程中还会新起线程(公告失败后把链推进到版本检查)。现在关闭开始即置标志,
启动链不再新起线程,并在关闭链最后统一下线仍在跑的线程。 - 只读实例退出变成半关闭:关闭时保存脚本参数会抛权限异常,异常从关闭事件冒出去,
ProfileEngine 停止、录屏转正和设备连接释放全部被跳过。现在每步独立兜底,单步失败只跳过该步。 - 点击装备槽位保存筛选导致客户端退出:另一个进程正在执行该用户的任务时,界面偏好写入被
任务租约拦下,异常在 Qt 事件里没人接住。界面偏好与任务数据无关,改用独立跨进程文件锁,
失败时只提示一次、不再中断点击。 - 已承音装备无法继续承音:见上文不兼容变动。
- 承音合并误判:见上文不兼容变动;根因是升阶关系判断缺少「必须已承音」与「不低于本赛季
作废线」两个前提。 - 江湖号令合影落点错误:新版游戏拍照前会先弹「画质选择」,不处理会让随后的「拍摄」落在
弹窗上。现在进入拍照前先取消该弹窗,弹窗没出现时不做任何点击、按键或等待。
📦 重构
- 在线配置只按修订号加载增量:公开与会员各自比较本机记录与远端最新修订,相同不下载,
不同则从 r0 重建整棵树后叠加该修订,远端回退走同一条路径。移除清单基底比对、整树哈希准入、
索引快照、双阶段预演与跨实例观察器;r0不再作为发布身份凭据,只在恢复预置时确认。
会员撤回同时归零会员修订,修复关闭在线更新或授权失效后不再拉取的问题。 - 场景注册表改为插件注册完成后显式初始化:场景加载此前是模块导入的副作用,会让场景、
PyQt6 与识别器抢在插件注册之前加载,并把「已加载场景」打印两遍。现在由启动流程在所有插件
注册完成后显式初始化一次,日志顺序为「插件 → 主窗口 → 场景」。 - 配置锁体系统一:全仓库加锁顺序固定为「进程内
configuration_lock→ 跨进程
interprocess_lock」,冲突确认弹窗移到两把锁之外;锁目录不再按is_dir()分支、缓存键带上
用途后缀、获取跨进程锁加超时并回收失败时漏关的句柄。
📚 文档
- 用户指南重排:顶层编号从 14 降到 9 章加附录;移动设备、脚本工作台前移为 7、8,「常见问题」
与「问题反馈规范」合并为第 9 章,配置升级调整、官方在线配置与会员内容、功能激活与恢复收进
附录 A/B/C。旧的07-faq.md不再存在,收藏过该页面的用户请改用
常见问题与反馈。 - 装备管理、装备数据总览、装备系统、机制约定与毕业率模拟补充承音逐阶规则、传律石口径与
assume_chengyin语义;机制约定表新增 A10(传律石单次提升 4.5%)。 - 在线配置与多实例并发相关的架构、需求与用户文档同步修订号的加载口径与写入所有权。
📝 变更统计
- 相对 v0.15.3 共 17 个开发/维护提交,另有 1 个发布准备提交。
- 除
docs/与packaging/外 69 个文件变更,新增 2833 行、删除 678 行;docs/37 个文件,
新增 574 行、删除 440 行。 - 按发布流程本版本地执行
add_content_version --check、Ruff、mypy 与全量 pytest
(QT_QPA_PLATFORM=offscreen);云端 Windows/Android 构建、签名核验与四项产物核验由
发布流水线执行,结果通过执行反馈报告。 - 承音逐阶、传律石估算与江湖号令合影的画质弹窗依赖真实游戏界面,需实机验证;多实例并发写
建议在双开场景下确认保存行为。
⚠️ 免责声明
本项目仅供学习与技术研究使用。使用自动化工具操作游戏可能违反相关游戏的用户协议,
由此产生的后果由使用者自行承担。升级前请备份个人配置与数据库。
📄 许可证
PolyForm Noncommercial License 1.0.0 — 非商业使用许可