From e96134a134ce4770163375aad106ba0a2e13d24c Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Wed, 28 Jan 2026 17:58:14 +0100 Subject: [PATCH] Fix offhand changes with empty offhand. --- Glamourer/State/StateListener.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Glamourer/State/StateListener.cs b/Glamourer/State/StateListener.cs index 4b70718..16e9a70 100644 --- a/Glamourer/State/StateListener.cs +++ b/Glamourer/State/StateListener.cs @@ -9,7 +9,6 @@ using Penumbra.GameData.Enums; using Penumbra.GameData.Structs; using Dalamud.Game.ClientState.Conditions; using Dalamud.Plugin.Services; -using FFXIVClientStructs.FFXIV.Client.Game.Character; using FFXIVClientStructs.FFXIV.Client.Game.Object; using Glamourer.GameData; using Penumbra.GameData.DataContainers; @@ -602,14 +601,21 @@ public class StateListener : IDisposable change = UpdateState.Change; } - if (baseData.Skeleton.Id != weapon.Skeleton.Id || baseData.Weapon.Id != weapon.Weapon.Id || baseData.Variant != weapon.Variant) + var idsDiffer = baseData.Skeleton.Id != weapon.Skeleton.Id + || baseData.Weapon.Id != weapon.Weapon.Id + || baseData.Variant != weapon.Variant; + // Special case when nothing is equipped to the offhand which is already nothing, but we need to update the type. + var nothingDiffers = baseData.Skeleton.Id is 0 && slot is EquipSlot.OffHand; + + if (idsDiffer || nothingDiffers) { if (_isPlayerNpc) return UpdateState.Transformed; var item = _items.Identify(slot, weapon.Skeleton, weapon.Weapon, weapon.Variant, slot is EquipSlot.OffHand ? state.BaseData.MainhandType : FullEquipType.Unknown); - state.BaseData.SetItem(slot, item); + if (idsDiffer || item.Type != state.BaseData.OffhandType) + state.BaseData.SetItem(slot, item); change = UpdateState.Change; }