你好!我们在用 `window.werhd` 做 AI 托管扩展([jev-helper](https://github.com/ra2web/jev-helper)),遭遇战和战役关卡都在跑。现在的接口已经能看局面、下命令,非常好用。跑了 25 局之后,我们发现有几类事情只能靠猜,想请你考虑再开放一些接口。 完整的需求草案(含每项的实战证据、接口草案和优先级)在这里: https://github.com/CherryLover/jev-helper/blob/main/docs/game-api-requests.md (同时在 ra2web/jev-helper#2 里提交) ## 公平原则 只请求**玩家本来就能在屏幕、EVA 语音、雷达、侧栏上看到或听到的信息**,而且在它出现在屏幕上的那一刻才给。 不要求:透视迷雾,查看敌方的钱、队列、命令,未探索区域的路径,触发器内容和未来剧情。战役的对手是电脑,可以按模式多给一些。 ## 遇到的问题 - **胜负**:25 局里识别出的胜利是 0。战役胜利由任务触发器决定,扩展只能看 `me().defeated` 和「所有对手都倒下」。有 14 局只能记成「对局结束」,分不出输赢。 - **战役目标**:拿不到任务目标,只能让玩家手填,再按关键词猜是哪栋建筑。比如华盛顿地图的五角大楼其实是四座「RA2 Wash Pent A–D」。 「用工程师占领盟军作战实验室」这关,我们占领成功后游戏立刻送了援军和建筑,实验室 6 秒后从我方消失,11 秒后判负。扩展不知道目标变了没有,也不知道为什么输。 - **命令结果**:命令没有回执。有一栋进不去的民房,扩展让士兵进了 497 次;一个占领目标重发了 89 次;白送了 16 个工程师,扩展都不知道原因。 - **事件**:「基地受攻击」「谁在打我」「单位死于什么」都只能用血量差和距离推算,误报过连续约 6400 拍。 - **生命周期**:`werhd` 离局就被摘掉,扩展分不清加载、简报、暂停、结算和下一关,也没法自动进入下一关。 ## 最想要的十项(P0) 1. 离局也常驻的入口,提供版本号、能力清单、对局阶段(大厅 / 加载 / 简报 / 进行中 / 暂停 / 结算)和 `battleId` 2. 游戏结束事件 / `outcome()`:结果、原因、相关目标 3. `missionInfo()`:模式、关卡 id、名称、简报原文、阵营、难度 4. `objectives()` 和目标变化事件:文本、状态、类型、关联物体(只给可见或已揭示的) 5. 屏幕消息事件:EVA、字幕、任务文本,含原文和字符串键 6. 倒计时 `timers()` 和事件 7. 统一事件流:受伤(攻击者可见时才给)、摧毁(含死因)、归属变化、援军、受攻击 8. 命令回执:接受 / 拒绝原因 / 完成 / 失败 9. 己方单位的当前命令和状态(在路上 / 在打谁 / 被堵住 / 已到达) 10. 可达性 `pathTo` / `reachable`,以及桥的状态和修桥小屋的对应关系 另外两项开放成本很低: - `rules()` 补上 ini 里本来就有的 `capturable`、`insignificant`、`techBuilding`、`displayName`; - 放置建筑的结果、批量合法格和推荐位置。 事件方面,建议做成可回看的有序队列(`events.since(seq)`),并支持多个订阅者。`onTick` 只能挂一个回调、有 8ms 限制,异步决策时很容易漏事件。 ## 如果只能先做一小部分 1. 游戏结束事件(结果 + 原因) 2. 屏幕消息事件(带字符串键和原文) 3. `missionInfo()`(至少给关卡 id) 4. 命令拒绝原因 有了这四项,我们就能按「关卡 id + 字符串键」维护每关的目标表,知道什么时候赢、为什么输,也能消掉实战里最大的几块浪费。 接口名和数据结构都只是草案,按你的实现方便来就行。也可以先告诉我们哪些能开放、哪些不打算开放,我们这边相应调整。谢谢!
Activity
huangkaoya commentedon Oct 10, 2026
会逐步安排。因为现在优先在做下一个大版本,所以会慢一些,还请理解