热血江湖助手 · 分析资料站← 报告总目录助手主页
分区:15_助手版本迭代说明源文件:凝神珠不替换_改动说明.md篇幅:7.3 KB收录:2026-10-19 17:10

凝神珠「不替换」— 改动说明

日期: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格、第2~6格没报」本身就说明后面几格是名单内的珠子(走的是不打日志的分支)。

二、根因:不是新 bug,是 14:24 那次改动留下的回归

原始代码长这样(备份 旧版本更新.代码.bak_凝神珠统一判断_20261006_1424)

.如果 (物品位置 ≤ 0)
    返回 (凝神珠格子 - 1) ' 真空格,直接可用
.否则
    物品名称 = 编码_BIG5到简体 (内存_读文本型 (全局_进程句柄, 物品位置 + #背包物品名称值))
    .如果真 (寻找文本 (“地.凝神珠(十万)/天.凝神珠(十万)/…/”, 物品名称, , 假) = -1)
        ' 有物品但不是已完成凝神珠 → 不覆盖,跳过该格(要覆盖就改成 返回(凝神珠格子-1))
        写日志 (…“格被[” + 物品名称 + “]占用,跳过。”…)
        返回 (凝神珠格子 - 1)      ← ★ 原代码:报完日志仍然把这一格返回出去
    .如果真结束
    到循环尾 ()
.如果结束

原始语义是三分支的:

格子里是什么怎么走结果
空物品位置 ≤ 0返回该格 → 新珠子放进去
名单内(地.凝神珠(十万)…)= 已投入、正在修炼中落到 到循环尾()保留,看下一格
名单外(修练完成的凝神珠)= 修炼产出返回 (凝神珠格子 - 1)新珠子放进去替换它

14:24 那次改了什么

那次「凝神珠判断统一」把名单判断换成 是否是凝神珠()(这是对的),同时把 返回 (凝神珠格子 - 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 有的没问题,⚠️🈲 这类扩展区的不行)。

七、产物与回滚

回滚:cp "_patch/form.e.txt.bak_恢复替换前" "旧版本更新.代码/代码/窗口程序集_MainDialogWnd.form.e.txt" 后重跑 t2e。

本页由 Markdown 报告自动转排;如需原始 md,可在原会话工作区取用。