@ -477,7 +477,12 @@ namespace MWMechanics
bool MechanicsManager : : isSneaking ( const MWWorld : : Ptr & ptr )
{
return mActors . isSneaking ( ptr ) ;
CreatureStats & stats = ptr . getClass ( ) . getCreatureStats ( ptr ) ;
MWBase : : World * world = MWBase : : Environment : : get ( ) . getWorld ( ) ;
bool animActive = mActors . isSneaking ( ptr ) ;
bool stanceOn = stats . getStance ( MWMechanics : : CreatureStats : : Stance_Sneak ) ;
bool inair = ! world - > isOnGround ( ptr ) & & ! world - > isSwimming ( ptr ) & & ! world - > isFlying ( ptr ) ;
return stanceOn & & ( animActive | | inair ) ;
}
void MechanicsManager : : rest ( double hours , bool sleep )
@ -965,8 +970,7 @@ namespace MWMechanics
return true ;
// check if a player tries to pickpocket a target NPC
if ( ptr . getClass ( ) . getCreatureStats ( ptr ) . getStance ( MWMechanics : : CreatureStats : : Stance_Sneak )
| | target . getClass ( ) . getCreatureStats ( target ) . getKnockedDown ( ) )
if ( target . getClass ( ) . getCreatureStats ( target ) . getKnockedDown ( ) | | isSneaking ( ptr ) )
return false ;
return true ;
@ -1586,9 +1590,7 @@ namespace MWMechanics
return false ;
float sneakTerm = 0 ;
if ( ptr . getClass ( ) . getCreatureStats ( ptr ) . getStance ( CreatureStats : : Stance_Sneak )
& & ! MWBase : : Environment : : get ( ) . getWorld ( ) - > isSwimming ( ptr )
& & MWBase : : Environment : : get ( ) . getWorld ( ) - > isOnGround ( ptr ) )
if ( isSneaking ( ptr ) )
{
static float fSneakSkillMult = store . find ( " fSneakSkillMult " ) - > mValue . getFloat ( ) ;
static float fSneakBootMult = store . find ( " fSneakBootMult " ) - > mValue . getFloat ( ) ;
@ -1596,7 +1598,7 @@ namespace MWMechanics
int agility = stats . getAttribute ( ESM : : Attribute : : Agility ) . getModified ( ) ;
int luck = stats . getAttribute ( ESM : : Attribute : : Luck ) . getModified ( ) ;
float bootWeight = 0 ;
if ( ptr . getClass ( ) . isNpc ( ) )
if ( ptr . getClass ( ) . isNpc ( ) & & MWBase : : Environment : : get ( ) . getWorld ( ) - > isOnGround ( ptr ) )
{
const MWWorld : : InventoryStore & inv = ptr . getClass ( ) . getInventoryStore ( ptr ) ;
MWWorld : : ConstContainerStoreIterator it = inv . getSlot ( MWWorld : : InventoryStore : : Slot_Boots ) ;