diff options
Diffstat (limited to 'indra/newview/llagent.cpp')
-rw-r--r-- | indra/newview/llagent.cpp | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 3b534ce5a7..9785940ff6 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -217,7 +217,6 @@ LLAgent gAgent; // // Statics // -BOOL LLAgent::sDebugDisplayTarget = FALSE; const F32 LLAgent::TYPING_TIMEOUT_SECS = 5.f; @@ -4428,7 +4427,8 @@ void LLAgent::setFocusGlobal(const LLVector3d& focus, const LLUUID &object_id) // for attachments, make offset relative to avatar, not the attachment if (mFocusObject->isAttachment()) { - while (!mFocusObject->isAvatar()) + while (mFocusObject.notNull() // DEV-29123 - can crash with a messed-up attachment + && !mFocusObject->isAvatar()) { mFocusObject = (LLViewerObject*) mFocusObject->getParent(); } @@ -4842,6 +4842,36 @@ bool LLAgent::canAccessAdult() const return mAgentAccess.canAccessAdult(); } +bool LLAgent::canAccessMaturityInRegion( U64 region_handle ) const +{ + LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle( region_handle ); + if( regionp ) + { + switch( regionp->getSimAccess() ) + { + case SIM_ACCESS_MATURE: + if( !canAccessMature() ) + return false; + break; + case SIM_ACCESS_ADULT: + if( !canAccessAdult() ) + return false; + break; + default: + // Oh, go on and hear the silly noises. + break; + } + } + + return true; +} + +bool LLAgent::canAccessMaturityAtGlobal( LLVector3d pos_global ) const +{ + U64 region_handle = to_region_handle_global( pos_global.mdV[0], pos_global.mdV[1] ); + return canAccessMaturityInRegion( region_handle ); +} + bool LLAgent::prefersPG() const { return mAgentAccess.prefersPG(); @@ -6431,6 +6461,8 @@ void LLAgent::saveWearable( EWearableType type, BOOL send_update ) addWearableToAgentInventory(cb, new_wearable); return; } + + getAvatarObject()->wearableUpdated( type ); if( send_update ) { |