igofreely
发布于 2026-08-05 / 19 阅读
0
0

新增“RA2 战场透视”,联网不掉线,版本更新至5.3.142

更新器使用 .runtime/exact-opening-book-update-state.json 记录评分指纹、地图指纹和上次通过审计的建造书 SHA-256。候选文件只有通过来源、覆盖率、建筑、单位、占领、大兵进驻、空投伞兵、坦克打树/打矿、卖建筑/原位重建依赖和完整操作步骤审计后才会原子替换正式策略;失败时保留旧策略。完整更新说明见 docs/09-精确建造策略更新.md

browser:assist 默认用 PROXY_HOST=0.0.0.0 监听全部 IPv4 网卡,启动时同时打印 localhost 和检测到的局域网地址;本机控制面板可用 http://localhost:3000/,同一局域网可用。首次出现 Windows Defender 防火墙提示时需要允许 Node.js 访问“专用网络”。油猴脚本仍建议在运行 Chrono Divide 的电脑上从 http://localhost:3000/ra2bot-cdhelper.user.js 安装。安装后删除/禁用旧的 Ra2Bot helper 和独立 cdhelper,避免重复采集。仓库中的 src/proxy/web/ra2bot-helper.user.js 只是合成时使用的内部执行模块,不能单独安装;所有功能均以代理输出的 ra2bot-cdhelper.user.js 为最终交付和验收对象。界面统一为 cdhelper 风格,“建造步骤”可展开查看建筑、单位、占领、大兵进驻、空投伞兵、坦克打树/打矿、卖矿场、完整狗探路、工程师装车和建筑集结点的状态、录像参考时间、精确坐标、路线进度和重试次数。实战按 Ctrl+B 可暂停/继续精确时间线;暂停期间不执行动作,继续后所有动作整体顺延,不会瞬间补发暂停期间已过期的步骤。

游戏页右下角新增“RA2 战场透视”,控制面板顶栏也有相同的三个持久化开关:显示全图 会揭开本地渲染迷雾并在雷达显示完整敌情;心灵探测 从实际锁步动作流显示敌方移动(蓝色虚线)和攻击(红线)目的地;隐形单位 以紫色光圈标出运行时 isCloaked 的单位。三项默认开启,关闭后会保留选择。

精确模式使用单一 Node BrowserBotBrain:精确录像拥有录到的建造、生产、占领和单位路线,普通建造/生产只在录像释放相应队列后接管;同一个 Brain 始终负责战斗、基地防守、采矿经济和缺电恢复。旧浏览器 BuiltIn Bot 在该模式下禁用,避免它的单车任务与整队战术或玩家控制租约争抢单位。

观看录像时,面板从录像开局起就按当前地图显示可选出生点和阵营;点击“播放”即可把该情景的原始冠军学习录像导入 Chrono Divide 录像仓库,并在专用新标签页播放。脚本按录像 ENGINE 版本自动使用当前客户端或 Chrono Divide 官方历史客户端;学习录像结束后专用标签页自动关闭,原录像页不会卡在关闭提示。

精确建造步骤还会显示卖建筑动作;若录像在出售后于同一占地范围重建,出售成功是新建筑自动落地的前置条件。

实战中进局后读取当前玩家的真实 startLocation,据此选择最近出生点,再读取对手国家选择同阵营搭配/高质量同国家分布录像,并用源录像的相对出生点坐标换算本局落点;精确助手负责录像建筑入队和落地、MCV 展开、建筑出售/维修及已确认的录像单位/占领/进驻动作。录像动作会短暂占用对应单位或生产队列作用域,同一 Brain 的普通命令自动让路。防御队列不得越过录像中更早且未完成的结构建筑。录像目标格被单位占用时不会移动坦克、矿车或玩家单位:普通建筑短暂重试后搜索附近合法空位,达到自动放置上限后由玩家手动放置并继续;严格原位替换只等待自身占地,不暂停进攻、采矿、生产、防守或其他自动操作。每个实战标签页拥有独立 Brain,建造命令只发往产生该状态的标签页。单位、建筑、队列、出生点、基地、维修状态和阻挡信息来自一体化脚本内的只读 cdhelper:snapshot;快照缺失或过期时只暂停精确时间线。完整说明见 docs/08-精确建造助手.md

5.3.83 的自主战斗会在 6 辆主战坦克且综合战力达到已知敌军 1.35 倍时发动全军总攻。坦克离家后先在本方基地集结一次,已经抵达敌方基地/接战区的部队则持续进攻、绝不因重新集结返回;基地 24 格预警圈内出现成群敌军时,空闲部队先直接拦截,兵力不足才按战力缺口抽调最近的进攻单位,剩余主力保持原攻击命令。目标顺序为敌军战斗单位、全部敌军建筑、其余非战斗单位。敌方飞行兵/飞机接近时主动调集机动防空支援,地面主力不停步。铁幕仅在 9 辆坦克形成相邻 3×3 编队后自动用于强攻,或在只有 4–8 辆且附近存在敌方战斗坦克时紧急使用;其他超级武器和录像超武步骤仍由玩家控制。

5.3.84 根据最新实战录像 replays/20260727_185649_typescript_vs_YUSUF11_2poltergeistprecaptured.rpl 修复高频改令:8:00–8:59 一分钟内曾产生 1,396 条部队命令,其中 1,243 条为攻击类,自动点射、移动和玩家接管互相覆盖。现在有效点射目标保持 4 秒,跨越射程边界不再重发;大规模进攻只用敌方野战部队判断明显优势,静态防御不再把优势总攻卡住;主力整局只在本方基地集结一次,之后不会因新波次或重选目标返回。Ctrl+X 同时作为全部自动操作总开关;开启时,玩家选择或下令的单位独享 10 秒人工控制期,精确录像和 Botscript 都不得覆盖,但自动建造、生产、防守及未被操作的部队继续运行。插件会读取实时恐怖机器人寄生状态:来得及则让中招车辆进入维修厂,否则由附近武装单位强制打爆;空闲矿车停满 10 秒后把采矿搜索半径从 3 格扩大到 20 格。自动攻击优先清除恐怖机器人,苏军优先生产恐怖机器人克制辐射工兵,防空履带车优先迎击飞行兵;防空炮是地面部队最后处理的目标。

5.3.85 收窄了上述开关并恢复连续进攻:Ctrl+X 关闭时只暂停原插件 BrowserBotBrain 对普通作战单位的自动移动、攻击、碾压、防守调动、维修和铁幕编队,不影响精确录像、内置 Botscript、建造/生产或采矿经济;已经入队但尚未提交的原插件作战单位命令会被单独清除,精确录像和 Botscript 动作保留。每一支新形成且尚未抵达敌方前线的主力波次都可以再次在本方基地集结后出发;已在敌方基地或接战区的部队不会被拉回,目标消失时继续搜寻并攻击敌军部队和建筑。

