热血江湖助手 · 分析资料站← 报告总目录助手主页
分区:15_助手版本迭代说明源文件:一键队友入名单_改动说明.md篇幅:11.5 KB收录:2026-10-19 17:10

一键队友入名单 —— 改动说明

日期:2026-10-06<br>主本:D:\AI空间\rxjh\旧版本更新.代码<br>编译源:D:\AI空间\rxjh\旧版本更新_修复后.e


一句话

界面上新增一个按钮 「一键队友入名单」:点一下,把当前队伍里除自己以外的所有队友,<br>一次性加入「组队名单」(已在名单里的先跳过,只写日志)。


⚠️ 先看这里:按钮为什么一开始看不见

1. 编译源文件别选错

文件说明
旧版本更新_修复后.e✅ 就用这个编译(2,732,802 字节,含本次全部改动)
旧版本更新.e❌ 过期副本,不含新按钮,编译它当然看不到

在易语言里打开的是哪个,标题栏/最近文件里能看出来。认准 _修复后。

2. 已修掉一个真实缺陷:按钮被「抢」到别的分组框里

原始工程的窗口数据里,补给_分组框_死亡处理 这个分组框的 Children 列表第一个元素是 379<br>—— 而当时整个窗口只有 379 个控件(下标 0~378),所以它是个指向不存在控件的空槽,<br>从原始 .e 就存在,一直无害。

上一轮把新按钮追加到控件数组末尾,下标恰好也是 379,这个空槽就「复活」了 ——<br>按钮被 分组框4(组队名单)和 补给_分组框_死亡处理 同时认领。<br>易语言只认一个,按钮被挂到了后者下面。而那个分组框只有 44px 高,<br>按钮的 Top=252 直接跑到框外 → 界面上完全看不到(控件确实写进了 .e,就是看不见)。

修复方式:删掉 补给_分组框_死亡处理 里那个无效的 379 引用,让按钮唯一归属 分组框4。<br>删掉的是个空槽,不会丢任何真实控件。

修复后已用「t2e 生成 → e2t 反查」双向确认:


一、按钮在哪

┌─ 组队名单 ─────────────────────┐
│  ┌────────────┐                │
│  │ 组队列表框1 │   [添加][刷新]  │
│  └────────────┘                │
│  [一键队友入名单] [循环邀请按钮] │  ← 新增按钮在这
└────────────────────────────────┘

如果显示位置不满意,直接在易语言设计器里拖动即可(不影响功能)。


二、点一下会发生什么

读队伍内存 8 个队员格
  → 逐格判断:对象指针有效?有效标志 = 1?
  → 读名字(BIG5 转简体)
  → 跳过空名字、跳过自己
  → 与「组队名单」逐项精确比较
        已有 → 只写日志「名字已经在名单中存在」
        没有 → 加入列表框 + 写日志「已加入组队名单」
  → 有新增才保存到 角色配置文件路径\组队名单.ini
  → 末尾写一行汇总:「新增 X 人,已存在 Y 人」

日志形如:

15:52:03 队友【张三】已加入组队名单
15:52:03 队友【李四】名字已经在名单中存在
15:52:03 一键队友入名单完成:新增 1 人,已存在 1 人

三、新增的代码(+50 行)

位置:代码/窗口程序集_MainDialogWnd.form.e.txt,插在 _组队名单添加_被单击 之前。

