Add a delay to equipping recommended gear for specific instances where ilvl calculati...
authorLiza Carvelli <liza@carvel.li>
Fri, 24 Jan 2025 19:30:58 +0000 (20:30 +0100)
committerLiza Carvelli <liza@carvel.li>
Fri, 24 Jan 2025 19:30:58 +0000 (20:30 +0100)
Questionable/Controller/Steps/Interactions/EquipRecommended.cs

index 3e008cca5b2fefa2c1c639caff6d35b6b93ab037..a71cc3b0a37bdd6ebd0c7fa81585327af470f21d 100644 (file)
@@ -43,7 +43,8 @@ internal static class EquipRecommended
     internal sealed unsafe class DoEquipRecommended(IClientState clientState, IChatGui chatGui, ICondition condition)
         : TaskExecutor<EquipTask>
     {
-        private bool _equipped;
+        private bool _checkedOrTriggeredEquipmentUpdate;
+        private DateTime _continueAt = DateTime.MinValue;
 
         protected override bool Start()
         {
@@ -60,44 +61,51 @@ internal static class EquipRecommended
             if (recommendedEquipModule->IsUpdating)
                 return ETaskResult.StillRunning;
 
-            if (!_equipped)
+            if (!_checkedOrTriggeredEquipmentUpdate)
             {
-                InventoryManager* inventoryManager = InventoryManager.Instance();
-                InventoryContainer* equippedItems =
-                    inventoryManager->GetInventoryContainer(InventoryType.EquippedItems);
-                bool isAllEquipped = true;
-                foreach (var recommendedItemPtr in recommendedEquipModule->RecommendedItems)
+                if (!IsAllRecommendeGearEquipped())
                 {
-                    var recommendedItem = recommendedItemPtr.Value;
-                    if (recommendedItem == null || recommendedItem->ItemId == 0)
-                        continue;
+                    chatGui.Print("Equipping recommended gear.", CommandHandler.MessageTag, CommandHandler.TagColor);
+                    recommendedEquipModule->EquipRecommendedGear();
+                    _continueAt = DateTime.Now.AddSeconds(1);
+                }
 
-                    bool isEquipped = false;
-                    for (int i = 0; i < equippedItems->Size; ++i)
-                    {
-                        var equippedItem = equippedItems->Items[i];
-                        if (equippedItem.ItemId != 0 && equippedItem.ItemId == recommendedItem->ItemId)
-                        {
-                            isEquipped = true;
-                            break;
-                        }
-                    }
+                _checkedOrTriggeredEquipmentUpdate = true;
+                return ETaskResult.StillRunning;
+            }
 
-                    if (!isEquipped)
-                        isAllEquipped = false;
-                }
+            return DateTime.Now >= _continueAt ? ETaskResult.TaskComplete : ETaskResult.StillRunning;
+        }
 
-                if (!isAllEquipped)
+        private bool IsAllRecommendeGearEquipped()
+        {
+            var recommendedEquipModule = RecommendEquipModule.Instance();
+            InventoryManager* inventoryManager = InventoryManager.Instance();
+            InventoryContainer* equippedItems =
+                inventoryManager->GetInventoryContainer(InventoryType.EquippedItems);
+            bool isAllEquipped = true;
+            foreach (var recommendedItemPtr in recommendedEquipModule->RecommendedItems)
+            {
+                var recommendedItem = recommendedItemPtr.Value;
+                if (recommendedItem == null || recommendedItem->ItemId == 0)
+                    continue;
+
+                bool isEquipped = false;
+                for (int i = 0; i < equippedItems->Size; ++i)
                 {
-                    chatGui.Print("Equipping recommended gear.", CommandHandler.MessageTag, CommandHandler.TagColor);
-                    recommendedEquipModule->EquipRecommendedGear();
+                    var equippedItem = equippedItems->Items[i];
+                    if (equippedItem.ItemId != 0 && equippedItem.ItemId == recommendedItem->ItemId)
+                    {
+                        isEquipped = true;
+                        break;
+                    }
                 }
 
-                _equipped = true;
-                return ETaskResult.StillRunning;
+                if (!isEquipped)
+                    isAllEquipped = false;
             }
 
-            return ETaskResult.TaskComplete;
+            return isAllEquipped;
         }
 
         public override bool ShouldInterruptOnDamage() => true;