5.3.86 修复自动天梯的重复提交竞态:Quick Match 只负责进入排位页,真正提交 Match 的 Play 每轮只点击一次;匹配、倒计时和载入期间只监视状态,不会因为按钮仍可见而再次排队。匹配参数与官方 0.83.2 客户端保持一致:WOL CVERS 使用完整发布版 0.83.2,matchbot VRS 使用引擎版 0.83STARTG 一次性 ticket 在游戏服务器也只执行一次 join。遇到 Received unrecognized parameters from match serverCannot join a game that has already startedYou've been disconnected from the server 时,插件废弃旧比赛与旧 ticket,按 5–60 秒有界退避建立全新连接重新匹配,不再以 200ms 刷新形成断线风暴。命令行排位在 gserv 完成接管前会保留 WOL 会话,并在收到 STARTG 前预先完成 Bot/策略初始化。

5.3.87 根据最新实战录像 replays/20260727_212028_typescript_vs_Sopheak_2pinchpointle.rpl 重写进攻时机。该局 10:47 内有 2,397 条攻击命令和 910 次三秒内攻移反转,成组推进却集中到约 8 分钟后。现在首波在 4 辆主战坦克时开放、6 辆时无条件出发;若更早首次出现余额不超过 500 且生产连续 3 秒无进度,则至少 3 辆坦克也可提前出击。敌方作战实验室首次建成会立即派出至少 2 辆新坦克作为第二波;10:00 是全军总攻硬截止,不再等待战力比。浏览器使用真实履带寻路、地形高度和通道宽度比较直线与四条侧翼路线,只在已知敌军埋伏于高地或窄口且侧翼风险更低时,为整支坦克群提交同一组 Shift 航点。玩家选择或下令后,锁步提交口会再次过滤该单位的全部自动命令 10 秒;精确录像、Botscript、建造清障和采矿都不能抢回该单位,但建造、生产、防守流程及其他单位照常运行。

5.3.88 继续审计 replays/20260727_221836_typescript_vs_Shenju_mp15s4.rpl:2:24–3:15 的 4–6 辆坦克一直对本方基地中心 (53,88) 重发 AttackMove,真正的 25 单位前推到约 8:00 才出现。根因是把被基地建筑占用的 baseTile 当作坦克集结点,并在首波状态已消耗后没有后续强制出发线。现在浏览器沿真实履带路径选择离开建筑占地的可通行基地出口;6 辆坦克最多集结 3 秒便直接前推,4–5 辆最多等待 6 秒,目标暂时消失也继续沿敌基方向行动;任何后续 6 辆主力都会再次强制发动总攻。录像建筑坐标被单位阻挡时不再移动坦克、矿车或玩家单位,只短暂重试后使用邻近合法落点/人工放置,因此不会刷新单位租约或压住战斗。精确录像仍拥有当前建造命令的最高优先级,但检测到敌方空军后可在空余队列追加低优先级应急防空;单架基洛夫按至少 5 个机动防空单位配置并集中调动。最终锁步过滤还会从未标记的 SelectUnits → OrderUnits 动作推断单位 ID,封住第三方/遗漏路径对玩家 10 秒控制权的绕过。

5.3.89 修复精确建造助手学习到的工程师占领步骤未自动执行:Capture 命令现在携带精确录像元数据,进入 exact-replay 优先队列,不再被普通战斗开关、Botscript 或同帧选择覆盖。玩家选择或下令的单位至少保留 10 秒人工控制;超过 10 秒后,只要单位仍被选中或玩家命令尚未执行完毕,所有自动路径都会继续让路,直到取消选择且单位恢复空闲才交还给 AI。

5.3.90 根据最新实战录像修复第一条狗未按学习路线探路、工程师占领启动过晚的问题:录像狗的每个航点都进入 exact-replay 优先路径,不再被普通自动作战命令覆盖;工程师和中立建筑一旦实际出现,录像占领立即执行,不再等待无关的狗生产或普通建造队列。更早的工程师运输任务和玩家人工控制仍保持最高优先级;依赖占领半径的矿厂继续保持 Ready,直到占领成功后才落地。

5.3.91 修复最新录像中 3 个工程师和 2 条狗仍未立即执行学习策略的问题:所有可执行占领步骤现在同帧并行处理,并为各目标保留不同工程师;狗的每段路线强制以非排队首命令启动,后续同帧排队航点也不会再清除前一航点。玩家人工控制和更早的工程师运输任务仍优先。

5.3.92 将工程师占领前的连续 Move/ForceMove 接近路线纳入所有精确录像的通用学习规则。运行时以非排队移动起步、排队后续航点和 Capture,停滞恢复也重放完整路线;没有前置路线的录像仍直接占领。由机场/油井所有权解锁的附近建筑继续保持 Ready,成功占领后立即按录像坐标落地。

5.3.93 根据 replays/20260728_144935_typescript_vs_15263436788_tourofegypt.rpl 修复首波和人工接管:4–5 辆坦克不再因敌方已有坦克或战力评估而留在基地,达到 4 辆即强制发动普通进攻,6 辆升级为强制总攻;敌方作战实验室事件会持续等待至少 2 辆坦克,并绕过上一波的普通冷却立即发兵。录像动作使用 60 Hz 原始时钟,而浏览器曾误用 15 Hz 策略时钟,导致玩家在 tick 20466 下令后 tick 20640(约 2.9 秒)就被自动微操抢回;现在所有自动单位路径至少让路 600 个原始 tick,之后仍持续等到单位取消选择且人工命令完成。

5.3.94 根据 replays/20260728_152625_Player1_vs_AI2_mp01t4.rpl 修复精确建造期没有运行主战 AI 的根因:exactBuildOnlyModules() 不再关闭战斗、经济和防守,精确模式同时禁用会发单车任务的旧 BuiltIn Bot,所有单位命令统一由 Node Brain 提交并继续遵守人工租约。四辆坦克先压敌方矿车/矿场;无可见目标时整队攻移到敌方矿区/基地;前线存活期间每两辆新坦克立即增援,前线全灭后每四辆重新发动。真实基地突破按敌方约 1.3 倍战力从全部可战单位中调防;精确建造期间结构队列空闲且缺电时立即补电厂,同帧已有录像建筑命令时仍保持录像优先。

