From 25cded7f9f7800262f46a338baaeaac4972a04d8 Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Fri, 14 Jul 2023 12:18:50 +0200 Subject: [PATCH] Fix stain applying to 0-weapons in general. --- Glamourer/Interop/WeaponService.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Glamourer/Interop/WeaponService.cs b/Glamourer/Interop/WeaponService.cs index e85f6f7..9b3f7d8 100644 --- a/Glamourer/Interop/WeaponService.cs +++ b/Glamourer/Interop/WeaponService.cs @@ -40,7 +40,8 @@ public unsafe class WeaponService : IDisposable private readonly Hook _loadWeaponHook; - private void LoadWeaponDetour(DrawDataContainer* drawData, uint slot, ulong weaponValue, byte redrawOnEquality, byte unk2, byte skipGameObject, byte unk4) + private void LoadWeaponDetour(DrawDataContainer* drawData, uint slot, ulong weaponValue, byte redrawOnEquality, byte unk2, + byte skipGameObject, byte unk4) { var actor = (Actor)((nint*)drawData)[1]; var weapon = new CharacterWeapon(weaponValue); @@ -58,7 +59,12 @@ public unsafe class WeaponService : IDisposable _loadWeaponHook.Original(drawData, slot, weapon.Value, redrawOnEquality, unk2, skipGameObject, unk4); if (tmpWeapon.Value != weapon.Value) + { + if (tmpWeapon.Set.Value == 0) + tmpWeapon.Stain = 0; _loadWeaponHook.Original(drawData, slot, tmpWeapon.Value, 1, unk2, 1, unk4); + } + Glamourer.Log.Excessive( $"Weapon reloaded for 0x{actor.Address:X} ({actor.Utf8Name}) with attributes {slot} {weapon.Value:X14}, {redrawOnEquality}, {unk2}, {skipGameObject}, {unk4}"); } @@ -84,7 +90,7 @@ public unsafe class WeaponService : IDisposable public void LoadStain(Actor character, EquipSlot slot, StainId stain) { - var mdl = character.Model; + var mdl = character.Model; var (_, _, mh, oh) = mdl.GetWeapons(character); var value = slot == EquipSlot.OffHand ? oh : mh; var weapon = value.With(value.Set.Value == 0 ? 0 : stain);