Files
better-genshin-impact/BetterGenshinImpact/GameTask/AutoPathing/Handler/MiningHandler.cs
起个名字好难的喵 fbad8ae066 perf: Mining&企业微信通知 (#1493)
* 双手剑天下第一!

* perf: 添加延迟让图片先发送,时间戳与事件之间添加换行
2025-04-30 13:31:11 +08:00

85 lines
4.9 KiB
C#

using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using BetterGenshinImpact.GameTask.AutoFight.Model;
using BetterGenshinImpact.GameTask.AutoFight.Script;
using BetterGenshinImpact.GameTask.AutoPathing.Model;
using BetterGenshinImpact.GameTask.Common.Job;
using Microsoft.Extensions.Logging;
using static BetterGenshinImpact.GameTask.Common.TaskControl;
namespace BetterGenshinImpact.GameTask.AutoPathing.Handler;
/// <summary>
/// 挖矿并拾取
/// </summary>
public class MiningHandler : IActionHandler
{
private readonly CombatScript _miningCombatScript = CombatScriptParser.ParseContext("""
e(hold),keydown(s),wait(0.4),keyup(s),attack(0.2),attack(0.2),attack(0.2),attack(0.2),attack(0.2),attack(0.2)
e(hold)
e(hold)
e(hold)
attack(0.4),attack(0.4),attack(0.4),attack(0.4)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
attack(0.4),attack(0.4),attack(0.4),attack(0.25)
""");
private readonly ScanPickTask _scanPickTask = new();
public async Task RunAsync(CancellationToken ct, WaypointForTrack? waypointForTrack = null, object? config = null)
{
var combatScenes = await RunnerContext.Instance.GetCombatScenes(ct);
if (combatScenes == null)
{
Logger.LogError("队伍识别未初始化成功!");
return;
}
// 挖矿
Mining(combatScenes);
if (waypointForTrack is { ActionParams: not null }
&& waypointForTrack.ActionParams.Contains("disablePickupAround", StringComparison.InvariantCultureIgnoreCase))
{
await Delay(1000, ct);
// 拾取
await _scanPickTask.Start(ct);
}
}
private void Mining(CombatScenes combatScenes)
{
try
{
// 通用化战斗策略
foreach (var command in _miningCombatScript.CombatCommands)
{
command.Execute(combatScenes);
}
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
Debug.WriteLine(e.StackTrace);
}
}
}