babalae/better-genshin-impact · error · Exception
战斗策略文件不存在
Error message
战斗策略文件不存在
What it means
Thrown by BuildAutoFightStrategyPath after AutoFightParam.ResolveStrategyPath(config.StrategyName) returns a path that is neither an existing file nor an existing directory. The combat strategy referenced by the config is not on disk.
Source
Thrown at BetterGenshinImpact/GameTask/AutoLeyLineOutcrop/AutoLeyLineOutcropTask.cs:1310
{
fightConfig.CopyFromAutoFightConfig(globalAutoFightConfig);
}
if (fightConfig.Timeout <= 0)
{
fightConfig.Timeout = _taskParam.Timeout > 0 ? _taskParam.Timeout : Math.Max(globalAutoFightConfig.Timeout, 1);
}
_taskParam.Timeout = fightConfig.Timeout;
return fightConfig.ToAutoFightConfig();
}
private static string BuildAutoFightStrategyPath(AutoFightConfig config)
{
var (path, _) = AutoFightParam.ResolveStrategyPath(config.StrategyName);
if (!File.Exists(path) && !Directory.Exists(path))
{
throw new Exception("战斗策略文件不存在");
}
return path;
}
private async Task<bool> RecognizeTextInRegion(int timeoutMs)
{
var start = DateTime.UtcNow;
var noTextCount = 0;
var fightTextDetectedAt = DateTime.MinValue;
var lastSeekAssistAt = DateTime.MinValue;
var seekEnemyEnabled = _taskParam.FightConfig.SeekEnemyEnabled;
var seekEnemyInterval = TimeSpan.FromSeconds(Math.Clamp(_taskParam.FightConfig.SeekEnemyIntervalSeconds, 1, 60));
var seekEnemyRotaryFactor = Math.Clamp(_taskParam.FightConfig.SeekEnemyRotaryFactor, 1, 13);
var successKeywords = new[] { "挑战达成", "战斗胜利", "挑战成功" };
var failureKeywords = new[] { "挑战失败" };
while ((DateTime.UtcNow - start).TotalMilliseconds < timeoutMs)View on GitHub (pinned to a7cb36712d)
Solutions
- Confirm the strategy file exists at the resolved path (print ResolveStrategyPath output).
- Reinstall/restore the default combat strategy files under User\AutoFight.
- Correct StrategyName in the config to a strategy that exists.
- Switch to '根据队伍自动选择' to use the directory-based auto selection.
Defensive patterns
Strategy: validation
Validate before calling
var (path, _) = AutoFightParam.ResolveStrategyPath(config.StrategyName);
if (!File.Exists(path) && !Directory.Exists(path))
{
throw new FileNotFoundException($"战斗策略文件不存在: {path}", path);
} Type guard
bool StrategyExists(string strategyName)
{
var (p, _) = AutoFightParam.ResolveStrategyPath(strategyName);
return File.Exists(p) || Directory.Exists(p);
} Prevention
- Validate strategy paths at config-load time, not at fight time.
- Ship default strategies under User\\AutoFight and verify them in CI.
- Prefer '根据队伍自动选择' when a named strategy is missing.
When it happens
Trigger: A fight config with a non-empty StrategyName is resolved to a path; File.Exists(path) and Directory.Exists(path) are both false → throw.
Common situations: The named strategy was deleted/renamed; a fresh install is missing the default strategy files under User\AutoFight; StrategyName points to a path that was never created.
Related errors
AI-assisted analysis of babalae/better-genshin-impact@a7cb36712d (2026-08-13).
Data as JSON: /api/errors/87e779dc84157849.
Report an issue: GitHub.