From 6944b7bbde8fb2239eff02009ae2cfb116416834 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E6=B0=B4?= <1123993881@qq.com> Date: Wed, 1 Feb 2023 19:45:18 +0800 Subject: [PATCH] feat: add stop casting delay. --- .../Configuration/PluginConfiguration.cs | 18 +++++--- RotationSolver/Localization/Localization.json | 6 ++- RotationSolver/Localization/Strings_Major.cs | 5 ++- RotationSolver/Updaters/MajorUpdater.cs | 43 +++++++++---------- RotationSolver/Updaters/PreviewUpdater.cs | 7 ++- .../Windows/RotationConfigWindow_Param.cs | 20 ++++++++- 6 files changed, 64 insertions(+), 35 deletions(-) diff --git a/RotationSolver/Configuration/PluginConfiguration.cs b/RotationSolver/Configuration/PluginConfiguration.cs index 3f511d116..0a562e921 100644 --- a/RotationSolver/Configuration/PluginConfiguration.cs +++ b/RotationSolver/Configuration/PluginConfiguration.cs @@ -99,23 +99,29 @@ public class PluginConfiguration : IPluginConfiguration public float WeaponDelayMin = 0; public float WeaponDelayMax = 0; - public float DeathDelayMin = 0; - public float DeathDelayMax = 0; + public float DeathDelayMin = 0.5f; + public float DeathDelayMax = 1; - public float WeakenDelayMin = 0; - public float WeakenDelayMax = 0; + public float WeakenDelayMin = 0.5f; + public float WeakenDelayMax = 1; public float HostileDelayMin = 0; public float HostileDelayMax = 0; - public float HealDelayMin = 0; - public float HealDelayMax = 0; + public float HealDelayMin = 0.5f; + public float HealDelayMax = 1; + + public float StopCastingDelayMin = 0.5f; + public float StopCastingDelayMax = 1; public float InterruptDelayMin = 0.5f; public float InterruptDelayMax = 1; + public bool UseWorkTask = true; public int WorkTaskDelay = 20; + public bool UseStopCasting = true; + public string PositionalErrorText = string.Empty; public int MoveTargetAngle = 24; diff --git a/RotationSolver/Localization/Localization.json b/RotationSolver/Localization/Localization.json index 14fa55ea9..3638b9426 100644 --- a/RotationSolver/Localization/Localization.json +++ b/RotationSolver/Localization/Localization.json @@ -55,6 +55,7 @@ "Configwindow_Param_SpecialDuration": "Set the duration of special windows set by commands", "Configwindow_Param_AddDotGCDCount": "Set GCD advance of DOT refresh", "Configwindow_Param_AutoOffBetweenArea": "Turn off when player is between area.", + "Configwindow_Param_UseWorkTask": "Use work task for acceleration.", "Configwindow_Param_Delay": "Delay", "Configwindow_Param_WeaponDelay": "Set the range of random delay for GCD in second.", "Configwindow_Param_DeathDelay": "Set the range of random delay for raising deaths in second.", @@ -62,8 +63,11 @@ "Configwindow_Param_InterruptDelay": "Set the range of random delay for interrupting hostile targets in second.", "Configwindow_Param_WeakenDelay": "Set the range of random delay for esuna weakens in second.", "Configwindow_Param_HealDelay": "Set the range of random delay for healing people in second.", + "Configwindow_Param_StopCastingDelay": "Set the range of random delay for stoping casting when target is dead in second.", + "Configwindow_Param_WorkTaskDelay": "Set the work task delay in millisecond. Smaller, more precise, more resource-intensive", "Configwindow_Param_Display": "Display", - "Configwindow_Param_PoslockCasting": "Lock the movement when casting", + "Configwindow_Param_PoslockCasting": "Lock the movement when casting.", + "Configwindow_Param_UseStopCasting": "Use stopping casting when target is dead.", "Configwindow_Param_PoslockModifier": "Set the modifier key to unlock the movement temporary", "Configwindow_Param_PoslockDescription": "LT is for gamepad player", "Configwindow_Param_CastingDisplay": "Enhance castbar with casting status", diff --git a/RotationSolver/Localization/Strings_Major.cs b/RotationSolver/Localization/Strings_Major.cs index ecadeaf59..61138bb88 100644 --- a/RotationSolver/Localization/Strings_Major.cs +++ b/RotationSolver/Localization/Strings_Major.cs @@ -104,6 +104,7 @@ internal partial class Strings public string Configwindow_Param_AddDotGCDCount { get; set; } = "Set GCD advance of DOT refresh"; public string Configwindow_Param_AutoOffBetweenArea { get; set; } = "Turn off when player is between area."; + public string Configwindow_Param_UseWorkTask { get; set; } = "Use work task for acceleration."; public string Configwindow_Param_Delay { get; set; } = "Delay"; public string Configwindow_Param_WeaponDelay { get; set; } = "Set the range of random delay for GCD in second."; @@ -114,10 +115,12 @@ internal partial class Strings public string Configwindow_Param_HealDelay { get; set; } = "Set the range of random delay for healing people in second."; + public string Configwindow_Param_StopCastingDelay { get; set; } = "Set the range of random delay for stoping casting when target is dead in second."; public string Configwindow_Param_WorkTaskDelay { get; set; } = "Set the work task delay in millisecond. Smaller, more precise, more resource-intensive"; public string Configwindow_Param_Display { get; set; } = "Display"; - public string Configwindow_Param_PoslockCasting { get; set; } = "Lock the movement when casting"; + public string Configwindow_Param_PoslockCasting { get; set; } = "Lock the movement when casting."; + public string Configwindow_Param_UseStopCasting { get; set; } = "Use stopping casting when target is dead."; public string Configwindow_Param_PoslockModifier { get; set; } = "Set the modifier key to unlock the movement temporary"; public string Configwindow_Param_PoslockDescription { get; set; } = "LT is for gamepad player"; public string Configwindow_Param_CastingDisplay { get; set; } = "Enhance castbar with casting status"; diff --git a/RotationSolver/Updaters/MajorUpdater.cs b/RotationSolver/Updaters/MajorUpdater.cs index bd2764ab6..25d1be9c2 100644 --- a/RotationSolver/Updaters/MajorUpdater.cs +++ b/RotationSolver/Updaters/MajorUpdater.cs @@ -32,17 +32,13 @@ private static void FrameworkUpdate(Framework framework) // } //#endif - //PreviewUpdater.UpdateCastBarState(); - PreviewUpdater.UpdatePreview(); - //ActionUpdater.UpdateActionInfo(); - //TargetUpdater.UpdateTarget(); - //MovingUpdater.UpdateLocation(); + if (Service.Configuration.UseWorkTask) + { + UpdateWork(); + } + PreviewUpdater.UpdatePreview(); ActionUpdater.DoAction(); - - //TimeLineUpdater.UpdateTimelineAction(); - //ActionUpdater.UpdateNextAction(); - //RSCommands.UpdateRotationState(); MacroUpdater.UpdateMacro(); } @@ -55,31 +51,32 @@ public static void Enable() while (true) { if(_quit) return; - if (!Service.Conditions.Any() || Service.ClientState.LocalPlayer == null) + if (!Service.Configuration.UseWorkTask || !Service.Conditions.Any() || Service.ClientState.LocalPlayer == null) { Task.Delay(200); continue; } - PreviewUpdater.UpdateCastBarState(); - //PreviewUpdater.UpdatePreview(); - ActionUpdater.UpdateActionInfo(); - TargetUpdater.UpdateTarget(); - MovingUpdater.UpdateLocation(); - - //ActionUpdater.DoAction(); - - TimeLineUpdater.UpdateTimelineAction(); - ActionUpdater.UpdateNextAction(); - RSCommands.UpdateRotationState(); - //MacroUpdater.UpdateMacro(); - + UpdateWork(); Task.Delay(Service.Configuration.WorkTaskDelay); } }); MovingUpdater.Enable(); } + private static void UpdateWork() + { + PreviewUpdater.UpdateCastBarState(); + ActionUpdater.UpdateActionInfo(); + TargetUpdater.UpdateTarget(); + MovingUpdater.UpdateLocation(); + + TimeLineUpdater.UpdateTimelineAction(); + ActionUpdater.UpdateNextAction(); + RSCommands.UpdateRotationState(); + + } + public static void Dispose() { _quit = true; diff --git a/RotationSolver/Updaters/PreviewUpdater.cs b/RotationSolver/Updaters/PreviewUpdater.cs index bdb0b2af6..9236f50d1 100644 --- a/RotationSolver/Updaters/PreviewUpdater.cs +++ b/RotationSolver/Updaters/PreviewUpdater.cs @@ -54,10 +54,13 @@ private static void UpdateEntry() static bool _canMove; static bool _isTarDead; + static RandomDelay _tarDeadDelay = new RandomDelay(() => + (Service.Configuration.StopCastingDelayMin, Service.Configuration.StopCastingDelayMax)); internal static void UpdateCastBarState() { - _isTarDead = Service.ObjectTable.SearchById(Service.ClientState.LocalPlayer.CastTargetObjectId) - is BattleChara b && b.CurrentHp == 0; + var tardead = Service.Configuration.UseStopCasting ? Service.ObjectTable.SearchById(Service.ClientState.LocalPlayer.CastTargetObjectId) + is BattleChara b && b.CurrentHp == 0 : false; + _isTarDead = _tarDeadDelay.Delay(tardead); bool canMove = !Service.Conditions[Dalamud.Game.ClientState.Conditions.ConditionFlag.OccupiedInEvent] && !Service.Conditions[Dalamud.Game.ClientState.Conditions.ConditionFlag.Casting]; diff --git a/RotationSolver/Windows/RotationConfigWindow_Param.cs b/RotationSolver/Windows/RotationConfigWindow_Param.cs index 8feb1a21e..7212490cf 100644 --- a/RotationSolver/Windows/RotationConfigWindow_Param.cs +++ b/RotationSolver/Windows/RotationConfigWindow_Param.cs @@ -71,6 +71,9 @@ private void DrawParamBasic() DrawCheckBox(LocalizationManager.RightLang.Configwindow_Param_AutoOffBetweenArea, ref Service.Configuration.AutoOffBetweenArea); + + DrawCheckBox(LocalizationManager.RightLang.Configwindow_Param_UseWorkTask, + ref Service.Configuration.UseWorkTask); } private void DrawParamDelay() @@ -93,8 +96,17 @@ private void DrawParamDelay() DrawRangedFloat(LocalizationManager.RightLang.Configwindow_Param_HealDelay, ref Service.Configuration.HealDelayMin, ref Service.Configuration.HealDelayMax); - DrawIntNumber(LocalizationManager.RightLang.Configwindow_Param_WorkTaskDelay, - ref Service.Configuration.WorkTaskDelay, min: 0, max: 200); + if (Service.Configuration.UseStopCasting) + { + DrawRangedFloat(LocalizationManager.RightLang.Configwindow_Param_StopCastingDelay, + ref Service.Configuration.StopCastingDelayMin, ref Service.Configuration.StopCastingDelayMax); + } + + if (Service.Configuration.UseWorkTask) + { + DrawIntNumber(LocalizationManager.RightLang.Configwindow_Param_WorkTaskDelay, + ref Service.Configuration.WorkTaskDelay, min: 0, max: 200); + } } private void DrawParamDisplay() @@ -164,6 +176,10 @@ private void DrawParamDisplay() ConfigurationHelper.Keys, LocalizationManager.RightLang.Configwindow_Param_PoslockDescription); } + + DrawCheckBox(LocalizationManager.RightLang.Configwindow_Param_UseStopCasting, + ref Service.Configuration.UseStopCasting); + ImGui.Separator(); DrawCheckBox(LocalizationManager.RightLang.Configwindow_Param_SayOutStateChanged,