{"record":{"id":"3ed18fabfa5e7f8d","repo":"babalae/better-genshin-impact","slug":"5","errorCode":null,"errorMessage":"识别队伍角色失败（已重试 5 次）","messagePattern":"识别队伍角色失败（已重试 5 次）","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"BetterGenshinImpact/GameTask/AutoBoss/AutoBossTask.cs","lineNumber":871,"sourceCode":"    private CombatScenes GetCombatScenesWithRetry()\n    {\n        const int maxRetries = 5;\n        for (var attempt = 1; attempt <= maxRetries; attempt++)\n        {\n            _ct.ThrowIfCancellationRequested();\n            var combatScenes = new CombatScenes().InitializeTeam(CaptureToRectArea());\n            if (combatScenes.CheckTeamInitialized())\n            {\n                return combatScenes;\n            }\n\n            if (attempt < maxRetries)\n            {\n                Sleep(1000, _ct);\n            }\n        }\n\n        throw new Exception(\"识别队伍角色失败（已重试 5 次）\");\n    }\n\n    /// <summary>\n    /// 根据当前队伍匹配战斗脚本，并切换到脚本中的首个角色。\n    /// </summary>\n    /// <param name=\"combatScenes\">已初始化的战斗场景。</param>\n    /// <returns>匹配到的战斗指令列表。</returns>\n    /// <exception cref=\"Exception\">没有可用战斗脚本时抛出。</exception>\n    private List<CombatCommand> FindCombatScriptAndSwitchAvatar(CombatScenes combatScenes)\n    {\n        var combatCommands = _combatScriptBag.FindCombatScript(combatScenes.GetAvatars());\n        if (combatCommands.Count == 0)\n        {\n            throw new Exception(\"没有可用战斗脚本\");\n        }\n\n        var avatar = combatScenes.SelectAvatar(combatCommands[0].Name);\n        avatar?.SwitchWithoutCts();","sourceCodeStart":853,"sourceCodeEnd":889,"githubUrl":"https://github.com/babalae/better-genshin-impact/blob/a7cb36712dcb409be610257d877fcea3597e9d6b/BetterGenshinImpact/GameTask/AutoBoss/AutoBossTask.cs#L853-L889","documentation":"初始化战斗队伍时循环最多重试 maxRetries（5）次，每次 new CombatScenes().InitializeTeam 后用 CheckTeamInitialized 判断。5 次仍未识别到队伍角色即抛普通 Exception，表示无法进入战斗脚本执行阶段。","triggerScenarios":"游戏未处于可识别角色的界面（如仍在过场、传送中、UI 遮挡）；角色头像/血条被特效遮挡；分辨率/缩放使角色识别模板失配；CombatScenes 识别逻辑对该队伍配置不识别。","commonSituations":"Boss 路线执行后未正确进入战斗场景；角色站位异常导致头像 OCR 失败；游戏版本更新后角色识别资源过期；多角色同名或新角色未录入。","solutions":["确认进入战斗前已稳定在战斗界面，增加路线结束到识别队伍之间的等待。","更新/重新生成角色识别资源（头像模板）。","检查日志中 CombatScenes 的识别细节，定位是哪个角色识别失败。","提高 maxRetries 或在重试间加入返回主界面/重新触发战斗的恢复动作。"],"exampleFix":"// before\nSleep(1000, _ct);\n...\nthrow new Exception(\"识别队伍角色失败（已重试 5 次）\");\n\n// after\nfor (var attempt = 1; attempt <= maxRetries; attempt++)\n{\n    var combatScenes = new CombatScenes().InitializeTeam(CaptureToRectArea());\n    if (combatScenes.CheckTeamInitialized()) return combatScenes;\n    _logger.LogWarning(\"{Name}：第 {N}/{Max} 次队伍识别失败\", Name, attempt, maxRetries);\n    if (attempt < maxRetries) Sleep(1000, _ct);\n}\nthrow new Exception(\"识别队伍角色失败（已重试 5 次）\");","handlingStrategy":"retry","validationCode":"// 战斗前确认处于可识别角色的界面（无直接 API，建议加等待）\n// 已有 5 次重试；可在外层追加返回主界面后再试","typeGuard":null,"tryCatchPattern":"try { return await GetCombatScenesWithRetry(); }\ncatch (Exception ex) when (ex.Message.Contains(\"识别队伍角色失败\")) { _logger.LogError(\"{Name}：{Msg}\", Name, ex.Message); throw; }","preventionTips":["确保路线结束后稳定进入战斗界面再识别队伍。","保持角色识别资源与游戏版本同步。","重试间加入 UI 恢复动作（如重新触发战斗）。"],"tags":["autofight","team-recognition","retry","genshin","autoboss"],"backgroundTag":null,"analyzedSha":"a7cb36712dcb409be610257d877fcea3597e9d6b","analyzedAt":"2026-08-13T16:44:57.548Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}