summaryrefslogtreecommitdiff
path: root/indra/newview/llagent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llagent.cpp')
-rw-r--r--indra/newview/llagent.cpp36
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 )
{