{"record":{"id":"61e6c9e062f946aa","repo":"babalae/better-genshin-impact","slug":"error-61e6c9","errorCode":null,"errorMessage":"超时未找到征讨之花领奖界面","messagePattern":"超时未找到征讨之花领奖界面","errorType":"exception","errorClass":"TimeoutException","httpStatus":null,"severity":"error","filePath":"BetterGenshinImpact/GameTask/AutoBoss/AutoBossTask.cs","lineNumber":1192,"sourceCode":"        using var navigationCts = CancellationTokenSource.CreateLinkedTokenSource(_ct);\n        var page = new BvPage(navigationCts.Token);\n\n        _logger.LogInformation(\"{Name}：开始寻找征讨之花\", Name);\n\n        var navigationStopwatch = Stopwatch.StartNew();\n        var navigationTimeout = TimeSpan.FromSeconds(20);\n        var adjustCameraTask = AdjustRewardCameraTask(page, navigationCts);\n        var moveToRewardTask = MoveToRewardTask(page, navigationCts);\n        var monitorRewardPromptTask = MonitorRewardPromptTask(page, navigationCts);\n\n        try\n        {\n            while (true)\n            {\n                _ct.ThrowIfCancellationRequested();\n                if (navigationStopwatch.Elapsed >= navigationTimeout)\n                {\n                    throw new TimeoutException(\"超时未找到征讨之花领奖界面\");\n                }\n\n                var completedTask = await Task.WhenAny(Task.Delay(500, _ct),adjustCameraTask,moveToRewardTask,monitorRewardPromptTask);\n\n                if (completedTask == monitorRewardPromptTask)\n                {\n                    await monitorRewardPromptTask;\n                    _logger.LogInformation(\"{Name}：已进入征讨之花领奖界面\", Name);\n                    return;\n                }\n\n                if (completedTask == adjustCameraTask || completedTask == moveToRewardTask)\n                {\n                    navigationCts.Cancel();\n                    await completedTask;\n                    throw new TimeoutException(\"前往征讨之花任务异常结束\");\n                }\n            }","sourceCodeStart":1174,"sourceCodeEnd":1210,"githubUrl":"https://github.com/babalae/better-genshin-impact/blob/a7cb36712dcb409be610257d877fcea3597e9d6b/BetterGenshinImpact/GameTask/AutoBoss/AutoBossTask.cs#L1174-L1210","documentation":"NavigateToReward 以 20 秒为上限并行跑 AdjustRewardCamera、MoveToReward、MonitorRewardPrompt 三个任务，主循环每 500ms 检查 navigationStopwatch，超 20s 仍未进入征讨之花领奖界面即抛 TimeoutException。","triggerScenarios":"战斗结束后角色位置离征讨之花过远或卡地形；镜头调整/移动任务未能对准花；'接触征讨之花'/'使用原粹树脂' 提示 OCR 一直未命中；游戏卡顿/掉帧使按键未生效；角色死亡/无敌帧导致无法交互。","commonSituations":"Boss 路线结束站位不佳；网络/帧率延迟；OCR 区域（ScaleRect 1210,300 / 850,740）漂移；游戏版本 UI 变化导致提示文本不匹配。","solutions":["适当增大 navigationTimeout（如 30s）以容忍慢机器/远距离。","改进 MoveToReward/AdjustRewardCamera 的定位逻辑，确保靠近花。","校准 MonitorRewardPanelPrompt/HasRewardInteractionPrompt 的 OCR 区域与文本。","确认战斗确实结束且角色存活可移动。"],"exampleFix":"// before\nvar navigationTimeout = TimeSpan.FromSeconds(20);\n...\nif (navigationStopwatch.Elapsed >= navigationTimeout)\n{\n    throw new TimeoutException(\"超时未找到征讨之花领奖界面\");\n}\n\n// after\nvar navigationTimeout = TimeSpan.FromSeconds(30);\nif (navigationStopwatch.Elapsed >= navigationTimeout)\n{\n    throw new TimeoutException($\"超时未找到征讨之花领奖界面（已等待 {navigationStopwatch.Elapsed.TotalSeconds:F0}s）\");\n}","handlingStrategy":"retry","validationCode":"// 无法在调用前预判；可配置 navigationTimeout\nvar navigationTimeout = TimeSpan.FromSeconds(30); // 容忍慢机器","typeGuard":null,"tryCatchPattern":"try { await NavigateToReward(); }\ncatch (TimeoutException ex) { _logger.LogWarning(\"{Name}：{Msg}\", Name, ex.Message); /* 可重试一次或回退到兜底领奖逻辑 */ }","preventionTips":["根据机器性能调大 navigationTimeout。","确保战斗结束角色存活且站位合理。","校准领奖 OCR 区域与提示文本。"],"tags":["navigation","timeout","ocr","reward","genshin","autoboss"],"backgroundTag":null,"analyzedSha":"a7cb36712dcb409be610257d877fcea3597e9d6b","analyzedAt":"2026-08-13T16:44:57.548Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}