From c34156ed2939330b6b95ae9847998ef74149fd27 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=8B=E6=B0=B4?= <1123993881@qq.com>
Date: Fri, 27 Jan 2023 12:57:07 +0800
Subject: [PATCH] fix: timeline add combat time condition.
---
RotationSolver/Actions/IBaseAction.cs | 6 +++---
RotationSolver/Localization/Localization.json | 2 +-
RotationSolver/Localization/Strings.cs | 2 +-
.../CustomRotation_OtherInfo.cs | 10 +++++++++
RotationSolver/Timeline/ConditionSet.cs | 2 +-
RotationSolver/Updaters/ActionUpdater.cs | 21 +++++++++++++++++--
6 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/RotationSolver/Actions/IBaseAction.cs b/RotationSolver/Actions/IBaseAction.cs
index d39a76f4f..81aa37e40 100644
--- a/RotationSolver/Actions/IBaseAction.cs
+++ b/RotationSolver/Actions/IBaseAction.cs
@@ -54,10 +54,10 @@ internal interface IBaseAction : IAction, IEnable
///
/// AOE only need one target to use.
/// Moving action don't need to have enough distance to use.
- /// Skip for and cheking.
- /// Use all charges, no keeping.
+ /// Skip for and checking.
+ /// Use all charges, no keeping one.
/// Do not need to check the combo.
- /// skip the diable for emergency use. Please always set this to false.
+ /// Skip the diable for emergency use. Please always set this to false.
/// Should I use.
bool CanUse(out IAction act, bool mustUse = false, bool emptyOrSkipCombo = false, bool skipDisable = false);
diff --git a/RotationSolver/Localization/Localization.json b/RotationSolver/Localization/Localization.json
index f77aae6fe..ce292f2ca 100644
--- a/RotationSolver/Localization/Localization.json
+++ b/RotationSolver/Localization/Localization.json
@@ -154,7 +154,7 @@
"Timeline_ConditionSet": "ConditionSet",
"Timeline_ActionCondition": "ActionCondition",
"Timeline_TargetCondition": "TargetCondition",
- "Timeline_ComboCondition": "ComboCondition",
+ "Timeline_RotationCondition": "RotationCondition",
"Timeline_ActionTarget": "{0}'s target",
"Timeline_Target": "Target",
"Timeline_Player": "Player",
diff --git a/RotationSolver/Localization/Strings.cs b/RotationSolver/Localization/Strings.cs
index 1cd0524a8..8bbe9040b 100644
--- a/RotationSolver/Localization/Strings.cs
+++ b/RotationSolver/Localization/Strings.cs
@@ -206,7 +206,7 @@ internal class Strings
public string Timeline_ConditionSet { get; set; } = "ConditionSet";
public string Timeline_ActionCondition { get; set; } = "ActionCondition";
public string Timeline_TargetCondition { get; set; } = "TargetCondition";
- public string Timeline_ComboCondition { get; set; } = "ComboCondition";
+ public string Timeline_RotationCondition { get; set; } = "RotationCondition";
public string Timeline_ActionTarget { get; set; } = "{0}'s target";
public string Timeline_Target { get; set; } = "Target";
public string Timeline_Player { get; set; } = "Player";
diff --git a/RotationSolver/Rotations/CustomRotation/CustomRotation_OtherInfo.cs b/RotationSolver/Rotations/CustomRotation/CustomRotation_OtherInfo.cs
index 64110a1a3..c68dda22b 100644
--- a/RotationSolver/Rotations/CustomRotation/CustomRotation_OtherInfo.cs
+++ b/RotationSolver/Rotations/CustomRotation/CustomRotation_OtherInfo.cs
@@ -166,6 +166,16 @@ protected static bool EndAfterGCD(float remain, uint gcdCount = 0, uint abilityC
protected static bool EndAfter(float remain, float remainNeed)
=> CooldownHelper.RecastAfter(remain, remainNeed);
+ ///
+ /// Whether the battle lasted less than seconds
+ ///
+ /// time in second.
+ ///
+ public static bool CombatElapsed(float time)
+ {
+ return CooldownHelper.ElapsedAfter(time, (float)ActionUpdater.CombatTime.TotalSeconds);
+ }
+
public MethodInfo[] AllLast => GetType().GetStaticBoolMethodInfo(m =>
{
var types = m.GetParameters();
diff --git a/RotationSolver/Timeline/ConditionSet.cs b/RotationSolver/Timeline/ConditionSet.cs
index 4b81dedf4..296997398 100644
--- a/RotationSolver/Timeline/ConditionSet.cs
+++ b/RotationSolver/Timeline/ConditionSet.cs
@@ -65,7 +65,7 @@ private void AddButton()
AddOneCondition(LocalizationManager.RightLang.Timeline_ConditionSet);
AddOneCondition(LocalizationManager.RightLang.Timeline_ActionCondition);
AddOneCondition(LocalizationManager.RightLang.Timeline_TargetCondition);
- AddOneCondition(LocalizationManager.RightLang.Timeline_ComboCondition);
+ AddOneCondition(LocalizationManager.RightLang.Timeline_RotationCondition);
ImGui.EndPopup();
}
diff --git a/RotationSolver/Updaters/ActionUpdater.cs b/RotationSolver/Updaters/ActionUpdater.cs
index 39d5468ef..508cf52c2 100644
--- a/RotationSolver/Updaters/ActionUpdater.cs
+++ b/RotationSolver/Updaters/ActionUpdater.cs
@@ -16,7 +16,15 @@ internal static class ActionUpdater
private static IntPtr LastComboMove => ComboTimer + 4;
public static unsafe ActionID LastComboAction => *(ActionID*)LastComboMove;
-
+ static DateTime _startCombatTime = DateTime.MinValue;
+ public static TimeSpan CombatTime
+ {
+ get
+ {
+ if(_startCombatTime == DateTime.MinValue) return TimeSpan.Zero;
+ return DateTime.Now - _startCombatTime;
+ }
+ }
internal static float WeaponRemain { get; private set; } = 0;
internal static float WeaponTotal { get; private set; } = 0;
@@ -67,7 +75,16 @@ internal static void UpdateNextAction()
internal unsafe static void UpdateActionInfo()
{
+ var last = InCombat;
InCombat = Service.Conditions[Dalamud.Game.ClientState.Conditions.ConditionFlag.InCombat];
+ if(!last && InCombat)
+ {
+ _startCombatTime = DateTime.Now;
+ }
+ else if(last && !InCombat)
+ {
+ _startCombatTime = DateTime.MinValue;
+ }
for (int i = 0; i < BluSlots.Length; i++)
{
@@ -136,7 +153,7 @@ private static void UPdateMPTimer()
if (player == null) return;
//不是黑魔不考虑啊
- if (player.ClassJob.Id != 25) return;
+ if (player.ClassJob.Id != (uint)ClassJobID.BlackMage) return;
//有醒梦,就算了啊
if (player.HasStatus(true, StatusID.LucidDreaming)) return;