[开放JS 调用 API]自动幽境危战 (#2882)

This commit is contained in:
云端客
2026-03-08 21:13:18 +08:00
committed by GitHub
parent b9e1c37b67
commit 65b5032e6e
7 changed files with 126 additions and 5 deletions

View File

@@ -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);
}
/// <summary>
/// 运行自动幽境危战任务
/// </summary>
/// <param name="param">自动幽境危战任务参数</param>
/// <param name="customCt">自定义取消令牌</param>
/// <returns></returns>
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);
}
}

View File

@@ -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#的类型

View File

@@ -62,7 +62,7 @@ public class ResinUseRecord
return list;
}
public static List<ResinUseRecord> BuildFromDomainParam(AutoStygianOnslaughtConfig taskParam)
public static List<ResinUseRecord> BuildFromDomainParam(AutoStygianOnslaughtParam taskParam)
{
List<ResinUseRecord> list = [];
if (taskParam.SpecifyResinUse)

View File

@@ -0,0 +1,87 @@
using System.Collections.Generic;
using BetterGenshinImpact.Core.Config;
using BetterGenshinImpact.GameTask.Model;
namespace BetterGenshinImpact.GameTask.AutoStygianOnslaught;
public class AutoStygianOnslaughtParam:BaseTaskParam<AutoStygianOnslaughtTask>
{
public int BossNum { get; set; }
// 结束后是否自动分解圣遗物
public bool AutoArtifactSalvage { get; set; }
// 指定树脂的使用次数
public bool SpecifyResinUse{ get; set; }
// 自定义使用树脂优先级
public List<string> 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<string> { "浓缩树脂", "原粹树脂" }: new List<string>(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);
}
/// <summary>
/// 设置战斗策略路径
/// </summary>
/// <param name="strategyName">策略名称</param>
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");
}
}

View File

@@ -79,12 +79,21 @@ public class AutoStygianOnslaughtTask : StateMachineBase<StygianState, BvPage>,
/// </summary>
protected override ILogger Logger => TaskControl.Logger;
private readonly AutoStygianOnslaughtConfig _taskParam;
private readonly AutoStygianOnslaughtParam _taskParam;
private readonly CombatScriptBag _combatScriptBag;
private List<ResinUseRecord> _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;

View File

@@ -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 "领取每日奖励":

View File

@@ -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;
}