babalae/better-genshin-impact · error · TimeoutException

超时未找到征讨之花领奖界面

Error message

超时未找到征讨之花领奖界面

What it means

NavigateToReward 以 20 秒为上限并行跑 AdjustRewardCamera、MoveToReward、MonitorRewardPrompt 三个任务,主循环每 500ms 检查 navigationStopwatch,超 20s 仍未进入征讨之花领奖界面即抛 TimeoutException。

Source

Thrown at BetterGenshinImpact/GameTask/AutoBoss/AutoBossTask.cs:1192

        using var navigationCts = CancellationTokenSource.CreateLinkedTokenSource(_ct);
        var page = new BvPage(navigationCts.Token);

        _logger.LogInformation("{Name}:开始寻找征讨之花", Name);

        var navigationStopwatch = Stopwatch.StartNew();
        var navigationTimeout = TimeSpan.FromSeconds(20);
        var adjustCameraTask = AdjustRewardCameraTask(page, navigationCts);
        var moveToRewardTask = MoveToRewardTask(page, navigationCts);
        var monitorRewardPromptTask = MonitorRewardPromptTask(page, navigationCts);

        try
        {
            while (true)
            {
                _ct.ThrowIfCancellationRequested();
                if (navigationStopwatch.Elapsed >= navigationTimeout)
                {
                    throw new TimeoutException("超时未找到征讨之花领奖界面");
                }

                var completedTask = await Task.WhenAny(Task.Delay(500, _ct),adjustCameraTask,moveToRewardTask,monitorRewardPromptTask);

                if (completedTask == monitorRewardPromptTask)
                {
                    await monitorRewardPromptTask;
                    _logger.LogInformation("{Name}:已进入征讨之花领奖界面", Name);
                    return;
                }

                if (completedTask == adjustCameraTask || completedTask == moveToRewardTask)
                {
                    navigationCts.Cancel();
                    await completedTask;
                    throw new TimeoutException("前往征讨之花任务异常结束");
                }
            }

View on GitHub (pinned to a7cb36712d)

Solutions

  1. 适当增大 navigationTimeout(如 30s)以容忍慢机器/远距离。
  2. 改进 MoveToReward/AdjustRewardCamera 的定位逻辑,确保靠近花。
  3. 校准 MonitorRewardPanelPrompt/HasRewardInteractionPrompt 的 OCR 区域与文本。
  4. 确认战斗确实结束且角色存活可移动。

Example fix

// before
var navigationTimeout = TimeSpan.FromSeconds(20);
...
if (navigationStopwatch.Elapsed >= navigationTimeout)
{
    throw new TimeoutException("超时未找到征讨之花领奖界面");
}

// after
var navigationTimeout = TimeSpan.FromSeconds(30);
if (navigationStopwatch.Elapsed >= navigationTimeout)
{
    throw new TimeoutException($"超时未找到征讨之花领奖界面(已等待 {navigationStopwatch.Elapsed.TotalSeconds:F0}s)");
}
Defensive patterns

Strategy: retry

Validate before calling

// 无法在调用前预判;可配置 navigationTimeout
var navigationTimeout = TimeSpan.FromSeconds(30); // 容忍慢机器

Try / catch

try { await NavigateToReward(); }
catch (TimeoutException ex) { _logger.LogWarning("{Name}:{Msg}", Name, ex.Message); /* 可重试一次或回退到兜底领奖逻辑 */ }

Prevention

When it happens

Trigger: 战斗结束后角色位置离征讨之花过远或卡地形;镜头调整/移动任务未能对准花;'接触征讨之花'/'使用原粹树脂' 提示 OCR 一直未命中;游戏卡顿/掉帧使按键未生效;角色死亡/无敌帧导致无法交互。

Common situations: Boss 路线结束站位不佳;网络/帧率延迟;OCR 区域(ScaleRect 1210,300 / 850,740)漂移;游戏版本 UI 变化导致提示文本不匹配。

Related errors


AI-assisted analysis of babalae/better-genshin-impact@a7cb36712d (2026-08-13). Data as JSON: /api/errors/61e6c9e062f946aa. Report an issue: GitHub.