Skip to content

Commit 92c6556

Browse files
authored
提供自定义参数的 自动秘境 与 自动战斗 方法 (#2299)
1 parent 0bbc868 commit 92c6556

File tree

4 files changed

+134
-0
lines changed

4 files changed

+134
-0
lines changed

BetterGenshinImpact/Core/Script/Dependence/Dispatcher.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using System.Dynamic;
1919
using System.Threading;
2020
using System.Threading.Tasks;
21+
using BetterGenshinImpact.GameTask.AutoFight;
2122

2223
namespace BetterGenshinImpact.Core.Script.Dependence;
2324

@@ -304,4 +305,38 @@ public CancellationToken GetLinkedCancellationToken()
304305
{
305306
return GetLinkedCancellationTokenSource().Token;
306307
}
308+
309+
/// <summary>
310+
/// 运行自动秘境任务
311+
/// </summary>
312+
/// <param name="param">秘境任务参数</param>
313+
/// <param name="customCt">自定义取消令牌</param>
314+
/// <returns></returns>
315+
public async Task RunAutoDomainTask(AutoDomainParam param, CancellationToken? customCt = null)
316+
{
317+
if (param == null)
318+
{
319+
throw new ArgumentNullException(nameof(param), "秘境任务参数不能为空");
320+
}
321+
322+
CancellationToken cancellationToken = customCt ?? CancellationContext.Instance.Cts.Token;
323+
await new AutoDomainTask(param).Start(cancellationToken);
324+
}
325+
326+
/// <summary>
327+
/// 运行自动战斗任务
328+
/// </summary>
329+
/// <param name="param">战斗任务参数</param>
330+
/// <param name="customCt">自定义取消令牌</param>
331+
/// <returns></returns>
332+
public async Task RunAutoFightTask(AutoFightParam param, CancellationToken? customCt = null)
333+
{
334+
if (param == null)
335+
{
336+
throw new ArgumentNullException(nameof(param), "战斗任务参数不能为空");
337+
}
338+
339+
CancellationToken cancellationToken = customCt ?? CancellationContext.Instance.Cts.Token;
340+
await new AutoFightTask(param).Start(cancellationToken);
341+
}
307342
}

BetterGenshinImpact/Core/Script/EngineExtend.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
using BetterGenshinImpact.Core.Recognition;
99
using BetterGenshinImpact.GameTask.Model.Area;
1010
using BetterGenshinImpact.Core.Config;
11+
using BetterGenshinImpact.GameTask.AutoDomain;
12+
using BetterGenshinImpact.GameTask.AutoFight;
1113
using BetterGenshinImpact.GameTask.AutoFight.Model;
1214

