public void SetAlwaysWalk(NwCreature creature, bool forceWalk)
        {
            CNWSCreature         nativeCreature = creature.Creature;
            InternalVariableBool alwaysWalk     = InternalVariables.AlwaysWalk(creature);

            if (forceWalk)
            {
                nativeCreature.m_bForcedWalk = true.ToInt();
                alwaysWalk.Value             = true;
            }
            else
            {
                alwaysWalk.Delete();

                if (creature.ActiveEffects.Any(activeEffect => activeEffect.EffectType == EffectType.MovementSpeedDecrease))
                {
                    return;
                }

                if (!nativeCreature.m_bForcedWalk.ToBool())
                {
                    nativeCreature.UpdateEncumbranceState(false.ToInt());
                    nativeCreature.m_bForcedWalk = (nativeCreature.m_nEncumbranceState != 0).ToInt();
                }

                nativeCreature.m_bForcedWalk = false.ToInt();
            }
        }
        private int OnRemoveLimitMovementSpeed(void *pEffectListHandler, void *pObject, void *pEffect)
        {
            NwObject?nwObject = CNWSObject.FromPointer(pObject).ToNwObject();

            if (nwObject != null && InternalVariables.AlwaysWalk(nwObject))
            {
                return(1);
            }

            return(removeLimitMovementSpeedHook.CallOriginal(pEffectListHandler, pObject, pEffect));
        }
 public bool GetAlwaysWalk(NwCreature creature)
 {
     return(InternalVariables.AlwaysWalk(creature));
 }