# 牛奶咖啡 · Lmzylog.dll 更新说明
- **版本号**:26.10.25.15
- **项目**:E:\progream\Lmzylog(网络版)
- **主程序调用**:牛奶咖啡.exe(授权通过后加载 Lmzylog.dll)
- **本版状态**:编译 0 错误 0 警告,已部署并启动验证通过
---
## 一、账号管理(首页)
1. 首页新增「账号管理」区域,DataGridView 表格共 7 列:勾选 / 序号 / 游戏名称 / 账号 / 服务器 / 等级 / 场景地址,首列为 CheckBox。
2. **多账号勾选**:修复选择框无法勾选的问题(表格级只读压制编辑,改为 CellClick 手动切换勾选状态);列头设置为横向显示,可同时勾选多个账号,支持按勾选顺序逐个操作。
3. 勾选账号后**自动获取句柄并绑定后台**,不再需要手动「获取句柄」按钮;切换游戏窗口时自动重新绑定,并在账号管理中**同步勾选对应的账号**(只勾当前前台账号、取消其它)。
4. 功能界面「仅复制地址」选择框在账号被勾选后自动取消选中(避免与多账号操作冲突);自动清包功能统一保留首页版本(功能页同步调用同一套逻辑)。
5. 刷新账号速度优化:去掉全内存扫描获取等级,等级列先显示「-」,刷新显著变快。
## 二、跳转地图(核心修复)
1. **同在场景误判修复**:原只比较地址第一段(如 town18)即判定“已在目标场景”而跳过跳转,改为完整地址相等才算同场景。
2. **句柄类型错误修复**:前台监听 timer 原把游戏句柄设为主窗口句柄,OP 后台绑定实际需要渲染子窗口(GBoxMainWnd)句柄,已改为自动转换为渲染句柄。
3. **绑定死循环修复**:`绑定选中账号()` 曾误改 `_上次记录的游戏句柄`,导致前台 timer 每 tick 误判窗口切换、无限“自动切换 + 已绑定”,已移除该赋值。
4. **窗口未显示时跳转报错修复**:绑定前新增「准备窗口绑定」——还原主窗口 + ShowWindow + 轮询窗口尺寸非 0(最长 1 秒),失败直接返回,避免 OP bind 报 invalid window。
5. **特殊场景(`_` 开头地址,如 `_y01a/store`、`_fb2/...`)**:原一律走多步地图导航;现改为**先直接输入地址**,每 500ms 读游戏场景内存确认、最长 3 秒,未生效才回退到地图导航(浪漫城_1 → 浪漫平原路标 → 绿色建筑)。
6. **搜物双击跳转**:双击房间地址后按选中账号(无勾选时回退当前前台句柄)自动跳转;多账号逐个跳转,间隔 400ms。
7. **跳转性能**:`执行鼠标点击操作` 延迟由 1100ms 压缩至 300ms,跳转各步骤延迟减半;用户实测 town17→town18→town34→town18 及特殊场景 `_fb2/...` 全部跳转成功。
## 三、自动更新修复
1. 备用更新解压 Lmzylog.dll 时因 DLL 被主程序占用而报 IOException(The process cannot access the file)。
2. 修复方案:被占用文件解压为 `Lmzylog.dll.new`;主程序 `Program.cs` 启动时扫描程序目录下 `*.new` 文件,删除旧文件后改名替换,实现延迟替换。
## 四、DLL / 资源精简
1. csproj 移除 `GitHub.Copilot.SDK` 包引用(零代码引用,省约 111MB copilot.exe)。
2. 移除嵌入式资源 `generate_version_json.py`(零引用)。
3. 废弃文件移入 `_废弃备份\` 目录:测试目录下 `dm.dll / DmReg.dll / j4hj1.dll / RegDll.dll / Lmzylog.dll.new`(旧版残留),项目内迁移文档(大漠转OP html/md)。
4. 保留运行必需的 `op_c_api_x86.dll / op_x86.dll / tools.dll / runtimes`,输出目录精简为 7 项。
## 五、警告清零(约 110 条 → 0)
1. 根因:项目启用 `Nullable=enable` 空引用分析,旧 WinForms 代码产生海量 CS8618/CS8602/CS8625/CS8622 警告。
2. 方案:`Nullable` 改为 `annotations`——保留 `string?` 注解语法,关闭空引用分析(纯编译期行为,不影响运行时)。
3. 附带回修:删除死字段 `_isViewingStaticData`(仅赋值未读取)、`#if DEBUG` 不可达代码改为互斥分支、未使用异常变量 `catch (Exception)`。
## 六、常量集中(本版新增)
1. 将所有 cs 文件中的**文件级常量**集中到 `常量类.cs`(末尾新增 `#region 跨文件集中的常量`),共 8 个来源文件:
- Form1.cs:`最大未知次数 / 操作间隔毫秒 / 最大重试次数 / 重试间隔毫秒`
- Form_授权系统.cs:`CONFIG_FILE_NAME`
- 内存读取.cs:Win32 常量 `PROCESS_VM_READ / PROCESS_QUERY_INFORMATION / TH32CS_SNAPMODULE`、正则 `指针地址正则 / 直接地址正则`
- 工具类.cs:`EmailRegex / IdCardRegex / NameRegex / PasswordRegex`
- RomanticManorRegistrator.cs:`REG_PAGE_URL / VALIDATION_BASE_URL`
- OP插件.cs:`DllName`(DllImport 使用,const 编译期常量不受影响)
- RichTextBoxLogTarget.cs:`LogDirectory`
- RC2API.cs:`_cacheDirectory → RC2缓存目录`、`_baseUrl → 常量类.Domain`、`_图片基础地址 → 常量类.ImageUrl`
2. 所有引用点同步改为 `常量类.xxx`(约 30 处)。
3. **未迁移**(保留原处):方法内局部常量(`BATCH_SIZE`、局部 `reg/url`——作用域仅限方法内);运行时对象字段(`HttpClient`、锁对象、日志队列等类内部状态实例)。
4. 所有常量值原样搬移,零语义变化,不影响运行。
## 七、其它
- 授权界面美化(圆角按钮、卡片信息框),并调整到最合适大小。
- 房间图片查询:只需输入物品名称即可检索,无需再加 `.png` 后缀。
- 搜物界面“物品详情 / 数改”分栏显示,修复切换 Tab 后控件重叠、内容未显示问题。
- 输出目录 DLL 文件核对:仅 `Lmzylog.dll` 及运行依赖(op 三件套、runtimes、deps),已确认无多余文件。
---
## 验证情况
| 项目 | 结果 |
|---|---|
| 编译 | 0 错误 0 警告(dotnet build -c Debug -p:Platform=x86) |
| 部署 | Lmzylog.dll 已复制到 牛奶咖啡 测试目录 |
| 启动 | 主程序正常启动至授权界面(牛奶咖啡授权系统 · 专业版) |
| 跳转 | 普通场景 + 特殊场景(`_` 开头)多轮实测通过 |