Files
better-genshin-impact/BetterGenshinImpact/GameTask/AutoPathing/Handler/AutoFightHandler.cs
2025-03-08 20:56:36 +08:00

75 lines
2.5 KiB
C#

using BetterGenshinImpact.Core.Config;
using BetterGenshinImpact.GameTask.AutoFight;
using BetterGenshinImpact.GameTask.Common;
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using BetterGenshinImpact.GameTask.AutoPathing.Model;
using Microsoft.Extensions.Logging;
namespace BetterGenshinImpact.GameTask.AutoPathing.Handler;
internal class AutoFightHandler : IActionHandler
{
public async Task RunAsyncByScript(CancellationToken ct, WaypointForTrack? waypointForTrack = null, object? config = null)
{
if (!(config != null && config is PathingPartyConfig patyConfig && patyConfig is {AutoFightEnabled:true,JsScriptUseEnabled:true,SoloTaskUseFightEnabled:true} ))
{
config = null;
}
await StartFight(ct, config);
}
public async Task RunAsync(CancellationToken ct, WaypointForTrack? waypointForTrack = null, object? config = null)
{
await StartFight(ct, config);
}
private async Task StartFight(CancellationToken ct, object? config = null)
{
TaskControl.Logger.LogInformation("执行 {Text}", "自动战斗");
// 爷们要战斗
AutoFightParam taskParams = null;
if (config != null && config is PathingPartyConfig patyConfig && patyConfig.AutoFightEnabled)
{
//替换配置为地图追踪
taskParams = GetFightAutoFightParam(patyConfig.AutoFightConfig);
}
else
{
taskParams = new AutoFightParam(GetFightStrategy(), TaskContext.Instance().Config.AutoFightConfig);
}
var fightSoloTask = new AutoFightTask(taskParams);
await fightSoloTask.Start(ct);
}
private AutoFightParam GetFightAutoFightParam(AutoFightConfig? config)
{
AutoFightParam autoFightParam = new AutoFightParam(GetFightStrategy(config), config);
return autoFightParam;
}
private string GetFightStrategy(AutoFightConfig config)
{
var path = Global.Absolute(@"User\AutoFight\" + config.StrategyName + ".txt");
if ("根据队伍自动选择".Equals(config.StrategyName))
{
path = Global.Absolute(@"User\AutoFight\");
}
if (!File.Exists(path) && !Directory.Exists(path))
{
throw new Exception("战斗策略文件不存在");
}
return path;
}
private string GetFightStrategy()
{
return GetFightStrategy(TaskContext.Instance().Config.AutoFightConfig);
}
}