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)
return;
var old = actor.AsCharacter->DrawData.IsWeaponHidden;
_hideWeaponsHook.Original(&actor.AsCharacter->DrawData, (byte)(value ? 0 : 1));
actor.AsCharacter->DrawData.IsWeaponHidden = old;
}
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)
{
var character = ornament->Character.GetParentCharacter();
var character = ornament->GetParentCharacter();
if (character == null)
{
_setupOrnamentHook.Original(ornament, unk1, unk2);

View file

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

View file

@ -251,7 +251,7 @@ public class StateEditor(
var actors = Applier.ChangeMetaState(state, index, settings.Source.RequiresChange());
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));
}