.子程序 _一键队友入名单_被单击
    .局部变量 队员对象, 整数型
    .局部变量 队员位置, 整数型
    .局部变量 队员名称, 文本型
    .局部变量 自己名字, 文本型
    .局部变量 已有名单, 文本型
    .局部变量 已有数组, 文本型, , "0"
    .局部变量 n, 整数型
    .局部变量 已存在, 逻辑型
    .局部变量 新增数, 整数型
    .局部变量 跳过数, 整数型

    已有名单 = 组队列表框1返回组队名单 ()
    已有数组 = 分割文本 (已有名单, “/”, )
    自己名字 = 编码_BIG5到简体 (内存_读文本型 (全局_进程句柄, #当前血量值 - 128))
    .计次循环首 (8, 队员位置)
        队员对象 = 内存_读整数型 (全局_进程句柄, #队员基址 + 4 × (队员位置 - 1))
        .如果真 (队员对象 ≤ 0)
            到循环尾 ()
        .如果真结束
        .如果真 (内存_读整数型 (全局_进程句柄, 队员对象 + #队员有效标志) ≠ 1)
            到循环尾 ()
        .如果真结束
        队员名称 = 编码_BIG5到简体 (内存_读文本型 (全局_进程句柄, 队员对象 + #队员名称值))
        .如果真 (队员名称 = “” 或 队员名称 = 自己名字)
            到循环尾 ()
        .如果真结束
        ' 去重:与已有名单逐项精确比较(不用 寻找文本,避免「张三」被「李张三」误判)
        已存在 = 假
        .计次循环首 (取数组成员数 (已有数组), n)
            .如果真 (已有数组 [n] = 队员名称)
                已存在 = 真
                跳出循环 ()
            .如果真结束
        .计次循环尾 ()
        .如果 (已存在 = 真)
            跳过数 = 跳过数 + 1
            写日志 (自定义时间 () + “队友【” + 队员名称 + “】名字已经在名单中存在” + #换行符)
        .否则
            组队列表框1.加入项目 (队员名称, )
            已有名单 = 已有名单 + 队员名称 + “/”
            已有数组 = 分割文本 (已有名单, “/”, )
            新增数 = 新增数 + 1
            写日志 (自定义时间 () + “队友【” + 队员名称 + “】已加入组队名单” + #换行符)
        .如果结束
    .计次循环尾 ()
    .如果真 (新增数 > 0)
        组队列表框1保存配置到文件 ()
    .如果真结束
    写日志 (自定义时间 () + “一键队友入名单完成:新增 ” + 到文本 (新增数) + “ 人,已存在 ” + 到文本 (跳过数) + “ 人” + #换行符)

没有新增任何子程序、常量或全局变量,只用工程内已有的东西:

用到的东西来源
#队员基址(62881304) / #队员有效标志(816) / #队员名称值(824)常量表,遍历队员(1788 行) 已在用
#当前血量值 - 128 读自己名字同 遍历队员 1817 行
组队列表框1返回组队名单 () / 组队列表框1保存配置到文件 ()工程现有子程序
分割文本 / 取数组成员数 / 到循环尾 / 跳出循环逐项比对过工程内有先例

四、两个设计细节

① 去重不用 寻找文本,改成逐项精确比较。<br>工程里原有的「列表框2 加入名单」用的是 寻找文本 (名单文本, 名字 + "/", , 假) = -1。<br>这个写法有隐患:名单里若有「李张三」,查队友「张三」时 张三/ 会在 李张三/ 里命中 → 误判为已存在、漏加。<br>本功能按 / 分割成数组逐项 = 比较,不受名字互为后缀影响。

② 排除自己,但做成"读不到就不排除"。<br>队伍 8 格按常理不含自己(遍历队员 是把「自己」单独读出来追加的),这里仍加了一道<br>队员名称 = 自己名字 的判断兜底;如果 自己名字 读成空串(未进游戏),该判断自然不成立,<br>不会因为读不到自己名字就把队友全部误杀。


五、界面控件是怎么加进去的(供以后参考)

窗口定义在 窗口/MainDialogWnd.form.json(UTF-8 BOM + CRLF),控件是扁平数组 Controls,<br>父子关系靠容器控件里的 Children 索引列表表达(这里 分组框4.Children = [47,48,50,57,58,51,379])。

新增控件需要同时改两处:

  1. Controls 数组末尾追加控件对象(本次成为索引 379)
  2. 把 379 追加进目标容器的 Children

按钮标题不在 JSON 明文字段里,而是编码在 ExtensionData:

010000000000000001000000010000000000000000000000   固定 24 字节前缀
0E000000                                           标题字节数(小端) = 14
D2BBBCFCB6D3D3D1C8EBC3FBB5A5                       GBK 字节(「一键队友入名单」)

另有一个 UnknownBeforeLeft 字段是控件唯一 ID(380 个控件各不相同),新增时取了个未占用的值 50820000。


六、验证结果

项结果
字节级写入UTF-8 BOM ✓ / CRLF 12647 / 裸 LF 0 ✓
块结构配平✓(.如果真/.如果/.计次循环 全闭合)
JSON 结构控件数 379 → 380 ✓ / 索引未错乱 ✓ / 分组框4.Children 已含 379 ✓
t2e 回转SUCC,18473 条日志全 [信息],0 错误 0 警告 ✓
新子程序解析_一键队友入名单_被单击 ✓ 解析成功
e2t 反查窗口定义新按钮完整保留:名字/坐标/尺寸/标题/唯一ID/父容器全部 1:1 ✓
e2t 反查代码_一键队友入名单_被单击 50 行,唯一差异是 e2t 把 , , "0" 归一为 , "0"(同样作用于原有代码,语义等价)✓
窗口 JSON 往返8389 行 → 8389 行,diff 只有顶层 Id(每次生成都会变)✓
历次修复回归组队名单路径 / 正邪判断 / 防杀坐标判据 / 3轮重试 / 凝神珠名单 / 集魂珠 / DLL 撞名 全部在位 ✓

F7 编译未代跑:本次检测到游戏 YGOnline.exe 有 1 个实例在跑(你在挂机),<br>自动化编译探针要抢前台焦点约 1 分钟,按键可能落到游戏窗口、让挂机角色站着挨打,不划算。<br>你用易语言打开 旧版本更新_修复后.e 按一下 F7 即可。

打开 .e 后请顺手确认一件事:新按钮是否出现在「组队名单」框里、与「循环邀请按钮」并排。<br>位置不合适可直接在设计器里拖动(只需拖,不用改代码)。


七、备份与产物

注意:如果你 IDE 里开着的是 旧版本更新.e,本次改动不在那个文件里,请用 旧版本更新_修复后.e。

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