Files
BardFrontline/README.md
T

142 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Bard Frontline
独立的吟游诗人 PVP Dalamud 插件。支持已开始的纷争前线和烈羽争锋对局,自动选敌、主动攻击、执行诗人循环与生存技能,不依赖 RotationSolverReborn。
## 安装和使用
1. 将发行包解压到一个固定目录,保留 `BardFrontline.dll` 与 `BardFrontline.json` 在同一目录。
2. 在 Dalamud 的开发插件设置中添加 `BardFrontline.dll` 的完整路径,保存后在开发插件列表加载它。
3. 输入 `/bardpvp` 打开中文设置,或使用浮窗的“自动运行”开关。
4. **每次加载默认关闭自动运行**。`/bardpvp on` 开启,`/bardpvp off` 关闭,`/bardpvp toggle` 切换。
5. 需要使用 Eagle Eye Shot 时,请在游戏中装备该 PVP 职能技能。诊断页会显示未装备的职能技能。
设置在 Dalamud 插件配置中自动保存。关闭设置窗不会停止运行;关闭总开关后不再提交新动作,游戏已经接受的动作仍由游戏完成。
本版运行基线为 .NET 10 / x64 / Dalamud API 15。编译引用来自本机 `Hooks\dev` 的成品 DLL;源码目录中的 Dalamud / FFXIVClientStructs 不参与编译。没有游戏版本号白名单;缺失单项技能会跳过并显示原因,缺失核心技能会暂停。
### 0.2.1:可选主动爆发
针对输出技能释放偏慢,新增 `/bardpvp` →「穿插、爆发与范围攻击」→「爆发策略」→ **主动爆发**。升级保留原策略,需手动选中此项;选择后自动保存,无需反复按爆发按钮。
- 已就绪的完美音调和爆破箭优先于连续和弦箭;缺少进行曲时的绝峰箭仍优先。
- 普通鹰眼和沉默提前到和弦箭及强力射击之前,仍受技能开关、前置状态和原生可用性检查限制。鹰眼“严格保留,只用于收割”仍生效;已有完美音调时不重复用沉默覆盖。
- 瞬发攻击(后跳除外)、职能增益和极限技不额外预留穿插空间,可能短暂推迟普攻。原生动作确认、动画锁、动作队列、冷却、读条及目标检查继续生效。读条动作不享受这项放宽。
- 生存阈值、玩家优先、安可及鹰眼收割优先级、后跳设置保留。诊断新增当前爆发 / 鹰眼策略,便于确认实际启用的设置。
离线测试验证了决策变化,尚未验证游戏内伤害收益和实际释放节奏。
### 0.2.0:六项优化
1. **完整决策诊断**:每 0.25 秒生成完整快照,所有技能均给出选中、未满足策略、目标过滤、原生检查、穿插等待或未获优先级的结果。复制内容包括版本、模式、资源、状态、动作队列、待确认动作、目标分类及近期 40 条事件。支持冻结快照再复制;就绪检查忽略正在执行的读条和动画锁,实际提交仍受执行阶段限制。
2. **选敌稳定与手动接管**:可选 0.6 秒目标保持,当前 HP 优势达到 2000 则立即切换;目标失效、玩家优先及鹰眼收割不受保持限制。其他排序按各自的显著差异判断。自动检测手动切目标或其他来源动作后可接管 3 秒;显式接管持续到手动恢复。接管暂停所有自动动作,包括生存,不取消已经接受的动作。自动检测也会识别其他插件动作,无法区分动作来源。
3. **自适应穿插**:默认启用。以本插件瞬发动作的确认和动画锁结束为样本,最近 20 个样本的 90 分位加 50ms 作为预算,限制在 0.5–1.25 秒。少于 3 个样本回退到旧值 0.65 秒;读条、超时样本不参与。可关闭以使用固定预算。安可、鹰眼收割和即将过期状态沿用原来的额外预留豁免,但不绕过游戏锁。
4. **烈羽争锋目标细分**:按 BNpcName ID 和机甲状态区分机甲、兵线、佣兵、防御塔、核心及其他目标,另有冰块分类。每类可独立关闭,默认全部允许,受战场目标总开关控制;未知 ID 归入其他。攻击开关不移除补给威胁,友军仍由原生目标及阵营检查过滤。
5. **可选爆发与范围策略**:默认原循环不变。和弦箭可等待增益 / 指定充能,默认最多保留 4 秒;手动爆发模式将和弦箭、职能增益、极限技保留到 10 秒爆发窗口,生存、鹰眼和安可不等待。范围策略可按客户端圆形半径、直线长度及宽度估算覆盖数,达到默认 2 个有效目标才改变选敌,仍优先普通玩家。覆盖数仅是几何估算,无法保证移动、地形和服务端判定后的实际命中。
6. **集火生存和后跳切换**:可选集火判断结合 30 米内敌人的当前目标 / 读条目标及 2 秒累计 HP 损失。默认阈值为 3 名敌人指向自己或累计掉血 25%;危险时 HP ≤40% 可防御,自疗缺失阈值降低至不超过 6000。目标指向是风险信号,并非确定将受到攻击。后跳可以单独切到手动模式,其余循环继续。
**默认偏好保留**:最低当前 HP、玩家优先、鹰眼优先收割、原循环爆发方式、自动后跳及原生存阈值不变;稳定选敌、自动接管检测、范围策略和集火防御默认关闭。旧配置缺少的新字段自动使用这些默认值。自适应穿插是默认启用的执行层优化,设置中可以回到固定预算。
| 命令 | 用途 |
|---|---|
| `/bardpvp manual` | 持续手动接管 |
| `/bardpvp auto` | 恢复自动控制,不改变总开关 |
| `/bardpvp burst` | 开启 10 秒爆发窗口 |
| `/bardpvp burst off` | 结束爆发窗口 |
| `/bardpvp backstep` | 切换后跳自动 / 手动 |
| `/bardpvp backstep manual` / `auto` | 明确指定后跳模式 |
浮窗提供接管、恢复和爆发按钮;详细选项位于设置的新增折叠项中。手动后跳由玩家按游戏技能,插件不替玩家判断后退位置是否安全。
### 0.1.4:烈羽争锋支持
- 通过战场类型识别烈羽争锋(TerritoryIntendedUse 39),保留纷争前线(18);水晶冲突、训练区域和其他内容仍不运行。浮窗及复制诊断显示当前模式。
- 驾驶机甲时暂停全部自动诗人技能及选敌,清空待处理请求;离开机甲并满足普通运行条件后自动恢复。检测机甲条件、搭乘状态和当前战场机甲数据,不驾驶或操纵机甲技能。
- 普通玩家优先;无有效玩家攻击时,可攻击敌方兵线、建筑、机甲等客户端允许攻击的战场目标,受原有战场目标开关控制。机甲按战场目标处理,鹰眼不用于机甲收割;礼赞不对机甲使用。
- 烈羽争锋的敌方战斗 NPC 和机甲均计入 30 米补给威胁,包括暂时不可选中或免疫的敌方单位;关闭战场目标攻击也不会忽略这些威胁。碎冰战的冰块仍不阻止补给。
- 发行 ZIP 仅包含 DLL 和 JSON。新版模式识别、兵线 / 建筑分类和上机甲 / 下机甲行为尚需实机验证。
### 0.1.3:安可释放与和弦箭变体修复
- 英雄的安可(Encore of Light,41467)有执行许可且目标合法时,优先于普通武器技能、后跳、沉默和普通鹰眼释放,不再等到状态接近过期。紧急生存、鹰眼收割及其他即将过期的攻击状态仍在其前。
- 安可不受额外的共享冷却穿插预留限制,避免叠加加速后连续错过释放窗口;仍检查游戏动作锁、读条、冷却、射程及目标状态。
- 修复和弦箭变为 41465 / 41466 / 41964 时被误判为错误技能的问题;使用客户端返回的合法变体执行原生检查和动作请求,不允许其他未知变换。
- 目标诊断细分为 Guard、免疫、目标类型、原生拒绝、射程 / 视线错误码等,附检查目标;新增“复制诊断”,包括版本、安可执行许可和最近候选检查。旧版截图中的合并提示不足以确认具体目标拒绝原因,新版仍需游戏内复测。
### 0.1.2:战场目标与循环优化
- 默认玩家优先:只要有可用攻击能命中敌方玩家,整轮攻击只选择玩家;否则攻击冰块等可攻击的战场目标。目标组内仍按所选 HP / 距离 / 标记排序。设置中可关闭战场目标攻击。
- 通过战斗 NPC 类型及客户端原生可攻击性识别目标,不依赖名字;排除宠物、召唤物、友军及不可攻击物件。尚需在实际碎冰战确认目标识别。
- 鹰眼始终只对玩家使用,冰块残血不会消耗鹰眼。补给威胁扫描仍只统计敌方玩家。
- 完美音调、爆破箭、Encore of Light 的前置状态剩余不超过 3 秒时优先消耗;多个状态即将过期时先用剩余最短的可用技能。生存和鹰眼收割仍在其前。
- 按实际主冷却组及附加冷却组判断共享冷却,独立冷却的武器技能也检查穿插窗口;忽略已停止计时的冷却残值。即将过期的技能与鹰眼收割可跳过额外穿插预留,但仍遵守客户端动作限制。
### 0.1.1:目标响应与鹰眼 Guard 处理
- 选敌独立于动作确认和动画锁更新,已有目标每个决策周期重新比较 HP,无需等待当前目标死亡。决策最短间隔由 50ms 降为 20ms,新对象扫描间隔由 100ms 降为 50ms;实际更新间隔受游戏帧率限制。
- 游戏画面目标可以提前切换,但已经提交的技能仍保持原目标,不会覆盖动作队列或绕过动画锁。手动读条期间不自动切换目标;自身 Guard 期间仍暂停。
- Guard 不进入通用无敌分类;鹰眼独立检查自身射程及可用性,即使附近只有开启 Guard 的敌人,也不要求先找到普通射击的目标。
- 鹰眼不可用时,不会因为未来可能收割而让普通攻击一直盯住 Guard 目标。
## 默认行为
- **普通选敌**:当前 HP 最低,然后距离最近;完全相同时保留当前目标。不把护盾计入普通选敌排序,也不优先标记。可切换为 HP 比例、距离或攻击标记 1–8 排序。
- **主动开战**:有有效敌人即可攻击,无需手动进入战斗。默认玩家优先,无可用攻击能命中玩家时攻击冰块等战场目标;不会操作需要交互的物件。
- **技能开关**:各技能均可独立关闭,默认开启;可单独停止攻击和进攻增益,保留共通生存技能。
- **Guard**:默认避开敌方 Guard。开启“无视敌方 Guard”后允许普通技能攻击,伤害减免仍由游戏决定。Eagle Eye Shot 本身允许攻击 Guard 目标。
- **自身 Guard**:持续期间停止所有自动动作,避免插件解除防御。此规则不受敌方 Guard 开关影响。
- **后跳**:默认开启,实际释放会使角色后退;可在技能列表关闭。
- **范围限制**:非诗人、非纷争前线 / 烈羽争锋、对局未开始或已结束、切区、死亡、上坐骑、驾驶机甲时暂停。没有自动移动、寻路、上下坐骑或操作机甲功能。
## Eagle Eye Shot 优先收割
默认策略为 **“优先收割,否则按原循环”**:有符合条件的玩家目标时,鹰眼优先于普通输出、进攻增益及极限技。没有符合条件的目标时,鹰眼仍在原本的攻击能力优先级中对玩家使用。两种策略均不向战场 PVE 目标释放鹰眼。
收割目标按 **当前 HP + 吸收护盾** 筛选,默认上限 **10,000**;候选中选择有效 HP 最低的敌人,再比较距离及当前目标。鹰眼按自己的客户端射程检查,不受普通射击的较短射程限制。
阈值是可调整的经验值,不是精确伤害预测。客户端只提供护盾百分比,插件换算为护盾 HP;实际伤害还会受职业调整、增伤、减伤和状态同步影响。因此,进入阈值不等于保证击杀。可结合实战调整阈值。
另有“严格保留,只用于收割”策略,不符合阈值时留住鹰眼。自身生存技能始终优先,自动动作始终尊重游戏的动画锁、读条和动作队列。不会为了鹰眼主动取消正在进行的读条。
## 循环
普通武器技能优先级参考本地 RSR:缺少 Frontliner's March 时的 Apex Arrow → Harmonic Arrow → Pitch Perfect → Blast Arrow → Apex Arrow → Powerful Shot。技能状态、变换及充能条件不满足时跳过。前置状态剩余不超过 3 秒的 Pitch Perfect / Blast Arrow / Encore of Light 在普通循环和进攻增益之前消耗,避免状态过期;不改变平时的 Harmonic Arrow 充能使用策略。
安可有执行许可时优先于普通输出消耗;普通攻击能力顺序为无 Repertoire 时的 Repelling Shot → 无 Repertoire 时的 Silent Nocturne → Eagle Eye Shot。鹰眼收割分支在这些攻击前检查。可用武器技能优先于其余普通能力穿插,临近共享冷却结束时保留窗口;鹰眼收割、安可和即将过期的技能不因这个额外预留而延后。
Final Fantasia 在战斗中有有效敌人且极限量谱满时使用;获得 Encore of Light Ready(4312)后,在下一个符合动作条件的时机优先释放安可。只使用实际装备的 Bravery、Dervish 或 Eagle Eye Shot 职能技能。
## 生存与补给
优先顺序:自身礼赞解控 → 净化 → 防御 → 自疗 → 可选队友礼赞 → 安全补给 → 鹰眼收割 → 即将过期的攻击状态 → 安可 → 增益、极限技及攻击循环。
| 功能 | 默认条件 |
|---|---|
| 礼赞 | 自身存在可解除控制;帮助小队成员默认关闭 |
| 净化 | 存在已启用的控制类型,且礼赞不可用 |
| 防御 | 战斗中 HP ≤15% |
| 自疗 | 缺失 HP ≥15,000,MP 和冷却满足客户端要求 |
| 军用圣灵药 | HP 或 MP ≤三分之一,静止且 30 米内无存活敌方玩家;烈羽争锋还检查敌方兵线、建筑和机甲,碎冰战冰块不阻止补给 |
| 冲刺 | 移动中、无有效攻击目标、没有冲刺状态 |
防御、自疗、补给在登录/复活后等待 5 秒。解控不受此等待限制。没有攻击目标时仍检查生存技能。
敌人的 Guard、无敌、暂时不可选中或遮挡不会让它从补给威胁扫描中消失。安全喝药时不会因为自疗刚转好而自行打断;出现威胁或控制且有紧急技能可用时,才取消插件发起的补给读条。普通插件读条可为紧急生存技能取消;手动读条不主动取消。
## 构建和测试
从本目录运行:
```powershell
.\build.ps1
```
默认引用目录:`C:\Users\AinaSnow\AppData\Roaming\XIVLauncher\addon\Hooks\dev`,通过 `APPDATA` 自动解析。可覆盖:
```powershell
.\build.ps1 -HooksDevPath 'D:\Path\To\Hooks\dev'
```
项目没有 NuGet 包依赖。`build.ps1` 执行还原、Release 构建、离线测试并在 `dist` 下打包,仅包含 DLL 和 JSON;不会安装到游戏,也不会修改 Hooks 目录。
离线测试直接编译生产代码的纯逻辑模块,使用假客户端检查接口。详见 `VERIFICATION.md`,**游戏内验收尚未完成**。