1315
namespace BetterGenshinImpact.Core.Script;
@@ -64,6 +66,9 @@ public static void InitHost(IScriptEngine engine, string workDir, string[]? sear
6466

6567
engine.AddHostType("ServerTime", typeof(ServerTime));
6668

69+
engine.AddHostType("AutoDomainParam", typeof(AutoDomainParam));
70+
engine.AddHostType("AutoFightParam", typeof(AutoFightParam));
71+
6772

6873

6974
// 添加C#的类型

BetterGenshinImpact/GameTask/AutoDomain/AutoDomainParam.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Generic;
22
using BetterGenshinImpact.GameTask.Model;
33
using System.Threading;
4+
using BetterGenshinImpact.Core.Config;
45

56
namespace BetterGenshinImpact.GameTask.AutoDomain;
67

@@ -74,4 +75,41 @@ public void SetDefault()
7475
FragileResinUseCount = config.FragileResinUseCount;
7576
SpecifyResinUse = config.SpecifyResinUse;
7677
}
78+
79+
public AutoDomainParam(int domainRoundNum = 0) : base(null, null)
80+
{
81+
DomainRoundNum = domainRoundNum;
82+
if (domainRoundNum == 0)
83+
{
84+
DomainRoundNum = 9999;
85+
}
86+
87+
CombatStrategyPath = SetCombatStrategyPath();
88+
SetDefault();
89+
}
90+
91+
/// <summary>
92+
/// 设置战斗策略路径
93+
/// </summary>
94+
/// <param name="strategyName">策略名称</param>
95+
public string SetCombatStrategyPath(string? strategyName = null)
96+
{
97+
if (string.IsNullOrEmpty(strategyName))
98+
{
99+
strategyName = TaskContext.Instance().Config.AutoFightConfig.StrategyName;
100+
}
101+
102+
if ("根据队伍自动选择".Equals(strategyName))
103+
{
104+
return Global.Absolute(@"User\AutoFight\");
105+
}
106+
107+
return Global.Absolute(@"User\AutoFight\" + strategyName + ".txt");
108+
}
109+
110+
public void SetResinPriorityList(params string[] priorities)
111+
{
112+
ResinPriorityList.Clear();
113+
ResinPriorityList.AddRange(priorities);
114+
}
77115
}

BetterGenshinImpact/GameTask/AutoFight/AutoFightParam.cs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using BetterGenshinImpact.Core.Config;
12
using BetterGenshinImpact.GameTask.Model;
23

34
namespace BetterGenshinImpact.GameTask.AutoFight;
@@ -69,4 +70,59 @@ public AutoFightParam(string path, AutoFightConfig autoFightConfig) : base(null,
6970
public bool GuardianCombatSkip { get; set; } = false;
7071
public bool SkipModel = false;
7172
public bool GuardianAvatarHold = false;
73+
74+
public AutoFightParam(string? strategyName = null) : base(null, null)
75+
{
76+
SetCombatStrategyPath(strategyName);
77+
SetDefault();
78+
}
79+
80+
/// <summary>
81+
/// 设置战斗策略路径
82+
/// </summary>
83+
/// <param name="strategyName">策略名称</param>
84+
public void SetCombatStrategyPath(string? strategyName = null)
85+
{
86+
if (string.IsNullOrEmpty(strategyName))
87+
{
88+
strategyName = TaskContext.Instance().Config.AutoFightConfig.StrategyName;
89+
}
90+
91+
if ("根据队伍自动选择".Equals(strategyName))
92+
{
93+
CombatStrategyPath = Global.Absolute(@"User\AutoFight\");
94+
}
95+
96+
CombatStrategyPath = Global.Absolute(@"User\AutoFight\" + strategyName + ".txt");
97+
}
98+
99+
public void SetDefault()
100+
{
101+
var autoFightConfig = TaskContext.Instance().Config.AutoFightConfig;
102+
Timeout = autoFightConfig.Timeout;
103+
FightFinishDetectEnabled = autoFightConfig.FightFinishDetectEnabled;
104+
PickDropsAfterFightEnabled = autoFightConfig.PickDropsAfterFightEnabled;
105+
PickDropsAfterFightSeconds = autoFightConfig.PickDropsAfterFightSeconds;
106+
KazuhaPickupEnabled = autoFightConfig.KazuhaPickupEnabled;
107+
ActionSchedulerByCd = autoFightConfig.ActionSchedulerByCd;
108+
109+
FinishDetectConfig.FastCheckEnabled = autoFightConfig.FinishDetectConfig.FastCheckEnabled;
110+
FinishDetectConfig.FastCheckParams = autoFightConfig.FinishDetectConfig.FastCheckParams;
111+
FinishDetectConfig.CheckEndDelay = autoFightConfig.FinishDetectConfig.CheckEndDelay;
112+
FinishDetectConfig.BeforeDetectDelay = autoFightConfig.FinishDetectConfig.BeforeDetectDelay;
113+
FinishDetectConfig.RotateFindEnemyEnabled = autoFightConfig.FinishDetectConfig.RotateFindEnemyEnabled;
114+
115+
116+
KazuhaPartyName = autoFightConfig.KazuhaPartyName;
117+
OnlyPickEliteDropsMode = autoFightConfig.OnlyPickEliteDropsMode;
118+
BattleThresholdForLoot = autoFightConfig.BattleThresholdForLoot ?? BattleThresholdForLoot;
119+
//下面参数固定,只取自动战斗里面的
120+
FinishDetectConfig.BattleEndProgressBarColor = autoFightConfig.FinishDetectConfig.BattleEndProgressBarColor;
121+
FinishDetectConfig.BattleEndProgressBarColorTolerance = autoFightConfig.FinishDetectConfig.BattleEndProgressBarColorTolerance;
122+
123+
GuardianAvatar = autoFightConfig.GuardianAvatar;
124+
GuardianCombatSkip = autoFightConfig.GuardianCombatSkip;
125+
SkipModel = autoFightConfig.SkipModel;
126+
GuardianAvatarHold = autoFightConfig.GuardianAvatarHold;
127+
}
72128
}

0 commit comments

Comments
 (0)