diff --git a/BetterGenshinImpact/Core/Script/Dependence/Dispatcher.cs b/BetterGenshinImpact/Core/Script/Dependence/Dispatcher.cs
index 408db45c..5c8f1070 100644
--- a/BetterGenshinImpact/Core/Script/Dependence/Dispatcher.cs
+++ b/BetterGenshinImpact/Core/Script/Dependence/Dispatcher.cs
@@ -20,6 +20,7 @@ using System.Threading;
using System.Threading.Tasks;
using BetterGenshinImpact.GameTask.AutoFight;
using BetterGenshinImpact.GameTask.AutoLeyLineOutcrop;
+using BetterGenshinImpact.GameTask.AutoStygianOnslaught;
namespace BetterGenshinImpact.Core.Script.Dependence;
@@ -357,4 +358,22 @@ public class Dispatcher
CancellationToken cancellationToken = customCt ?? CancellationContext.Instance.Cts.Token;
await new AutoLeyLineOutcropTask(param).Start(cancellationToken);
}
+
+
+ ///
+ /// 运行自动幽境危战任务
+ ///
+ /// 自动幽境危战任务参数
+ /// 自定义取消令牌
+ ///
+ public async Task RunAutoStygianOnslaughtTask(AutoStygianOnslaughtParam param, CancellationToken? customCt = null)
+ {
+ if (param == null)
+ {
+ throw new ArgumentNullException(nameof(param), "自动幽境危战任务参数不能为空");
+ }
+
+ CancellationToken cancellationToken = customCt ?? CancellationContext.Instance.Cts.Token;
+ await new AutoStygianOnslaughtTask(param).Start(cancellationToken);
+ }
}
diff --git a/BetterGenshinImpact/Core/Script/EngineExtend.cs b/BetterGenshinImpact/Core/Script/EngineExtend.cs
index 982b70e2..176f6737 100644
--- a/BetterGenshinImpact/Core/Script/EngineExtend.cs
+++ b/BetterGenshinImpact/Core/Script/EngineExtend.cs
@@ -15,6 +15,7 @@ using BetterGenshinImpact.GameTask.AutoFight;
using BetterGenshinImpact.GameTask.AutoFight.Model;
using BetterGenshinImpact.GameTask.AutoLeyLineOutcrop;
using BetterGenshinImpact.GameTask.AutoSkip;
+using BetterGenshinImpact.GameTask.AutoStygianOnslaught;
namespace BetterGenshinImpact.Core.Script;
@@ -75,6 +76,7 @@ public class EngineExtend
engine.AddHostType("AutoDomainParam", typeof(AutoDomainParam));
engine.AddHostType("AutoFightParam", typeof(AutoFightParam));
engine.AddHostType("AutoLeyLineOutcropParam", typeof(AutoLeyLineOutcropParam));
+ engine.AddHostType("AutoStygianOnslaughtParam", typeof(AutoStygianOnslaughtParam));
//鼠标回调
engine.AddHostType("KeyMouseHook", typeof(KeyMouseHook));
// 添加C#的类型
diff --git a/BetterGenshinImpact/GameTask/AutoDomain/Model/ResinUseRecord.cs b/BetterGenshinImpact/GameTask/AutoDomain/Model/ResinUseRecord.cs
index 0edd13b0..b00c489a 100644
--- a/BetterGenshinImpact/GameTask/AutoDomain/Model/ResinUseRecord.cs
+++ b/BetterGenshinImpact/GameTask/AutoDomain/Model/ResinUseRecord.cs
@@ -62,7 +62,7 @@ public class ResinUseRecord
return list;
}
- public static List BuildFromDomainParam(AutoStygianOnslaughtConfig taskParam)
+ public static List BuildFromDomainParam(AutoStygianOnslaughtParam taskParam)
{
List list = [];
if (taskParam.SpecifyResinUse)
diff --git a/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtParam.cs b/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtParam.cs
new file mode 100644
index 00000000..3c54d42e
--- /dev/null
+++ b/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtParam.cs
@@ -0,0 +1,87 @@
+using System.Collections.Generic;
+using BetterGenshinImpact.Core.Config;
+using BetterGenshinImpact.GameTask.Model;
+
+namespace BetterGenshinImpact.GameTask.AutoStygianOnslaught;
+
+public class AutoStygianOnslaughtParam:BaseTaskParam
+{
+
+ public int BossNum { get; set; }
+ // 结束后是否自动分解圣遗物
+ public bool AutoArtifactSalvage { get; set; }
+
+ // 指定树脂的使用次数
+ public bool SpecifyResinUse{ get; set; }
+
+ // 自定义使用树脂优先级
+ public List ResinPriorityList{ get; set; }=["浓缩树脂","原粹树脂"];
+ // 使用原粹树脂刷取副本次数
+ public int OriginalResinUseCount { get; set; }
+
+ //使用浓缩树脂刷取副本次数
+ public int CondensedResinUseCount { get; set; }
+
+ // 使用须臾树脂刷取副本次数
+ public int TransientResinUseCount { get; set; }
+
+ // 使用脆弱树脂刷取副本次数
+ public int FragileResinUseCount { get; set; }
+ // 指定战斗队伍
+ public string FightTeamName { get; set; }
+ // 战斗脚本包路径
+ public string CombatScriptBagPath { get; set; }
+ public void SetDefault()
+ {
+ var config = TaskContext.Instance().Config.AutoStygianOnslaughtConfig;
+ SetAutoStygianOnslaughtConfig(config);
+ }
+ public void SetAutoStygianOnslaughtConfig(AutoStygianOnslaughtConfig config)
+ {
+ BossNum = config.BossNum;
+ AutoArtifactSalvage = config.AutoArtifactSalvage;
+ SpecifyResinUse = config.SpecifyResinUse;
+ ResinPriorityList = config.ResinPriorityList == null ? new List { "浓缩树脂", "原粹树脂" }: new List(config.ResinPriorityList);
+ OriginalResinUseCount = config.OriginalResinUseCount;
+ CondensedResinUseCount = config.CondensedResinUseCount;
+ TransientResinUseCount = config.TransientResinUseCount;
+ FragileResinUseCount = config.FragileResinUseCount;
+ FightTeamName = config.FightTeamName;
+ SetCombatStrategyPath(config.StrategyName);
+ }
+ public AutoStygianOnslaughtParam() : base(null, null)
+ {
+ SetDefault();
+ }
+ public AutoStygianOnslaughtParam(string combatScriptBagPath) : base(null, null)
+ {
+ SetDefault();
+ CombatScriptBagPath=combatScriptBagPath;
+ }
+ public void SetResinPriorityList(params string[] priorities)
+ {
+ ResinPriorityList.Clear();
+ ResinPriorityList.AddRange(priorities);
+ }
+
+
+ ///
+ /// 设置战斗策略路径
+ ///
+ /// 策略名称
+ public void SetCombatStrategyPath(string? strategyName = null)
+ {
+ if (string.IsNullOrEmpty(strategyName))
+ {
+ strategyName = TaskContext.Instance().Config.AutoFightConfig.StrategyName;
+ }
+
+ if (string.IsNullOrWhiteSpace(strategyName) ||"根据队伍自动选择".Equals(strategyName))
+ {
+ CombatScriptBagPath= Global.Absolute(@"User\AutoFight\");
+ return;
+ }
+
+ CombatScriptBagPath= Global.Absolute(@"User\AutoFight\" + strategyName + ".txt");
+ }
+}
\ No newline at end of file
diff --git a/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtTask.cs b/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtTask.cs
index c740de29..a8d6d1e3 100644
--- a/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtTask.cs
+++ b/BetterGenshinImpact/GameTask/AutoStygianOnslaught/AutoStygianOnslaughtTask.cs
@@ -79,12 +79,21 @@ public class AutoStygianOnslaughtTask : StateMachineBase,
///
protected override ILogger Logger => TaskControl.Logger;
- private readonly AutoStygianOnslaughtConfig _taskParam;
+ private readonly AutoStygianOnslaughtParam _taskParam;
private readonly CombatScriptBag _combatScriptBag;
private List _resinPriorityListWhenSpecifyUse;
private LowerHeadThenWalkToTask? _lowerHeadThenWalkToTask;
+ public AutoStygianOnslaughtTask(AutoStygianOnslaughtParam taskParam)
+ {
+ AutoFightAssets.DestroyInstance();
+ _taskParam = taskParam;
+ _combatScriptBag = CombatScriptParser.ReadAndParse(taskParam.CombatScriptBagPath);
+ _resinPriorityListWhenSpecifyUse = ResinUseRecord.BuildFromDomainParam(taskParam);
- public AutoStygianOnslaughtTask(AutoStygianOnslaughtConfig taskParam, string path)
+ // 注册所有状态处理器
+ RegisterAllStateHandlers();
+ }
+ public AutoStygianOnslaughtTask(AutoStygianOnslaughtParam taskParam, string path)
{
AutoFightAssets.DestroyInstance();
_taskParam = taskParam;
diff --git a/BetterGenshinImpact/Model/OneDragonTaskItem.cs b/BetterGenshinImpact/Model/OneDragonTaskItem.cs
index 2c16502e..0dd568f1 100644
--- a/BetterGenshinImpact/Model/OneDragonTaskItem.cs
+++ b/BetterGenshinImpact/Model/OneDragonTaskItem.cs
@@ -127,7 +127,9 @@ public partial class OneDragonTaskItem : ObservableObject
return;
}
- await new AutoStygianOnslaughtTask(TaskContext.Instance().Config.AutoStygianOnslaughtConfig, path).Start(CancellationContext.Instance.Cts.Token);
+ AutoStygianOnslaughtParam param = new AutoStygianOnslaughtParam();
+ param.SetAutoStygianOnslaughtConfig(TaskContext.Instance().Config.AutoStygianOnslaughtConfig);
+ await new AutoStygianOnslaughtTask(param, path).Start(CancellationContext.Instance.Cts.Token);
};
break;
case "领取每日奖励":
diff --git a/BetterGenshinImpact/ViewModel/Pages/TaskSettingsPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/TaskSettingsPageViewModel.cs
index d99fe3a8..3c6d2a8a 100644
--- a/BetterGenshinImpact/ViewModel/Pages/TaskSettingsPageViewModel.cs
+++ b/BetterGenshinImpact/ViewModel/Pages/TaskSettingsPageViewModel.cs
@@ -422,8 +422,10 @@ public partial class TaskSettingsPageViewModel : ViewModel
}
SwitchAutoStygianOnslaughtEnabled = true;
+ AutoStygianOnslaughtParam param = new AutoStygianOnslaughtParam();
+ param.SetAutoStygianOnslaughtConfig(Config.AutoStygianOnslaughtConfig);
await new TaskRunner()
- .RunSoloTaskAsync(new AutoStygianOnslaughtTask(Config.AutoStygianOnslaughtConfig, path));
+ .RunSoloTaskAsync(new AutoStygianOnslaughtTask(param, path));
SwitchAutoStygianOnslaughtEnabled = false;
}