5.3.95 根据 replays/20260728_163547_Player1_vs_AI2_mp01t4.rpl 修复 6 分钟后主力在敌方门口反复前进/后撤的问题:新增坦克不再参与前排回拉,队形修正只让后队向前攻移追赶;普通主攻在本方出口完成一次短集结后持续压向敌方矿区、坦克和基地,目标进入黑雾或战力转劣也不解散、不撤退、不建立第二个前线集结点。防空履带车/IFV 不再进入地面主攻、基地地面拦截或地面点射,只在空军出现时移动到主力附近并攻击空中目标;完成精确探路的空闲狗与基础步兵加入坦克屏障,仍在执行精确录像路线的狗继续由学习器独占。

5.3.96 根据 replays/20260729_102006_playfoot_vs_policeTri_2pinchpointle.rpl 修复玩家与自动系统反复抢单位控制权,以及劣势进攻深入敌方包围圈的问题。原生 UI 的 ActionsApi.orderUnits 入口现在立即登记人工单位,至少保护 10 秒,并在取消选择后继续等待连续空闲 3 秒才交还自动系统。首波、重建波、作战实验室波、10 分钟总攻和增援全部使用包含敌方地面防御的完整战力评估,不再以数量或时间强制送出;已形成的前线转为劣势时原地警戒和本地集火,不撤回基地也不继续深入,恢复优势后再继续推进。

5.3.97 根据 replays/20260729_140653_typescript_vs_JONG31_4heckfreezesoverle.rpl 修复 3:26 的客户端崩溃。劣势前线的 GuardArea 现在始终携带当前编队中心坐标;无法计算合法坐标时改发安全的停止命令。浏览器命令边界同时拒绝所有缺少有限地图坐标的区域警戒命令,避免非法 OrderType 6 再进入 Chrono Divide 并触发未定义目标的 tile 异常。

5.3.98 根据 replays/20260729_144233_typescript_vs_wutti_4jungleofvietnamle.rpl 修复玩家操作再次被自动防守覆盖,以及小股伞兵/飞行兵拉走全军的问题。仍处于玩家选择中的单位会在最终动作队列直接拒绝全部自动命令,右键和单位快捷键还会在原生输入捕获阶段提前建立人工租约。基地防守按地面/空中威胁分别抽调达到约 1.3 倍战力的最近最小编组;苏军防空履带车可碾压伞兵。4–6 辆坦克且敌方至少少两辆坦克、地防有限并通过完整战力评估时立即把握进攻窗口;敌方作战实验室出现后至少等待四辆安全坦克,优先攻击无保护矿车,防守严密时不正面送入火力圈。

5.3.99 修复自动排位进入游戏服时出现 Received unrecognized parameters from match server 后永久黑屏的问题。匹配错误监视器现在独立于排位按钮扫描和游戏 API 就绪状态持续运行;发现坏参数、旧比赛或断线弹窗后会关闭弹窗,丢弃当前内存中的 QuickGame/WOL/一次性 STARTG ticket,并从干净入口建立全新联机会话。真正进入对局改由首个有效游戏 tick 确认,QuickGame 的最终 Play 也要求官方 .qm-form 上下文,避免误点其他 Play 按钮。

5.3.100 根据 Snow Valley 最新实战及对应 Gopa 学习录像修复第二、第三次基地迁移遗漏。浏览器快照确认的 MCV 部署可跨旧基地/新 MCV 对象 ID 连接,支持新对象只有 DeploySelected、部署前长时间等待以及新基地稍晚出现建造证据;其他无身份部署仍使用保守阈值。展开后的建筑严格等待本次迁移完成,并且只用新基地半径内的建筑验证,不再被旧基地先落下的无关建筑干扰。

5.3.101 增加可审计的精确策略来源覆盖:Snow Valley、出生点 2、苏军阿拉伯对美国固定使用已逐步核验的 Gopa 学习录像,评分库全量刷新或后续增量合并都不会再把它替换成缺少多次基地迁移的普通开局。覆盖文件纳入更新状态指纹、深度重建审计和 cdscript 交付包。 运行时选择器也会优先完整匹配的已核验来源;随包自动演示测试已验证 17 次建造坐标和三次基地迁移全部按录像执行。

5.3.102 根据最新完整实战录像 replays/20260731_184215_tsbt_vs_pluembi_mp15s4.rpl 修复基地迁移与射程点射。迁移开始时若旧基地仍有已经造好但尚未落下的建筑,精确助手会立即落地并等待地图确认,之后才允许基地收起;只有落点位于新基地展开区域、由录像明确带往目的地的 Ready 建筑可以随基地车迁移。射程点射开启时,普通步兵即使收到过时的 crushable=false 元数据也会按稳定的重步兵排除表判断;每个附近步兵只分配一辆可碾压坦克执行 ForceMove,其余坦克继续集火装甲与防御建筑,避免多车挤向同一点。

5.3.103 根据最新实战录像 replays/20260731_192454_Player1_vs_AI2_mp15s4.rpl 修复碾压命令在浏览器最终边界被长期拦截的问题。Node 战术日志从 1:38 起持续生成“分目标碾压”,但录像中两辆 HTK 在原始 tick 7131(1:58.85)的最后一次明确移动后仍保持选中,选择恢复动作一直到 tick 8830(2:27.17),旧逻辑会把“仍选中/命令未空闲”当成无限延期条件,最终整局没有提交一次 ForceMove。现在仅按最后一次真实玩家选择或命令建立严格 10 秒单位租约;到期后即使选择框仍保留或旧命令仍报告忙碌,也恢复该单位的射程点射和碾压。苏军全部作战坦克及防空履带车可以自动碾压,盟军仅灰熊坦克可以自动碾压;浏览器桥回归测试同时锁定 forceMove → OrderType 1,防止退化为普通移动。

5.3.104 将射程点射的自动碾压触发线从固定 6 格改为每辆车对当前步兵的实际对地射程外 2 格。步兵进入边界的首个状态快照就会把已有点射锁定切换为 ForceMove;多个步兵继续一兵一车分配给最近可用车辆,避免多车挤向同一目标。回归测试覆盖苏军犀牛坦克、防空履带车和盟军灰熊坦克,并锁定边界外不碾压、进入边界立即碾压。

5.3.105 根据最新录像 replays/20260731_203020_Player1_vs_AI2_mp15s4.rpl 修复自动碾压在浏览器最终锁步边界被玩家租约吞掉的问题。Node 端确认的每个步兵分目标碾压命令现在标记为 autoCrush,原生玩家移动只保留同一锁步约 0.25 秒的防竞态窗口,随后立即提交 ForceMove;普通移动、攻击、集结和 Viewer 指挥仍完整遵守 10 秒人工控制租约,Ctrl+X 关闭时同时清除待提交的碾压命令。新增录像时序回归测试锁定 6424→6540 原始 tick 场景。

