mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-03-30 10:19:51 +08:00
* 在路径追踪重构了部分冷却处理逻辑,战斗脚本e增加wait参数可等待技能冷却而不是跳过。采矿e增加等待。尝试修复路径追踪 UseElementalSkill 与采矿脚本冲突的问题。 * 给CombatCommand加入快速跳过e的选项 * 优化技能冷却处理逻辑,增加OcrSkillCd属性以支持OCR识别的技能冷却时间,并调整相关技能CD计算和等待逻辑,尝试修复纳西妲采集终止时按键未弹起的问题 * 优化战斗任务中的技能冷却处理逻辑 * 更新纳西妲技能冷却时间记录,改为使用UTC时间并增加日志输出以便调试 * 增加最大技能CD检查,以排除系统时间/日期同步导致无限卡死。修复跑图路切人。(ps:主板电池没电应该去修主板) * 修复CheckAvatarAvailable * fix AutoFightTask skill cooldown logic and improve comments * 尝试修复脚本在"当前角色"下的小问题 * 尝试修复脚本在"当前角色"下的小问题,Avatar类结构调整,重新做了"根据技能cd优化出招"部分。 * Refactor avatar retrieval in PathingConditionConfig to use GetAvatars method and update skill cooldown references * Fix variable naming for clarity in CombatScenes * 在自动战斗执行前预先过滤不可执行的脚本。 --------- Co-authored-by: 辉鸭蛋 <huiyadanli@gmail.com>
82 lines
2.8 KiB
C#
82 lines
2.8 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using BetterGenshinImpact.GameTask.AutoFight.Script;
|
|
using BetterGenshinImpact.GameTask.AutoGeniusInvokation.Exception;
|
|
using BetterGenshinImpact.GameTask.AutoPathing.Model;
|
|
using Microsoft.Extensions.Logging;
|
|
using static BetterGenshinImpact.GameTask.Common.TaskControl;
|
|
|
|
namespace BetterGenshinImpact.GameTask.AutoPathing.Handler;
|
|
|
|
public class CombatScriptHandler : IActionHandler
|
|
{
|
|
public async Task RunAsync(CancellationToken ct, WaypointForTrack? waypointForTrack = null, object? config = null)
|
|
{
|
|
if (waypointForTrack is { CombatScript: not null })
|
|
{
|
|
Logger.LogInformation("执行 {Text}", "简易策略脚本");
|
|
var combatScript = waypointForTrack.CombatScript;
|
|
var combatScenes = await RunnerContext.Instance.GetCombatScenes(ct);
|
|
if (combatScenes == null)
|
|
{
|
|
Logger.LogError("队伍识别未初始化成功!");
|
|
return;
|
|
}
|
|
|
|
|
|
// 提前校验是否存在策略要求的角色
|
|
if (!combatScript.AvatarNames.Contains(CombatScriptParser.CurrentAvatarName))
|
|
{
|
|
bool hasAvatar = combatScenes.GetAvatars().Any(avatar => combatScript.AvatarNames.Contains(avatar.Name));
|
|
if (!hasAvatar)
|
|
{
|
|
Logger.LogError("简易策略脚本要求的角色不存在!队伍中需要存在下面角色中的一个或多个:{AvatarNames}", string.Join(", ", combatScript.AvatarNames));
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
try
|
|
{
|
|
// 通用化战斗策略
|
|
foreach (var command in combatScript.CombatCommands)
|
|
{
|
|
command.Execute(combatScenes);
|
|
}
|
|
}
|
|
catch (RetryException e)
|
|
{
|
|
Logger.LogWarning("简易策略脚本执行时出现重试异常,原因:{Msg},重试中...", e.Message);
|
|
throw;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Logger.LogError(e, "执行简易策略脚本时发生错误!");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Logger.LogError("策略脚本action_params内容为空");
|
|
}
|
|
}
|
|
|
|
// private static bool IsOnlyCurrentAvatar(CombatScript combatScript)
|
|
// {
|
|
// var isCurrentAvatar = false;
|
|
// if (combatScript.AvatarNames.Count == 1)
|
|
// {
|
|
// foreach (var avatarName in combatScript.AvatarNames)
|
|
// {
|
|
// if (avatarName == CombatScriptParser.CurrentAvatarName)
|
|
// {
|
|
// isCurrentAvatar = true;
|
|
// break;
|
|
// }
|
|
// }
|
|
// }
|
|
//
|
|
// return isCurrentAvatar;
|
|
// }
|
|
} |