babalae/better-genshin-impact · error · NotSupportedException

foodEffectType参数需要调度器配置,请在调度器下使用

Error message

foodEffectType参数需要调度器配置,请在调度器下使用

What it means

NotSupportedException thrown at line 231 when foodEffectType is set but `this._config` is not a PathingPartyConfig. foodEffectType needs to resolve a default dish name from PathingPartyConfig.AutoEatConfig, which only exists when the Dispatcher was constructed for party/pathing scheduled execution. A standalone Dispatcher (constructed with a plain object config) has no party defaults, so the feature is unavailable.

Solutions

  1. For standalone AutoEat, use foodName directly instead of foodEffectType.
  2. To use foodEffectType, ensure the Dispatcher is built with a PathingPartyConfig (run under the scheduler).
  3. Pre-resolve the dish name yourself and pass it via foodName.

Example fix

// before (JS, standalone dispatcher)
dispatcher.RunTask(new SoloTask('AutoEat', { foodEffectType: 1 })); // throws

// after (JS, standalone) — name the dish directly
dispatcher.RunTask(new SoloTask('AutoEat', { foodName: 'Sweet Madame' }));
Defensive patterns

Strategy: validation

Validate before calling

// JS side — use foodName for standalone, foodEffectType only under scheduler
if (!isUnderScheduler && foodEffectType != null) {
  throw new Error('foodEffectType requires a PathingPartyConfig scheduler; use foodName instead.');
}

Type guard

// C# — check the dispatcher config type
bool isParty = dispatcher.GetConfig() is PathingPartyConfig;

Prevention

When it happens

Trigger: Script calls `dispatcher.RunTask(new SoloTask('AutoEat', { foodEffectType: 1 }))` on a Dispatcher whose config is not PathingPartyConfig — i.e. not running inside the scheduler/party pipeline.

Common situations: Using AutoEat with foodEffectType in a standalone script instead of inside a party config. The Dispatcher was constructed with a non-PathingPartyConfig object by mistake.

Related errors


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

Appendix: source

Thrown at BetterGenshinImpact/Core/Script/Dependence/Dispatcher.cs:231

                return null;
            case "AutoEat":
                {
                    string? foodName = soloTask.Config == null ? null : ScriptObjectConverter.GetValue((ScriptObject)soloTask.Config, "foodName", (string?)null);
                    FoodEffectType? foodEffectType = soloTask.Config == null ? null : (FoodEffectType?)ScriptObjectConverter.GetValue((ScriptObject)soloTask.Config, "foodEffectType", (int?)null);

                    if (foodName != null && foodEffectType != null)
                    {
                        throw new NotSupportedException("不能同时指定foodName和foodEffectType");
                    }

                    if (foodName == null)
                    {
                        if (foodEffectType != null)
                        {
                            PathingPartyConfig? pathingPartyConfig = _config as PathingPartyConfig;
                            if (pathingPartyConfig == null)
                            {
                                throw new NotSupportedException("foodEffectType参数需要调度器配置,请在调度器下使用");
                            }
                            else
                            {
                                switch (foodEffectType)
                                {
                                    case FoodEffectType.ATKBoostingDish:
                                        foodName = pathingPartyConfig.AutoEatConfig.DefaultAtkBoostingDishName;
                                        if (foodName == null)
                                        {
                                            _logger.LogInformation("缺少{Text}配置,跳过吃Buff", "默认的攻击类料理");
                                            return null;
                                        }
                                        break;
                                    case FoodEffectType.AdventurersDish:
                                        foodName = pathingPartyConfig.AutoEatConfig.DefaultAdventurersDishName;
                                        if (foodName == null)
                                        {
                                            _logger.LogInformation("缺少{Text}配置,跳过吃Buff", "默认的冒险类料理");

View on GitHub (pinned to a7cb36712d)