mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-03-15 07:43:20 +08:00
[开放JS 调用 API]自动幽境危战 (#2882)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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#的类型
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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 "领取每日奖励":
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user