diff --git a/BetterGenshinImpact/GameTask/AutoFight/AutoFightConfig.cs b/BetterGenshinImpact/GameTask/AutoFight/AutoFightConfig.cs
index 58480b4f..f3ec286f 100644
--- a/BetterGenshinImpact/GameTask/AutoFight/AutoFightConfig.cs
+++ b/BetterGenshinImpact/GameTask/AutoFight/AutoFightConfig.cs
@@ -25,6 +25,13 @@ public partial class AutoFightConfig : ObservableObject
///
[ObservableProperty]
private bool _fightFinishDetectEnabled = true;
+ ///
+ /// 根据技能CD优化出招人员
+ /// 根据填入人或人和cd,来决定当此人元素战技cd未结束时,跳过此人出招,来优化战斗流程,可填入人名或人名数字(用逗号分隔),
+ /// 多种用分号分隔,例如:白术;钟离,12;,如果人名,则用内置cd检查,如果是人名和数字,则把数字当做出招cd(秒)。
+ ///
+ [ObservableProperty] private string _actionSchedulerByCd = "";
+
[Serializable]
public partial class FightFinishDetectConfig : ObservableObject
{
diff --git a/BetterGenshinImpact/GameTask/AutoFight/AutoFightParam.cs b/BetterGenshinImpact/GameTask/AutoFight/AutoFightParam.cs
index 72003705..3e4ac777 100644
--- a/BetterGenshinImpact/GameTask/AutoFight/AutoFightParam.cs
+++ b/BetterGenshinImpact/GameTask/AutoFight/AutoFightParam.cs
@@ -26,6 +26,7 @@ public class AutoFightParam : BaseTaskParam
FightFinishDetectEnabled = autoFightConfig.FightFinishDetectEnabled;
PickDropsAfterFightEnabled = autoFightConfig.PickDropsAfterFightEnabled;
KazuhaPickupEnabled = autoFightConfig.KazuhaPickupEnabled;
+ ActionSchedulerByCd = autoFightConfig.ActionSchedulerByCd;
FinishDetectConfig.FastCheckEnabled = autoFightConfig.FinishDetectConfig.FastCheckEnabled;
FinishDetectConfig.FastCheckParams = autoFightConfig.FinishDetectConfig.FastCheckParams;
@@ -47,6 +48,7 @@ public class AutoFightParam : BaseTaskParam
public int Timeout { get; set; } = 120;
public bool KazuhaPickupEnabled = true;
+ public string ActionSchedulerByCd = "";
}
\ No newline at end of file
diff --git a/BetterGenshinImpact/GameTask/AutoFight/AutoFightTask.cs b/BetterGenshinImpact/GameTask/AutoFight/AutoFightTask.cs
index 256c2a40..16ab96c9 100644
--- a/BetterGenshinImpact/GameTask/AutoFight/AutoFightTask.cs
+++ b/BetterGenshinImpact/GameTask/AutoFight/AutoFightTask.cs
@@ -202,6 +202,7 @@ public class AutoFightTask : ISoloTask
throw new Exception("识别队伍角色失败");
}
+ var actionSchedulerByCd = ParseStringToDictionary(_taskParam.ActionSchedulerByCd);
var combatCommands = _combatScriptBag.FindCombatScript(combatScenes.Avatars);
// 新的取消token
@@ -221,7 +222,8 @@ public class AutoFightTask : ISoloTask
return;
}*/
var fightEndFlag = false;
- string lastFighttName = "";
+ string lastFightName = "";
+ string skipFightName = "";
//统计切换人打架次数
var countFight = 0;
// 战斗操作
@@ -242,6 +244,30 @@ public class AutoFightTask : ISoloTask
break;
}
+ //根据元素技能冷却事件优化出招流程,只有当人物切换后才会触发检查
+ double skillCd;
+ if (lastFightName != command.Name && actionSchedulerByCd.TryGetValue(command.Name,out skillCd))
+ {
+ var avatar = combatScenes.Avatars.FirstOrDefault(a => a.Name == command.Name);
+ if (skillCd < 0)
+ {
+ skillCd = FindMax([avatar.SkillCd,avatar.SkillHoldCd]);
+ }
+ var dif=(DateTime.UtcNow - avatar.LastSkillTime);
+ //当技能未冷却时,跳过此次出招
+ if ((DateTime.UtcNow -avatar.LastSkillTime).TotalSeconds < skillCd)
+ {
+ if (skipFightName != command.Name)
+ {
+ Logger.LogInformation($"{command.Name}cd冷却为{skillCd}秒,剩余{skillCd-dif.TotalSeconds}秒,跳过此次行动");
+ }
+ skipFightName = command.Name;
+ continue;
+ }
+ }
+
+
+
command.Execute(combatScenes);
//统计战斗人次
if (i == combatCommands.Count - 1 || command.Name != combatCommands[i + 1].Name)
@@ -249,7 +275,7 @@ public class AutoFightTask : ISoloTask
countFight++;
}
- lastFighttName = command.Name;
+ lastFightName = command.Name;
if (!fightEndFlag && _taskParam is { FightFinishDetectEnabled: true })
{
//处于最后一个位置,或者当前执行人和下一个人名字不一样的情况,满足一定条件(开启快速检查,并且检查时间大于0或人名存在配置)检查战斗
@@ -341,7 +367,7 @@ public class AutoFightTask : ISoloTask
{
var time = DateTime.UtcNow - kazuha.LastSkillTime;
//当万叶cd大于3时或战斗人次少于2时(通常无怪物情况下),此时不再触发万叶拾取,
- if (!(countFight < 2 || lastFighttName == "枫原万叶" && time.TotalSeconds > 3))
+ if (!(countFight < 2 || lastFightName == "枫原万叶" && time.TotalSeconds > 3))
{
Logger.LogInformation("使用枫原万叶长E拾取掉落物");
await Delay(300, ct);
@@ -470,6 +496,53 @@ public class AutoFightTask : ISoloTask
(g >= 240 && g <= 255) &&
(b >= 240 && b <= 255);
}
+ static double FindMax(double[] numbers)
+ {
+ if (numbers == null || numbers.Length == 0)
+ {
+ throw new ArgumentException("The array is empty or null.");
+ }
+
+ double max = numbers[0]>10000 ? 0 : numbers[0];
+ foreach (var num in numbers)
+ {
+ var cpnum = numbers[0]>10000 ? 0 : num;
+ max = Math.Max(max, num);
+ }
+
+ return max;
+ }
+ private static Dictionary ParseStringToDictionary(string input,double defaultValue=-1)
+ {
+ var dictionary = new Dictionary();
+
+ if (string.IsNullOrEmpty(input))
+ {
+ return dictionary; // 返回空字典
+ }
+
+ string[] pairs = input.Split(';', StringSplitOptions.RemoveEmptyEntries);
+
+ foreach (var pair in pairs)
+ {
+ var parts = pair.Split(',', StringSplitOptions.TrimEntries);
+
+ if (parts.Length > 0)
+ {
+ string name = parts[0];
+ double value = defaultValue;
+
+ if (parts.Length > 1 && double.TryParse(parts[1], out var parsedValue))
+ {
+ value = parsedValue;
+ }
+
+ dictionary[name] = value;
+ }
+ }
+
+ return dictionary;
+ }
private bool HasFightFlagByYolo(ImageRegion imageRegion)
{
diff --git a/BetterGenshinImpact/GameTask/LogParse/LogParse.cs b/BetterGenshinImpact/GameTask/LogParse/LogParse.cs
index 8feb53e5..83ef540e 100644
--- a/BetterGenshinImpact/GameTask/LogParse/LogParse.cs
+++ b/BetterGenshinImpact/GameTask/LogParse/LogParse.cs
@@ -325,7 +325,8 @@ namespace LogParse
(name: "最后小怪日期", value: ms => ms.LastSmallTime),
(name: "精英", value: ms => ms.EliteGameStatistics.ToString()),
(name: "精英详细", value: ms => ms.EliteDetails), (name: "最后精英日期", value: ms => ms.LastEliteTime),
- (name: "总计锄地摩拉", value: ms => ms.TotalMoraKillingMonstersMora.ToString())
+ (name: "总计锄地摩拉", value: ms => ms.TotalMoraKillingMonstersMora.ToString()),
+ (name: "突发事件获取摩拉", value: ms => ms.EmergencyBonus)
];
//锄地部分新曾字段
(string name, Func value)[] col2Configs=[..msColConfigs.ToList().Where(item=>item.name!="日期" && item.name!="最后小怪日期" && item.name!="最后精英日期"),
@@ -386,7 +387,7 @@ namespace LogParse
.OrderBy(group => group.Key)
.Reverse().ToList();
- html.AppendLine($"按日锄地摩拉统计
");
+ html.AppendLine($"按日摩拉收益统计
");
html.AppendLine("");
html.AppendLine(" ");
diff --git a/BetterGenshinImpact/GameTask/LogParse/MoraStatistics.cs b/BetterGenshinImpact/GameTask/LogParse/MoraStatistics.cs
index 50ca2b3e..ae62e5ea 100644
--- a/BetterGenshinImpact/GameTask/LogParse/MoraStatistics.cs
+++ b/BetterGenshinImpact/GameTask/LogParse/MoraStatistics.cs
@@ -25,6 +25,16 @@ namespace LogParse
public List SmallMonsterActionItems =>
this.MonsterActionItems.Except(EliteMonsterActionItems).ToList();
+ public string EmergencyBonus
+ {
+ get
+ {
+ var ls = this.ActionItems.Where(item => item.ActionId == 28).ToList();
+ var count = ls.Count();
+ return ls.Sum(item=>item.Num)+((count==0 || count>=10)?"":$"({count}/10)");
+ }
+ }
+
public string LastEliteTime => EliteMonsterActionItems.MaxBy(item => item?.Time)?.Time ?? null;
public string LastSmallTime => SmallMonsterActionItems.MaxBy(item => item?.Time)?.Time ?? null;
diff --git a/BetterGenshinImpact/GameTask/LogParse/TravelsDiaryDetailManager.cs b/BetterGenshinImpact/GameTask/LogParse/TravelsDiaryDetailManager.cs
index a8db8801..721192f5 100644
--- a/BetterGenshinImpact/GameTask/LogParse/TravelsDiaryDetailManager.cs
+++ b/BetterGenshinImpact/GameTask/LogParse/TravelsDiaryDetailManager.cs
@@ -50,8 +50,8 @@ public class TravelsDiaryDetailManager
var _temp = JsonSerializer.Deserialize>(File.ReadAllText(tddfile));
if (_temp != null)
{
- //只统计杀怪的
- actionItems.AddRange(_temp.Data.List.Where(item => item.ActionId == 37));
+ //统计杀怪或突发事件奖励
+ actionItems.AddRange(_temp.Data.List.Where(item => item.ActionId == 37 || item.ActionId == 28));
}
}
}
diff --git a/BetterGenshinImpact/View/Pages/TaskSettingsPage.xaml b/BetterGenshinImpact/View/Pages/TaskSettingsPage.xaml
index 1a4c4bc6..24815d17 100644
--- a/BetterGenshinImpact/View/Pages/TaskSettingsPage.xaml
+++ b/BetterGenshinImpact/View/Pages/TaskSettingsPage.xaml
@@ -428,7 +428,34 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/BetterGenshinImpact/View/Pages/View/ScriptGroupConfigView.xaml b/BetterGenshinImpact/View/Pages/View/ScriptGroupConfigView.xaml
index 6975a47c..970e8715 100644
--- a/BetterGenshinImpact/View/Pages/View/ScriptGroupConfigView.xaml
+++ b/BetterGenshinImpact/View/Pages/View/ScriptGroupConfigView.xaml
@@ -370,6 +370,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+