{"record":{"id":"7f94658af155340d","repo":"babalae/better-genshin-impact","slug":"error-7f9465","errorCode":null,"errorMessage":"自动幽境危战任务参数不能为空","messagePattern":"自动幽境危战任务参数不能为空","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"BetterGenshinImpact/Core/Script/Dependence/Dispatcher.cs","lineNumber":432,"sourceCode":"            throw new ArgumentNullException(nameof(param), \"自动地脉花任务参数不能为空\");  \n        }  \n  \n        CancellationToken cancellationToken = customCt ?? CancellationContext.Instance.Cts.Token;  \n        await new AutoLeyLineOutcropTask(param).Start(cancellationToken);  \n    }\n\n\n    /// <summary>  \n    /// 运行自动幽境危战任务\n    /// </summary>  \n    /// <param name=\"param\">自动幽境危战任务参数</param>  \n    /// <param name=\"customCt\">自定义取消令牌</param>  \n    /// <returns></returns>  \n    public async Task RunAutoStygianOnslaughtTask(AutoStygianOnslaughtParam param, CancellationToken? customCt = null)\n    {\n        if (param == null)\n        {\n            throw new ArgumentNullException(nameof(param), \"自动幽境危战任务参数不能为空\");\n        }\n\n        CancellationToken cancellationToken = customCt ?? CancellationContext.Instance.Cts.Token;\n        await new AutoStygianOnslaughtTask(param).Start(cancellationToken);\n    }\n    \n    /// <summary>\n    /// 运行背包物品计数任务。\n    /// </summary>\n    /// <param name=\"param\">背包物品计数参数。</param>\n    /// <param name=\"customCt\">自定义取消令牌。</param>\n    /// <returns>单物品返回数量；多物品返回名称到数量的脚本对象。</returns>\n    public async Task<object?> RunCountInventoryItemTask(CountInventoryItemParam param, CancellationToken? customCt = null)\n    {\n        if (param == null)\n        {\n            throw new ArgumentNullException(nameof(param), \"背包物品计数参数不能为空\");\n        }","sourceCodeStart":414,"sourceCodeEnd":450,"githubUrl":"https://github.com/babalae/better-genshin-impact/blob/a7cb36712dcb409be610257d877fcea3597e9d6b/BetterGenshinImpact/Core/Script/Dependence/Dispatcher.cs#L414-L450","documentation":"ArgumentNullException thrown by RunAutoStygianOnslaughtTask at line 432 when the AutoStygianOnslaughtParam argument is null. This task automates Stygian Onslaught (幽境危战) encounters and requires the param for encounter/strategy settings.","triggerScenarios":"JS calls `dispatcher.RunAutoStygianOnslaughtTask(null)` or passes an undefined variable.","commonSituations":"Author forgot to construct AutoStygianOnslaughtParam. Param built conditionally and the branch did not run.","solutions":["Construct AutoStygianOnslaughtParam with the required settings before calling.","Null-check in JS before invoking."],"exampleFix":"// before (JS)\ndispatcher.RunAutoStygianOnslaughtTask(param); // null -> throws\n\n// after (JS)\nconst sParam = new AutoStygianOnslaughtParam(/* settings */);\ndispatcher.RunAutoStygianOnslaughtTask(sParam);","handlingStrategy":"validation","validationCode":"// JS side\nif (!param) throw new Error('AutoStygianOnslaughtParam is required');\ndispatcher.RunAutoStygianOnslaughtTask(param);","typeGuard":"// JS\nfunction isAutoStygianParam(v) { return v != null && typeof v === 'object'; }","tryCatchPattern":null,"preventionTips":["Construct AutoStygianOnslaughtParam before calling.","Null-check params in JS wrappers."],"tags":["script","argument-null","auto-stygian","dispatcher"],"backgroundTag":null,"analyzedSha":"a7cb36712dcb409be610257d877fcea3597e9d6b","analyzedAt":"2026-08-13T16:44:57.548Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}