5.3.108 根据 replays/20260802_212521_typescript_vs_igofreely_4heckfreezesoverle.rpl 修复幻影点射的前后排选择:三车组按当前坦克群到目标的最近距离、三车平均/最远距离排序,优先预锁“真实射程 + 3 格”内的前排最近幻影,不再由对象 ID 或稀缺度抢到后排目标;普通单位和建筑仍不能覆盖幻影锁定。RA2 战场透视 向上拖动时会解除旧的底边锚定并整窗移动,底部同步跟随,最小化后变为可拖动悬浮球。心灵探测兼容联机 v0.83 Map<playerId, actions> 锁步载荷,开始显示敌方真实移动、攻击及强攻命令;隐形标记直接读取实时 cloakableTraitdisguiseTraitsubmergibleTrait,覆盖斗篷、幻影伪装与下潜单位。

5.3.107 根据 replays/20260802_202847_typescript_vs_igofreely_4heckfreezesoverle.rpl 修复幻影预锁优先级:幻影进入“真实对地射程 + 3 格”即抢占其他敌方单位、坦克和防御建筑,每三辆作战车辆用一条 ForceAttack 同时集火,不再被同帧普通进攻命令覆盖;静止幻影在刷新节流期间仍保持独占锁定。新增 Ctrl+S 全自动操作总开关,关闭后暂停 Node Brain、精确录像时间线、BuiltIn/Botscript、建造、生产、经济、战斗、自动排位,并清空浏览器待提交自动动作;人工游戏操作及 Viewer 指挥仍保留。Ctrl+X 继续只控制单位自动操作。

5.3.106 修复 npm run replay:update-delivery 在 Windows 上更新完策略后可能因杀毒软件、索引器或短暂共享冲突连续 20 次写入失败的问题。约 15 MiB 的正式策略不再原地覆盖,而是先完整写入同目录临时文件,最多等待 60 秒后原子替换;失败信息会保留最后一个系统错误码,旧策略不会被截断。整条自主更新增加互斥锁,时间线未变化时跳过仅刷新 generatedAt 的重复写入,避免刚生成的增量状态 SHA-256 立即失效。新增真实 Windows 独占句柄和并发锁回归测试。

同版本把 crx 的 EXE/Chrome 插件交付从旧 5.3.81 同步到当前 browser:assist。CRX 构建会先自动运行 build:cdscript,再从 cdscript/package.json 注入 Manifest、弹窗、安装器、更新 XML 和产物文件名;交付信息记录服务、网页脚本、精确策略、证据文件及原生桥的源哈希。crx\npm run check 会校验 browser-assist 启动参数、五项环境开关、完整录像文件名集合、实际 3100 服务、原生消息、CRX 自更新与 SHA-256,防止旧服务和新清单混装。

5.3.109 将全部自动操作总开关快捷键由 Ctrl+S 改为 Alt+X,避免浏览器保存快捷键冲突;Ctrl+X 继续只控制原插件普通作战单位与射程点射。

5.3.110 根据最新录像 replays/20260802_222833_typescript_vs_igofreely_4heckfreezesoverle.rpl 修复幻影强攻在接敌时每 0.1–0.3 秒重新拆组三车、交换攻击点并打断开火的问题。幻影预锁边界扩大为每辆车“真实对地射程 + 5 格”;玩家选中坦克群并把 Move 目的地点在幻影前约 10–12 格时,可提前按双方横向位置展开火力线或包围角度,9 辆坦克稳定分为三组三车并分别锁定三辆前排幻影。单位到目标的绑定会保持到前排目标死亡或离开锁定区,小幅移动不再刷新命令,后排幻影只在前排消灭后进入分配。

5.3.111 根据最新录像 replays/20260802_233923_typescript_vs_igofreely_4heckfreezesoverle.rpl 修复玩家坦克接近幻影时预锁过晚和普通敌方建筑旁发呆。人工 Move 意图除 ActionsApi 入口外还会从最终锁步动作补抓,兼容入口 Hook 未命中的浏览器版本;目的地距幻影前线 16 格内即可提前接管,坦克先按横向顺序分配到距前排 10.5 格的独立火力槽,再把每三辆对一辆前排幻影的 ForceAttack 作为排队命令提前锁定,避免逐辆临时接敌。射程点射候选同时纳入矿厂、兵营、战车工厂等普通敌方建筑,坦克进入自身射程 +3 格后自动攻击,不再只响应有武器的防御建筑。

5.3.112 根据最新录像 replays/20260803_001339_typescript_vs_igofreely_4heckfreezesoverle.rpl 修复玩家 Move 后 10 秒人工租约吞掉全部幻影编队命令的问题。浏览器现在按单位记录最后一个人工命令类型:Move/ForceMove 可在短输入防竞态后被幻影预锁和自动碾压接管,Attack/ForceAttack/AttackMove 仍完整保护 10 秒;Viewer 指挥也不受例外影响。若真实浏览器拿不到 Move 目的地,快照会发送当前选择,选中的 6 辆坦克进入幻影的扩展接近区后仍会获得 6 个独立火力线槽位及 2 个三车排队 ForceAttack,不再因缺坐标而整批失效。

5.3.113 根据不同步录像 replays/20260803_004108_typescript_vs_igofreely_4heckfreezesoverle.rpl 隔离全图透视与自动战斗决策。全图单位和建筑仍可用于本地 HUD 显示,但 Brain 统一入口会先按引擎真实可见 ID 过滤全部敌军数组,幻影点射、基地防守、自动碾压和自动攻击建筑等所有自动战术都不能消费未探索对象;自动坐标命令携带真实目标 ID,普通自动 Attack/ForceAttack 也会在进入最终锁步队列前再次核验目标仍可见,目标进入迷雾或数据过期时直接丢弃。内置 Botscript 的 GameApi 同样不再把 isVisibleTileisExploredTilegetVisibleUnits 伪造成全地图结果,避免向本机锁步提交对手客户端无法合法产生的未探索区域攻击命令。

5.3.114 根据最新录像 replays/20260803_031826_playfoot_vs_LiI3_4heckfreezesoverle.rpl 封闭自动防守命令从排队到网络提交之间的最后一个视野竞态窗口。自动攻击、幻影坐标强攻与自动碾压现在会把真实目标 ID 作为队列旁路元数据保存;botActionQueue.dequeueAll() 在动作注入锁步网络的最后时刻重新读取真实可见集合,目标在等待期间进入迷雾或数据过期时会连同对应选兵动作一起丢弃,绝不向对手客户端无法合法生成的未探索对象提交命令。玩家和 Viewer 的显式操作不受该过滤影响。

