babalae/better-genshin-impact · error · TimeoutException

关闭补充原粹树脂提示超时

Error message

关闭补充原粹树脂提示超时

What it means

CloseResinSupplementPrompt 在 supplementRect 区域循环最多 50 次,每次检测到含 '补充'/'原粹'/'树脂' 文本就按 ESC 并等待 300ms,若 50 次(约 15s+)后仍检测到提示则抛 TimeoutException,表示补充树脂弹窗无法被 ESC 关闭。

Source

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

        var supplementRect = ScaleRect(850, 730, 250, 60);

        for (var i = 0; i < 50; i++)
        {
            _ct.ThrowIfCancellationRequested();
            var promptExists = page.Ocr(supplementRect).Any(region =>
                region.Text.Contains("补充", StringComparison.Ordinal)
                || region.Text.Contains("原粹", StringComparison.Ordinal)
                || region.Text.Contains("树脂", StringComparison.Ordinal));
            if (!promptExists)
            {
                return;
            }

            page.Keyboard.KeyPress(User32.VK.VK_ESCAPE);
            await page.Wait(300);
        }

        throw new TimeoutException("关闭补充原粹树脂提示超时");
    }

    /// <summary>
    /// 关闭领奖结果页面,等待回到主界面。
    /// </summary>
    /// <exception cref="Exception">多次尝试后仍未回到主界面时抛出。</exception>
    private async Task CloseRewardResult()
    {
        var page = new BvPage(_ct);
        var closeRect = ScaleRect(850, 960, 220, 35);

        for (var i = 0; i < 20; i++)
        {
            using var capture = CaptureToRectArea();
            if (Bv.IsInMainUi(capture))
            {
                return;
            }

View on GitHub (pinned to a7cb36712d)

Solutions

  1. 收窄 supplementRect 区域并强化文本匹配(要求连续含 '补充'+'原粹树脂' 而非单字命中)。
  2. 改用点击关闭按钮/空白区域而非仅 ESC。
  3. 确认游戏窗口处于焦点,输入模拟有效(检查 Simulation.SendInput)。
  4. 增加重试次数或等待间隔,并对每次 OCR 做日志便于定位误命中。

Example fix

// before
var promptExists = page.Ocr(supplementRect).Any(region =>
    region.Text.Contains("补充", StringComparison.Ordinal)
    || region.Text.Contains("原粹", StringComparison.Ordinal)
    || region.Text.Contains("树脂", StringComparison.Ordinal));

// after
var promptExists = page.Ocr(supplementRect).Any(region =>
    region.Text.Contains("补充原粹树脂", StringComparison.Ordinal)
    || region.Text.Contains("使用脆弱树脂", StringComparison.Ordinal)
    || region.Text.Contains("使用须臾树脂", StringComparison.Ordinal));
Defensive patterns

Strategy: retry

Try / catch

try { await CloseResinSupplementPrompt(page); }
catch (TimeoutException ex) { _logger.LogWarning("{Name}:{Msg}", Name, ex.Message); /* 可尝试点击关闭或继续后续流程 */ }

Prevention

When it happens

Trigger: ESC 未生效(输入焦点不在游戏/被其他弹窗拦截);OCR 持续误判背景文本含 '补充/原粹/树脂'(误命中导致以为未关闭);弹窗需要点击而非 ESC 关闭;游戏卡顿使按键丢失。

Common situations: 领奖后残留界面文字被 OCR 误识别为提示仍在;游戏窗口失焦;ESC 与其他模态叠加;supplementRect 区域覆盖了常驻含树脂字样的 UI。

Related errors


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