diff --git a/Dalamud/Game/Gui/AgentUpdateFlag.cs b/Dalamud/Game/Gui/AgentUpdateFlag.cs
deleted file mode 100644
index 3e2808adb..000000000
--- a/Dalamud/Game/Gui/AgentUpdateFlag.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using FFXIVClientStructs.FFXIV.Client.UI.Agent;
-
-namespace Dalamud.Game.Gui;
-
-///
-/// Represents a flag set by the game used by agents to conditionally update their addons.
-///
-[Flags]
-public enum AgentUpdateFlag : byte
-{
- /// Set when an inventory has been updated.
- InventoryUpdate = 1 << 0,
-
- /// Set when a hotbar slot has been executed, or a Gearset or Macro has been changed.
- ActionBarUpdate = 1 << 1,
-
- /// Set when the RetainerMarket inventory has been updated.
- RetainerMarketInventoryUpdate = 1 << 2,
-
- // /// Unknown use case.
- // NameplateUpdate = 1 << 3,
-
- /// Set when the player unlocked collectibles, contents or systems.
- UnlocksUpdate = 1 << 4,
-
- /// Set when was called.
- MainCommandEnabledStateUpdate = 1 << 5,
-
- /// Set when any housing inventory has been updated.
- HousingInventoryUpdate = 1 << 6,
-
- /// Set when any content inventory has been updated.
- ContentInventoryUpdate = 1 << 7,
-}
diff --git a/Dalamud/Game/Gui/GameGui.cs b/Dalamud/Game/Gui/GameGui.cs
index 3d17aad86..df01dd95d 100644
--- a/Dalamud/Game/Gui/GameGui.cs
+++ b/Dalamud/Game/Gui/GameGui.cs
@@ -43,7 +43,6 @@ internal sealed unsafe class GameGui : IInternalDisposableService, IGameGui
private readonly Hook handleImmHook;
private readonly Hook setUiVisibilityHook;
private readonly Hook utf8StringFromSequenceHook;
- private readonly Hook raptureAtkModuleUpdateHook;
[ServiceManager.ServiceConstructor]
private GameGui(TargetSigScanner sigScanner)
@@ -66,10 +65,6 @@ internal sealed unsafe class GameGui : IInternalDisposableService, IGameGui
this.utf8StringFromSequenceHook = Hook.FromAddress(Utf8String.Addresses.Ctor_FromSequence.Value, this.Utf8StringFromSequenceDetour);
- this.raptureAtkModuleUpdateHook = Hook.FromFunctionPointerVariable(
- new(&RaptureAtkModule.StaticVirtualTablePointer->Update),
- this.RaptureAtkModuleUpdateDetour);
-
this.handleItemHoverHook.Enable();
this.handleItemOutHook.Enable();
this.handleImmHook.Enable();
@@ -77,7 +72,6 @@ internal sealed unsafe class GameGui : IInternalDisposableService, IGameGui
this.handleActionHoverHook.Enable();
this.handleActionOutHook.Enable();
this.utf8StringFromSequenceHook.Enable();
- this.raptureAtkModuleUpdateHook.Enable();
}
// Hooked delegates
@@ -94,9 +88,6 @@ internal sealed unsafe class GameGui : IInternalDisposableService, IGameGui
///
public event EventHandler? HoveredActionChanged;
- ///
- public event Action AgentUpdate;
-
///
public bool GameUiHidden { get; private set; }
@@ -247,7 +238,6 @@ internal sealed unsafe class GameGui : IInternalDisposableService, IGameGui
this.handleActionHoverHook.Dispose();
this.handleActionOutHook.Dispose();
this.utf8StringFromSequenceHook.Dispose();
- this.raptureAtkModuleUpdateHook.Dispose();
}
///
@@ -364,21 +354,6 @@ internal sealed unsafe class GameGui : IInternalDisposableService, IGameGui
return thisPtr; // this function shouldn't need to return but the original asm moves this into rax before returning so be safe?
}
-
- private void RaptureAtkModuleUpdateDetour(RaptureAtkModule* thisPtr, float delta)
- {
- // The game clears the AgentUpdateFlag in the original function, but it also updates agents in it too.
- // We'll make a copy of the flags, so that we can fire events after the agents have been updated.
-
- var agentUpdateFlag = thisPtr->AgentUpdateFlag;
-
- this.raptureAtkModuleUpdateHook.Original(thisPtr, delta);
-
- if (agentUpdateFlag != RaptureAtkModule.AgentUpdateFlags.None)
- {
- this.AgentUpdate.InvokeSafely((AgentUpdateFlag)agentUpdateFlag);
- }
- }
}
///
@@ -402,7 +377,6 @@ internal class GameGuiPluginScoped : IInternalDisposableService, IGameGui
this.gameGuiService.UiHideToggled += this.UiHideToggledForward;
this.gameGuiService.HoveredItemChanged += this.HoveredItemForward;
this.gameGuiService.HoveredActionChanged += this.HoveredActionForward;
- this.gameGuiService.AgentUpdate += this.AgentUpdateForward;
}
///
@@ -414,9 +388,6 @@ internal class GameGuiPluginScoped : IInternalDisposableService, IGameGui
///
public event EventHandler? HoveredActionChanged;
- ///
- public event Action AgentUpdate;
-
///
public bool GameUiHidden => this.gameGuiService.GameUiHidden;
@@ -436,7 +407,6 @@ internal class GameGuiPluginScoped : IInternalDisposableService, IGameGui
this.gameGuiService.UiHideToggled -= this.UiHideToggledForward;
this.gameGuiService.HoveredItemChanged -= this.HoveredItemForward;
this.gameGuiService.HoveredActionChanged -= this.HoveredActionForward;
- this.gameGuiService.AgentUpdate -= this.AgentUpdateForward;
this.UiHideToggled = null;
this.HoveredItemChanged = null;
@@ -488,6 +458,4 @@ internal class GameGuiPluginScoped : IInternalDisposableService, IGameGui
private void HoveredItemForward(object sender, ulong itemId) => this.HoveredItemChanged?.Invoke(sender, itemId);
private void HoveredActionForward(object sender, HoveredAction hoverAction) => this.HoveredActionChanged?.Invoke(sender, hoverAction);
-
- private void AgentUpdateForward(AgentUpdateFlag agentUpdateFlag) => this.AgentUpdate.InvokeSafely(agentUpdateFlag);
}
diff --git a/Dalamud/Game/Inventory/GameInventory.cs b/Dalamud/Game/Inventory/GameInventory.cs
index 535b84372..5c8ed27b0 100644
--- a/Dalamud/Game/Inventory/GameInventory.cs
+++ b/Dalamud/Game/Inventory/GameInventory.cs
@@ -2,14 +2,16 @@ using System.Collections;
using System.Collections.Generic;
using System.Linq;
-using Dalamud.Game.Gui;
using Dalamud.Game.Inventory.InventoryEventArgTypes;
+using Dalamud.Hooking;
using Dalamud.IoC;
using Dalamud.IoC.Internal;
using Dalamud.Logging.Internal;
using Dalamud.Plugin.Internal;
using Dalamud.Plugin.Services;
+using FFXIVClientStructs.FFXIV.Client.UI;
+
namespace Dalamud.Game.Inventory;
///
@@ -31,8 +33,7 @@ internal class GameInventory : IInternalDisposableService
[ServiceManager.ServiceDependency]
private readonly Framework framework = Service.Get();
- [ServiceManager.ServiceDependency]
- private readonly GameGui gameGui = Service.Get();
+ private readonly Hook raptureAtkModuleUpdateHook;
private readonly GameInventoryType[] inventoryTypes;
private readonly GameInventoryItem[]?[] inventoryItems;
@@ -46,9 +47,18 @@ internal class GameInventory : IInternalDisposableService
this.inventoryTypes = Enum.GetValues();
this.inventoryItems = new GameInventoryItem[this.inventoryTypes.Length][];
- this.gameGui.AgentUpdate += this.OnAgentUpdate;
+ unsafe
+ {
+ this.raptureAtkModuleUpdateHook = Hook.FromFunctionPointerVariable(
+ new(&RaptureAtkModule.StaticVirtualTablePointer->Update),
+ this.RaptureAtkModuleUpdateDetour);
+ }
+
+ this.raptureAtkModuleUpdateHook.Enable();
}
+ private unsafe delegate void RaptureAtkModuleUpdateDelegate(RaptureAtkModule* ram, float f1);
+
///
void IInternalDisposableService.DisposeService()
{
@@ -58,7 +68,7 @@ internal class GameInventory : IInternalDisposableService
this.subscribersPendingChange.Clear();
this.subscribersChanged = false;
this.framework.Update -= this.OnFrameworkUpdate;
- this.gameGui.AgentUpdate -= this.OnAgentUpdate;
+ this.raptureAtkModuleUpdateHook.Dispose();
}
}
@@ -309,9 +319,10 @@ internal class GameInventory : IInternalDisposableService
return items;
}
- private void OnAgentUpdate(AgentUpdateFlag agentUpdateFlag)
+ private unsafe void RaptureAtkModuleUpdateDetour(RaptureAtkModule* ram, float f1)
{
- this.inventoriesMightBeChanged |= true;
+ this.inventoriesMightBeChanged |= ram->AgentUpdateFlag != 0;
+ this.raptureAtkModuleUpdateHook.Original(ram, f1);
}
///
diff --git a/Dalamud/Plugin/Services/IGameGui.cs b/Dalamud/Plugin/Services/IGameGui.cs
index 6c2e0083e..e2326328a 100644
--- a/Dalamud/Plugin/Services/IGameGui.cs
+++ b/Dalamud/Plugin/Services/IGameGui.cs
@@ -26,12 +26,6 @@ public unsafe interface IGameGui
///
public event EventHandler HoveredActionChanged;
- ///
- /// Fired when the game sets one or more values,
- /// used by agents to conditionally update their addons.
- ///
- event Action AgentUpdate;
-
///
/// Gets a value indicating whether the game UI is hidden.
///
diff --git a/lib/Lumina.Excel b/lib/Lumina.Excel
index 5d01489c3..a37961c45 160000
--- a/lib/Lumina.Excel
+++ b/lib/Lumina.Excel
@@ -1 +1 @@
-Subproject commit 5d01489c34f33a3d645f49085d7fc0065a1ac801
+Subproject commit a37961c453463f0f60a96f27aa278ef139841857