5.3.115 根据 24 秒即终止的最新录像 replays/20260803_033218_playfoot_vs_sezarMap_2pinchpointle.rpl 修复工程师自动占领未探索中立建筑导致的不同步。录像中没有攻击动作,最后一个对象命令是 23.2 秒时工程师对中立建筑 3188Capture;浏览器现在从真实 PlayerApi 的 hostile 视野单独维护可见对象集合,自动及精确开局的 Capture/Occupy 在命令入口和 botActionQueue.dequeueAll() 网络提交前都必须再次命中该集合。地图全亮仍可显示中立建筑,但目标未被本方实际探索前只允许工程师移动侦察,不再提交对象占领命令。

5.3.116 根据最新不同步录像 replays/20260803_034526_playfoot_vs_Gringoo94_2stormyweatherle.rpl 继续封闭大兵进驻与工程师占领未探索区域的命令路径。录像在工程师 2492 于 tick 1482 对坐标 (80,34) 的中立建筑 2448 提交 Capture 后约 1.6 秒结束;根因是多人“地图全亮”调用真实 PlayerShroud 的全亮方法,间接污染了本机 getVisibleUnits("enemy"/"hostile"),使所谓真实可见集合仍包含未探索对象。多人模式现在完全不修改权威 PlayerShroud,全图继续由独立“RA2 战场透视”HUD 使用全地图对象绘制,原生战场保留真实迷雾;此外,带 capture/garrison 标记的前置 Move/ForceMove 只有在原生地图 API 明确确认目的地已探索时才允许进入锁步队列,API 缺失或判断异常一律安全拒绝。直接 Capture/Occupy 仍在命令入口和最终出队两层复核真实可见对象,避免对手客户端无法合法生成的占领命令。

5.3.117 修复多人全图透视改为真实战争迷雾后原生地图整片发黑的问题。多人模式继续不修改权威 PlayerShroud,但现在会将原生 fog/shroud 渲染层降为透明度 0.34,让其下方的地形、单位和建筑渲染可见;同时增加固定定位、pointer-events:noneuser-select:none 的只读透视层,透视信息不会成为游戏命中目标,也不会抢玩家选择或命令输入。自动控制仍只消费真实可见对象集合,透明处理只作用于渲染 DOM 层。

5.3.118 修复 5.3.117 透明层未命中实际 Three.js 迷雾对象且阻塞自动建造的问题。上一版为寻找 map_shroud_layer 每 5 秒遍历最多 8000 个实时游戏对象,可能长时间占用浏览器主线程,使状态快照、精确建造和自动生产看似停止;本版彻底移除对象图遍历,直接从 SystemJS 捕获官方 MapShroudLayer 类,并对现有实例的 create3DObject/update 原型做一次性、仅渲染的材质透明化。实例每帧只做 WeakSet 常量时间检查,自动建造链路不再受透视渲染影响;权威 PlayerShroud 和真实可见集合仍保持不变。

5.3.119 将多人全图透视收敛为只读信息层。未探索区域仍以 0.34 透明迷雾显示其下方的地形、单位和建筑,但所有本地和插件命令在进入锁步网络前统一复核真实探索状态:只有 Move/ForceMove 可以指向未探索坐标,Attack/ForceAttack/AttackMove/GuardArea/Capture/Occupy 等目标命令、建筑放置及超级武器目标都会被拒绝;对象攻击和占领还必须命中真实 enemy/hostile 可见集合。这样既保留全图、心灵探测、隐形标记、精确建造与原有 AI 功能,又不会把只读透视信息转化为其他玩家客户端无法合法生成的锁步操作。

5.3.120 修复多人未探索区域仍显示纯黑的问题。Chrono Divide 0.83.2 的官方 MapShroudLayer 使用 Three.js r94 MultiplyBlending;该混合公式不读取 material.opacity 的颜色分量,因此上一版虽然设置了 0.34,黑色仍会把下方画面乘成全黑。本版在官方 PaletteBasicMaterial 的片元着色器输出处加入透明乘数混合,让 0.34 真正作用于迷雾颜色;若未来网页版本的着色器结构变化,则回退到 NormalBlending。补丁只重编译本机迷雾材质,不修改 PlayerShroud、探索判定、可见对象集合或任何锁步动作,未探索区域仍只允许移动。

5.3.121 根据 replays/20260803_111520_Player1_vs_AI2_mp01t4.rpl 修复自动 AI 建筑队列停在 Ready:录像中电厂和兵营能够放置,随后矿场完成但没有第三条 PlaceBuilding,说明最终迷雾动作清理错误删除了自动放置。现在 BuiltIn/BrowserBot/精确录像选出的放置动作会携带本地可信标记通过该清理层,仍由 Chrono Divide 原生 canPlaceBuilding 和锁步模拟裁决合法性。隐藏的电脑 AI Capture/Occupy 也会从对象表恢复坐标,先移动接近,进入真实视野后自动补发占领/进驻;精确录像继续使用自己的停滞重试时间线。

5.3.122 区分“玩家侧自动控制”与“对手原生电脑 AI”:共享的 ActionsApi.prototype 迷雾 Hook 现在只处理已确认属于本地玩家的实例,对手 AI 的下单、建筑放置和超级武器完整调用游戏原实现,不再用本地玩家的探索状态误拦截。最终锁步迷雾清理也跳过明确属于其他玩家的动作。玩家侧 Deploy/DeploySelected 被认定为无目标动作,即使序列化数据携带基地车 ID 和当前位置也不会被当作未探索目标删除,恢复自动展开基地;攻击、占领、进驻、建筑放置等目标限制和本地网络锁步注入保持不变。

5.3.124 修复混合敌军中的防空目标优先级:具备真实有效对空武器的单位只要存在合法空中目标,就会优先攻击飞机或飞行兵,不再被地面单位的威胁、价值或残血集火评分分走。浏览器射程点射、默认进攻/防守集火和内置电脑空闲交战使用同一规则;双武器单位会同时检查主副武器,并按目标类型使用正确射程。所有命令仍通过本地玩家锁步动作队列提交。

5.3.123 修复工程师和大兵只移动到目标建筑旁、获得视野后不继续占领或进驻:精确录像的 assist 占领/进驻命令现在也会保留待补发记录;中立科技/民用建筑若未出现在 v0.83 的 hostile 列表中,则以其所在格是否已被本方真实探索作为合法回退判断。获得真实视野后会通过本地玩家锁步队列补发对象 ID 形式的 Capture/Occupy;若补发暂时受玩家控制保护或自动化暂停影响,记录不会丢失,会继续重试。

