Maybe fix weapon hidden state when leaving gpose or changing zones.

This commit is contained in:
Ottermandias 2024-08-13 15:27:32 +02:00
parent 38a489d7f0
commit a7c5d513d4
4 changed files with 11 additions and 4 deletions

View file

@ -61,7 +61,9 @@ public unsafe class MetaService : IDisposable
if (!actor.IsCharacter) if (!actor.IsCharacter)
return; return;
var old = actor.AsCharacter->DrawData.IsWeaponHidden;
_hideWeaponsHook.Original(&actor.AsCharacter->DrawData, (byte)(value ? 0 : 1)); _hideWeaponsHook.Original(&actor.AsCharacter->DrawData, (byte)(value ? 0 : 1));
actor.AsCharacter->DrawData.IsWeaponHidden = old;
} }
private void HideHatDetour(DrawDataContainer* drawData, uint id, byte value) private void HideHatDetour(DrawDataContainer* drawData, uint id, byte value)

View file

@ -59,7 +59,7 @@ public unsafe class ScalingService : IDisposable
private void SetupOrnamentDetour(Ornament* ornament, uint* unk1, float* unk2) private void SetupOrnamentDetour(Ornament* ornament, uint* unk1, float* unk2)
{ {
var character = ornament->Character.GetParentCharacter(); var character = ornament->GetParentCharacter();
if (character == null) if (character == null)
{ {
_setupOrnamentHook.Original(ornament, unk1, unk2); _setupOrnamentHook.Original(ornament, unk1, unk2);

View file

@ -247,8 +247,13 @@ public class StateApplier(
} }
case MetaIndex.WeaponState: case MetaIndex.WeaponState:
{ {
foreach (var actor in data.Objects.Where(a => a.IsCharacter)) // Only apply to the GPose character because otherwise we get some weird incompatibility when leaving GPose.
_metaService.SetWeaponState(actor, value); if (_objects.IsInGPose)
foreach (var actor in data.Objects.Where(a => a.IsGPoseOrCutscene))
_metaService.SetWeaponState(actor, value);
else
foreach (var actor in data.Objects.Where(a => a.IsCharacter))
_metaService.SetWeaponState(actor, value);
return; return;
} }
case MetaIndex.VisorState: case MetaIndex.VisorState:

View file

@ -251,7 +251,7 @@ public class StateEditor(
var actors = Applier.ChangeMetaState(state, index, settings.Source.RequiresChange()); var actors = Applier.ChangeMetaState(state, index, settings.Source.RequiresChange());
Glamourer.Log.Verbose( Glamourer.Log.Verbose(
$"Set Head Gear Visibility in state {state.Identifier.Incognito(null)} from {old} to {value}. [Affecting {actors.ToLazyString("nothing")}.]"); $"Set {index.ToName()} in state {state.Identifier.Incognito(null)} from {old} to {value}. [Affecting {actors.ToLazyString("nothing")}.]");
StateChanged.Invoke(StateChangeType.Other, settings.Source, state, actors, new MetaTransaction(index, old, value)); StateChanged.Invoke(StateChangeType.Other, settings.Source, state, actors, new MetaTransaction(index, old, value));
} }