{"record":{"id":"7a734bac888c79eb","repo":"babalae/better-genshin-impact","slug":"currenttarget-name","errorCode":null,"errorMessage":"角色 {CurrentTarget.Name} 缺少武器筛选类型。","messagePattern":"角色 (.+?) 缺少武器筛选类型。","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"BetterGenshinImpact/GameTask/CharacterDevelopment/CharacterDevelopmentTask.cs","lineNumber":584,"sourceCode":"        }\n\n        _workflowState = CharacterDevelopmentState.FilterPanel;\n        return Task.FromResult(StateHandlerResult.Success);\n    }\n\n    [StateHandler(CharacterDevelopmentState.FilterPanel, RetryTimeout = 12000, RetryInterval = 300, TransitionTimeout = 5000)]\n    private Task<StateHandlerResult> HandleFilterPanel(BvPage page)\n    {\n        using var capture = CaptureToRectArea();\n        if (CharacterSelectionHelper.IsFilterApplied(capture, _assetScale))\n        {\n            CharacterSelectionHelper.ClearFilter(page, _assetScale, _logger);\n            return Task.FromResult(StateHandlerResult.Wait);\n        }\n\n        if (string.IsNullOrWhiteSpace(_pendingWeaponType))\n        {\n            throw new InvalidOperationException($\"角色 {CurrentTarget.Name} 缺少武器筛选类型。\");\n        }\n\n        _workflowState = string.IsNullOrWhiteSpace(_pendingElementType)\n            ? CharacterDevelopmentState.SelectWeaponFilter\n            : CharacterDevelopmentState.SelectElementFilter;\n        return Task.FromResult(StateHandlerResult.Success);\n    }\n\n    [StateHandler(CharacterDevelopmentState.SelectElementFilter, RetryTimeout = 12000, RetryInterval = 300, TransitionTimeout = 3000)]\n    private Task<StateHandlerResult> HandleSelectElementFilter(BvPage page)\n    {\n        if (string.IsNullOrWhiteSpace(_pendingElementType))\n        {\n            _workflowState = CharacterDevelopmentState.SelectWeaponFilter;\n            return Task.FromResult(StateHandlerResult.Success);\n        }\n\n        using var capture = CaptureToRectArea();","sourceCodeStart":566,"sourceCodeEnd":602,"githubUrl":"https://github.com/babalae/better-genshin-impact/blob/a7cb36712dcb409be610257d877fcea3597e9d6b/BetterGenshinImpact/GameTask/CharacterDevelopment/CharacterDevelopmentTask.cs#L566-L602","documentation":"In the `FilterPanel` state handler, the task needs a weapon-type filter string to apply. `_pendingWeaponType` is derived in `PrepareCharacter` via `GetFilterTypes`, which falls back from the target's forced weapon type to `recognizer.GetWeaponType(...)`. If that yields null/whitespace (character absent from the avatar prototype table), applying the weapon filter is impossible and the handler throws `InvalidOperationException`.","triggerScenarios":"A character name whose standard form is not in the avatar prototype table (so `GetWeaponType` returns null/empty), combined with no element filter being pending; custom/奇偶 characters without a forced weapon type; a stale or incomplete avatar map after a game version update.","commonSituations":"Newly released character not yet added to the prototype table; misspelled/aliased name that resolves to an unknown avatar; modded/custom display-name character.","solutions":["Update the avatar prototype table/config so the character resolves to a known weapon type.","Provide the character under a name that maps to a configured avatar (use the configured alias).","For custom display-name characters, supply a `CharacterSelectionTarget` with `ForcedWeaponType` set so the fallback is unnecessary."],"exampleFix":"// before: unknown character → GetWeaponType returns null\nnew CharacterDevelopmentStateMachineTask([\"新角色未入表\"], cats);\n\n// after: force the weapon type via a custom target, or add the avatar mapping","handlingStrategy":"validation","validationCode":"var (_, weapon) = CharacterSelectionHelper.GetFilterTypes(target, recognizer);\nif (string.IsNullOrWhiteSpace(weapon))\n    throw new InvalidOperationException($\"角色 {target.Name} 无可用武器筛选类型，请更新头像原型表。\");","typeGuard":null,"tryCatchPattern":"try { await task.Start(ct); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"缺少武器筛选类型\"))\n{ /* log and prompt user to update avatar prototype table / use a known name */ }","preventionTips":["Keep the avatar prototype table updated for newly released characters.","Use configured/standard avatar names or aliases so GetWeaponType resolves.","For custom display-name characters, supply ForcedWeaponType on the target."],"tags":["state-machine","filter","weapon-type","avatar-table","character-development"],"backgroundTag":null,"analyzedSha":"a7cb36712dcb409be610257d877fcea3597e9d6b","analyzedAt":"2026-08-13T16:44:57.548Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}