babalae/better-genshin-impact · error · ArgumentException
maxNumToCheck不能为空
Error message
maxNumToCheck不能为空
What it means
Thrown at the top of Salvage5Star when this.maxNumToCheck is null. maxNumToCheck caps how many artifacts the loop inspects; a null means the param was not configured. Like 147, Start should gate Salvage5Star behind a JS-presence check, and reaching this throw implies a misconfigured AutoArtifactSalvageTaskParam.
Source
Thrown at BetterGenshinImpact/GameTask/AutoArtifactSalvage/AutoArtifactSalvageTask.cs:378
// 逐一点选查看面板筛选
await Salvage5Star();
logger.LogInformation("筛选完毕,请复查并手动分解");
}
else
{
input.Keyboard.KeyPress(User32.VK.VK_ESCAPE);
if (returnToMainUi)
{
await new ReturnMainUiTask().Start(ct);
}
}
}
private async Task Salvage5Star()
{
string javaScript = this.javaScript ?? throw new ArgumentException($"{nameof(this.javaScript)}不能为空");
int count = this.maxNumToCheck ?? throw new ArgumentException($"{nameof(this.maxNumToCheck)}不能为空");
RecognitionFailurePolicy recognitionFailurePolicy = this.recognitionFailurePolicy ?? throw new ArgumentException($"{nameof(this.recognitionFailurePolicy)}不能为空");
GridParams gridParams = GridParams.Templates[GridScreenName.ArtifactSalvage];
GridScreen gridScreen = new GridScreen(gridParams, this.logger, this.ct); // 圣遗物分解Grid有4行9列
gridScreen.OnAfterTurnToNewPage += GridScreen.DrawItemsAfterTurnToNewPage;
gridScreen.OnBeforeScroll += () => VisionContext.Instance().DrawContent.ClearAll();
try
{
await foreach ((ImageRegion pageRegion, Rect itemRect) in gridScreen)
{
using ImageRegion itemRegion = pageRegion.DeriveCrop(itemRect);
Rect gridRect = itemRegion.ToRect();
if (GetArtifactStatus(itemRegion.SrcMat) == ArtifactStatus.None)
{
itemRegion.Click();
await Delay(300, ct);
using var ra1 = CaptureToRectArea();View on GitHub (pinned to a7cb36712d)
Solutions
- Set AutoArtifactSalvageTaskParam.MaxNumToCheck to a positive int when configuring JS salvage.
- Default MaxNumToCheck in the param constructor or property initializer.
- Validate required fields together (JavaScript, MaxNumToCheck, RecognitionFailurePolicy) in the task constructor.
- Surface a single configuration error to the user before Start runs.
Defensive patterns
Strategy: validation
Validate before calling
if (param.MaxNumToCheck is null or <= 0)
throw new ArgumentException("maxNumToCheck 必须为正整数", nameof(param.MaxNumToCheck)); Prevention
- Default MaxNumToCheck in AutoArtifactSalvageTaskParam.
- Validate alongside JavaScript and RecognitionFailurePolicy together.
- Reject the configuration early rather than mid-task.
When it happens
Trigger: AutoArtifactSalvageTaskParam.MaxNumToCheck left null while JavaScript is set; param deserialization missing the field; Salvage5Star invoked without populating maxNumToCheck.
Common situations: User supplied a JS filter but no 'max to check' value; schema change dropped the field; default value not applied during param construction.
Related errors
AI-assisted analysis of babalae/better-genshin-impact@a7cb36712d (2026-08-13).
Data as JSON: /api/errors/4bd04925a4ace81f.
Report an issue: GitHub.