5.3.125 根据最新录像 replays/20260803_121525_Player1_vs_AI2_mp01t4.rpl 修复获得真实视野后仍没有补发占领/进驻:录像最终锁步流包含 111 条 OrderUnits,但 Capture/Occupy 均为 0。浏览器现在按 Chrono Divide v0.83 的原生规则检查建筑完整占地格与实际高度,工程师只照亮建筑边缘也能认定目标已真实可见;补发任务不再因写入临时动作队列就删除,而是附带稳定令牌,只有对象 ID 形式的 Capture/Occupy 通过玩家控制保护、自动化暂停和最终迷雾清理并成功交给网络回合后才确认完成。中途被清理会自动恢复并继续重试;单位死亡、目标消失或工程师已完成占领时才安全终止记录。所有读取均来自本地 PlayerShroud,不修改权威迷雾或对手电脑 AI。

5.3.126 根据最新录像 replays/20260803_151219_Player1_vs_AI2_mp01t4.rpl 恢复透视改造前的两阶段占领策略:录像中工程师到达目标后约每 18 tick 被反复选中,但 112 条 OrderUnits 中仍没有 Capture/Occupy,确认补发命令被浏览器最终迷雾层删除。现在工程师和大兵先按学习录像提交 Move 探路,随后只以官方 getVisibleUnits("hostile") 集合确认真实视野;目标可见后按对象 ID 补发 Capture/Occupy,并为该次可信动作加上仅供最终迷雾层识别的本地标记。命令若被玩家控制保护或自动化暂停暂时清除,任务会保留并继续重试,直到动作真正进入锁步网络队列。对手电脑 AI 仍走游戏原生路径。战场透视缩小按钮同时改为与建造助手相同的 16px 半透明红点;隐形、伪装、潜水或雷达不可见的敌军单位在地图上统一绘制为紫色。

5.3.127 根据最新录像 replays/20260803_155359_Player1_vs_AI2_mp01t4.rpl 修复工程师第二次重放探路路线后仍没有占领的问题。录像在 tick 1574 和 4593 两次向工程师 1385 提交相同学习路线,整局 40 条 OrderUnits 中仍没有 Capture/Occupy,同时产生 1701 条选兵动作;根因是 5.3.126 只接受 getVisibleUnits("hostile"),但 Chrono Divide 0.83 捕获到的 PlayerApi 不会稳定地把已揭示的中立科技/民用建筑放进该集合。现在保留 hostile 快速路径,并完全按 v0.83 GameApi.getVisibleUnits 源码计算目标建筑的全部占地格:只要任一占地格已由本地权威 PlayerShroud 揭示,就按参考项目原策略补发对象 ID 形式的 Capture/Occupy。判定不读取全图透视对象表;补发仍通过玩家保护、自动化开关和锁步网络队列,不修改迷雾或对手 AI。

5.3.128 根据最新录像 replays/20260803_163909_Player1_vs_AI2_mp01t4.rpl 修正学习录像的国家和出生点匹配,并补齐探路后的占领兼容路径。实时规则国家 Iraq 现在统一匹配录像国家 Arabs;只要同地图、同出生格和模式存在同国家候选,就不再退回质量分略高的 Confederation 基础冠军。内部出生格仍保持零起索引,界面按玩家习惯显示“出生点 2”。该局会选择 5c6225c4-3db6-4f29-ac7c-a3ce40f5f8e3.rpl 的 Arabs 对 Americans 策略。对于不公开 mapShroudTrait 的 0.83 运行时,工程师/大兵到达目标并揭示任一建筑占地格后,改由官方只读 MapApi 确认真实探索状态,再按目标对象 ID 补发 Capture/Occupy;任务在玩家控制保护或自动化暂停期间仍保留重试,并继续经锁步队列同步。

5.3.129 根据对照录像 replays/20260803_180335_Player1_vs_AI2_mp01t4.rpl(故障)与 replays/20260803_180720_Player1_vs_AI2_mp01t4.rpl(旧版正常)修复透明未探索图层下的精确录像占领。故障录像把两条应为对象 ID 形式的 Capture 全部降级成 Move,多轮重试后整局仍没有一条 Capture/Occupy;旧版在相同时间点直接提交 Capture。现在只有已经由精确学习录像匹配到本局静态建筑的工程师占领和大兵进驻命令可以保留对象 ID 穿过显示迷雾边界,并继续经过玩家控制保护、自动化开关及锁步网络队列;普通未标记的隐藏目标仍先移动,待权威视野确认后重试,隐藏攻击仍会被拒绝。

5.3.130 针对最新录像 replays/20260803_185201_Player1_vs_AI2_mp01t4.rpl 继续修复透明未探索图层下的精确录像占领。录像中的工程师命令只有 SelectUnits 而没有 Capture,根因是录像/遥测建筑 ID 可能是字符串或上一局快照 ID,ActionsApi 在目标不属于当前 World 时会静默丢弃对象命令。现在工程师占领和大兵进驻会按本局真实建筑的坐标与 rules 名称重绑定,先以合法 Move 探索权威视野,再通过对象 ID 重试 Capture/Occupy;不修改权威战争迷雾。

5.3.131 根据最新录像 replays/20260803_201958_Player1_vs_AI2_mp01t4.rpl 与正常版本录像 ra2-ai-botscript/replays/20260803_180720_Player1_vs_AI2_mp01t4.rpl 逐条对照,修复工程师到达建筑旁仍不占领的问题。最新录像有 1,512 条 SelectUnits,但 67 条 OrderUnits 中没有一条 Capture/Occupy:第一名工程师的 Capture(1354) 被改成了 Move(77,120),第二名工程师学习路线末尾的 Capture(1358, queued=true) 被改成了 Move(84,152, queued=true)。建筑 ID 和学习路线实际都正确,根因是 5.3.130 对精确学习命令再次套用了普通自动目标的权威视野门槛,导致该门槛永久不放行。现在只有在本局 World 中按坐标和 rules 名称确认过的学习建筑可以恢复正常版本的对象 ID Capture/Occupy,并保留录像的排队标志;普通 BrowserBot 的未知隐藏目标仍先移动、真实揭示后重试。透明未探索图层继续仅改变绘制,不修改 PlayerShroud

5.3.132 根据最新录像 replays/20260803_214430_Player1_vs_AI2_mp01t4.rpl 修复工程师和大兵仍可能只走到建筑旁、不提交 Capture/Occupy 的问题。录像中工程师 1387 已多次移动到油井附近,但整局没有占领命令;对照正常重试可见,目标暴露后才迟至 tick 13734 补出 Capture(1358)。根因是 Chrono Divide 0.83 对隐藏静态建筑可能已经在原生 World 中保留有效对象 ID,却暂未通过 GameApi 发布 ObjectType.Building,使精确命令的本局建筑绑定失败并被降级为 Move。现在改用与原生 ActionsApi.orderUnits 相同的 World.hasObjectId 校验,并同时核对目标 rules 名称及 12 格内坐标;即使类型元数据尚未发布,可信的精确工程师占领和大兵进驻也会直接保留对象 ID 命令。普通未知隐藏目标、名称或位置不匹配的对象仍不会获得该豁免。

