# emberveil_eval_help
**Repository Path**: xeval/emberveil_eval_help
## Basic Information
- **Project Name**: emberveil_eval_help
- **Description**: emberveil wow 服全职业一键宏
- **Primary Language**: Unknown
- **License**: LGPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-09-13
- **Last Updated**: 2026-10-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# EvalHelp —— 全职业工具
> 🌍 Languages: **中文** · [English](README_en.md) · [Русский](README_ru.md)(游戏内语言:配置窗右上角国旗切换)
> 📢 **插件发布频道(KOOK)**:[emberveil 一键宏 · 插件发布](https://www.kookapp.cn/app/channels/7071527711947717/5336773639081280) —— **每次发布都在这里发帖**(主插件与每个子插件各一条),帖内含更新概要、封面/截图与下载包链接。
> EmberVeil(1.12.1 / Lua 5.1)**全职业工具插件**:宏正文一行 `/run EVAL_GO()`,规则引擎驱动——**技能五分类**(角色行为/角色技能/宠物行为/目标选取/物品使用)× **71 种条件类型**(7 组下拉:自身状态 / 目标状态 / buff·debuff 检查 / 技能状态 / 队伍·团队状态 / 队伍·团队宠物状态 / 候选者状态 —— 其中「候选者」4 种只在成员选取器那一行出现)× 多方案绑定按键,全部可视化配置,不限职业。另附五个内嵌页:**工具箱**(**UI 工具** · 商人助手 · 队伍 / 社交 · 任务 · 三助手 · 稀有提醒 —— **逐行清单见下表**)、**任务线 & 装备**(任务线 · 装备 · 四类检索 + 世界地图标注层,依赖 UnrealQuest)、**图标库**(客户端内置宏图标:分组 / 悬停显示路径 / 搜索翻页)、**抓宠帮手**(宠物技能 → 驯服来源 → 跳查刷新点)与**子插件**(可选子插件的启用 / 停用)。
| 模块 | 入口 | 一览 |
| :-- | :-- | :-- |
| 🗡️ **通用一键宏** | 宏 `/run EVAL_GO()` | **技能五分类**:角色行为(攻击 / 姿态切换)· 角色技能 · 宠物指令 · 目标选取 · 物品使用
**方案技能数不限**(列表可滚动)
**多方案 ≤12**,各绑按键直触(**按键按角色**) |
| ⚙️ **配置窗口** | 小地图 EH 图标 · `/eh cfg` | **方案 / 技能 / 条件**全可视化编辑(**条件关系四态** `&` / `|` / `&&` / `||`,可写「与里套或」)
**文本导入导出分享**
**七个 Tab**:全局 · 一键宏设置 · 工具箱 · 任务线 & 装备 · 图标库 · 抓宠帮手 · 子插件 |
| 📤 **方案分享** | 配置窗「一键宏设置」页 `[分享]` / 聊天链接 | **发送**:分片发到 公会 / 队伍 / 说(限频防刷屏),对方点 [导入] 才入档
**品阶封皮**:`[品阶秘籍·名]` 可点链接 + 弹窗确认
**品阶评分**:覆盖 ≥4 大类且 ≥50 分才神级 · 五色
**头衔抽卡**:5 档 × 15 张 · 名号自定义
**彩蛋**:「创世者亲临」
**收方反应**:按(头衔档 × 秘籍档)抽奖式回一句角色扮演反应 |
| 🧩 **案例模版** | 配置窗「一键宏设置」页底部 `[案例模版]` | **12 组 40 条**现成方案(按职业分组)
**分组分两列 + 组内同行自动换行**
点一下即导入,悬停看方案内容 |
| 🧰 **工具箱** | 配置窗 Tab3 | **严格按面板上的实际分组与行罗列**(组标题 = 面板里的「—— xx ——」;现共 **42 行 / 8 组**(8 个组标题 + 34 个功能行))
**UI 工具**
· **缩放大地图**(勾选框 + [设置]:GUI 重开;Shift+滚轮=透明度 · Ctrl+滚轮=缩放 · 金色条=拖动)
· **图层拖拽**(勾选框 + [设置] 选层)
· **图层隐藏**(**无总勾选框**,[设置] 里多选要藏的层)
· **拾取贴手**(勾选框 + [设置]:跟随 / 品质描边;**点一次换下一件** —— 开窗贴一次、之后每点一件立刻换到下一件;**窗中心不超出屏幕中央 70%** —— 到边界就不再多偏;拾取偏移与校准走 `/eh go 拾取 偏移 ` / `拾取 校准`)
· **顶部信息条**(勾选框 + [设置]:区域·金钱·背包·网络·专业·内存·**公会在线**·**装备耐久/总耐久** 八段 + [重设位置];后两段**零打扰** —— 不发任何 `/who`、不弹客户端窗口,耐久走隐形提示读完即收起)
· **装备比较**(勾选框,默认开)
· **目标生命值显示**(勾选框 + [设置]:**数值 / 百分比 多选**,勾哪几样显示哪几样;**默认开**;**血量 0 时整条收起**)
· **小地图时钟**(勾选框 + [状态] / [重置]:小地图正下方常显**本地时间**,按住左键可拖到任意位置(按角色记忆)· 右键关掉;**默认开**)
· **自动站立**(勾选框 + [状态] / [记录]:客户端报「必须站立」时自动起身;插件自己那一下被客户端打回会 **0.35 秒后重放一次**;**默认开**)
**—— 商人助手 ——**
· **物品价**(勾选框 + 学价 / 清价;**商人价 · 估值**)
· **BiS 装备**(勾选框 + [状态] / [刷新];**分阶段最佳装备**:悬停装备时在提示里追加「# Best in slot for:」—— 按职业/天赋列出这件装备在哪个阶段(P1~P6)属于最佳,带抗性 / 用途标记;数据来自第三方 ExoLink_BIS)
· **自动修理装备**
· **自动售卖灰色物品**
· **自动购买指定物品**([添加] / [清空] 名单)
· **批量购买**(**Shift+右键** —— 商人界面 Shift+右键某一商品行 ⇒ 弹数量窗:默认 20 / ±5 步进,逐笔购买)
· **交易记录列表**(勾选框 + [列表] / [状态];每次开交易窗在它右侧挂一个历史列表:时间 / 对方 / 金币 / 物品 —— 左键密语 · 右键删行)
· **自动丢弃指定物品**(勾选框 + **[配置]**:悬浮「丢」图标**右键从背包选物品** · 图标右侧横排**左键开关 / 右键移除** · Ctrl+滚轮=图标大小;丢弃 = **每秒主动检查背包**一次)
**—— 队伍 / 社交 ——**
· **团队就位自动确认**
· **屏蔽频道进出信息**([关键字(N)] 多选)
· **屏蔽公会成员上下线提示**(CVar `guildMemberNotify`)
· **角色名职业着色**
· **聊天窗名字着色**([设置]:等级 / 区域)
· **未缓存角色主动查询**
· **聊天名字右键菜单**
**—— 任务 ——**
· **自动接取任务**
· **自动交付任务**
· **按住[Shift]临时停止任务交接**(右侧换键;取消勾选 = 关闭)
· **任务通知频道**(关 / 自己 / 说 / 队伍)
**—— 猎人助手 ——**
· **一键喂食**(右侧 [重设位置],**Ctrl+滚轮=图标大小**)
· **自动喂养**
**—— 消耗品助手 ——**
· **消耗品助手**(右侧 [重设位置],**Ctrl+滚轮=图标大小**)
**—— 骑乘助手 ——**
· **一键下马**
· **自动下马**
**—— 稀有提醒 ——**
· **稀有提醒转播**(任务插件发现稀有那一刻报到聊天框,点名字选中它) |
| 🧭 **任务线 & 装备** | 配置窗 Tab4 | **任务线视图**:一条线逐节点排开(任务名 · 等级 · 奖励,节点带放大镜)
**装备视图**:按等级列出可获取装备(武器优先 · 种类多选 · 缺图占位)
**四类检索**:任务 / 物品 / 怪物·NPC / 对象(输入即搜、无限级联下钻)
**任务详情**:**起始 / 结束 NPC** 各列一行(名字 · 区域 · 坐标),**点行即在地图上定位**
**任务树子页**:父子任务层级(站点「解锁 / 需要」并集建图,缩进即层级、多前置如实标注)
**过滤**:**来源(地域)多选 + 等级多选**
**列表行尾**:**奖励图标 + 需求材料图标**(「需」标记悬停出完整材料清单,任务道具已剔除)
**世界地图标注层**:16 类别随切图实时重绘(**地图右侧放大镜入口 = 分类标注下拉,点窗外即关**;标注**同步画在小地图**上;依赖 UnrealQuest) |
| 🖼️ **图标库** | 配置窗 Tab5 | 客户端内置宏图标**按前缀分组**
**悬停显示路径** · 可搜索翻页
另有「**本插件在用**」一组(直接列出本插件用到的图标) |
| 🐾 **抓宠帮手** | 配置窗 Tab6 | **检索宠物技能**(图标 + 各等级列表)
**详情页**:技能简介 / 需求等级 / **驯服来源**(哪个怪、在哪出没)
**放大镜**一键跳「任务线 & 装备」查刷新点 |
| 🧩 **子插件** | 配置窗 Tab7 | 可选子插件的**启用 / 停用与界面入口**;勾选才载入、未勾选连文件都不读
九个子插件各自带 `README` / `CLAUDE` / `CHANGELOG`,发布时各自独立打包两份
**整合背包 EH_Bag**,`/ebag` —— 与 OneBag 逐项对齐的独立背包窗
**图层调试 EH_DebugBox**,`/edb` —— **可拖拽 · 关图不消失**的图层树面板:扫描源多选 · 过滤 · 选中金色描边 / 悬停红框 + 自绘信息条 · 逐层改缩放·透明·宽高·坐标 · 自定义记账与一键还原
**增强伤害显示 EH_Damage**,`/edmg` —— 20 项勾选的浮动战斗信息:滚动方向 11 种 · 字号 20~120px(Shift+点 = ±10)· 字形三档(无描边/黑描边/加粗)· 技能图标封顶 60px · 编辑模式模拟战斗实时预览
**伤害统计 EH_DPS**,`/edps` —— 队伍级统计表:9 个视图全部按玩家出条目 · 职业染色 · 点击条目下钻该玩家技能分解 · 双段(当前/全程)+ 各自活跃时间 EDPS · 聊天报告限频 · 窗口拖拽/改尺寸/Ctrl+滚轮缩放 · 右键标题弹视图菜单 · 启用即开窗
**邮箱增强 EH_Mail**,`/tm` —— 邮箱增强(移植版):多附件连发 · 批量取件 / 退回 / 删除 · 收发记录小图标方格(悬停出全部信息,点一下切到写邮件页并填「对方」)· 收件人自动补全 · 附件选择列表 = 纯数据(选的过程一个物品都不碰)· 前缀统一 `[EH_Mail]`
**世界迷雾 + 区域实景贴图 EH_RealisticMap**,`/erm` —— 原「关闭世界迷雾」整块独立成插件:实景贴图(整区一张 · 写 `OVERLAY` 层)· 接管守护 · 残留图层清理 · 编辑模式(贴图列表 / 拖拽 / 位置箭头 / 尺寸 / 统一透明度 / 两级重置 / 保存并重载)· 前缀 `[EH_RealisticMap]`
**副本地图浏览器 EH_Atlas**,`/eha` —— 副本 / BOSS 掉落 / 副本任务 / 世界地图副本·交通标记(上游 Atlas-CFM 的 EmberVeil 移植版)
**聊天快捷按钮 EH_ChatBar**,`/ehcb` —— 聊天栏上方一排快捷按钮(说 / 喊 / 密 / 队 / 会 / 团 / 综 / 世 + 就位确认 / 倒计时 / 表情菜单 / 骰子,共 33 个逐个可开关)· **字形走插件自带的离线图集**(无描边 / 黑描边 / 加粗 三档 · 不依赖客户端字体对象)· 左键拖动栏上任意一个钮移动整条栏(**不需 Shift**,松手即记住)· Ctrl+滚轮 = 缩放 · 表情菜单 4 组 67 条
**大脚动作条 EH_Bar**,`/ehbar`(别名 `/ehb`)—— **大脚动作条移植版**:最多 **10 条**可自由摆放的动作条(每条独立淡出档 · 标题头右键菜单 · `/ehbar 开关` 一键收起),用客户端自己的 1..120 动作槽位 |
| 🔍 **状态信息UI** | `/eh st` | 状态变量实时总览 + 最近释放条件逐项判定 √× |
| 📝 **状态日志** | `/eh` | 聊天框 + 日志文件双写 |
> 📌 持续优化中,欢迎测试反馈! 🐞 [问题反馈 / 建议](https://gitee.com/xeval/emberveil_eval_help.git)(Issues) 🤖 DeepSeek Harness AI 辅助开发(见文末「参与开发」)
## 🏁 里程碑(1.52.0 → 1.77.39)
- **⚒ 装备比较进「专业制造窗口」(锻造 / 裁缝 / 附魔)· 🪟 自建常显窗层级压到 `LOW`(不再盖住商人 / 邮箱 / 银行 / 训练师)· ⌨ NPC 交互中不触发方案热键 · 📶 顶部信息条加「公会在线 M/N + 装备耐久 / 总耐久」· ⏱ 施法链路收口(「目标施法中」静默失效的真因 · 法术施法时长库兜底 · 瞬发不计入)· 🧰 换装下拉只留装备 + 行悬停出客户端物品信息**(1.77.25 → 1.77.39):① ★★★**专业制造窗口的装备比较**(1.77.37 → 1.77.39):那两个窗口的列表行模板 `OnEnter` **只改高亮色、根本不弹气泡**(`ClassTrainerFrameTemplates.xml:19`)⇒ 原来三条腿(容器包装 / 焦点路 / 代理背包上报)在那里**全断**;改法 = **行悬停驱动**(用行自己的 `GetID()` 取制造物链接,**绝不自算滚动偏移**)→ 写进既有外部悬停账 → 当场更新一次。1.77.38 修「制造列表里那个小方框」= 我们弹了一颗**内容还没到**的空气泡(空 tooltip 没有尺寸 ⇒ 九片边框叠成 20×20 落在行首)⇒ **填上了才 `Show` + 有界重试 8 拍 + 漏掉 `OnLeave` 的兜底**(判「还在不在这一行」优先问行自己 `IsMouseOver`);同一轮把「第一次悬停不出框」的重试从 3 拍放宽到 12 拍。1.77.39 修「仍不出框」——真机判据是**气泡贴着光标、不在行首** ⇒ 那颗气泡是客户端自己弹的、我们的行脚本**一条都没装上** ⇒ 新增**按气泡名字反查配方表**这条腿(`EVAL_EC_PROF_BY_NAME`;缓存按配方条数失效、单表上限 400、窗口判不出也不把腿关死),并把「另一侧没读完」与「另一侧真没属性」分开报(`worn not cached` / `worn no attrs`)。② **HUD 层级**(1.77.36):自建常显窗(战斗UI / 状态UI / 三个悬浮助手与它们的横排、快乐度条)一律 `LOW` —— 聊天框 `BACKGROUND` 之上、NPC 对话窗 `MEDIUM` 之下;★**只压 level 抢不过**(对话窗是 `toplevel`)、**strata 优先于 level**,且**子件不继承父帧的档** ⇒ 逐个显式设档。③ **NPC 交互中不触发方案热键**(1.77.33 → 1.77.35):判据 = 逐帧 `IsShown()` **现读、绝不缓存**;★`InboxFrame` 实测**恒真**(`IsShown` 只报自己的标志、不看父级)⇒ 从清单删除;四条不接管的理由**次序即判据**,最贵的 NPC 判断排最后 ⇒ 非我方格子**一个客户端调用都不发**;拦下来 = **把按键原样交回客户端**(不加开关、守卫静默)。④ **顶部信息条两段**(1.77.25):公会在线 = `GetNumGuildMembers` 只当名单条数 + 逐条 `online` 自己数(**绝不拿它的返回值当在线数**);耐久 = 本客户端**没有数值耐久 API** ⇒ 只能读隐形提示那一行,**读完立刻 `Hide`**(屏上一个像素都不闪)。⑤ **施法链路**(1.77.27 → 1.77.29):监听结论按「有没有读条开始 → 写没写 `castName` → 活了多久」三级判,`START = 0` **单独成一支**(不再把「这一轮没读条」误报成插件故障);「目标施法中」由战斗日志文本驱动、另采一份;法术施法时长库 = 生成物**只当兜底**(运行期学到的值永远优先)。⑥ **技能编辑换装下拉**(1.77.26 → 1.77.31):只留 `armor` / `weapon`(`GetItemInfo` 一律**扫字符串、不按下标**)、行悬停照抄任务线那三步(`SetOwner` → `SetHyperlink` → `Show`,**不拿 `NumLines` 当判据**);「悬停什么都不弹」改成**分叉点记账定位**,不猜。
- **🧩 新增子插件 EH_Bar(大脚动作条移植版:最多 10 条可自由摆放的动作条)· 🖱 小地图 EH 按钮右键 = 「快捷开关」窗(工具箱 + 子插件图标墙:关着盖「停」· 判不出盖「?」· 右键打开它自己的设置)· ✂️ 修 tooltip 长中文横穿整个屏幕(本客户端 `GameTooltip` 不会自动换行 ⇒ 一律手工折行)· 🏷 子插件个性宏图标 + 子插件页与工具箱逐项同源**(1.77.17 → 1.77.24):① **物品价去重**(1.77.17):装备悬浮里出现**两条「商人价」**(灰底那条是客户端自己画的)⇒ 客户端那条活价优先、空钱框收掉、**判不出照加**(fail-open,绝不抢着去遮别人的东西),新增只读取证 `/eh go 物品价 钱框`(全文进有界环 `cfg.ipMoneyProbe`)。② **EH_Bar 0.1.0 → 0.1.10**(1.77.20 起):**大脚动作条移植版** —— 最多 **10 条**可自由摆放的动作条、每条独立淡出档、标题头右键菜单,用客户端自己的 **1..120 动作槽位**(与原生动作条同一份数据);★搬迁时按本项目铁律改掉原版 6 处在本客户端会**静默失效或漂**的写法:客户端**不读**插件 `Bindings.xml`(60 条热键整条删除)· `SetScale` 改**几何重建** · `StartMoving` 改拖拽三件套 + 全屏接盘 · 每按钮一个 `OnUpdate`(最多 120 个)改**唯一节拍帧** · 位置记忆由「屏幕矩形当相对偏移」改**锚点五值** · 修掉三个**从未定义过的全局**。③ **施法状态收成一个全局口**(1.77.20):`EVAL_CAST_SET/CLEAR/INFO/TICK/DELAY` 成为**唯一**写 / 清 / 读 / 节拍入口(三处老写点全部改走它),**时长单位启发式判定**(`<30` 当秒 · `30~30000` 当毫秒 · 更大当异常)并把判定结果写进有界账本 `cfg.castState` —— 旧写法一律 `dur/1000` 会让「施法中」在**整段读条里都判否**;同轮新增只读探针 `/eh go 施法`(接口面 · 7 条 `SPELLCAST_` 事件 · `castName` 活了多久 · 四条时间型读数)。④ **移除「Shift+按宏 = 切换方案」**(1.77.19):绑了滚轮的人按住 Shift 滚一下就被当成「切方案」⇒ `EVAL_GO` 里不再读 Shift(「Shift 按住」条件与「Shift+点击」不再被这条抢先)。⑤ **快捷开关窗**(1.77.21):悬浮按钮**右键**弹出「工具箱各组 + 子插件」的图标墙(**一行 8 个**、超出自动换行),点一下开 / 关、**关着盖「停」**(半透明黑罩 + `SetAlpha`,**不压暗图标本体**)、**判不出盖「?」**(绝不把「读不到」画成「已关闭」)、悬停给功能名 + 说明 + **那一刻现读的状态**、**真有设置入口**才指路;每行的读数 / 写值与「勾选后的即时生效级联」各收成**一份实现**(工具箱勾选框与本窗共用,杜绝「只写值不跑级联」的半生效)。⑥ **长中文手工折行**(1.77.22):`GameTooltip` 不换行 ⇒ 唯一实现 `EVAL_TIP_WRAP`(汉字 1 / ASCII 0.55 · **按字符绝不按字节** · 断点优先标点后 · **中文禁则**:收尾标点不许落在行首 · fail-open),行宽 = 工具箱行 30 / 子插件行 34。⑦ **右键 = 打开它自己的设置**(1.77.23 → 1.77.24):工具就点开它自己那一行的设置、子插件就打开面板、**没有设置入口只回一句、工具箱列表一个像素都不弹**;判据从「按行类型猜」改成 **`TB.u.cfgEntry` 逐行点名 + 点之前逐字核对按钮文案**(宁可什么都不点,也绝不肯点一颗可能是 [重置] / [清空] 的按钮)。⑧ **每个子插件配个性宏图标**(1.77.18):`## X-Icon:` 配在**子插件自己的 toc**(宿主 `SUBADDONS` 是镜像、由闸门对盘),子插件页版式改成与工具箱**逐项同源**。⑨ **EH_DPS 0.2.11**:修「拖拽移动后 `/reload` 定位漂移」(位置记忆不再除 `GetEffectiveScale`)。
- **🎯 修 rev2432 客户端更新带来的两处「返回值语义变更」:`施法范围内` 在新版下恒判否 · 「技能可用」改看客户端图标那一个返回(触发型技能不再恒判「是」)· 🧭 修小地图时钟「每次设置成功之后 `/reload` 位置就乱跳」· 💬 新增子插件 EH_ChatBar(聊天快捷按钮)· 🩸 子插件 EH_Damage 0.2.50 → 0.2.62(字号真实像素 20~120 + 出厂默认档再定稿)**(1.77.15 → 1.77.16):① ★★★**真因 = 接口返回值语义变了,静态核对全绿而功能已死**:`IsActionInRange` 旧版「在射程内」= `true`、**新版 = `1`**(`0` 仍是超程、`nil` 仍是判不出),而条件分支原先写死 `r == true` ⇒ 新版下「施法范围内」永远不成立(真机现场:冲锋明明在射程内、技能图标也亮着,却被判「范围内:冲锋 ⇒ 跳过」);判据 = 真机存档 `atkProbe` 环里**引擎自己打的** `射程=` 原始读数。修法 = 判据改 `r == true or r == 1`(新旧两版都对),`nil` 照旧判否;连带修好「目标距离分档」(目标条右侧的 近战/冲锋距/远程外)在新版下恒为空。② **「技能可用」改用第一返回** —— 与客户端自己的 `ActionButton_UpdateUsable` 逐字同式(图标亮 = 可用 · 蓝 = 资源不足 · 暗灰 = 不可用),旧口径 `u or not noMana` 会把「客户端明确判不可用」整类放行 ⇒ 触发型技能(压制)在真机上恒判可用。③ **两条只读探针**:`/eh go 射程`(摊开 `IsActionInRange` 的原始返回值 + 返回值个数 + `ActionHasRange`,并同时给「新口径」与「旧口径」两种结论)与 `/eh go 技能条件`(`IsUsableAction` 两个返回 + 冷却原始 `start/dur`),两条都带 `监听` 子命令自己采时间线、读数落有界存档环。④ **小地图时钟位置记忆改「锚点原样存取」**:老写法存的是「中心偏移 ÷ 有效缩放」= 同一个口径被重复缩放一次(`GetLeft/GetTop` 与 `UIParent:GetWidth()` 本是同一口径),`es` 一变就偏 ⇒ 每拖一次再 `/reload` 就再偏一次;现在存 `GetPoint(1)` 六值、恢复时**原样 `SetPoint`**(相对帧只存名字;读不到名字退绝对锚点,相对帧不在就退回默认落位);旧 `clockX/clockY` 的含义随当时的 `es` 变、**无法换算 ⇒ 一次性清掉 + 回默认 + 如实出声,绝不按猜测乘除一个系数**;自证 = `/eh go 时钟 状态` 新增的「位置口径自证」行。⑤ **新增子插件 EH_ChatBar 0.1.0**(S_ChatBar 图集仿制版):聊天栏上方 33 个钮(说/喊/密/队/会/团/综/世 + 就位确认/倒计时/表情菜单/骰子),字形自带三档(无描边/黑描边/加粗)、左键拖任意钮移动整条栏、Ctrl+滚轮缩放、世界频道按本服实测走 4 号。⑥ **EH_Damage 0.2.50 → 0.2.62**:字号改成真实像素 20~120(Shift+点 = ±10)· 图集倍率调定 3.0 · 技能图标封顶 60px · 伤害数字不再往上窜(摞格封顶 2 行)· 出厂默认档按你的面板截图再定稿(11 个字段)。
- **🧭 位置记忆改「锚点原样存取」—— 战斗信息UI / 状态信息UI 拖动之后 `/reload` 位置不再跑偏 · 🎨 战斗UI 技能图标「太黑」真凶修复(图标层不再被 0.2 深灰染色;遮盖档位待你定档)· 🔎 两条只读自检 `/eh go 战斗ui位置` / `/eh go 战斗ui图标` · 🗺️ 子插件 EH_Atlas 0.1.4 → 0.1.5(副本任务窗收口)**(1.77.14):① ★★★**真因(口径混用)**:老写法在拖动收尾存的是「中心偏移 ÷ 有效缩放」,而这一个式子里 `GetCenter` / `GetLeft` 报的是**像素**、`UIParent:GetWidth()` 报的是**逻辑值** —— 两者只有 `es == 1` 时才碰巧相等 ⇒ `es ≠ 1`(本机 0.88)时存进去的偏移自带恒定偏差,`/reload` 后恢复出来自然不在你拖到的位置。② **修法 = 位置记忆改走锚点原样存取**(`GetPoint(1)` 六值存、恢复时**原样** `SetPoint`)—— 与 `tools/InfoBar.lua` 的位置记忆、图层拖拽**同一把尺子**,锚点口径与「像素 / 逻辑」「有效缩放」结构上无关,不可能再出现「存一个口径、取另一个口径」;相对帧**只存名字**,绝不把帧对象写进 SavedVariables;实现抽成共用件 `uiAnchorSave` / `uiAnchorApply` / `uiAnchorClear`;**老存档照旧**(只有中心偏移的仍走 CENTER 路径,再拖一次即自动升级),越界回归时**锚点键一并清掉**。③ **战斗UI 技能图标的「未激活遮盖」**:它不是半透明黑罩,而是 `icon:SetVertexColor(v,v,v)` 的**乘色亮度系数**(越近 1 越接近原色);★★★**「一直很黑、调档位也没反应」的真凶** = 图标层当初被 `uiSolid(cicon, 0.2, 0.2, 0.2, 1)` **染成 0.2 深灰当「占位底」** ⇒ 图标长期停在约 20% 亮度(现改为「建出来只 `Hide`、有真图标才 `Show` + `SetTexture`」,图标恢复原色)⇒ 按你的要求**先把之前的遮盖档位原样还原做对照**(停用 `0.25` · 缺技能 `0.35` · 冷却中 `0.40` · 条件不满足 `0.55`,条件满足仍是原色 `1.0`)—— **最终档位等你看过效果再定**,想微调**只改这四个数**(`/eh ui` 开关一次或 `/reload` 即生效)。:它不是半透明黑罩,而是 `icon:SetVertexColor(v,v,v)` 的**乘色亮度系数**(越近 1 越接近原色)⇒ 四档收成文件级常量并**两轮提亮**(停用 `0.50` · 缺技能 `0.62` · 冷却中 `0.72` · 条件不满足 `0.90`,条件满足仍是原色 `1.0`)—— 平时绝大多数格子那个「初始态」直接拉到接近原色,状态区分改由**描边色**承载(满足 = 亮金 / 不满足 = 暗金);想再微调**只改这四个数**。④ **两条只读自检**:`/eh go 战斗ui位置`(别名 `uipos`:口径自证 + 闭环自证 + 越界判定 + 位置链路环,**8 秒后自动 `/reload` 落盘**)与 `/eh go 战斗ui图标`(别名 `uicell`:逐格读回客户端真正认下的贴图 / 顶点色四值 / alpha);拖动收尾 / 建窗摆位 / 越界回归三处各记一行进有界环 `uiPosProbe`(60 行)。⑤ **工具箱第 ⑦ 页「子插件」支持连续滚动**(条目超过可视高度时,排在后面的组不再被裁到看不见)。⑥ **三语文档补上第七个子插件**(EH_Atlas 条目)。⑦ 子插件 **EH_Atlas 0.1.4 → 0.1.5**(升号重发):「副本任务的背景没了」收口 —— 那一扇窗回到**主窗内侧的子帧**(缩放与显隐天然继承主窗,不再需要自己配平),底与边框改走**项目唯一配方**,并且**主窗打开时默认不再自动弹出**(老存档一次性迁移,你之后自己在选项里打开过的不会被覆盖)。
- **🧭 世界地图「探索层折算」整族删除 —— 纹理层不再被二次缩放(叠影消失)· 🐛 UnrealQuest 0.5.0 换素材目录后地图标注恢复显示 · 🗺️ 子插件 EH_RealisticMap 0.2.25**(1.77.13):① ★★★**为什么该删**:本客户端**外框缩放会级联到子件**(两条真机实测在案),按同一比例再折一遍就是**第二遍**(真机出叠影);折算的目标集还把**子插件的匿名实景层**当成自己的 ⇒ 两边互相覆盖;而正确口径一直写在同一段代码上方的注释里 ——「**只缩外框**」。⇒ `tools/SimpleMap.lua` **4058 → 2506 行**(净删 1527):`SMFIT` 记账表与常量、`smFit*` 一族、`smFix*/SM_FIX` 五步手动适配、`/ehm mapfit` 的 `diag|dump|trace|mode|fresh|verbose|restore` 与 `/ehm fitnow` 全部删除;**保留** `smLog`(诊断出口,受「调试日志」闸门)、4 个只读桥与黑幕 / 透明度 / 外框缩放 / 位置记忆那一整套 —— 于是**这个模块唯一改地图几何的地方就是外框缩放**,结构上不可能再折第二遍。② **地图标注恢复**:UnrealQuest 0.5.0 把素材搬进 `media\Textures\…`(旧 `media\icons\…` 一条都不存在),而**路径错 = 静默不画**(钉子照旧被摆、`/eh ds` 照报「可见 N」,屏上一个图标都没有)⇒ 路径改成**一律现取**(`dsUqRoots/dsUqIcon/dsUqAsset`)+ 两套目录布局(0.5.0+ / ≤0.4.x)+ 懒惰求值 + `/eh ds` 现读自证素材根。③ 子插件 **EH_RealisticMap 0.2.24 → 0.2.25**:单层几何**恒写基线**(k=1)+ 每拍**屏测自证**闭环(修「只铺半个画框」)。
- **🧰 工具箱新增「BiS 装备」:悬停装备时在提示里追加一块「# Best in slot for:」—— 按职业/天赋列出这件装备在哪些阶段(P1~P6)属于最佳 · 🩸 目标生命值显示改成「只负责数值、绝不额外画血条」 · 🎛️ 工具箱列表一轮版式修正(左对齐 / 分类标题 / 悬停高亮 / 图标居中)**(1.77.12):① **BiS 装备**(工具箱 → 商人助手 → BiS 装备,**默认开**):悬停任何装备,提示里多一块 `# Best in slot for:` —— 逐行列出「职业 天赋 `P1 > P2`」(数据 = 22 个职业天赋组合 / **1517 条标注** / **691 件唯一物品**;来源 = 第三方 ExoLink BestInSlot 数据,本工具只做格式转换与接线);② ★**不画类名图标**(本客户端内联贴图 `|T…|t` 不渲染)⇒ 只有**职业色 + 文字**;③ **同一件同一内容一拍都不重写**(记忆键 = id + 首行名,`GameTooltip` 与 `ItemRefTooltip` 各一份);④ `/eh go bis [状态|开|关|刷新]`(关掉 = 摘节拍 + 清状态,**一个探测都不做**);⑤ **目标生命值显示改口径**:只写数值(当前 / 上限 / 百分比),**绝不额外画血条** —— 原先「连目标框都没有就自建一条金边血条」整档删除;⑥ 顺手两修懒加载:客户端目标框**比插件晚建** ⇒ 句柄只缓存成功 + 1 秒有界重试;锚点重申排在「值没变」早退**之前**(旧版一旦先判成「没有单位框」就永远停在屏幕上方中央);⑦ **工具箱列表版式**:行名与分类标题**左对齐**(此前从未设过该项 ⇒ 取客户端默认居中)、分类标题改成「左文字 + 右侧破折号填充」(修「整段破折号折到下一行」)、悬停整行高亮(未悬停**全透明**)、图标垂直居中并贴行左界;⑧ 子插件 **EH_Atlas 0.1.3 → 0.1.4(升号重发)**:掉落面板里卡在「在缓存中未找到物品」的行,现在**到货即补**真名与图标(★**有代码改动一律升小版本、建新页**,不做同版本覆盖式换包)。
- **🎒 子插件 EH_Bag 0.3.53 → 0.3.58:背包整族落在「拾取框的下一层」—— 开着背包去拾取时,物品图标 / 顶栏按钮 / 搜索框不再压在拾取框之上(真机确认「现在正常了」)· 顺手新增只读探针 `/ebag loot`**(1.77.11):① ★★★**真因(两条一起才解释得通)**:⒜ **子件的有效层至少是父层 + 1** ⇒ 把根降到 `MEDIUM/0` 时,格子 / 图标 / 按钮恒 ≥ `MEDIUM/1` = **与拾取框同级**(同级看创建次序,我们的帧后建 ⇒ 压在上面);⒝ **子树兜底只写 strata、level 一个都不写** ⇒ 子件的层高差原样留着 ⇒ **同 strata 里根本没有「既严格低于拾取框、又保住家族内部高低」的位置**;② **修法 = 整族降一个 strata**(取「拾取窗那一族里最低的 strata」再降一档;每个帧仍用各自的基础 level —— 跨 strata 比层高时 level 完全不参与)⇒ **家族内部高低原样保留、整族稳稳在拾取窗之下**;③ ★★★**顺手修掉子树兜底里的「假跟着走」洞**(旧写法读到**第一个**能读的子件就 return ⇒ 只要有一个新建的子件先撞上,整棵子树就不再补);④ ★**只在拾取框真的显示着时降、收起就回基础层**(永久降层会把背包压到银行 / 商人 / 交易那批原生窗之下 = 功能倒退),**读不到显隐 ⇒ 一个字节都不碰**;⑤ ★★★**红框收口**:真机 `bad argument #1 to getn (table expected, got userdata)` —— 本客户端 `GetChildren()` 返回的是**多值**(不是表),而帧对象在 C 层是 userdata ⇒ 修法 = **多返回值的客户端口一律 `{ pcall(...) }` 收整表** + **可选外观层整段套 `pcall`**(客户端反射的怪癖绝不许打断开窗 / 事件 / 状态行);⑥ **只读探针 `/ebag loot`**(别名 `拾取层`):入口帧 / 父链 / 子件 / 与拾取框矩形相交的帧各自摊开层与实测矩形 + 汇总最高最低层 + 三种落点建议,明细落有界环 ⇒ 一条命令、零步骤、AI 自己读存档(**全只读**,一个 `Set*` 都不发);⑦ **代价如实记**:拾取期间整族也压在那批 `MEDIUM` 原生窗之下 —— **只持续到拾取框收起**(一收就回基础层);⑧ 判据 = `node luacheck.js` **SYNTAX OK: 225** · `node tmp/ehbag_lootprobe_chk.js`(真源码 9 个函数 + 假帧夹具 · **六组 37 条 / FAIL 0**)· `node sync_game.js` + `node tools_release/verify_sync.js`(不一致 0)。
- **🩸 子插件 EH_Damage 0.2.50:伤害数字的缩放动画「看得见」了 —— 出生弹入拉长到 0.60 秒且曲线只取半权重(四条曲线全是缓出,光拉窗口没用)· 暴击放大后回落由 0.07 秒拉到 0.41 秒**(1.77.10):① **真因** = 缩放曲线(缓出立方 / 缓出平方 / 回弹过冲 / 指数缓出)**全是缓出** —— 指数缓出在窗口**前 10% 就走完 50%、前 50% 走完 97%** ⇒ 拉长窗口一点用都没有(旧 0.35 秒档在 0.30 秒时已经 0.956,肉眼就是「数字一出来就到位」);② **出生弹入** = 窗口 `0.35 → 0.60 秒` + **曲线只取一半权重**(曲线值与线性进度各半)⇒ 实测 **0.400 → 0.722(0.15s) → 0.841(0.30s) → 1.000(0.60s)**(同窗口不混曲线时 0.30 秒已是 0.981);③ **暴击鼓包** = 窗口 `0.35 → 0.70 秒`、起落分界放前 30% ⇒ **放大后回正由 0.07 秒拉到 0.41 秒**(峰值 2.398 @0.27s,起手与回正三处斜率仍是 0,所以不顿);④ 新增**只读自证口 `/edmg 动画 [开|关|清]`** —— 列出最近出生那一条数字前 1.2 秒的缩放采样(每 0.05 秒一拍、有界 60 条)⇒「弹入到底有没有生效」**看数字不靠肉眼**(k 从「初始缩放%」涨到 `1.000` = 生效;全程 `1.000` = 那条不是图集行);⑤ **边界如实**:缩放动画**只对图集行生效**(纯 ASCII 数字 + 面板勾了「自带字体图集」;含中文/字母的整条走客户端字体),**默认档没动**(初始 40% / 暴击 100% / 尾声 25%);⑥ 判据 = 新增 `node tmp/edmg_anim_check.js`(真源码切片 + 保真桩 fengari 真跑 10 条,含旧档 0.956 对照、峰值 2.398、回落 0.41 秒)· `node luacheck.js` **SYNTAX OK: 225** · `node sync_game.js` + `node tools_release/verify_sync.js`(不一致 0);⑦ `info.png`(子插件 EH_Damage 目录) 换成作者**现版真机截图**、README「界面预览」改指向它(旧图降为留档),三语里的「待重拍」催促口气一并清掉。
- **🐾 抓宠帮手:训练师技能行右端多了「书本」图标 —— 宠物等级够就点一下直接学 · ⚔️ 任务线 & 装备:凡是装备都支持 `Shift`+点击把链接发进聊天框**(1.77.9):① **抓宠帮手**(配置窗 ⑥)的**训练师技能**族(低吼 / 持久耐力 / 自然护甲 / 五行抗性,8 条 48 档)行右端画一本书:**宠物在场 ∧ `UnitLevel("pet")` ≥ 该档需求等级**才显示、点的那一刻再核一次(没宠物 / 读不到等级 / 数据缺需求等级 ⇒ **一个图标都不画**,绝不冒充「能学」);技能名以**客户端法术书**为准(读不到才退回数据名并**如实出声**);只读自证 `/eh go 宠物施法` 逐档摊开(需求等级 / 合格与否 / 解析串 / 来源);② **任务线 & 装备**(配置窗 ④):**只要是装备**(详情页大图标 / 正文物品行 / 列表行 / 关联装备图标 / 数据检索结果行与详情行)按住 **`Shift`** 点一下,就把 `|Hitem:…|` 链接**塞进聊天输入框**(不代你发送);**发得出去才吃掉这次点击**,发不出去就如实说一句并照旧执行原动作;③ 子插件 **EH_Damage 0.2.49**:新增显示项「**宠物受到的伤害**」(**默认开**)—— 宠物挨打走自己的**浅红**色,与「我自己挨打」的深红区分,判定按**受击句里的受害者名字与 `UnitName("pet")` 全等**比对;④ 子插件 **EH_Atlas 0.1.3**:`Ctrl`+滚轮缩放改成**以窗口中心为基准**(以前只往右下长)。
- **🗺️ 新增子插件 EH_Atlas:副本地图浏览器(副本 / BOSS 掉落 / 副本任务 / 世界地图标记)· 子插件 EH_RealisticMap 出货形态改 BLP2 + 游戏目录只留运行期文件 · 两个子插件改挂 git submodule**(1.77.8):① 配置窗第 ⑦ 页「子插件」多了一行 **EH_Atlas**(副本地图浏览器 + BOSS 掉落面板 + 副本任务 + 世界地图副本/交通标记:上游 `byCFM2/Atlas-CFM` 的 EmberVeil 移植版,GPL-2.0-or-later,独立库 `emberveil_-eh_-atlas`),点 **`[打开]`** 或敲 `/eha ui` 直接开面板 —— ★**没有小地图按钮**(入口只有这一处与命令行);② **EH_RealisticMap 0.2.24**:出货贴图由 TGA 改成 **BLP2(`.blp`)**(真机确认能画),并且**游戏目录从此只放运行期文件**(不发货的区域美术母版 / 两档 `_city` 母版 / `tools_build` 等不再被拷进去,实测 **1199 → 123 文件 / 141.3 → 73.5 MB**);③ **两个子插件改挂 git submodule**(主库 pin 住它们的 commit,并新增清单 `addons/SUBADDONS.md`)—— **换机器 `git clone` 之后要跑一次 `git submodule update --init --recursive`**,否则同步与打包会静默拿到空目录。
## 更新日志
| 版本 | 主题 | 一句话亮点 |
| :-- | :-- | :-- |
| **1.77.39** | ⚒ **装备比较支持客户端专业制造窗口(锻造 / 裁缝 / 附魔)** | 🪟 **自建常显窗层级压到 `LOW`,不再盖住商人 / 邮箱 / 银行 / 训练师** | ⌨ **NPC 交互中不触发方案热键** | 📶 **顶部信息条新增「公会在线 + 装备耐久 / 总耐久」(零打扰)** | ⏱ **施法链路收口:目标施法中静默失效的真因 · 法术施法时长库兜底 · 瞬发不计入** | 🧰 **换装下拉只留装备 + 行悬停出客户端物品信息** | ① **专业制造窗口的装备比较(1.77.37 → 1.77.39)**:锻造 / 裁缝 / 附魔窗的列表行 `OnEnter` 只改高亮色、**根本不弹气泡** ⇒ 原来三条腿(容器包装 / 焦点路 / 代理背包上报)全断;改法 = **行悬停驱动**(行自己的 `GetID()`,绝不自算滚动偏移)+ **按气泡名字反查配方表**(`EVAL_EC_PROF_BY_NAME`;真机判据 = **气泡贴着光标而不是在行首** ⇒ 行脚本没装上);顺手修掉「制造列表里的小方框」= 一颗**内容还没到**的空气泡(**填上了才 `Show`** + 有界重试 + 漏掉 `OnLeave` 的兜底)。② **HUD 层级(1.77.36)**:战斗UI / 状态UI / 三个悬浮助手一律 `LOW`(聊天框之上、NPC 对话窗之下),**逐个子件显式设档**;只压 level 抢不过、strata 优先于 level。③ **NPC 交互中不触发方案热键(1.77.33 → 1.77.35)**:逐帧 `IsShown()` 现读不缓存;`InboxFrame` 实测恒真 ⇒ 删出清单;贵的判断排最后 ⇒ 非我方格子零开销;拦下来 = 按键原样交回客户端。④ **顶部信息条(1.77.25)**:公会在线自己数 `online`(不拿 `GetNumGuildMembers` 当在线数)· 耐久读隐形提示那一行、**读完立刻 `Hide`**(本客户端没有数值耐久 API)。⑤ **施法链路(1.77.27 → 1.77.29)**:监听结论按三级判(`START = 0` 单独成支)· 法术施法时长库 20,331 条只当兜底 · 瞬发不计入目标三条。⑥ **换装下拉(1.77.26 → 1.77.31)**:只留 `armor` / `weapon`(扫字符串不按下标)· 行悬停照抄任务线三步 · 悬停不弹 ⇒ 分叉点记账定位。 |
| **1.77.24** | 🧩 **新增子插件 EH_Bar(大脚动作条移植版 · 最多 10 条可自由摆放的动作条)** | 🖱 **小地图按钮右键 = 「快捷开关」窗:图标墙 · 关着盖「停」· 判不出盖「?」· 右键打开它自己的设置** | ✂️ **修 tooltip 长中文横穿整个屏幕(本客户端 `GameTooltip` 不会自动换行 ⇒ 手工折行)** | 🏷 **子插件个性宏图标 + 设置入口逐行点名** | 🩸 **子插件 EH_DPS 0.2.11 修 `/reload` 定位漂移** | ① **EH_Bar 0.1.0 → 0.1.10**:大脚动作条移植(最多 10 条 · 每条独立淡出档 · 标题头右键菜单 · 客户端 1..120 动作槽位),搬迁时改掉原版 6 处在本客户端会静默失效 / 漂的写法(插件 `Bindings.xml` 客户端不读 · `SetScale` · `StartMoving` · 每按钮一个 `OnUpdate` · 位置记忆口径 · 三个未定义全局)。② **快捷开关窗(1.77.21)**:一行 8 个图标墙、关着盖「停」(黑罩 + alpha,不赌顶点色压暗)、判不出盖「?」、悬停现读状态、右键打开自身设置(**没入口就不弹工具箱**);读数 / 写值与勾选级联**各一份实现**,勾选框与本窗共用。③ **长中文折行(1.77.22)**:`EVAL_TIP_WRAP` 手工折行(按字符不按字节 · 标点优先断行 · 中文禁则 · fail-open)。④ **物品价去重(1.77.17)**:客户端自己那条活价优先、空钱框收掉、**判不出照加**。⑤ **施法状态统一全局口(1.77.20)**:`EVAL_CAST_*` 五口 + 时长毫秒 / 秒启发式 + 有界账本,新增只读探针 `/eh go 施法`。⑥ **移除 Shift+滚轮切方案(1.77.19)**。⑦ **子插件个性宏图标(1.77.18)**:`## X-Icon:` 配在子插件自己的 toc。⑧ **EH_DPS 0.2.11**:位置记忆不再除 `GetEffectiveScale`。 |
| **1.77.16** | 🎯 **修 rev2432 客户端更新后的两处「返回值语义变更」:`施法范围内` 不再恒判否 · 「技能可用」改看客户端图标那一个返回** | 🧭 **小地图时钟位置记忆改「锚点原样存取」:拖动之后 `/reload` 位置不再乱跳** | 💬 **新增子插件 EH_ChatBar 0.1.0(聊天快捷按钮)** | 🩸 **子插件 EH_Damage 0.2.50 → 0.2.62:字号真实像素 20~120 + 出厂默认档再定稿** | ① ★★★**真因 = 接口返回值语义变更,静态核对全绿而功能已死**:`IsActionInRange` 旧版「在射程内」= `true`、**新版 = `1`**(`0` = 超程、`nil` = 判不出),条件分支原先写死 `r == true` ⇒ 新版下这条条件**永远不成立**(真机现场:冲锋在射程内、技能也亮着,却被判「范围内:冲锋 ⇒ 跳过」);判据 = 真机存档 `atkProbe` 环里引擎自己打的 `射程=` 原始读数。**修法** = `r == true or r == 1`(新旧两版都对),`nil` 照旧判否;连带修好「目标距离分档」(近战/冲锋距/远程外)在新版下恒为空。② **「技能可用」改用第一返回**(与客户端自己的 `ActionButton_UpdateUsable` 逐字同式)—— 旧口径 `u or not noMana` 会放行「客户端明确判不可用」的一整类 ⇒ 触发型技能(压制)恒判可用;`noMana` 只当原因。③ **两条只读探针 `/eh go 射程` / `/eh go 技能条件`**(原始返回值 + 返回值个数 + `ActionHasRange` + 冷却 `start/dur`,各带 `监听` 自采时间线,读数落有界环)。④ **小地图时钟位置记忆改「锚点原样存取」**:老写法存「中心偏移 ÷ 有效缩放」= 同一口径被重复缩放一次 ⇒ 每拖一次再 `/reload` 就再偏一次;现在存 `GetPoint(1)` 六值、原样 `SetPoint`,旧 `clockX/clockY` 无法换算 ⇒ 一次性清掉 + 回默认 + 出声。⑤ **新增子插件 EH_ChatBar 0.1.0**:33 个钮(说/喊/密/队/会/团/综/世 + 就位确认/倒计时/表情菜单/骰子)· 三档字形(无描边/黑描边/加粗)· 左键拖任意钮移动 · Ctrl+滚轮缩放 · 世界频道走 4 号。⑥ **EH_Damage 0.2.50 → 0.2.62**:字号真实像素 20~120(Shift+点 = ±10)· 图集倍率 3.0 · 图标封顶 60px · 摞格封顶 2 行 · 出厂默认档再定稿。 |
| **1.77.14** | 🧭 **位置记忆改「锚点原样存取」:拖动之后 `/reload` 位置不再跑偏(战斗信息UI / 状态信息UI 一起修)** | 🎨 **战斗UI 技能图标「太黑」真凶修复:图标层不再被 0.2 深灰染色(遮盖档位待你定档)** | 🔎 **新增两条只读自检 `/eh go 战斗ui位置`(`uipos`)/ `/eh go 战斗ui图标`(`uicell`)** | 🗺️ **子插件 EH_Atlas 0.1.4 → 0.1.5:副本任务窗收口** | ① ★★★**真因(口径混用)**:老写法把「中心偏移 ÷ 有效缩放」当存档值,而 `GetCenter` / `GetLeft` 报**像素**、`UIParent:GetWidth()` 报**逻辑值** —— 一个式子里混了两种单位,`es ≠ 1`(本机 0.88)时必然自带恒定偏差。② **修法 = 锚点原样存取**:`GetPoint(1)` 六值存、恢复时**原样** `SetPoint`;相对帧只存名字;共用件 `uiAnchorSave` / `uiAnchorApply` / `uiAnchorClear`;老存档照旧(走 CENTER,再拖一次自动升级);越界回归连锚点键一起清。③ **图标遮盖**:那层不是半透明黑罩而是**乘色亮度**;**「太黑且调不动」的真凶** = 图标层被 `uiSolid(…, 0.2, …)` 染了 20% 深灰(已修、图标恢复原色)⇒ 现按用户要求**还原成之前的档位做对照**(**0.25 / 0.35 / 0.40 / 0.55**,满足仍 `1.0`),**最终档位待看过效果再定**。:那层不是半透明黑罩而是**乘色亮度** ⇒ 四档常量两轮提亮(**0.50 / 0.62 / 0.72 / 0.90**,满足仍 `1.0`),状态区分改由**描边色**(亮金 / 暗金)。④ **两条只读自检** + 有界环 `uiPosProbe`(位置那条 8 秒后自动 `/reload` 落盘,走常开出口,日志关着也不静默)。⑤ **工具箱「子插件」页连续滚动**。⑥ 三语文档补第七个子插件。⑦ **EH_Atlas 0.1.5**(升号重发):副本任务窗回到主窗内侧子帧 + 底 / 边框走项目唯一配方 + 主窗打开默认不自动弹出(老存档一次性迁移)。 |
| **1.77.13** | 🧭 **世界地图「探索层折算」整族删除(`tools/SimpleMap.lua` −1527 行):纹理层不再被二次缩放,地图叠影消失** | 🐛 **UnrealQuest 0.5.0 换了素材目录 ⇒ 地图标注恢复显示** | 🗺️ **子插件 EH_RealisticMap 0.2.24 → 0.2.25:单层几何恒写基线 + 每拍屏测自证** | ① ★★★**为什么该删**:本客户端**外框缩放会级联到子件**(两条真机实测在案),按同一比例再折一遍 = **第二遍**(真机出叠影);而折算的目标集**把子插件的匿名实景层也算成自己的** ⇒ 两边互相覆盖;正确口径一直写在同一段代码上方的注释里 ——「**只缩外框**」。⇒ `tools/SimpleMap.lua` **4058 → 2506 行**(净删 1527):`SMFIT` 记账表与常量、`smFit*` 一族、`smFix*/SM_FIX` 五步手动适配、`/ehm mapfit diag|dump|trace|mode|fresh|verbose|restore` 与 `/ehm fitnow` 全部删除;**保留** `smLog`(诊断出口,受「调试日志」闸门)、4 个只读桥与黑幕 / 透明度 / 外框缩放 / 位置记忆那一整套。② **地图标注恢复**:UnrealQuest 0.5.0 把素材搬进 `media\Textures\…`(旧 `media\icons\…` 一条都不存在),而**路径错 = 静默不画**(钉子照旧被摆、`/eh ds` 照报「可见 N」,屏上一个图标都没有)⇒ 路径改成**一律现取**(`dsUqRoots/dsUqIcon/dsUqAsset`)+ 两套目录布局(0.5.0+ / ≤0.4.x)+ 懒惰求值 + `/eh ds` 现读自证素材根。③ 子插件 **EH_RealisticMap 0.2.24 → 0.2.25**:单层几何**恒写基线**(k=1)+ 每拍**屏测自证**闭环(修「只铺半个画框」)。 |
| **1.77.12** | 🧰 **工具箱新增「BiS 装备」(悬停装备 ⇒ 提示里列出它在哪些阶段是各职业/天赋的最佳选择)** | 🩸 **目标生命值显示改成只报数值、不再自绘血条** | 🎛️ **工具箱列表版式一轮修正** | ① **BiS 装备**(工具箱「商人助手」组,**默认开**):悬停装备时提示里追加 `# Best in slot for:` 块,逐行「职业 天赋 `P1 > P2`」—— 数据 = 22 个职业天赋组合 / **1517 条标注** / **691 件唯一物品**(来源 = 第三方 ExoLink BestInSlot,本工具只做格式转换与接线);★**不画类名图标**(本客户端内联贴图不渲染)⇒ 只有**职业色 + 文字**;同一件同一内容**一拍都不重写**;`/eh go bis [状态|开|关|刷新]`(关掉 ⇒ 摘节拍 + 清状态,一个探测都不做)。② **目标生命值显示**:只写数值(当前 / 上限 / 百分比),**绝不额外画血条** —— 原先「没有目标框就自建一条金边血条」整档删除;顺手两修懒加载(目标框比插件晚建 ⇒ 句柄只缓存成功 + 1 秒有界重试;锚点重申排在「值没变」早退之前)。③ **工具箱列表**:行名与分类标题**左对齐**(此前取客户端默认居中)、分类标题「左文字 + 右侧破折号填充」(修折行)、悬停整行高亮(未悬停全透明)、图标垂直居中贴左界、检索 + 14 行滚动窗口。④ 子插件 **EH_Atlas 0.1.3 → 0.1.4(升号重发)**:「在缓存中未找到物品」的行**到货即补**真名与图标。 |
| **1.77.11** | 🎒 **子插件 EH_Bag 0.3.53 → 0.3.58:背包整族落在「拾取框的下一层」(拾取时物品图标 / 顶栏按钮 / 搜索框不再压住拾取框)· 新增只读探针 `/ebag loot`** | ① ★★★**真因**:**子件的有效层至少是父层 + 1** ⇒ 根降到 `MEDIUM/0` 时格子 / 图标 / 按钮恒 ≥ `MEDIUM/1` = **与拾取框同级**;且子树兜底只写 strata、level 一个都不写 ⇒ **同 strata 里没有**「既严格低于拾取框、又保住家族内部高低」的位置。② **修法 = 整族降一个 strata**(取拾取窗那一族里最低的 strata 再降一档;每个帧仍用各自的基础 level,跨 strata 比层高时 level 不参与)⇒ 家族内部高低原样保留。③ 顺手修掉子树兜底的「假跟着走」洞(旧写法只看**第一个**子件)。④ **只在拾取框显示时降、收起就回基础层**(永久降层会把背包压到银行 / 商人 / 交易那批原生窗之下),**读不到显隐 ⇒ 一个字节都不碰**。⑤ **红框收口**:本客户端 `GetChildren()` 返回**多值**(帧对象在 C 层是 userdata)⇒ **多返回值的客户端口一律 `{ pcall(...) }` 收整表** + 可选外观层整段套 `pcall`。⑥ 只读探针 `/ebag loot`(入口帧 / 父链 / 子件 / 相交帧 + 最高最低层 + 三种落点建议,明细落有界环)。⑦ 判据 = `luacheck` **SYNTAX OK: 225** · `tmp/ehbag_lootprobe_chk.js` **37/0** · 同步核对不一致 0。★**真机确认「现在正常了」**。 |
| **1.77.10** | 🩸 **子插件 EH_Damage 0.2.50:伤害数字缩放动画两处观感修正(弹入看得见 · 暴击回落变慢)** | ① **出生弹入**窗口 `0.35 → 0.60 秒`,且**曲线只取一半权重** —— 四条曲线(缓出立方 / 缓出平方 / 回弹过冲 / 指数缓出)**全是缓出**,指数缓出在窗口**前 10% 就走完 50%** ⇒ 光拉窗口没用(旧档 0.30 秒时已 0.956);实测弹入 **0.400 → 0.722(0.15s) → 0.841(0.30s) → 1.000(0.60s)**。② **暴击鼓包**窗口 `0.35 → 0.70 秒`、起落分界放前 30% ⇒ **放大后回正由 0.07 秒拉到 0.41 秒**(峰值 2.398 @0.27s,起手/回正三处斜率仍为 0)。③ 新增**只读自证口 `/edmg 动画 [开|关|清]`**(最近一条数字前 1.2 秒的采样,每 0.05 秒一拍)⇒「弹入到底有没有生效」看数字。④ **边界如实**:**只对图集行生效**、**默认档没动**。⑤ `info.png`(子插件 EH_Damage 目录) 换成现版截图、三语 README 清掉「待重拍」口气。 |
| **1.77.9** | 🐾 **抓宠帮手「训练师技能 → 书本图标 → 点击施展」** | ⚔️ **任务线 & 装备「`Shift`+点击发装备链接到聊天」** | 🩸 **EH_Damage 0.2.49「宠物受到的伤害」** | 🔍 **EH_Atlas 0.1.3「缩放以窗口中心为基准」** | ① **抓宠帮手**:训练师那 8 条 48 档技能行右端加**书本图标**,**宠物在场 ∧ 等级够**才显示、点击再核一次(判不出 ⇒ 一个图标都不画);技能名以客户端法术书为准,读不到就退回数据名并**如实出声**;`CastSpellByName` 直调、被挡才退 `RunScript`(0.35s 节流);`/eh go 宠物施法` 逐档自证。② **任务线 & 装备**:**只要是装备**都能 `Shift`+点击把 `\|Hitem:…\|` 链接**塞进聊天输入框**(不代发);三条通道按次序试,**发得出去才吃掉这次点击**;自检 `/run print(EVAL_QP_SEND_LINK())`。③ **EH_Damage 0.2.49**:宠物挨打走**自己的显示项与浅红色**(与「我自己挨打」不同色),按**受害者名字全等**判定。④ **EH_Atlas 0.1.3**:`Ctrl`+滚轮缩放**窗口中心不动**。 |
| **1.77.8** | 🗺️ **新增子插件 EH_Atlas(副本地图浏览器)· 子插件 EH_RealisticMap 出货形态改 BLP2 + 游戏目录只留运行期文件 · 两个子插件改挂 git submodule** | ① **子插件 EH_Atlas 0.1.0**:副本地图浏览器 + BOSS 掉落面板 + 副本任务 + 世界地图副本/交通标记(上游 `byCFM2/Atlas-CFM` 的 EmberVeil 移植版,GPL-2.0-or-later,独立库 `emberveil_-eh_-atlas`);命令 `/eha`(面板 `/eha ui`),入口 = 配置窗第 ⑦ 页「子插件」那一行的 **`[打开]`**(★没有小地图按钮)。② **EH_RealisticMap 0.2.24**:出货形态由 TGA 改成 **BLP2(`.blp`)**(真机确认能画),且游戏目录从此只放运行期文件(不发货件不再被拷进去,实测 **1199 → 123 文件 / 141.3 → 73.5 MB**)。③ **两个子插件改挂 git submodule**:换机器 `git clone` 之后要跑一次 **`git submodule update --init --recursive`**,再照 `addons/SUBADDONS.md` 核对版本与 HEAD。 |
> 📜 各版本详细说明见 **[CHANGELOG.md](CHANGELOG.md)**;更早历史见 git 提交记录。
## 🧩 案例模版(12 组 40 条现成方案)
> 不必从零配。配置窗 →「一键宏设置」页 → 底部 **`[案例模版]`** → 按职业分组挑一个,**点一下直接导入**。
| 项 | 说明 |
| :-- | :-- |
| **入口** | 配置窗「一键宏设置」页底部 `[案例模版]` 按钮 |
| **内容** | **12 组 40 条**:战士 / 骑士 / 猎人 / 盗贼 / 牧师 / 萨满 / 法师 / 术士 / 德鲁伊 / 通用法系 / 通用 / 队伍·团队 |
| **版式** | 分组分两列 + 组内同行自动换行;**悬停**该条可看它的技能与条件 |
| **导入** | 点一下即导入为方案,之后照常编辑、改名、绑定按键 |
**队伍·团队组**(6 条)是一键奶 / 一键驱散类,一律写成「**指定技能 + 队伍(团员)条件**」——
条件自己扫描全队、按血量挑人、切目标,放完还原原目标,**不需要你手点队友**。
> 💬 有好用的方案欢迎在插件评论里分享;也可以用配置窗的 `[分享]` 直接发到 公会 / 队伍 / 说 频道。
## 界面预览
**配置窗口 · 全局页**(`/eh cfg` 或小地图旁 EH 图标):左列 **日志**(调试日志 `/eh logdump` / 方案技能日志 / 进出战斗自动输出)+ **界面**(战斗信息UI `/eh ui` 及其「战斗区 / 方案区」两个子开关 + 状态信息UI `/eh st`)+ 底部「一键宏」组([重扫动作条] + 执行去抖 0.30s);右列 **帮助**([使用引导] + 快速上手 / 执行指定方案 / 进阶 / 其他 四段说明);标题栏 = 版本号 + 语言切换(CN / EN / RU)与 [关闭];★本图取自 **v1.75.59**(**七个 Tab**:全局 · 一键宏设置 · 工具箱 · 任务线 & 装备 · 图标库 · 抓宠帮手 · 子插件;版面此后未变,标题栏版本号为出图时的旧值)

**案例模版窗**(配置窗「一键宏设置」页底部 `[案例模版]`):**12 组 40 条**现成方案按职业分组(战士 / 法师 / 通用法系 / 通用 / 盗贼 / 猎人 / 骑士 / 牧师 / 德鲁伊 / 术士 / 萨满 / 队伍·团队),**分组分两列 + 组内同行自动换行**,点一下即导入、悬停看方案内容;★**这张图取自 v1.74.0**(Tab 名与标题栏版本号均为旧值)

**技能编辑窗**(点 [编] 或技能图标打开):条件逐行独立配置 —— 条件类型 / 参数全部下拉选择(**71 种条件类型 · 7 组**:自身状态 / 目标状态 / buff·debuff 检查 / 技能状态 / 队伍·团队状态 / 队伍·团队宠物状态 / 候选者状态,其中「候选者」4 种只在成员选取器那一行出现),技能名右侧可选**施法等级**,右上 [启用此技能];关系列**四态循环** `&` 同项与 / `|` 同项或 / `&&` 新项与 / `||` 新段或(优先级 `& > | > && > ||`,终于能写「与里套或」);★**这张图取自 v1.74.0**:图中的关系列还是旧的显示、Tab 名与版本号也是旧值(现为四态循环)

**技能二级下拉 · 四大类**(技能编辑窗的技能行 = `[分类▾][具体项▾]` 并排双下拉,选项配图标):
- **角色技能**:白名单 + 动作条扫描全技能
- **宠物行为**:8 种宠物指令(不占动作条直调 Pet API),指令图标经宠物动作条自学习
- **目标选取**:9 种切换方式(最近敌人 / 上一目标 / 目标的目标 / 指定名称 / 清除目标…),按宏先切目标再出手
- **物品使用**:背包实时扫描(带图标+数量)+ 自定义名称——消耗品直接使用、装备自动穿上
**光环条件四型(名字可多选)**:自身buff / 目标debuff / 目标buff / 自身debuff 检查(是/否切换,实时项 ◆○●▲ 全配齐)——**名字格支持多选**(点按切换、可搜索、可自定义输入,重开下拉勾选态还在):**任一选中项命中即通过**(或运算),「无/缺」方向则**每一项都该补**才算过;下拉首行写明规则、名字格悬停列出全部选中项 + 方向,日志直接报「任一命中 → 谁」/「需全部满足 → 谁」——条件「无buff:再生/治疗药水」驱动一键喝药、「无目标buff:奥术智慧/野性印记」驱动挨个补 buff
**战斗信息UI + 状态信息UI**(`/eh ui` / `/eh st`):血/能量/目标条 + 方案切换行 + 技能图标行(悬停 tooltip 看触发条件,亮金=条件当前满足,点击图标直开编辑窗);状态信息窗实时显示全部状态变量 + 最近释放日志(每次出手的技能/目标/条件逐项判定 √×)
**工具箱(Tab3)**:面板按**组标题 + 行**铺开(现共 42 行 / 8 组:8 个组标题 + 34 个功能行)—— 图中可见 **UI 工具**(**缩放大地图** / **图层拖拽** / **图层隐藏** / **拾取贴手(点一次换下一件)** / **顶部信息条** / **装备比较**)与 **—— 商人助手 ——**(**物品价(商人价 · 估值)** / **自动修理装备** / **自动售卖灰色物品** / **自动购买指定物品**,右侧 [添加] / [清空]);左侧是全屏世界地图(右下角展开的是地图标注类别的多选下拉),右侧展开的是「**图层拖拽 → [设置]**」的图层多选菜单;★**这张图取自较早版本**:两个地图开关在图中仍是**勾选**态、标题栏版本号是出图时的 **v1.75.53**(当前默认档 = **缩放大地图不勾选**;世界地图的「区域实景」现由子插件 **EH_RealisticMap** 提供),图层拖拽的「定位方块」编辑形态与喂食助手的新进度条也不在本图内 —— 工具箱与地图开关的**当前形态**本项目不再单独出图(世界地图「区域实景」的现状图见子插件 **EH_RealisticMap** 自己的 `README.md`);★★**「图层拖拽」右侧的 [重置](1.75.102)**:打开的是**有自定义属性设置**的层/窗口列表(点行多选 · [确定] 只重置选中的 · 点面板外面 = 取消)—— **最大高度**(可见 16 行封顶、面板高度按条数现算)· **滚轮逐行**(到边界把事件交回链上)· **[全选]/[取消全选]**(一次覆盖清单全部条目,含滚出视口的)+ 常显计数器「已选 N / 共 M | 第 a-b 行 / 共 M」

> ⚠️ **依赖**:本页数据全部来自 **UnrealQuest** 插件(任务/物品/生物/对象数据库)。未安装或未启用时,本页只会显示一段安装引导,其余控件隐藏。
**任务线 & 装备(Tab4)**:**任务线视图**(一条线从起点到终点逐节点排开:任务名 · 等级 · 奖励,节点带放大镜)+ **装备视图**(按等级列出可获取装备、武器优先、种类多选)+ **四类检索**(任务 / 物品 / 生物·NPC / 对象,输入即搜前 10 项、无限级联下钻,物品行悬停显示游戏内物品 tooltip);**世界地图标注层** 16 类别随切图实时重绘(地图右侧「**地图标注(N)**」控制行 = 类别多选:采集物 5 + 服务设施 11,含「全部开启 / 全部关闭」快捷)
**装备视图**:搜索行(装备 / 任务 / 奖励)+ **等级**(如 `10-19`)/ **来源**(地域多选树:职业&制造&节日任务 · 世界区域 · 副本区域 · 其它)/ **类型**(如 剑)/ **阵营** 四个筛选;列表按等级列出**可获取装备**(武器优先,行 = `Lv · 名字 · 类别 · 地区 · DPS · 来源`),底部**分页**(`1-4 / 4` + 上页 / 下页);点进去看它来自哪条任务线、要打哪些任务;图鉴里还没扫到的装备画**占位图**,点它可插队优先补缓存;★**这张图取自 v1.75.13**(此后新增的「**需**」材料标记等不在图内)

**任务树(父子任务)**:点顶部「任务树」子页 —— **缩进即层级**(前置 ⇄ 后续 = 站点「解锁 / 需要」并集建图 + 系列下一步兜底),多前置的任务标 **(N 前置)**,行尾带奖励图标与「**需**」材料标记;等级档(如 `30-39、40-49`)/ 来源 / 类型 / 阵营筛选与**分页**(`1-17 / 36`)通用,底部提示行说明树的口径;一棵树最多 600 行,「多前置」与「撞上限」分开计数、如实报数;★**这张图取自 v1.75.13**

**抓宠帮手(Tab6)· 宠物列表视图**:搜索框(技能名或野怪名,如 撕咬 / 狼)+「**匹配 552 条**」+ [清除],右上两个切换钮 **技能列表 ⇄ 宠物列表**(图中为宠物列表);每行 = `★稀有 名字 · 家族 · 等级 · 地区` + **技能图标条**(标签 `技能` = 它在驯服来源表里实际教的 / `家族技` = 该家族天生)+ 右端**攻速**列(**按攻速升序**,1.0 最前);切到技能列表则是「技能 → 各等级 → 驯服来源」那条路:详情页列技能简介 / 需求等级 / **驯服来源**(哪个怪、在哪出没)→ 放大镜一键跳「任务线 & 装备」查刷新点;★这张图截于 **v1.75.59**(本版这一页除标题栏版本号外无变化)

**快捷开关窗(小地图旁 EH 悬浮按钮右键)**(1.77.21 起):把所有**开关型功能**按分组铺成图标墙 —— **一行 8 个**、超出自动换行,点图标即开/关;**关着的图标盖一个「停」字**(半透明黑罩,不压暗图标本体),**状态判不出的盖「?」**并如实写「判不出」;悬停给出 **功能名 + 完整说明 + 当前状态(那一刻现读)**,子插件多一行「/reload 后生效」,**真有设置入口的行**才提示去哪找(配置窗 › 工具箱 › 本行右侧 [设置])。**图标右键** = 工具就打开它自己的设置、子插件就打开它的面板、**没有设置就只回一句(不弹工具箱)**;左键小地图按钮仍打开配置窗(行为未变)。分组 = 工具箱各组 + 末尾「子插件」一栏(图中悬停的是「消耗品助手」)

> 📷 **仍缺截图**:世界迷雾**编辑模式**(地图右侧贴图列表 + 位置箭头 / 尺寸 / 两级重置那十排面板)与**图层拖拽的定位方块**暂无截图(功能已可用)。
## 快速上手
1. 把要用的**技能拖上动作条**:插件按动作条识别技能(任意职业、任意技能都能入方案)
2. 游戏内输入 `/eh go rescan` 让插件识别槽位(`/eh go` 查看识别结果)
3. `/eh cfg` →「一键宏设置」页 → `[添加技能]` 配好条件;或直接 `[案例模版]` 按职业挑一个一键导入
4. **绑定按键(推荐,全程点点点)**:右键任意方案(战斗信息UI 方案行 或 配置窗方案栏)→「方案管理」→ 快捷键下拉选一个键 → `[保存]`,按下即执行;**备选**:习惯宏的话,新建宏正文 `/run EVAL_GO()` 拖到按键上(两条路等价);★**按键按角色**:同一账号每个角色各绑各的(登录时自动对账重绑,别的角色绑过的键不会跟过来)
5. **第一次用?** 输入 `/eh guide` 看四步新手指引(开战斗UI → 配第一个宏 → 绑按键 → 看技能日志),首次进入游戏会自动播报一遍
6. 技能没放出来?开「方案技能日志」(配置窗 全局页)后 ` /eh logdump` 查看每次按键的判定明细
## 安装
**方式一:下载发布包(推荐)** —— [Releases 页面](https://gitee.com/xeval/emberveil_eval_help/releases) 下载最新 `EvalHelp-vX.Y.Z.zip`,解压到 `Interface/AddOns/`(解压后应为 `AddOns/EvalHelp/EvalHelp.toc`):
```
https://gitee.com/xeval/emberveil_eval_help/releases
```
**方式二:克隆源码** —— `git clone git@gitee.com:xeval/emberveil_eval_help.git`,把整个目录放到 `Interface/AddOns/` 并确保目录名为 `EvalHelp`。
目录结构:
```
Interface/AddOns/
└── EvalHelp/
├── EvalHelp.toc ← 目录规则:Folder/Folder.toc
├── EvalHelp.lua
└── README.md
```
## 异常自救(遇到问题先看这里)
1. **先 `/reload`**:技能不识别、界面异常、刚更新过插件文件——绝大多数情况重载即恢复(配置已存盘不会丢);
2. 技能换了位置/新拖上动作条 → `/eh go rescan` 重扫;
3. 开了调试看决策过程 → `/eh debug`(每个技能为什么放/为什么不放,逐条件 √×);
4. 仍未解决 → 到 提 Issue(附 `/eh st` 状态截图 + 日志文件更有助于定位)。
5. **分享来的方案有些技能不放**:多半是那个光环在你这台机器上还没学过纹理 —— 现在会自动按名字扫描并学下来;`/eh go tex` 看学习表、`/eh go texdel 名字` 删一条重试、`/eh go texclear` 全清;
## 参与开发(欢迎加入!)
- 仓库:(`git clone` 后把 `EvalHelp/` 软链或复制到 `Interface/AddOns/` 即可开发调试);
- **开发指南**:见 `DEVELOPMENT.md`(架构地图 / 本客户端实测 UI 配方 / 规则引擎与方案数据结构 / 提交前必跑的语法检查);
- **AI 协作记忆**:`CLAUDE.md` 是本项目的 AI 开发记忆体(DeepSeek Harness / Claude Code 等 AI 助手读它即可快速进入上下文);
- 开发流程约定:每次改动递增版本号(**三处必须一致**:`EvalHelp.lua` 的 `local VERSION` + `EvalHelp.toc` 的 `## Version` + `tools/WorldFog.lua` 的 `MDQ.BUILD`;文件头不再写版本号),改完跑 `node luacheck.js` 全量语法解析;
- 扩展新职业:技能白名单 `WAR_SKILLS` 目前内置战士 10 技能,其他职业按同构方式加技能表即可(规则引擎/方案/UI 全部职业无关);
- 本插件由 **DeepSeek Harness AI** 辅助开发——也欢迎你带着 AI 一起来。
## 支持我们
EvalHelp 从始至终都是免费、开源的,今后也会一直是。
如果它恰好帮到了你,而你又愿意鼓励一下作者——可以赞助一点点算力 ☕。这些心意都会用在刀刃上:更细致的功能打磨、更及时的 bug 修复、更多职业的现成模版。
当然,哪怕只是点个 Star、提一条建议、把它推荐给公会里的朋友,对我们来说同样是莫大的支持。谢谢你看到这里。
| 支付宝 | 微信 |
| :---: | :---: |
|  |  |
## 致谢
- UI 实测配方参考:UnrealQuest(ClientAPI.lua);状态变量设计参考:Cat(TurtleWoW);最初参考:OneJudge。
- 感谢每一位测试与反馈的玩家。