babalae/better-genshin-impact · error · Exception

领取奖励失败

Error message

领取奖励失败

What it means

Thrown by AttemptReward when its recursive retry counter reaches maxRetry (3). Each attempt sends the interact key, waits, then calls VerifyRewardPage; when verification keeps failing it returns to the main UI, re-navigates, and retries — all three attempts failed to confirm the reward page.

Source

Thrown at BetterGenshinImpact/GameTask/AutoLeyLineOutcrop/AutoLeyLineOutcropTask.cs:1680

            return false;
        }

        _switchPartyTask ??= new SwitchPartyTask();
        var success = await _switchPartyTask.Start(partyName, _ct);
        if (success)
        {
            RunnerContext.Instance.PartyName = partyName;
        }

        return success;
    }

    private async Task<bool> AttemptReward(int retryCount = 0)
    {
        const int maxRetry = 3;
        if (retryCount >= maxRetry)
        {
            throw new Exception("领取奖励失败");
        }

        Simulation.SendInput.SimulateAction(GIActions.PickUpOrInteract);
        await Delay(800, _ct);

        if (!await VerifyRewardPage())
        {
            await _returnMainUiTask.Start(_ct);
            await AutoNavigateToReward();
            return await AttemptReward(retryCount + 1);
        }

        if (!await TryUseRewardResin())
        {
            await EnsureExitRewardPage();
            return false;
        }

View on GitHub (pinned to a7cb36712d)

Solutions

  1. Confirm the reward/claim UI template used by VerifyRewardPage still matches the current game version.
  2. Ensure input injection is working (focus on the game window, no input-blocking overlays).
  3. Increase the 800ms delay before VerifyRewardPage if the UI animates slowly.
  4. Re-run the task when the game is responsive.
Defensive patterns

Strategy: retry

Try / catch

try { await AttemptReward(); }
catch (Exception ex) when (ex.Message == "领取奖励失败")
{
    _logger.LogWarning("领取奖励内部重试耗尽,重新导航后再试");
    await _returnMainUiTask.Start(_ct);
    await AutoNavigateToReward();
    await AttemptReward();
}

Prevention

When it happens

Trigger: AttemptReward(retryCount) with retryCount >= 3 → throw. The recursion increments retryCount whenever VerifyRewardPage returns false.

Common situations: The interact key press isn't registering (input desync); the reward page opens but VerifyRewardPage's template doesn't match; UI lag/animation causing the verify to run too early.

Related errors


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