5.3.134 针对最新录像中工程师抵达油井、科技机场后绕圈但仍没有 Capture/Occupy 的情况继续修复。精确占领命令首次提交后会保留可重试任务;当探索揭示了建筑,助手重新从当前可见对象和原生 World 成员绑定实时 ID(即使建筑类型元数据尚未发布),立即补发对象形式的 Capture/Occupy,不再沿用全图快照中的失效 ID。普通未标记的黑雾目标仍按 Move→揭示→重试处理。

5.3.137 根据最新 Montana DMZ 录像修复多人进驻和步骤 11 集结点。建筑驻军改读 Chrono Divide 的 garrisonUnitCount/garrisonUnitsMax,只有建筑实际驻军达到本步目标才完成;士兵从普通单位列表消失不再视为成功,只进入一人时会继续补派剩余人数。同一建筑连续进驻按本步起始人数和剩余容量计算,例如先 2 人、再选 9 人进入容量 10 的建筑时,第二步正确补 8 人。录像中同一兵营 8 帧内的 (108,44) → (109,46) 近邻集结点修正合并为最终 (109,46),不再拆成步骤 10、11 两次执行。

5.3.138 修复 Ctrl+X 射程点射不能及时自动碾压步兵:犀牛、灰熊、天启和防空履带车在敌方普通步兵进入自身实际对地射程外 3 格时立即按一兵一车分配 ForceMove。该分支只提交坐标移动,不提交隐藏对象攻击;即使步兵进入未探索黑雾,坦克仍会追向最新坐标、沿途探索并尝试碾压,而普通 Attack/ForceAttack 继续遵守真实视野限制。

5.3.139 将自动攻击与建造生产分开:Alt+X 仅开启/暂停自动攻击、幻影预锁和自动碾压,Alt+C 仅开启/暂停建筑放置、建筑维修、MCV 展开及单位/建筑生产;Ctrl+X 只控制射程点射,关闭时不再阻止 Alt+X 的幻影强制攻击和自动碾压。关闭建造时精确建造时间线暂停且不会恢复时突发补发,采矿和玩家指令继续有效。

5.3.140 将 Alt+X 自动攻击与 Ctrl+X 射程微操彻底解耦:Alt+X 只控制常规自主攻击,Ctrl+X 独立控制射程点射、自动碾压和幻影坦克强制攻击。关闭 Alt+X、保持 Ctrl+X 开启时,三项射程微操仍会立即执行;关闭 Ctrl+X 也不会暂停 Alt+X 的常规自主进攻。

5.3.141 根据录像 replays/20260804_155430_tsbt_vs_typescript_mp01t4.rpl 收紧幻影坦克强制攻击:只按每辆坦克自身的实时位置在实际射程外 5 格预锁,不再因为选择状态或 Move 目的地接近幻影而把远处坦克拉走,也不再生成额外编队 Move。玩家 Move 打断已有幻影锁后会在下一策略帧立即重发 ForceAttack,无需等待原 180 tick 刷新。附近同时有可碾压步兵和幻影时,优先分配碾压;但会检查坦克到步兵的整段路线,路线触及任一已知幻影的实际对地射程时取消碾压并优先强制攻击幻影。上述逻辑在 Alt+X 关闭、Ctrl+X 开启时仍独立生效。

5.3.142 根据最新故障录像 replays/20260804_163445_Player1_vs_AI2_mp01t4.rpl 修复开局 MCV 不自动展开。录像在第 4 tick 只有选择基地车和恢复选择两条动作,缺失中间的 DeploySelected;根因是建造自动化分类字符串 build 被误传成 ActionsApi.orderUnits 的第三个目标参数。浏览器桥现在将自动化分类严格保留为本地队列元数据,只把真实对象或坐标目标传给游戏,开局部署、建造移动和经济移动均覆盖参数级回归测试。

自主进攻修复(实战对局反馈)

一次实战对局暴露出进攻行进队形差、犹豫不决、集火差和碾压不果断。根因和修复都在 src/proxy/browser-bot.ts启动插件.cmd 运行的就是它打包出的 cdscript/server.mjs,与内置 Botscript 无关):

现象

根因

修复

进攻犹豫不决

findEnemiesNear敌方建筑也算作“基地入侵”,命中后直接 return。近点开局或敌方向我方扩张时,一栋静态建筑就能永久封死后续所有进攻波次

基地防御只统计移动单位;且只有真实威胁(排除军犬、矿车、战力 <0.5)才会抑制新进攻,孤狗路过不再冻结全军

进攻一发即撤、压境却未成建制防守

防守判断排在进攻维护之后,若进攻分支提前返回则本帧根本不防守;命中后又把全部进攻单位 attackMove 到基地中心,既打断主力也错过实际交战点

防守改为进攻维护前的必经步骤;24 格预警圈内用共享集火直接拦截。只有大规模压境且本地兵力不足时才按缺口抽调最近进攻单位,保留足够主力前推,绝不再把整队送到基地空坐标

集火较差

默认路径(未开 Ctrl+X)完全没有逐单位集火,整波只在发起时收到一条 attack <targetId>;目标一死就全部退回引擎自动索敌,伤害四散

新增 manageAssaultFocusFire,复用已测试的 planFocusFire 逐单位分配目标,每秒刷新,自带过度杀伤上限

行进/进攻队形差

编队只把掉队者往前拽,从不减速前排。灰熊(速度6)与 V3(速度3)混编时必然拉成长队,被逐个吃掉

新增 holdOverextendedColumn:沿推进轴摊开超过 14 格且前排未接火时,前排收拢等待后队;已在交火的单位绝不后撤

10 分钟仍未进攻

早期版本可能无限等待,随后又把数量和时间改成无条件强制线,导致少量坦克冲入优势敌军和地防

首波至少形成 6 辆并通过完整战力评估;敌方实验室事件会保持待命并绕过普通冷却,但只在火力占优时发兵;10:00 重新评估全军,不再让时间绕过安全门槛

高地/窄口埋伏

只给敌基目标,底层寻路固定走最短通道,不比较已知敌军占据的高地和狭窄口

用实时履带寻路生成直达与四条侧翼候选,按高度、横向可通行宽度和敌军射程评分,整队使用同一组排队航点绕行

