feat: added a way to remove status for gameFunctions.
authorkaiser <carvel.jltjy@simplelogin.com>
Sun, 15 Sep 2024 00:23:43 +0000 (10:23 +1000)
committerkaiser <carvel.jltjy@simplelogin.com>
Sun, 15 Sep 2024 00:23:43 +0000 (10:23 +1000)
Also updated the Action a bit, that way SGE doesn't get stuck when using diagnosis.

Questionable/Controller/Steps/Interactions/Action.cs
Questionable/Functions/GameFunctions.cs

index 6d4da220642e0c82cd9e818b28f8c366a02ee33d..a39bded4c8fa5874e79a6e2410c936adaea52c27 100644 (file)
@@ -1,9 +1,6 @@
 using System;
 using System.Collections.Generic;
-using Dalamud.Game.ClientState.Conditions;
 using Dalamud.Game.ClientState.Objects.Types;
-using FFXIVClientStructs.FFXIV.Client.Game;
-using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 using Questionable.Controller.Steps.Common;
 using Questionable.Functions;
@@ -60,6 +57,21 @@ internal static class Action
 
                 if (gameObject.IsTargetable)
                 {
+                    if (action == EAction.Diagnosis)
+                    {
+                        uint eukrasiaAura = 2606;
+                        // If SGE have Eukrasia status, we need to remove it.
+                        if (gameFunctions.HasStatus(eukrasiaAura))
+                        {
+                            if (GameFunctions.RemoveStatus(eukrasiaAura))
+                            {
+                                // Introduce a delay of 2 seconds before using the next action (otherwise it will try and use Eukrasia Diagnosis)
+                                _continueAt = DateTime.Now.AddSeconds(2);
+                                return true; 
+                            }
+                        }
+                    }
+                    
                     _usedAction = gameFunctions.UseAction(gameObject, action);
                     _continueAt = DateTime.Now.AddSeconds(0.5);
                     return true;
@@ -105,4 +117,4 @@ internal static class Action
 
         public override string ToString() => $"Action({action})";
     }
-}
+}
\ No newline at end of file
index 07fb8c37014d3606bc75ada6f18e4c9739ff245f..2cc2e12268538be52df1dbb6bc9346ab64e523d6 100644 (file)
@@ -308,6 +308,11 @@ internal sealed unsafe class GameFunctions
         StatusManager* statusManager = battleChara->GetStatusManager();
         return statusManager->HasStatus(statusId);
     }
+    
+    public static bool RemoveStatus(uint statusId)
+    {
+        return StatusManager.ExecuteStatusOff(statusId);
+    }
 
     public bool Mount()
     {