日期:2026-10-06 21:05<br>改动文件:旧版本更新.代码/代码/窗口程序集_MainDialogWnd.form.e.txt(12785 → 12788 行)<br>编译产物:旧版本更新_修复后.e(2,741,764 字节,魔数 CNWTEPRG)
20:59:53 凝神珠第1格被[修练完成的凝神珠]占用,跳过。
20:59:55 凝神珠第1格被[修练完成的凝神珠]占用,跳过。
…(每 2 秒一条,永远只有「第1格」)
自动凝神.选中 为真 → 遍历背包凝神珠数量() ≥ 1 为真 → 启动 自动使用凝神珠 线程。修练完成的凝神珠 占着 → 报一行日志 → 后面 5 格是正在修炼中的珠子(走静默跳过,不打日志)→ 6 格都没找到可用位置 → 返回 -1 → 线程跳出。「只报第1格、第2~6格没报」本身就说明后面几格是名单内的珠子(走的是不打日志的分支)。
旧版本更新.代码.bak_凝神珠统一判断_20261006_1424).如果 (物品位置 ≤ 0)
返回 (凝神珠格子 - 1) ' 真空格,直接可用
.否则
物品名称 = 编码_BIG5到简体 (内存_读文本型 (全局_进程句柄, 物品位置 + #背包物品名称值))
.如果真 (寻找文本 (“地.凝神珠(十万)/天.凝神珠(十万)/…/”, 物品名称, , 假) = -1)
' 有物品但不是已完成凝神珠 → 不覆盖,跳过该格(要覆盖就改成 返回(凝神珠格子-1))
写日志 (…“格被[” + 物品名称 + “]占用,跳过。”…)
返回 (凝神珠格子 - 1) ← ★ 原代码:报完日志仍然把这一格返回出去
.如果真结束
到循环尾 ()
.如果结束
原始语义是三分支的:
| 格子里是什么 | 怎么走 | 结果 |
|---|---|---|
| 空 | 物品位置 ≤ 0 | 返回该格 → 新珠子放进去 |
名单内(地.凝神珠(十万)…)= 已投入、正在修炼中 | 落到 到循环尾() | 保留,看下一格 |
名单外(修练完成的凝神珠)= 修炼产出 | 返回 (凝神珠格子 - 1) | 新珠子放进去替换它 |
那次「凝神珠判断统一」把名单判断换成 是否是凝神珠()(这是对的),同时把 返回 (凝神珠格子 - 1) 删掉了,理由是那行注释写着「不覆盖,跳过该格」。
但这个注释本身是自相矛盾的——它的括号里明明写着「要覆盖就改成 返回(凝神珠格子-1)」,而代码本来就是这么写的。当时把注释当成了准绳、把代码当成了笔误,方向反了。
删掉之后的后果:「替换」这条路被彻底堵死,名单外的占格永远只打日志、永远不返回,6 格全满时直接返回 -1。
遍历凝神珠位置是否为空(10024–10051 行):
.如果真 (是否是凝神珠 (物品名称) = 假)
' 【三次修正 · 恢复“替换”行为】
' 名单里的 8 项 = 已投入、正在修炼中的珠子,必须原样保留 → 看下一格;
' 不在名单里的(如「修练完成的凝神珠」)= 修炼产出,格子可被新珠子替换。
' 注意:2026-10-06 14:24 那次“凝神珠判断统一”把这里的 返回(凝神珠格子-1) 当误写删了,
' 结果该格永远被跳过 —— 表现就是“修练完成的凝神珠 没有替换”。
写日志 (自定义时间 () + “凝神珠第” + 到文本 (凝神珠格子) + “格被[” + 物品名称 + “]占用,替换为新珠子。” + #换行符)
返回 (凝神珠格子 - 1) ← 恢复这行
.如果真结束
到循环尾 () ' 该格是名单内凝神珠(修炼中)→ 不能覆盖,继续遍历下一格
改动后语义回到三分支:空 → 放;名单内(修炼中)→ 保留跳过;名单外(修炼产出)→ 替换。
日志文案同步从「占用,跳过。」改成「占用,替换为新珠子。」——一眼能看出这次是替换而不是跳过。
恢复的这个行为是直接覆盖:第1格里的「修练完成的凝神珠」会被新珠子原地替换掉,程序不会先把它取出来。
发包_移动物品 唯一调用点就是放入),没有任何取出逻辑。判断办法:编译后跑一会儿,点界面上的 _凝神珠背包 按钮(dump 专用背包 6 格内容到挂机信息框)。若第1格真的变成了名单内珠子,说明服务端接受覆盖;若第1格始终没变(日志一直打「占用,替换为新珠子」却换不掉),说明服务端拒绝覆盖,得走取出方案。
| 步骤 | 结果 |
|---|---|
| 字节级写入(保留 UTF-8 BOM + 纯 CRLF) | BOM ✓ / CRLF 12787 / LF-only 0 ✓ |
全局块计数(.如果/.如果真 开合) | 改前改后完全一致(715/715、362/362)✓ |
| e2txt t2e 回转 | 0 错误 0 警告,结尾 SUCC ✓ |
| e2t 反查 + 分层保真(改动子程序) | L1 代码级 0 差异 / L2 注释 0 丢失 ✓ |
| 全量 466 个子程序 | L1 = 0 ✓ |
| 二进制确认 | 替换为新珠子 1 处、旧文案 占用,跳过。 归零、恢复“替换”行为 1 处 ✓ |
| 历史改动未受影响 | 自动购买助手 12、一键队友入名单 6、跨图完成(固定等待 1 ✓ |
未做:易语言 F7 编译(你的 IDE 开着,不去抢前台)。
我第一版注释里用了 ⚠️ emoji,往返比对时发现整条注释消失了——易语言注释按 GBK 存储,emoji 编不出来,t2e 会把整行注释丢掉。
已改成纯中文「注意:」,并加了一轮全文件扫描:当前主本 0 行含 GBK 编不出的字符。
以后写注释:只用中文 + 常用标点,不要 emoji、不要生僻符号(★、→、≠、≤ 这些 GBK 有的没问题,⚠️🈲 这类扩展区的不行)。
D:\AI空间\rxjh\旧版本更新.代码D:\AI空间\rxjh\旧版本更新_修复后.e(2,741,764 字节)旧版本更新_修复后.bak_恢复凝神珠替换前_20261006_2104.e_patch/form.e.txt.bak_恢复替换前_patch/fix_恢复凝神珠替换.py(幂等)、_patch/fix_去掉emoji注释.py回滚:cp "_patch/form.e.txt.bak_恢复替换前" "旧版本更新.代码/代码/窗口程序集_MainDialogWnd.form.e.txt" 后重跑 t2e。