Files
wow/docs/mount_travel_plan.md
2026-03-18 09:04:37 +08:00

5.4 KiB
Raw Permalink Blame History

脱战无目标上马跑路:实现方案(不改代码版)

本文档描述如何在 combat=Falsetarget=False 时自动 上马跑路/巡逻,并在 进入战斗或获得目标 时立刻切回战斗逻辑。先给方案与落地路径,后续再按本文改代码实现。

目标与约束

  • 目标:没目标、没进战斗时,上马并持续移动(使用现有 CoordinatePatrol.navigate() 作为跑路/巡逻引擎)。
  • 切回:一旦 combat=Truetarget=True,立即停止移动并进入战斗逻辑(必要时下马/取消坐骑)。
  • 稳定性:避免反复按坐骑键导致“上马→下马→上马”抖动;避免与拾取/剥皮互相打断。

方案总览(按稳定性排序)

方案 A推荐最稳增加 mounted 状态 → 状态机闭环

核心思路:像当前读 combat/target 一样,再增加一个 mounted(是否在坐骑上)状态输入,然后用“小状态机”确保行为可控。

  • 进入赶路条件not combatnot target
    • mounted=False:按一次上马键/坐骑宏
    • 等待 mounted=True(带超时,例如 3 秒)
    • mounted=True 后开始 navigate()(持续按 W + 转向)
  • 进入战斗条件combat or target
    • stop_all() 立刻停下
    • 如需要可按一次“取消坐骑/下马”(可选)
    • 执行战斗逻辑

优点

  • 不依赖固定 sleep不卡延迟几乎不会误触“下马”。
  • 不会因为公共CD、网络卡顿、瞬时移动导致上马失败后一直走路。

前置条件

  • 需要能从游戏侧输出 mounted 状态WeakAura/插件/像素条协议增加一格均可)。

方案 B无需新增状态最快落地盲按坐骑 + 冷却防抖

核心思路:不检测是否已经上马,只在满足条件时以较低频率尝试上马,并通过冷却与节流避免反复触发。

  • 触发条件(建议都满足):
    • not combatnot target
    • 不在“脱战拾取/剥皮冻结窗口”内(避免打断交互)
    • 距离阈值满足(见方案 C
    • 距离上次尝试上马已超过 mount_try_cooldown(建议 812 秒)
  • 动作
    • stop_all()(移动会导致上马失败)
    • 按一次坐骑键/宏
    • sleep(0.2~0.4)(给客户端一点时间响应)
    • 再进入 navigate()
  • 切回战斗
    • combat or target:立刻 stop_all() 并进入战斗逻辑

优点

  • 不需要改游戏状态协议,改动面最小。

风险

  • 如果你绑定的“坐骑键”在已上马时会取消坐骑,那么盲按可能导致“按一下下马”。因此必须:
    • 冷却要长812s
    • 触发条件要保守(最好配合方案 C 的距离阈值)
    • 坐骑键尽量绑定为“更不容易误下马”的宏(见方案 D

方案 C更像真人、效率更高基于距离阈值决定是否上马

核心思路:只有在“要跑很远”的时候才上马,短距离巡逻不浪费上马时间,也减少误触发频率。

  • 计算当前位置到下一航点距离 dist
  • dist > mount_dist_threshold 才允许上马尝试

推荐阈值

  • mount_dist_threshold = 8 ~ 15(以你当前坐标系单位为准,按实际体感调整)

与方案 B 的组合建议

  • 实际落地强烈建议用 方案 C + 方案 B:距离足够远才进行低频盲按上马。

方案 D强烈建议配套使用“智能坐骑宏”降低误下马

为了降低脚本“盲按一次”带来的不确定性,建议把坐骑键绑定为更可控的宏/按键策略:

  • 尽量避免:同一个键在“已上马”时必定执行下马的行为(会增加误下马概率)
  • 建议:脚本侧通过冷却和距离阈值尽量“只按一次”,并把坐骑宏设计为“尽量只上马”

注:不同版本/服环境宏条件支持不完全一致;这里给的是方向,具体宏内容以你客户端可用语法为准。

推荐落地路径(按投入产出)

路径 1最快能用方案 C + 方案 B

  • 一套就能跑起来,不改 game_state 协议。
  • 关键参数:
    • mount_try_cooldown: 812 秒
    • mount_dist_threshold: 815
    • mount_press_settle_sleep: 0.20.4 秒
  • 关键注意:
    • 上马前必须 stop_all(),否则容易上马失败。
    • 与拾取/剥皮冻结窗口协调:冻结窗口未结束前,不要上马、不导航。

路径 2工业级稳定方案 A

  • 增加 mounted 状态输入,形成闭环状态机。
  • 上马只在 mounted=False 时触发,几乎消除“误下马/抖动”。

与拾取/剥皮的冲突处理(重要)

读条/交互(拾取、剥皮)会被以下动作打断:

  • 任何移动键(尤其是 W)或转向键脉冲
  • 换目标(如 Tab
  • 再次进入战斗/获得目标

因此强烈建议:

  • 在拾取/剥皮窗口内:完全禁止导航与 Tab(冻结移动/找怪)。
  • 冻结窗口结束后再允许“上马与跑路”逻辑。

验收标准(你实现后怎么判断对不对)

  • 脱战无目标:角色停止原地抖动 → 成功上马 → 开始连续巡逻移动。
  • 途中遭遇:一出现 combat=Truetarget=True → 立即停下并进入战斗逻辑(不再继续按 W
  • 不会抖动:不会出现“每隔 1 秒按一下坐骑导致上马/下马来回切”的现象。