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;