十辆坦克仍在基地

本方基地建筑坐标曾被误用为集结点;后续又用强制出发掩盖战力不足,容易整团进入敌方包围

集结改用履带可通行的基地出口;后续 6 辆以上重新按敌军、地防和护航评估,优势成立才整团出发。已形成进攻在目标丢失时继续施压,但战力转劣会守住当前火力线等待增援

碾压大兵不够果断

三重封锁:地图上任意位置存在敌方坦克即禁止所有进攻坦克碾压;13 格内有敌坦克再次禁止;冷却 60 tick(4秒)导致压向 4 秒前的旧坐标

去掉“全图有敌坦克即禁用”这条无条件封锁;13 格安全包络保留,但 3 格接触距离内始终允许碾压(几乎零成本);冷却降到 20 tick

碾压的兵种判定改为:引擎 canCrush 元数据只能否决碾压,不能扩大范围。盟军仍只有灰熊自动碾压——幻影移动即暴露、光棱贴脸等于放弃全部射程优势,这是有意的战术限制,不是遗漏。

Ctrl+X 原插件单位自动操作开关与射程点射协同

5.3.85 起 Ctrl+X 只控制原插件的普通作战单位自动操作:关闭时暂停 manageTankCrushmanageAutoFocusFire、自主进攻、防守调动、维修和铁幕编队;精确录像、内置 Botscript、自动建造/生产和采矿经济继续运行。重新开启后原插件单位战术从最新快照继续。最新录像确认问题集中在高频改令:

  • 8:00–8:59 共 1,396 条部队命令,其中 1,243 条攻击类命令

  • 11:00–12:59 又有 586 条命令,自动移动/点射与玩家接管明显交错,并出现针对中恐怖机器人己方车辆的人工强制攻击。

命令刷屏的两个来源都已修复:AUTO_FOCUS_REFRESH_TICKS 提高到 60(4 秒),同一仍有效的目标保持粘滞;approach/inRange 相位变化不再绕过刷新节流,并保留 0.75 格迟滞。恐怖机器人、飞行兵等紧急克制目标会先改变合法目标池,因此仍可立即打断旧锁定。

集火采用池内收敛而非替换选择:selectAutoFocusTarget 先把候选收缩为一个 pool(机动防空先打空中目标 → 恐怖机器人打辐射工兵 → 其他地面部队先打敌方恐怖机器人 → 前排坦克带 → 碾压优先 → 防空炮/矿车最后),这个池就是该单位自己认可的目标集合。新增的收敛只在池内改选,因此克制与前排带规则依然生效,也绝不会把单位拖入无意义追击。

玩家选择或下令的单位会从所有自动单位命令中过滤严格 10 秒;原始动作时钟按最高 60 Hz 计算,不能再被 15 Hz 策略时钟提前缩短。新的真实玩家操作会刷新期限,但单位持续移动、持续选中或短暂不空闲都不会在到期后继续延期。过滤在命令入队和最终锁步提交两个位置执行,因此精确录像、Botscript、建造清障和采矿命令也不能绕过。这个租约不暂停自动建造、生产、防守流程或其他未操作单位;防守会改用仍可自动控制的部队。

策略还会学习卖建筑后原位重建的出售动作、替换建筑和坐标依赖;同时学习高置信的基地车拖动路线与重新展开坐标。只有最终展开后能由邻近的新结构落点验证的路线才会写入;自动收起已有基地必须在移动前识别到明确的收起命令,既支持旧基地和基地车使用不同对象 ID,也支持游戏收起前后保持同一 ID 的 Deploy(self) → Move → DeploySelected。迁移期间暂停结构和防御建筑入队,避免生产队列阻止收起;其余证据不完整的路线只接管实际存在或已生产完成的基地车,逐点移动、重试并在目标处展开,失败作为可选步骤跳过,不会误收主基地或阻断后续建造。

战术执行层

“打不打、打哪里”由规则和模型决定,“怎么打”由这一层决定。全部为无副作用纯函数,可单独测试,实战与浏览器端行为一致:

能力

函数

要点

小队集火

planFocusFire

整队共享一份目标序列,不再各打各的;单个目标凑够“3 秒内可击杀”的火力即停止接收射手,避免过度杀伤;饱和后剩余单位仍有目标,不空转

残血保全

shouldWithdrawDamagedUnit

生命值低于 30% 的可维修载具/飞机撤回集结点;步兵、铁幕单位、矿车和缺少生命数据的单位不撤;单次最多撤走 1/3 兵力

编队密度

requiredGatherRadius

sqrt(n)×10 收紧为 sqrt(n)×2,9 个单位 11 格内即可进攻而非摊开 35 格,杜绝挤牙膏式添油

反制出兵

rankCounterCompositions

按威胁缓存对编成打分:敌方有空军则重罚无防空编成,敌方防空强则压低我方空中编成,敌方防御强则抬高攻城编成

造价战力

estimateCombatStrength

优先使用引擎上报造价(犀牛 900 锚定 3.2),天启不再与犀牛近似等价

两条必须遵守的约束:

  • 锁步确定性GameMath 是引擎的跨平台确定性数学,模拟内不得替换为 Math.*requiredGatherRadius 因此接受可注入的 sqrtCombatSquad 传入 GameMath.sqrt

  • 战力下限:造价只能把单位抬高到类型基线之上,不能压低。estimateCombatStrength(unit) >= 0.5 在浏览器端被当作“是否战斗单位”的判定使用,100 造价的动员兵仅得 0.36,无下限会被静默移出军队统计。

反制出兵在最优分数 0.15 带内保留全部候选再随机:既反制敌方兵种,又不给人类对手读出固定出兵序列的机会;无威胁缓存(未侦察)时回到中性随机,不拿残缺情报过拟合。

规则配置

生产规则位于 config/rules/strategic.json。每条规则可以:

  • force:紧急状态下强制一个战略意图;

  • block:硬屏蔽危险意图,模型分数再高也不能绕过;

  • prefer:添加可被模型细化的软先验。

运行时会记录命中的规则 ID、优先级、强制意图和屏蔽意图。可用 RA2_RULES_PATH 指向另一份同 schema 文件;文件无效时启动失败,不会悄悄忽略。

规则存在两份:config/rules/strategic.json 是生产配置,DEFAULT_STRATEGIC_RULES 是浏览器 IIFE 的编译期兜底(打包产物没有 fs)。二者由 src/ai/rules/strategic-rule-engine.test.ts 的漂移测试锁定:比较决策字段并回放多个战局状态验证判定完全一致,仅 description 允许中英文本地化差异。改规则时必须同步两处,否则测试失败。


评论