wait_for
Polls engine fields, instances, OCR text, new log lines, or window titles until a condition holds, returning a pass/fail/unverifiable verdict with evidence to prevent false failures in asynchronous game flows.
Instructions
轮询等待条件成立并给出证据包(验收闭环里「等到可以判了」那一步)。五种条件:field / instances / ocr / log / window。返回三态 verdict(pass / fail / unverifiable —— 把「没法判」与「没通过」严格区分)+ polls / evidence;超时如实报 fail,不静默当通过。注意 kind="log" 等的是新增(先记基线再等增量),不是「当前存在」。
为什么必须有它:游戏是异步的 —— 点完按钮要等界面出来、场景加载要
等几秒。不等待就直接断言,会得到大量假失败(其实只是还没加载完)。
同类工具(MaaFramework)把它写成一句伪代码:
while(!hit && !timeout) { 检查; sleep(rate_limit); }。
支持的条件(kind)覆盖三类信号,优先用引擎信号,少用像素:
kind | 判据 | 需要哪些参数 |
| 某字段的值等于 |
|
| 某类的活实例数 ≥ |
|
| 屏幕上 OCR 到 |
|
| 日志里新增匹配 |
|
| 出现标题含 |
|
kind='log' 等的是「新增」,不是「存在」(这条是真机实战踩出来的):
第一次轮询会记下基线匹配数,之后超过基线才算成立。
否则旧日志里早就有的匹配行会让它在 1ms 内返回 pass,
而本次操作根本没发生(实测:日志里已有 5 条「已修改 精核」时确实如此)。
要判「当前是否已有」请直接用 probe_log,不要用 wait_for。
返回值就是证据包(不是光秃秃的布尔):
· ok —— 条件成立了
· verdict —— pass / fail / unverifiable 三态。
unverifiable 表示「没法判」(例如依赖不可用、探针不上线),
与 fail(判了、没成立)严格区分 —— 把「没法判」说成「没通过」
会让 Agent 去修一个根本不存在的缺陷。超时如实报 fail。
· polls / elapsed_ms / interval_ms —— 轮询了几次、花了多久
· evidence —— 每次轮询的实测值(最后若干次),可核查
· hint —— 超时时给出下一步建议
Args:
kind: 上面五种之一。
target: ocr / window 的目标文本。
region: ocr 用:"x,y,w,h" 屏幕绝对坐标。
window: ocr 用:窗口标题子串。
name/namespace/image: field / instances 的类定位参数。
field: field 用:字段名。
equals: field 用:期望值(按字段类型比较)。
pattern: log 用:日志正则。必须同时给 target(日志路径)。
timeout_ms: 总超时(默认 20000)。
interval_ms: 轮询间隔(默认 500)。别设太小 —— 徒增开销。
min_count: instances 用的实例数下限(默认 1)。
Returns: {ok, verdict, kind, polls, elapsed_ms, evidence, last, hint?}
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| name | No | ||
| field | No | ||
| image | No | ||
| equals | No | ||
| region | No | ||
| target | No | ||
| window | No | ||
| pattern | No | ||
| min_count | No | ||
| namespace | No | ||
| timeout_ms | No | ||
| interval_ms | No |