Pull and merge from ssh://hg@bitbucket.org/lindenlab/viewer-release.
commit
b8bc62a514
11
BuildParams
11
BuildParams
|
|
@ -112,6 +112,17 @@ viewer-mesh.login_channel = "Project Viewer - Mesh"
|
|||
viewer-mesh.viewer_grid = aditi
|
||||
viewer-mesh.email = shining@lists.lindenlab.com
|
||||
|
||||
# ========================================
|
||||
# viewer-adult-check
|
||||
# ========================================
|
||||
|
||||
viewer-adult-check.viewer_channel = "Project Viewer - AdultCheck"
|
||||
viewer-adult-check.login_channel = "Project Viewer - AdultCheck"
|
||||
viewer-adult-check.viewer_grid = agni
|
||||
viewer-adult-check.build_debug_release_separately = true
|
||||
viewer-adult-check.build_CYGWIN_Debug = false
|
||||
viewer-adult-check.build_viewer_update_version_manager = false
|
||||
|
||||
# ================
|
||||
# oz
|
||||
# ================
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ LLKeyStringTranslatorFunc* LLKeyboard::mStringTranslator = NULL; // Used for l10
|
|||
// Class Implementation
|
||||
//
|
||||
|
||||
LLKeyboard::LLKeyboard() : mCallbacks(NULL), mNumpadDistinct(ND_NUMLOCK_OFF)
|
||||
LLKeyboard::LLKeyboard() : mCallbacks(NULL)
|
||||
{
|
||||
S32 i;
|
||||
|
||||
|
|
|
|||
|
|
@ -62,14 +62,6 @@ class LLWindowCallbacks;
|
|||
|
||||
class LLKeyboard
|
||||
{
|
||||
public:
|
||||
typedef enum e_numpad_distinct
|
||||
{
|
||||
ND_NEVER,
|
||||
ND_NUMLOCK_OFF,
|
||||
ND_NUMLOCK_ON
|
||||
} ENumpadDistinct;
|
||||
|
||||
public:
|
||||
LLKeyboard();
|
||||
virtual ~LLKeyboard();
|
||||
|
|
@ -107,8 +99,6 @@ public:
|
|||
static BOOL keyFromString(const std::string& str, KEY *key); // False on failure
|
||||
static std::string stringFromKey(KEY key);
|
||||
static std::string stringFromAccelerator( MASK accel_mask, KEY key );
|
||||
e_numpad_distinct getNumpadDistinct() { return mNumpadDistinct; }
|
||||
void setNumpadDistinct(e_numpad_distinct val) { mNumpadDistinct = val; }
|
||||
|
||||
void setCallbacks(LLWindowCallbacks *cbs) { mCallbacks = cbs; }
|
||||
F32 getKeyElapsedTime( KEY key ); // Returns time in seconds since key was pressed.
|
||||
|
|
@ -135,8 +125,6 @@ protected:
|
|||
|
||||
static LLKeyStringTranslatorFunc* mStringTranslator; // Used for l10n + PC/Mac/Linux accelerator labeling
|
||||
|
||||
e_numpad_distinct mNumpadDistinct;
|
||||
|
||||
EKeyboardInsertMode mInsertMode;
|
||||
|
||||
static std::map<KEY,std::string> sKeysToNames;
|
||||
|
|
|
|||
|
|
@ -299,28 +299,11 @@ void LLKeyboardMacOSX::scanKeyboard()
|
|||
|
||||
BOOL LLKeyboardMacOSX::translateNumpadKey( const U16 os_key, KEY *translated_key )
|
||||
{
|
||||
if(mNumpadDistinct == ND_NUMLOCK_ON)
|
||||
{
|
||||
std::map<U16, KEY>::iterator iter= mTranslateNumpadMap.find(os_key);
|
||||
if(iter != mTranslateNumpadMap.end())
|
||||
{
|
||||
*translated_key = iter->second;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return translateKey(os_key, translated_key);
|
||||
}
|
||||
|
||||
U16 LLKeyboardMacOSX::inverseTranslateNumpadKey(const KEY translated_key)
|
||||
{
|
||||
if(mNumpadDistinct == ND_NUMLOCK_ON)
|
||||
{
|
||||
std::map<KEY, U16>::iterator iter= mInvTranslateNumpadMap.find(translated_key);
|
||||
if(iter != mInvTranslateNumpadMap.end())
|
||||
{
|
||||
return iter->second;
|
||||
}
|
||||
}
|
||||
return inverseTranslateKey(translated_key);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -312,29 +312,11 @@ void LLKeyboardSDL::scanKeyboard()
|
|||
|
||||
BOOL LLKeyboardSDL::translateNumpadKey( const U16 os_key, KEY *translated_key)
|
||||
{
|
||||
if(mNumpadDistinct == ND_NUMLOCK_ON)
|
||||
{
|
||||
std::map<U16, KEY>::iterator iter= mTranslateNumpadMap.find(os_key);
|
||||
if(iter != mTranslateNumpadMap.end())
|
||||
{
|
||||
*translated_key = iter->second;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
BOOL success = translateKey(os_key, translated_key);
|
||||
return success;
|
||||
return translateKey(os_key, translated_key);
|
||||
}
|
||||
|
||||
U16 LLKeyboardSDL::inverseTranslateNumpadKey(const KEY translated_key)
|
||||
{
|
||||
if(mNumpadDistinct == ND_NUMLOCK_ON)
|
||||
{
|
||||
std::map<KEY, U16>::iterator iter= mInvTranslateNumpadMap.find(translated_key);
|
||||
if(iter != mInvTranslateNumpadMap.end())
|
||||
{
|
||||
return iter->second;
|
||||
}
|
||||
}
|
||||
return inverseTranslateKey(translated_key);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -299,69 +299,13 @@ void LLKeyboardWin32::scanKeyboard()
|
|||
|
||||
BOOL LLKeyboardWin32::translateExtendedKey(const U16 os_key, const MASK mask, KEY *translated_key)
|
||||
{
|
||||
if(mNumpadDistinct == ND_NUMLOCK_ON)
|
||||
{
|
||||
std::map<U16, KEY>::iterator iter = mTranslateNumpadMap.find(os_key);
|
||||
if (iter != mTranslateNumpadMap.end())
|
||||
{
|
||||
*translated_key = iter->second;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL success = translateKey(os_key, translated_key);
|
||||
if(mNumpadDistinct != ND_NEVER) {
|
||||
if(!success) return success;
|
||||
if(mask & MASK_EXTENDED)
|
||||
{
|
||||
// this is where we'd create new keycodes for extended keys
|
||||
// the set of extended keys includes the 'normal' arrow keys and
|
||||
// the pgup/dn/insert/home/end/delete cluster above the arrow keys
|
||||
// see http://windowssdk.msdn.microsoft.com/en-us/library/ms646280.aspx
|
||||
|
||||
// only process the return key if numlock is off
|
||||
if(((mNumpadDistinct == ND_NUMLOCK_OFF &&
|
||||
!(GetKeyState(VK_NUMLOCK) & 1))
|
||||
|| mNumpadDistinct == ND_NUMLOCK_ON) &&
|
||||
*translated_key == KEY_RETURN) {
|
||||
*translated_key = KEY_PAD_RETURN;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// the non-extended keys, those are in the numpad
|
||||
switch (*translated_key)
|
||||
{
|
||||
case KEY_LEFT:
|
||||
*translated_key = KEY_PAD_LEFT; break;
|
||||
case KEY_RIGHT:
|
||||
*translated_key = KEY_PAD_RIGHT; break;
|
||||
case KEY_UP:
|
||||
*translated_key = KEY_PAD_UP; break;
|
||||
case KEY_DOWN:
|
||||
*translated_key = KEY_PAD_DOWN; break;
|
||||
case KEY_HOME:
|
||||
*translated_key = KEY_PAD_HOME; break;
|
||||
case KEY_END:
|
||||
*translated_key = KEY_PAD_END; break;
|
||||
case KEY_PAGE_UP:
|
||||
*translated_key = KEY_PAD_PGUP; break;
|
||||
case KEY_PAGE_DOWN:
|
||||
*translated_key = KEY_PAD_PGDN; break;
|
||||
case KEY_INSERT:
|
||||
*translated_key = KEY_PAD_INS; break;
|
||||
case KEY_DELETE:
|
||||
*translated_key = KEY_PAD_DEL; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return success;
|
||||
return translateKey(os_key, translated_key);
|
||||
}
|
||||
|
||||
U16 LLKeyboardWin32::inverseTranslateExtendedKey(const KEY translated_key)
|
||||
{
|
||||
// if numlock is on, then we need to translate KEY_PAD_FOO to the corresponding number pad number
|
||||
if((mNumpadDistinct == ND_NUMLOCK_ON) && (GetKeyState(VK_NUMLOCK) & 1))
|
||||
if(GetKeyState(VK_NUMLOCK) & 1)
|
||||
{
|
||||
std::map<KEY, U16>::iterator iter = mInvTranslateNumpadMap.find(translated_key);
|
||||
if (iter != mInvTranslateNumpadMap.end())
|
||||
|
|
|
|||
|
|
@ -201,7 +201,8 @@ void LLControlVariable::setValue(const LLSD& new_value, bool saved_value)
|
|||
}
|
||||
|
||||
LLSD storable_value = getComparableValue(new_value);
|
||||
bool value_changed = llsd_compare(getValue(), storable_value) == FALSE;
|
||||
LLSD original_value = getValue();
|
||||
bool value_changed = llsd_compare(original_value, storable_value) == FALSE;
|
||||
if(saved_value)
|
||||
{
|
||||
// If we're going to save this value, return to default but don't fire
|
||||
|
|
@ -237,7 +238,7 @@ void LLControlVariable::setValue(const LLSD& new_value, bool saved_value)
|
|||
|
||||
if(value_changed)
|
||||
{
|
||||
mCommitSignal(this, storable_value);
|
||||
firePropertyChanged(original_value);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -249,12 +250,13 @@ void LLControlVariable::setDefaultValue(const LLSD& value)
|
|||
// *NOTE: Default values are not saved, only read.
|
||||
|
||||
LLSD comparable_value = getComparableValue(value);
|
||||
bool value_changed = (llsd_compare(getValue(), comparable_value) == FALSE);
|
||||
LLSD original_value = getValue();
|
||||
bool value_changed = (llsd_compare(original_value, comparable_value) == FALSE);
|
||||
resetToDefault(false);
|
||||
mValues[0] = comparable_value;
|
||||
if(value_changed)
|
||||
{
|
||||
firePropertyChanged();
|
||||
firePropertyChanged(original_value);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -277,6 +279,8 @@ void LLControlVariable::resetToDefault(bool fire_signal)
|
|||
{
|
||||
//The first setting is always the default
|
||||
//Pop to it and fire off the listener
|
||||
LLSD originalValue = mValues.back();
|
||||
|
||||
while(mValues.size() > 1)
|
||||
{
|
||||
mValues.pop_back();
|
||||
|
|
@ -284,7 +288,7 @@ void LLControlVariable::resetToDefault(bool fire_signal)
|
|||
|
||||
if(fire_signal)
|
||||
{
|
||||
firePropertyChanged();
|
||||
firePropertyChanged(originalValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ class LLControlVariable : public LLRefCount
|
|||
|
||||
public:
|
||||
typedef boost::signals2::signal<bool(LLControlVariable* control, const LLSD&), boost_boolean_combiner> validate_signal_t;
|
||||
typedef boost::signals2::signal<void(LLControlVariable* control, const LLSD&)> commit_signal_t;
|
||||
typedef boost::signals2::signal<void(LLControlVariable* control, const LLSD&, const LLSD&)> commit_signal_t;
|
||||
|
||||
private:
|
||||
std::string mName;
|
||||
|
|
@ -146,11 +146,11 @@ public:
|
|||
void setHiddenFromSettingsEditor(bool hide);
|
||||
void setComment(const std::string& comment);
|
||||
|
||||
void firePropertyChanged()
|
||||
{
|
||||
mCommitSignal(this, mValues.back());
|
||||
}
|
||||
private:
|
||||
void firePropertyChanged(const LLSD &pPreviousValue)
|
||||
{
|
||||
mCommitSignal(this, mValues.back(), pPreviousValue);
|
||||
}
|
||||
LLSD getComparableValue(const LLSD& value);
|
||||
bool llsd_compare(const LLSD& a, const LLSD & b);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -6356,17 +6356,6 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>NumpadControl</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>ObjectCacheEnabled</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -13516,5 +13505,16 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AdultCheckEnablePurchse</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Hack to allow QA testing of purchasing land regardless of maturity rating.</string>
|
||||
<key>Persist</key>
|
||||
<integer>0</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@
|
|||
#include "llviewermenu.h"
|
||||
#include "llviewerobjectlist.h"
|
||||
#include "llviewerparcelmgr.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "llviewerstats.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "llvoavatarself.h"
|
||||
|
|
@ -112,6 +113,94 @@ const F32 MAX_FIDGET_TIME = 20.f; // seconds
|
|||
// The agent instance.
|
||||
LLAgent gAgent;
|
||||
|
||||
class LLTeleportRequest
|
||||
{
|
||||
public:
|
||||
LLTeleportRequest();
|
||||
virtual ~LLTeleportRequest();
|
||||
|
||||
virtual bool canRestartTeleport();
|
||||
|
||||
virtual void startTeleport() = 0;
|
||||
virtual void restartTeleport();
|
||||
|
||||
protected:
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
class LLTeleportRequestViaLandmark : public LLTeleportRequest
|
||||
{
|
||||
public:
|
||||
LLTeleportRequestViaLandmark(const LLUUID &pLandmarkId);
|
||||
virtual ~LLTeleportRequestViaLandmark();
|
||||
|
||||
virtual bool canRestartTeleport();
|
||||
|
||||
virtual void startTeleport();
|
||||
virtual void restartTeleport();
|
||||
|
||||
protected:
|
||||
inline const LLUUID &getLandmarkId() const {return mLandmarkId;};
|
||||
|
||||
private:
|
||||
LLUUID mLandmarkId;
|
||||
};
|
||||
|
||||
class LLTeleportRequestViaLure : public LLTeleportRequestViaLandmark
|
||||
{
|
||||
public:
|
||||
LLTeleportRequestViaLure(const LLUUID &pLureId, BOOL pIsLureGodLike);
|
||||
virtual ~LLTeleportRequestViaLure();
|
||||
|
||||
virtual bool canRestartTeleport();
|
||||
|
||||
virtual void startTeleport();
|
||||
|
||||
protected:
|
||||
inline BOOL isLureGodLike() const {return mIsLureGodLike;};
|
||||
|
||||
private:
|
||||
BOOL mIsLureGodLike;
|
||||
};
|
||||
|
||||
class LLTeleportRequestViaLocation : public LLTeleportRequest
|
||||
{
|
||||
public:
|
||||
LLTeleportRequestViaLocation(const LLVector3d &pPosGlobal);
|
||||
virtual ~LLTeleportRequestViaLocation();
|
||||
|
||||
virtual bool canRestartTeleport();
|
||||
|
||||
virtual void startTeleport();
|
||||
virtual void restartTeleport();
|
||||
|
||||
protected:
|
||||
inline const LLVector3d &getPosGlobal() const {return mPosGlobal;};
|
||||
|
||||
private:
|
||||
LLVector3d mPosGlobal;
|
||||
};
|
||||
|
||||
|
||||
class LLTeleportRequestViaLocationLookAt : public LLTeleportRequestViaLocation
|
||||
{
|
||||
public:
|
||||
LLTeleportRequestViaLocationLookAt(const LLVector3d &pPosGlobal);
|
||||
virtual ~LLTeleportRequestViaLocationLookAt();
|
||||
|
||||
virtual bool canRestartTeleport();
|
||||
|
||||
virtual void startTeleport();
|
||||
virtual void restartTeleport();
|
||||
|
||||
protected:
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Statics
|
||||
//
|
||||
|
|
@ -245,6 +334,19 @@ LLAgent::LLAgent() :
|
|||
mAgentAccess(new LLAgentAccess(gSavedSettings)),
|
||||
mCanEditParcel(false),
|
||||
mTeleportSourceSLURL(new LLSLURL),
|
||||
mCurrentTeleportRequest(),
|
||||
mFailedTeleportRequest(),
|
||||
mTeleportFinishedSlot(),
|
||||
mTeleportFailedSlot(),
|
||||
mIsMaturityRatingChangingDuringTeleport(false),
|
||||
mMaturityRatingChange(0U),
|
||||
mIsDoSendMaturityPreferenceToServer(false),
|
||||
mMaturityPreferenceConfirmCallback(NULL),
|
||||
mMaturityPreferenceRequestId(0U),
|
||||
mMaturityPreferenceResponseId(0U),
|
||||
mMaturityPreferenceNumRetries(0U),
|
||||
mLastKnownRequestMaturity(SIM_ACCESS_MIN),
|
||||
mLastKnownResponseMaturity(SIM_ACCESS_MIN),
|
||||
mTeleportState( TELEPORT_NONE ),
|
||||
mRegionp(NULL),
|
||||
|
||||
|
|
@ -330,8 +432,18 @@ void LLAgent::init()
|
|||
|
||||
gSavedSettings.getControl("PreferredMaturity")->getValidateSignal()->connect(boost::bind(&LLAgent::validateMaturity, this, _2));
|
||||
gSavedSettings.getControl("PreferredMaturity")->getSignal()->connect(boost::bind(&LLAgent::handleMaturity, this, _2));
|
||||
mLastKnownResponseMaturity = static_cast<U8>(gSavedSettings.getU32("PreferredMaturity"));
|
||||
mLastKnownRequestMaturity = mLastKnownResponseMaturity;
|
||||
mIsDoSendMaturityPreferenceToServer = true;
|
||||
|
||||
LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(boost::bind(&LLAgent::parcelChangedCallback));
|
||||
if (!mTeleportFinishedSlot.connected())
|
||||
{
|
||||
mTeleportFinishedSlot = LLViewerParcelMgr::getInstance()->setTeleportFinishedCallback(boost::bind(&LLAgent::handleTeleportFinished, this));
|
||||
}
|
||||
if (!mTeleportFailedSlot.connected())
|
||||
{
|
||||
mTeleportFailedSlot = LLViewerParcelMgr::getInstance()->setTeleportFailedCallback(boost::bind(&LLAgent::handleTeleportFailed, this));
|
||||
}
|
||||
|
||||
mInitialized = TRUE;
|
||||
}
|
||||
|
|
@ -342,6 +454,14 @@ void LLAgent::init()
|
|||
void LLAgent::cleanup()
|
||||
{
|
||||
mRegionp = NULL;
|
||||
if (mTeleportFinishedSlot.connected())
|
||||
{
|
||||
mTeleportFinishedSlot.disconnect();
|
||||
}
|
||||
if (mTeleportFailedSlot.connected())
|
||||
{
|
||||
mTeleportFailedSlot.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -2371,49 +2491,277 @@ bool LLAgent::isAdult() const
|
|||
return mAgentAccess->isAdult();
|
||||
}
|
||||
|
||||
void LLAgent::setTeen(bool teen)
|
||||
{
|
||||
mAgentAccess->setTeen(teen);
|
||||
}
|
||||
|
||||
//static
|
||||
int LLAgent::convertTextToMaturity(char text)
|
||||
{
|
||||
return LLAgentAccess::convertTextToMaturity(text);
|
||||
}
|
||||
|
||||
bool LLAgent::sendMaturityPreferenceToServer(int preferredMaturity)
|
||||
class LLMaturityPreferencesResponder : public LLHTTPClient::Responder
|
||||
{
|
||||
if (!getRegion())
|
||||
return false;
|
||||
|
||||
// Update agent access preference on the server
|
||||
std::string url = getRegion()->getCapability("UpdateAgentInformation");
|
||||
if (!url.empty())
|
||||
public:
|
||||
LLMaturityPreferencesResponder(LLAgent *pAgent, U8 pPreferredMaturity, U8 pPreviousMaturity, LLAgent::maturity_preferences_callback_t pMaturityPreferencesCallback);
|
||||
virtual ~LLMaturityPreferencesResponder();
|
||||
|
||||
virtual void result(const LLSD &pContent);
|
||||
virtual void error(U32 pStatus, const std::string& pReason);
|
||||
|
||||
protected:
|
||||
|
||||
private:
|
||||
U8 parseMaturityFromServerResponse(const LLSD &pContent);
|
||||
|
||||
LLAgent *mAgent;
|
||||
U8 mPreferredMaturity;
|
||||
U8 mPreviousMaturity;
|
||||
LLAgent::maturity_preferences_callback_t mMaturityPreferencesCallback;
|
||||
};
|
||||
|
||||
LLMaturityPreferencesResponder::LLMaturityPreferencesResponder(LLAgent *pAgent, U8 pPreferredMaturity, U8 pPreviousMaturity, LLAgent::maturity_preferences_callback_t pMaturityPreferencesCallback)
|
||||
: LLHTTPClient::Responder(),
|
||||
mAgent(pAgent),
|
||||
mPreferredMaturity(pPreferredMaturity),
|
||||
mPreviousMaturity(pPreviousMaturity),
|
||||
mMaturityPreferencesCallback(pMaturityPreferencesCallback)
|
||||
{
|
||||
}
|
||||
|
||||
LLMaturityPreferencesResponder::~LLMaturityPreferencesResponder()
|
||||
{
|
||||
}
|
||||
|
||||
void LLMaturityPreferencesResponder::result(const LLSD &pContent)
|
||||
{
|
||||
U8 actualMaturity = parseMaturityFromServerResponse(pContent);
|
||||
|
||||
if (actualMaturity != mPreferredMaturity)
|
||||
{
|
||||
// Set new access preference
|
||||
LLSD access_prefs = LLSD::emptyMap();
|
||||
if (preferredMaturity == SIM_ACCESS_PG)
|
||||
{
|
||||
access_prefs["max"] = "PG";
|
||||
}
|
||||
else if (preferredMaturity == SIM_ACCESS_MATURE)
|
||||
{
|
||||
access_prefs["max"] = "M";
|
||||
}
|
||||
if (preferredMaturity == SIM_ACCESS_ADULT)
|
||||
{
|
||||
access_prefs["max"] = "A";
|
||||
}
|
||||
|
||||
LLSD body = LLSD::emptyMap();
|
||||
body["access_prefs"] = access_prefs;
|
||||
llinfos << "Sending access prefs update to " << (access_prefs["max"].asString()) << " via capability to: "
|
||||
<< url << llendl;
|
||||
LLHTTPClient::post(url, body, new LLHTTPClient::Responder()); // Ignore response
|
||||
return true;
|
||||
llwarns << "while attempting to change maturity preference from '" << LLViewerRegion::accessToString(mPreviousMaturity)
|
||||
<< "' to '" << LLViewerRegion::accessToString(mPreferredMaturity) << "', the server responded with '"
|
||||
<< LLViewerRegion::accessToString(actualMaturity) << "' [value:" << static_cast<U32>(actualMaturity) << ", llsd:"
|
||||
<< pContent << "]" << llendl;
|
||||
}
|
||||
mAgent->handlePreferredMaturityResult(actualMaturity);
|
||||
|
||||
if (!mMaturityPreferencesCallback.empty())
|
||||
{
|
||||
mMaturityPreferencesCallback(actualMaturity);
|
||||
}
|
||||
}
|
||||
|
||||
void LLMaturityPreferencesResponder::error(U32 pStatus, const std::string& pReason)
|
||||
{
|
||||
llwarns << "while attempting to change maturity preference from '" << LLViewerRegion::accessToString(mPreviousMaturity)
|
||||
<< "' to '" << LLViewerRegion::accessToString(mPreferredMaturity) << "', we got an error because '"
|
||||
<< pReason << "' [status:" << pStatus << "]" << llendl;
|
||||
mAgent->handlePreferredMaturityError();
|
||||
if (!mMaturityPreferencesCallback.empty())
|
||||
{
|
||||
mMaturityPreferencesCallback(mPreviousMaturity);
|
||||
}
|
||||
}
|
||||
|
||||
U8 LLMaturityPreferencesResponder::parseMaturityFromServerResponse(const LLSD &pContent)
|
||||
{
|
||||
// stinson 05/24/2012 Pathfinding regions have re-defined the response behavior. In the old server code,
|
||||
// if you attempted to change the preferred maturity to the same value, the response content would be an
|
||||
// undefined LLSD block. In the new server code with pathfinding, the response content should always be
|
||||
// defined. Thus, the check for isUndefined() can be replaced with an assert after pathfinding is merged
|
||||
// into server trunk and fully deployed.
|
||||
U8 maturity = SIM_ACCESS_MIN;
|
||||
if (pContent.isUndefined())
|
||||
{
|
||||
maturity = mPreferredMaturity;
|
||||
}
|
||||
else
|
||||
{
|
||||
llassert(!pContent.isUndefined());
|
||||
llassert(pContent.isMap());
|
||||
|
||||
if (!pContent.isUndefined() && pContent.isMap())
|
||||
{
|
||||
// stinson 05/24/2012 Pathfinding regions have re-defined the response syntax. The if statement catches
|
||||
// the new syntax, and the else statement catches the old syntax. After pathfinding is merged into
|
||||
// server trunk and fully deployed, we can remove the else statement.
|
||||
if (pContent.has("access_prefs"))
|
||||
{
|
||||
llassert(pContent.has("access_prefs"));
|
||||
llassert(pContent.get("access_prefs").isMap());
|
||||
llassert(pContent.get("access_prefs").has("max"));
|
||||
llassert(pContent.get("access_prefs").get("max").isString());
|
||||
if (pContent.get("access_prefs").isMap() && pContent.get("access_prefs").has("max") &&
|
||||
pContent.get("access_prefs").get("max").isString())
|
||||
{
|
||||
LLSD::String actualPreference = pContent.get("access_prefs").get("max").asString();
|
||||
LLStringUtil::trim(actualPreference);
|
||||
maturity = LLViewerRegion::shortStringToAccess(actualPreference);
|
||||
}
|
||||
}
|
||||
else if (pContent.has("max"))
|
||||
{
|
||||
llassert(pContent.get("max").isString());
|
||||
if (pContent.get("max").isString())
|
||||
{
|
||||
LLSD::String actualPreference = pContent.get("max").asString();
|
||||
LLStringUtil::trim(actualPreference);
|
||||
maturity = LLViewerRegion::shortStringToAccess(actualPreference);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return maturity;
|
||||
}
|
||||
|
||||
void LLAgent::setMaturityPreferenceAndConfirm(U32 preferredMaturity, maturity_preferences_callback_t pMaturityPreferencesCallback)
|
||||
{
|
||||
llassert(mMaturityPreferenceConfirmCallback == NULL);
|
||||
mMaturityPreferenceConfirmCallback = pMaturityPreferencesCallback;
|
||||
|
||||
gSavedSettings.setU32("PreferredMaturity", static_cast<U32>(preferredMaturity));
|
||||
// PreferredMaturity has a signal hook on change that will call LLAgent::sendMaturityPreferenceToServer
|
||||
// sendMaturityPreferenceToServer will use mMaturityPreferenceConfirmCallback in the LLHTTPResponder
|
||||
// This allows for confirmation that the server has officially received the maturity preference change
|
||||
|
||||
mMaturityPreferenceConfirmCallback = NULL;
|
||||
}
|
||||
|
||||
void LLAgent::handlePreferredMaturityResult(U8 pServerMaturity)
|
||||
{
|
||||
// Update the number of responses received
|
||||
++mMaturityPreferenceResponseId;
|
||||
llassert(mMaturityPreferenceResponseId <= mMaturityPreferenceRequestId);
|
||||
|
||||
// Update the last known server maturity response
|
||||
mLastKnownResponseMaturity = pServerMaturity;
|
||||
|
||||
// Ignore all responses if we know there are more unanswered requests that are expected
|
||||
if (mMaturityPreferenceResponseId == mMaturityPreferenceRequestId)
|
||||
{
|
||||
// If we received a response that matches the last known request, then we are good
|
||||
if (mLastKnownRequestMaturity == mLastKnownResponseMaturity)
|
||||
{
|
||||
mMaturityPreferenceNumRetries = 0;
|
||||
llassert(static_cast<U8>(gSavedSettings.getU32("PreferredMaturity")) == mLastKnownResponseMaturity);
|
||||
}
|
||||
// Else, the viewer is out of sync with the server, so let's try to re-sync with the
|
||||
// server by re-sending our last known request. Cap the re-tries at 3 just to be safe.
|
||||
else if (++mMaturityPreferenceNumRetries <= 3)
|
||||
{
|
||||
llinfos << "Retrying attempt #" << mMaturityPreferenceNumRetries << " to set viewer preferred maturity to '"
|
||||
<< LLViewerRegion::accessToString(mLastKnownRequestMaturity) << "'" << llendl;
|
||||
sendMaturityPreferenceToServer(mLastKnownRequestMaturity);
|
||||
}
|
||||
// Else, the viewer is style out of sync with the server after 3 retries, so inform the user
|
||||
else
|
||||
{
|
||||
mMaturityPreferenceNumRetries = 0;
|
||||
reportPreferredMaturityError();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLAgent::handlePreferredMaturityError()
|
||||
{
|
||||
// Update the number of responses received
|
||||
++mMaturityPreferenceResponseId;
|
||||
llassert(mMaturityPreferenceResponseId <= mMaturityPreferenceRequestId);
|
||||
|
||||
// Ignore all responses if we know there are more unanswered requests that are expected
|
||||
if (mMaturityPreferenceResponseId == mMaturityPreferenceRequestId)
|
||||
{
|
||||
mMaturityPreferenceNumRetries = 0;
|
||||
|
||||
// If we received a response that matches the last known request, then we are synced with
|
||||
// the server, but not quite sure why we are
|
||||
if (mLastKnownRequestMaturity == mLastKnownResponseMaturity)
|
||||
{
|
||||
llwarns << "Got an error but maturity preference '" << LLViewerRegion::accessToString(mLastKnownRequestMaturity)
|
||||
<< "' seems to be in sync with the server" << llendl;
|
||||
mMaturityPreferenceNumRetries = 0;
|
||||
}
|
||||
// Else, the more likely case is that the last request does not match the last response,
|
||||
// so inform the user
|
||||
else
|
||||
{
|
||||
reportPreferredMaturityError();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLAgent::reportPreferredMaturityError()
|
||||
{
|
||||
// Get the last known maturity request from the user activity
|
||||
std::string preferredMaturity = LLViewerRegion::accessToString(mLastKnownRequestMaturity);
|
||||
LLStringUtil::toLower(preferredMaturity);
|
||||
|
||||
// Get the last known maturity response from the server
|
||||
std::string actualMaturity = LLViewerRegion::accessToString(mLastKnownResponseMaturity);
|
||||
LLStringUtil::toLower(actualMaturity);
|
||||
|
||||
// Notify the user
|
||||
LLSD args = LLSD::emptyMap();
|
||||
args["PREFERRED_MATURITY"] = preferredMaturity;
|
||||
args["ACTUAL_MATURITY"] = actualMaturity;
|
||||
LLNotificationsUtil::add("MaturityChangeError", args);
|
||||
|
||||
// Check the saved settings to ensure that we are consistent. If we are not consistent, update
|
||||
// the viewer, but do not send anything to server
|
||||
U8 localMaturity = static_cast<U8>(gSavedSettings.getU32("PreferredMaturity"));
|
||||
if (localMaturity != mLastKnownResponseMaturity)
|
||||
{
|
||||
bool tmpIsDoSendMaturityPreferenceToServer = mIsDoSendMaturityPreferenceToServer;
|
||||
mIsDoSendMaturityPreferenceToServer = false;
|
||||
llinfos << "Setting viewer preferred maturity to '" << LLViewerRegion::accessToString(mLastKnownResponseMaturity) << "'" << llendl;
|
||||
gSavedSettings.setU32("PreferredMaturity", static_cast<U32>(mLastKnownResponseMaturity));
|
||||
mIsDoSendMaturityPreferenceToServer = tmpIsDoSendMaturityPreferenceToServer;
|
||||
}
|
||||
}
|
||||
|
||||
void LLAgent::sendMaturityPreferenceToServer(U8 pPreferredMaturity)
|
||||
{
|
||||
// Only send maturity preference to the server if enabled
|
||||
if (mIsDoSendMaturityPreferenceToServer)
|
||||
{
|
||||
// Increment the number of requests. The handlers manage a separate count of responses.
|
||||
++mMaturityPreferenceRequestId;
|
||||
|
||||
// Update the last know maturity request
|
||||
mLastKnownRequestMaturity = pPreferredMaturity;
|
||||
|
||||
// Create a response handler
|
||||
LLHTTPClient::ResponderPtr responderPtr = LLHTTPClient::ResponderPtr(new LLMaturityPreferencesResponder(this, pPreferredMaturity, mLastKnownResponseMaturity, mMaturityPreferenceConfirmCallback));
|
||||
|
||||
// If we don't have a region, report it as an error
|
||||
if (getRegion() == NULL)
|
||||
{
|
||||
responderPtr->error(0U, "region is not defined");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Find the capability to send maturity preference
|
||||
std::string url = getRegion()->getCapability("UpdateAgentInformation");
|
||||
|
||||
// If the capability is not defined, report it as an error
|
||||
if (url.empty())
|
||||
{
|
||||
responderPtr->error(0U, "capability 'UpdateAgentInformation' is not defined for region");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set new access preference
|
||||
LLSD access_prefs = LLSD::emptyMap();
|
||||
access_prefs["max"] = LLViewerRegion::accessToShortString(pPreferredMaturity);
|
||||
|
||||
LLSD body = LLSD::emptyMap();
|
||||
body["access_prefs"] = access_prefs;
|
||||
llinfos << "Sending viewer preferred maturity to '" << LLViewerRegion::accessToString(pPreferredMaturity)
|
||||
<< "' via capability to: " << url << llendl;
|
||||
LLSD headers;
|
||||
LLHTTPClient::post(url, body, responderPtr, headers, 30.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
BOOL LLAgent::getAdminOverride() const
|
||||
|
|
@ -2436,11 +2784,6 @@ void LLAgent::setGodLevel(U8 god_level)
|
|||
mAgentAccess->setGodLevel(god_level);
|
||||
}
|
||||
|
||||
void LLAgent::setAOTransition()
|
||||
{
|
||||
mAgentAccess->setTransition();
|
||||
}
|
||||
|
||||
const LLAgentAccess& LLAgent::getAgentAccess()
|
||||
{
|
||||
return *mAgentAccess;
|
||||
|
|
@ -2451,9 +2794,9 @@ bool LLAgent::validateMaturity(const LLSD& newvalue)
|
|||
return mAgentAccess->canSetMaturity(newvalue.asInteger());
|
||||
}
|
||||
|
||||
void LLAgent::handleMaturity(const LLSD& newvalue)
|
||||
void LLAgent::handleMaturity(const LLSD &pNewValue)
|
||||
{
|
||||
sendMaturityPreferenceToServer(newvalue.asInteger());
|
||||
sendMaturityPreferenceToServer(static_cast<U8>(pNewValue.asInteger()));
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
|
@ -3463,6 +3806,73 @@ bool LLAgent::teleportCore(bool is_local)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool LLAgent::hasRestartableFailedTeleportRequest()
|
||||
{
|
||||
return hasFailedTeleportRequest() && mFailedTeleportRequest->canRestartTeleport();
|
||||
}
|
||||
|
||||
void LLAgent::restartFailedTeleportRequest()
|
||||
{
|
||||
if (hasRestartableFailedTeleportRequest())
|
||||
{
|
||||
mFailedTeleportRequest->restartTeleport();
|
||||
}
|
||||
}
|
||||
|
||||
void LLAgent::clearFailedTeleportRequest()
|
||||
{
|
||||
if (hasFailedTeleportRequest())
|
||||
{
|
||||
mFailedTeleportRequest.reset();
|
||||
}
|
||||
}
|
||||
|
||||
void LLAgent::setMaturityRatingChangeDuringTeleport(U8 pMaturityRatingChange)
|
||||
{
|
||||
mIsMaturityRatingChangingDuringTeleport = true;
|
||||
mMaturityRatingChange = pMaturityRatingChange;
|
||||
}
|
||||
|
||||
void LLAgent::handleTeleportFinished()
|
||||
{
|
||||
if (hasCurrentTeleportRequest())
|
||||
{
|
||||
mCurrentTeleportRequest.reset();
|
||||
}
|
||||
if (hasFailedTeleportRequest())
|
||||
{
|
||||
clearFailedTeleportRequest();
|
||||
}
|
||||
if (mIsMaturityRatingChangingDuringTeleport)
|
||||
{
|
||||
// notify user that the maturity preference has been changed
|
||||
std::string maturityRating = LLViewerRegion::accessToString(mMaturityRatingChange);
|
||||
LLStringUtil::toLower(maturityRating);
|
||||
LLSD args;
|
||||
args["RATING"] = maturityRating;
|
||||
LLNotificationsUtil::add("PreferredMaturityChanged", args);
|
||||
mIsMaturityRatingChangingDuringTeleport = false;
|
||||
}
|
||||
}
|
||||
|
||||
void LLAgent::handleTeleportFailed()
|
||||
{
|
||||
if (hasCurrentTeleportRequest())
|
||||
{
|
||||
mFailedTeleportRequest = mCurrentTeleportRequest;
|
||||
}
|
||||
if (mIsMaturityRatingChangingDuringTeleport)
|
||||
{
|
||||
// notify user that the maturity preference has been changed
|
||||
std::string maturityRating = LLViewerRegion::accessToString(mMaturityRatingChange);
|
||||
LLStringUtil::toLower(maturityRating);
|
||||
LLSD args;
|
||||
args["RATING"] = maturityRating;
|
||||
LLNotificationsUtil::add("PreferredMaturityChanged", args);
|
||||
mIsMaturityRatingChangingDuringTeleport = false;
|
||||
}
|
||||
}
|
||||
|
||||
void LLAgent::teleportRequest(
|
||||
const U64& region_handle,
|
||||
const LLVector3& pos_local,
|
||||
|
|
@ -3494,6 +3904,12 @@ void LLAgent::teleportRequest(
|
|||
|
||||
// Landmark ID = LLUUID::null means teleport home
|
||||
void LLAgent::teleportViaLandmark(const LLUUID& landmark_asset_id)
|
||||
{
|
||||
mCurrentTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLandmark(landmark_asset_id));
|
||||
mCurrentTeleportRequest->startTeleport();
|
||||
}
|
||||
|
||||
void LLAgent::doTeleportViaLandmark(const LLUUID& landmark_asset_id)
|
||||
{
|
||||
LLViewerRegion *regionp = getRegion();
|
||||
if(regionp && teleportCore())
|
||||
|
|
@ -3509,6 +3925,12 @@ void LLAgent::teleportViaLandmark(const LLUUID& landmark_asset_id)
|
|||
}
|
||||
|
||||
void LLAgent::teleportViaLure(const LLUUID& lure_id, BOOL godlike)
|
||||
{
|
||||
mCurrentTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLure(lure_id, godlike));
|
||||
mCurrentTeleportRequest->startTeleport();
|
||||
}
|
||||
|
||||
void LLAgent::doTeleportViaLure(const LLUUID& lure_id, BOOL godlike)
|
||||
{
|
||||
LLViewerRegion* regionp = getRegion();
|
||||
if(regionp && teleportCore())
|
||||
|
|
@ -3558,6 +3980,12 @@ void LLAgent::teleportCancel()
|
|||
|
||||
|
||||
void LLAgent::teleportViaLocation(const LLVector3d& pos_global)
|
||||
{
|
||||
mCurrentTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLocation(pos_global));
|
||||
mCurrentTeleportRequest->startTeleport();
|
||||
}
|
||||
|
||||
void LLAgent::doTeleportViaLocation(const LLVector3d& pos_global)
|
||||
{
|
||||
LLViewerRegion* regionp = getRegion();
|
||||
U64 handle = to_region_handle(pos_global);
|
||||
|
|
@ -3600,6 +4028,12 @@ void LLAgent::teleportViaLocation(const LLVector3d& pos_global)
|
|||
|
||||
// Teleport to global position, but keep facing in the same direction
|
||||
void LLAgent::teleportViaLocationLookAt(const LLVector3d& pos_global)
|
||||
{
|
||||
mCurrentTeleportRequest = LLTeleportRequestPtr(new LLTeleportRequestViaLocationLookAt(pos_global));
|
||||
mCurrentTeleportRequest->startTeleport();
|
||||
}
|
||||
|
||||
void LLAgent::doTeleportViaLocationLookAt(const LLVector3d& pos_global)
|
||||
{
|
||||
mbTeleportKeepsLookAt = true;
|
||||
gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); // detach camera form avatar, so it keeps direction
|
||||
|
|
@ -4034,5 +4468,148 @@ LLAgentQueryManager::~LLAgentQueryManager()
|
|||
{
|
||||
}
|
||||
|
||||
// EOF
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLTeleportRequest
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
LLTeleportRequest::LLTeleportRequest()
|
||||
{
|
||||
}
|
||||
|
||||
LLTeleportRequest::~LLTeleportRequest()
|
||||
{
|
||||
}
|
||||
|
||||
bool LLTeleportRequest::canRestartTeleport()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLTeleportRequest::restartTeleport()
|
||||
{
|
||||
llassert(0);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLTeleportRequestViaLandmark
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
LLTeleportRequestViaLandmark::LLTeleportRequestViaLandmark(const LLUUID &pLandmarkId)
|
||||
: LLTeleportRequest(),
|
||||
mLandmarkId(pLandmarkId)
|
||||
{
|
||||
}
|
||||
|
||||
LLTeleportRequestViaLandmark::~LLTeleportRequestViaLandmark()
|
||||
{
|
||||
}
|
||||
|
||||
bool LLTeleportRequestViaLandmark::canRestartTeleport()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLTeleportRequestViaLandmark::startTeleport()
|
||||
{
|
||||
gAgent.doTeleportViaLandmark(getLandmarkId());
|
||||
}
|
||||
|
||||
void LLTeleportRequestViaLandmark::restartTeleport()
|
||||
{
|
||||
gAgent.doTeleportViaLandmark(getLandmarkId());
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLTeleportRequestViaLure
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
LLTeleportRequestViaLure::LLTeleportRequestViaLure(const LLUUID &pLureId, BOOL pIsLureGodLike)
|
||||
: LLTeleportRequestViaLandmark(pLureId),
|
||||
mIsLureGodLike(pIsLureGodLike)
|
||||
{
|
||||
}
|
||||
|
||||
LLTeleportRequestViaLure::~LLTeleportRequestViaLure()
|
||||
{
|
||||
}
|
||||
|
||||
bool LLTeleportRequestViaLure::canRestartTeleport()
|
||||
{
|
||||
// stinson 05/17/2012 : cannot restart a teleport via lure because of server-side restrictions
|
||||
// The current scenario is as follows:
|
||||
// 1. User A initializes a request for User B to teleport via lure
|
||||
// 2. User B accepts the teleport via lure request
|
||||
// 3. The server sees the init request from User A and the accept request from User B and matches them up
|
||||
// 4. The server then removes the paired requests up from the "queue"
|
||||
// 5. The server then fails User B's teleport for reason of maturity level (for example)
|
||||
// 6. User B's viewer prompts user to increase their maturity level profile value.
|
||||
// 7. User B confirms and accepts increase in maturity level
|
||||
// 8. User B's viewer then attempts to teleport via lure again
|
||||
// 9. This request will time-out on the viewer-side because User A's initial request has been removed from the "queue" in step 4
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLTeleportRequestViaLure::startTeleport()
|
||||
{
|
||||
gAgent.doTeleportViaLure(getLandmarkId(), isLureGodLike());
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLTeleportRequestViaLocation
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
LLTeleportRequestViaLocation::LLTeleportRequestViaLocation(const LLVector3d &pPosGlobal)
|
||||
: LLTeleportRequest(),
|
||||
mPosGlobal(pPosGlobal)
|
||||
{
|
||||
}
|
||||
|
||||
LLTeleportRequestViaLocation::~LLTeleportRequestViaLocation()
|
||||
{
|
||||
}
|
||||
|
||||
bool LLTeleportRequestViaLocation::canRestartTeleport()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLTeleportRequestViaLocation::startTeleport()
|
||||
{
|
||||
gAgent.doTeleportViaLocation(getPosGlobal());
|
||||
}
|
||||
|
||||
void LLTeleportRequestViaLocation::restartTeleport()
|
||||
{
|
||||
gAgent.doTeleportViaLocation(getPosGlobal());
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// LLTeleportRequestViaLocationLookAt
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
LLTeleportRequestViaLocationLookAt::LLTeleportRequestViaLocationLookAt(const LLVector3d &pPosGlobal)
|
||||
: LLTeleportRequestViaLocation(pPosGlobal)
|
||||
{
|
||||
}
|
||||
|
||||
LLTeleportRequestViaLocationLookAt::~LLTeleportRequestViaLocationLookAt()
|
||||
{
|
||||
}
|
||||
|
||||
bool LLTeleportRequestViaLocationLookAt::canRestartTeleport()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLTeleportRequestViaLocationLookAt::startTeleport()
|
||||
{
|
||||
gAgent.doTeleportViaLocationLookAt(getPosGlobal());
|
||||
}
|
||||
|
||||
void LLTeleportRequestViaLocationLookAt::restartTeleport()
|
||||
{
|
||||
gAgent.doTeleportViaLocationLookAt(getPosGlobal());
|
||||
}
|
||||
|
||||
// EOF
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@
|
|||
#include "llcoordframe.h" // for mFrameAgent
|
||||
#include "llvoavatardefines.h"
|
||||
|
||||
#include <boost/function.hpp>
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include <boost/signals2.hpp>
|
||||
|
||||
extern const BOOL ANIMATE;
|
||||
|
|
@ -56,6 +58,9 @@ class LLAgentAccess;
|
|||
class LLSLURL;
|
||||
class LLPauseRequestHandle;
|
||||
class LLUIColor;
|
||||
class LLTeleportRequest;
|
||||
|
||||
typedef boost::shared_ptr<LLTeleportRequest> LLTeleportRequestPtr;
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Types
|
||||
|
|
@ -556,9 +561,6 @@ private:
|
|||
// Teleport Actions
|
||||
//--------------------------------------------------------------------
|
||||
public:
|
||||
void teleportRequest(const U64& region_handle,
|
||||
const LLVector3& pos_local, // Go to a named location home
|
||||
bool look_at_from_camera = false);
|
||||
void teleportViaLandmark(const LLUUID& landmark_id); // Teleport to a landmark
|
||||
void teleportHome() { teleportViaLandmark(LLUUID::null); } // Go home
|
||||
void teleportViaLure(const LLUUID& lure_id, BOOL godlike); // To an invited location
|
||||
|
|
@ -569,6 +571,44 @@ public:
|
|||
protected:
|
||||
bool teleportCore(bool is_local = false); // Stuff for all teleports; returns true if the teleport can proceed
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Teleport State
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public:
|
||||
inline bool hasCurrentTeleportRequest() {return (mCurrentTeleportRequest != NULL);};
|
||||
inline bool hasFailedTeleportRequest() {return (mFailedTeleportRequest != NULL);};
|
||||
bool hasRestartableFailedTeleportRequest();
|
||||
void restartFailedTeleportRequest();
|
||||
void clearFailedTeleportRequest();
|
||||
void setMaturityRatingChangeDuringTeleport(U8 pMaturityRatingChange);
|
||||
|
||||
private:
|
||||
friend class LLTeleportRequest;
|
||||
friend class LLTeleportRequestViaLandmark;
|
||||
friend class LLTeleportRequestViaLure;
|
||||
friend class LLTeleportRequestViaLocation;
|
||||
friend class LLTeleportRequestViaLocationLookAt;
|
||||
|
||||
LLTeleportRequestPtr mCurrentTeleportRequest;
|
||||
LLTeleportRequestPtr mFailedTeleportRequest;
|
||||
boost::signals2::connection mTeleportFinishedSlot;
|
||||
boost::signals2::connection mTeleportFailedSlot;
|
||||
|
||||
bool mIsMaturityRatingChangingDuringTeleport;
|
||||
U8 mMaturityRatingChange;
|
||||
|
||||
void teleportRequest(const U64& region_handle,
|
||||
const LLVector3& pos_local, // Go to a named location home
|
||||
bool look_at_from_camera = false);
|
||||
void doTeleportViaLandmark(const LLUUID& landmark_id); // Teleport to a landmark
|
||||
void doTeleportViaLure(const LLUUID& lure_id, BOOL godlike); // To an invited location
|
||||
void doTeleportViaLocation(const LLVector3d& pos_global); // To a global location - this will probably need to be deprecated
|
||||
void doTeleportViaLocationLookAt(const LLVector3d& pos_global);// To a global location, preserving camera rotation
|
||||
|
||||
void handleTeleportFinished();
|
||||
void handleTeleportFailed();
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Teleport State
|
||||
//--------------------------------------------------------------------
|
||||
|
|
@ -614,8 +654,6 @@ public:
|
|||
const LLAgentAccess& getAgentAccess();
|
||||
BOOL canManageEstate() const;
|
||||
BOOL getAdminOverride() const;
|
||||
// ! BACKWARDS COMPATIBILITY ! This function can go away after the AO transition (see llstartup.cpp).
|
||||
void setAOTransition();
|
||||
private:
|
||||
LLAgentAccess * mAgentAccess;
|
||||
|
||||
|
|
@ -650,13 +688,29 @@ public:
|
|||
bool isTeen() const;
|
||||
bool isMature() const;
|
||||
bool isAdult() const;
|
||||
void setTeen(bool teen);
|
||||
void setMaturity(char text);
|
||||
static int convertTextToMaturity(char text);
|
||||
bool sendMaturityPreferenceToServer(int preferredMaturity); // ! "U8" instead of "int"?
|
||||
static int convertTextToMaturity(char text);
|
||||
|
||||
typedef boost::function<void (U8)> maturity_preferences_callback_t;
|
||||
void setMaturityPreferenceAndConfirm(U32 preferredMaturity, maturity_preferences_callback_t pMaturityPreferencesCallback);
|
||||
private:
|
||||
bool mIsDoSendMaturityPreferenceToServer;
|
||||
maturity_preferences_callback_t mMaturityPreferenceConfirmCallback;
|
||||
unsigned int mMaturityPreferenceRequestId;
|
||||
unsigned int mMaturityPreferenceResponseId;
|
||||
unsigned int mMaturityPreferenceNumRetries;
|
||||
U8 mLastKnownRequestMaturity;
|
||||
U8 mLastKnownResponseMaturity;
|
||||
|
||||
void sendMaturityPreferenceToServer(U8 pPreferredMaturity);
|
||||
|
||||
friend class LLMaturityPreferencesResponder;
|
||||
void handlePreferredMaturityResult(U8 pServerMaturity);
|
||||
void handlePreferredMaturityError();
|
||||
void reportPreferredMaturityError();
|
||||
|
||||
// Maturity callbacks for PreferredMaturity control variable
|
||||
void handleMaturity(const LLSD& newvalue);
|
||||
void handleMaturity(const LLSD &pNewValue);
|
||||
bool validateMaturity(const LLSD& newvalue);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -33,8 +33,7 @@ LLAgentAccess::LLAgentAccess(LLControlGroup& savedSettings) :
|
|||
mSavedSettings(savedSettings),
|
||||
mAccess(SIM_ACCESS_PG),
|
||||
mAdminOverride(false),
|
||||
mGodLevel(GOD_NOT),
|
||||
mAOTransition(false)
|
||||
mGodLevel(GOD_NOT)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -133,18 +132,6 @@ bool LLAgentAccess::isAdult() const
|
|||
return mAccess >= SIM_ACCESS_ADULT;
|
||||
}
|
||||
|
||||
void LLAgentAccess::setTeen(bool teen)
|
||||
{
|
||||
if (teen)
|
||||
{
|
||||
mAccess = SIM_ACCESS_PG;
|
||||
}
|
||||
else
|
||||
{
|
||||
mAccess = SIM_ACCESS_MATURE;
|
||||
}
|
||||
}
|
||||
|
||||
//static
|
||||
int LLAgentAccess::convertTextToMaturity(char text)
|
||||
{
|
||||
|
|
@ -182,16 +169,6 @@ void LLAgentAccess::setMaturity(char text)
|
|||
mSavedSettings.setU32("PreferredMaturity", preferred_access);
|
||||
}
|
||||
|
||||
void LLAgentAccess::setTransition()
|
||||
{
|
||||
mAOTransition = true;
|
||||
}
|
||||
|
||||
bool LLAgentAccess::isInTransition() const
|
||||
{
|
||||
return mAOTransition;
|
||||
}
|
||||
|
||||
bool LLAgentAccess::canSetMaturity(S32 maturity)
|
||||
{
|
||||
if (isGodlike()) // Gods can always set their Maturity level
|
||||
|
|
|
|||
|
|
@ -59,13 +59,10 @@ public:
|
|||
bool isMature() const;
|
||||
bool isAdult() const;
|
||||
|
||||
void setTeen(bool teen);
|
||||
void setMaturity(char text);
|
||||
|
||||
static int convertTextToMaturity(char text);
|
||||
|
||||
void setTransition(); // sets the transition bit, which defaults to false
|
||||
bool isInTransition() const;
|
||||
bool canSetMaturity(S32 maturity);
|
||||
|
||||
private:
|
||||
|
|
@ -73,13 +70,6 @@ private:
|
|||
U8 mGodLevel;
|
||||
bool mAdminOverride;
|
||||
|
||||
// this should be deleted after the 60-day AO transition.
|
||||
// It should be safe to remove it in Viewer 2009
|
||||
// It's set by a special short-term flag in login.cgi
|
||||
// called ao_transition. When that's gone, this can go, along with
|
||||
// all of the code that depends on it.
|
||||
bool mAOTransition;
|
||||
|
||||
LLControlGroup& mSavedSettings;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,9 @@
|
|||
#include "llviewerregion.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llviewerwindow.h"
|
||||
#ifndef STINSON_ADULT_CHECK_HACK
|
||||
#include "llviewercontrol.h"
|
||||
#endif // STINSON_ADULT_CHECK_HACK
|
||||
|
||||
LLFloaterBuyContents::LLFloaterBuyContents(const LLSD& key)
|
||||
: LLFloater(key)
|
||||
|
|
@ -64,7 +67,11 @@ BOOL LLFloaterBuyContents::postBuild()
|
|||
getChild<LLUICtrl>("buy_btn")->setCommitCallback( boost::bind(&LLFloaterBuyContents::onClickBuy, this));
|
||||
|
||||
getChildView("item_list")->setEnabled(FALSE);
|
||||
#ifndef STINSON_ADULT_CHECK_HACK
|
||||
getChildView("buy_btn")->setEnabled(gSavedSettings.getBOOL("AdultCheckEnablePurchse"));
|
||||
#else // STINSON_ADULT_CHECK_HACK
|
||||
getChildView("buy_btn")->setEnabled(FALSE);
|
||||
#endif // STINSON_ADULT_CHECK_HACK
|
||||
getChildView("wear_check")->setEnabled(FALSE);
|
||||
|
||||
setDefaultBtn("cancel_btn"); // to avoid accidental buy (SL-43130)
|
||||
|
|
@ -163,7 +170,11 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,
|
|||
}
|
||||
|
||||
// default to turning off the buy button.
|
||||
#ifndef STINSON_ADULT_CHECK_HACK
|
||||
getChildView("buy_btn")->setEnabled(gSavedSettings.getBOOL("AdultCheckEnablePurchse"));
|
||||
#else // STINSON_ADULT_CHECK_HACK
|
||||
getChildView("buy_btn")->setEnabled(FALSE);
|
||||
#endif // STINSON_ADULT_CHECK_HACK
|
||||
|
||||
LLUUID owner_id;
|
||||
BOOL is_group_owned;
|
||||
|
|
|
|||
|
|
@ -41,6 +41,9 @@
|
|||
#include "llweb.h"
|
||||
#include "llwindow.h"
|
||||
#include "llappviewer.h"
|
||||
#ifndef STINSON_ADULT_CHECK_HACK
|
||||
#include "llviewercontrol.h"
|
||||
#endif // STINSON_ADULT_CHECK_HACK
|
||||
|
||||
static const S32 STANDARD_BUY_AMOUNT = 2000;
|
||||
static const S32 MINIMUM_BALANCE_AMOUNT = 0;
|
||||
|
|
@ -156,7 +159,11 @@ void LLFloaterBuyCurrencyUI::draw()
|
|||
}
|
||||
|
||||
// disable the Buy button when we are not able to buy
|
||||
#ifndef STINSON_ADULT_CHECK_HACK
|
||||
getChildView("buy_btn")->setEnabled(gSavedSettings.getBOOL("AdultCheckEnablePurchse") || mManager.canBuy());
|
||||
#else // STINSON_ADULT_CHECK_HACK
|
||||
getChildView("buy_btn")->setEnabled(mManager.canBuy());
|
||||
#endif // STINSON_ADULT_CHECK_HACK
|
||||
|
||||
LLFloater::draw();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1305,7 +1305,11 @@ void LLFloaterBuyLandUI::refreshUI()
|
|||
agrees_to_covenant = check->get();
|
||||
}
|
||||
|
||||
#ifndef STINSON_ADULT_CHECK_HACK
|
||||
getChildView("buy_btn")->setEnabled(gSavedSettings.getBOOL("AdultCheckEnablePurchse") || (mCanBuy && mSiteValid && willHaveEnough && !mTransaction && agrees_to_covenant));
|
||||
#else // STINSON_ADULT_CHECK_HACK
|
||||
getChildView("buy_btn")->setEnabled(mCanBuy && mSiteValid && willHaveEnough && !mTransaction && agrees_to_covenant);
|
||||
#endif // STINSON_ADULT_CHECK_HACK
|
||||
}
|
||||
|
||||
void LLFloaterBuyLandUI::startBuyPreConfirm()
|
||||
|
|
|
|||
|
|
@ -1865,23 +1865,8 @@ BOOL LLPanelLandOptions::postBuild()
|
|||
childSetCommitCallback("ShowDirectoryCheck", onCommitAny, this);
|
||||
|
||||
|
||||
if (gAgent.getAgentAccess().isInTransition())
|
||||
{
|
||||
// during the AO transition, this combo has an Adult item.
|
||||
// Post-transition, it goes away. We can remove this conditional
|
||||
// after the transition and just use the "else" clause.
|
||||
mCategoryCombo = getChild<LLComboBox>( "land category with adult");
|
||||
childSetCommitCallback("land category with adult", onCommitAny, this);
|
||||
}
|
||||
else
|
||||
{
|
||||
// this is the code that should be preserved post-transition
|
||||
// you could also change the XML to set visibility and enabled true.
|
||||
mCategoryCombo = getChild<LLComboBox>( "land category");
|
||||
childSetCommitCallback("land category", onCommitAny, this);
|
||||
}
|
||||
mCategoryCombo->setVisible(true);
|
||||
mCategoryCombo->setEnabled(true);
|
||||
mCategoryCombo = getChild<LLComboBox>( "land category");
|
||||
childSetCommitCallback("land category", onCommitAny, this);
|
||||
|
||||
|
||||
mMatureCtrl = getChild<LLCheckBoxCtrl>( "MatureCheck");
|
||||
|
|
|
|||
|
|
@ -435,6 +435,8 @@ BOOL LLFloaterPreference::postBuild()
|
|||
|
||||
gSavedSettings.getControl("ChatBubbleOpacity")->getSignal()->connect(boost::bind(&LLFloaterPreference::onNameTagOpacityChange, this, _2));
|
||||
|
||||
gSavedSettings.getControl("PreferredMaturity")->getSignal()->connect(boost::bind(&LLFloaterPreference::onChangeMaturity, this));
|
||||
|
||||
LLTabContainer* tabcontainer = getChild<LLTabContainer>("pref core");
|
||||
if (!tabcontainer->selectTab(gSavedSettings.getS32("LastPrefTab")))
|
||||
tabcontainer->selectFirstTab();
|
||||
|
|
|
|||
|
|
@ -251,7 +251,11 @@ void LLSidepanelTaskInfo::disableAll()
|
|||
|
||||
mOpenBtn->setEnabled(FALSE);
|
||||
mPayBtn->setEnabled(FALSE);
|
||||
#ifndef STINSON_ADULT_CHECK_HACK
|
||||
mBuyBtn->setEnabled(gSavedSettings.getBOOL("AdultCheckEnablePurchse"));
|
||||
#else // STINSON_ADULT_CHECK_HACK
|
||||
mBuyBtn->setEnabled(FALSE);
|
||||
#endif // STINSON_ADULT_CHECK_HACK
|
||||
}
|
||||
|
||||
void LLSidepanelTaskInfo::refresh()
|
||||
|
|
|
|||
|
|
@ -3211,17 +3211,6 @@ bool process_login_success_response()
|
|||
|
||||
gSavedSettings.setU32("PreferredMaturity", preferredMaturity);
|
||||
}
|
||||
// During the AO transition, this flag will be true. Then the flag will
|
||||
// go away. After the AO transition, this code and all the code that
|
||||
// uses it can be deleted.
|
||||
text = response["ao_transition"].asString();
|
||||
if (!text.empty())
|
||||
{
|
||||
if (text == "1")
|
||||
{
|
||||
gAgent.setAOTransition();
|
||||
}
|
||||
}
|
||||
|
||||
text = response["start_location"].asString();
|
||||
if(!text.empty())
|
||||
|
|
|
|||
|
|
@ -338,15 +338,6 @@ static bool handleUploadBakedTexOldChanged(const LLSD& newvalue)
|
|||
}
|
||||
|
||||
|
||||
static bool handleNumpadControlChanged(const LLSD& newvalue)
|
||||
{
|
||||
if (gKeyboard)
|
||||
{
|
||||
gKeyboard->setNumpadDistinct(static_cast<LLKeyboard::e_numpad_distinct>(newvalue.asInteger()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool handleWLSkyDetailChanged(const LLSD&)
|
||||
{
|
||||
if (gSky.mVOWLSkyp.notNull())
|
||||
|
|
@ -645,7 +636,6 @@ void settings_setup_listeners()
|
|||
gSavedSettings.getControl("RenderUseStreamVBO")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
|
||||
gSavedSettings.getControl("RenderPreferStreamDraw")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
|
||||
gSavedSettings.getControl("WLSkyDetail")->getSignal()->connect(boost::bind(&handleWLSkyDetailChanged, _2));
|
||||
gSavedSettings.getControl("NumpadControl")->getSignal()->connect(boost::bind(&handleNumpadControlChanged, _2));
|
||||
gSavedSettings.getControl("JoystickAxis0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("JoystickAxis1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
gSavedSettings.getControl("JoystickAxis2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2));
|
||||
|
|
|
|||
|
|
@ -116,6 +116,9 @@
|
|||
#include "lltoolgrab.h"
|
||||
#include "llwindow.h"
|
||||
#include "boost/unordered_map.hpp"
|
||||
#ifndef STINSON_ADULT_CHECK_HACK
|
||||
#include "llviewercontrol.h"
|
||||
#endif // STINSON_ADULT_CHECK_HACK
|
||||
|
||||
using namespace LLVOAvatarDefines;
|
||||
|
||||
|
|
@ -299,7 +302,6 @@ BOOL enable_buy_land(void*);
|
|||
|
||||
void handle_test_male(void *);
|
||||
void handle_test_female(void *);
|
||||
void handle_toggle_pg(void*);
|
||||
void handle_dump_attachments(void *);
|
||||
void handle_dump_avatar_local_textures(void*);
|
||||
void handle_debug_avatar_textures(void*);
|
||||
|
|
@ -340,7 +342,11 @@ void LLMenuParcelObserver::changed()
|
|||
{
|
||||
gMenuHolder->childSetEnabled("Land Buy Pass", LLPanelLandGeneral::enableBuyPass(NULL));
|
||||
|
||||
#ifndef STINSON_ADULT_CHECK_HACK
|
||||
BOOL buyable = gSavedSettings.getBOOL("AdultCheckEnablePurchse") || enable_buy_land(NULL);
|
||||
#else // STINSON_ADULT_CHECK_HACK
|
||||
BOOL buyable = enable_buy_land(NULL);
|
||||
#endif // STINSON_ADULT_CHECK_HACK
|
||||
gMenuHolder->childSetEnabled("Land Buy", buyable);
|
||||
gMenuHolder->childSetEnabled("Buy Land...", buyable);
|
||||
}
|
||||
|
|
@ -1586,23 +1592,6 @@ class LLAdvancedTestFemale : public view_listener_t
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
///////////////
|
||||
// TOGGLE PG //
|
||||
///////////////
|
||||
|
||||
|
||||
class LLAdvancedTogglePG : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
handle_toggle_pg(NULL);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class LLAdvancedForceParamsToDefault : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
|
|
@ -3255,6 +3244,12 @@ void append_aggregate(std::string& string, const LLAggregatePermissions& ag_perm
|
|||
|
||||
bool enable_buy_object()
|
||||
{
|
||||
#ifndef STINSON_ADULT_CHECK_HACK
|
||||
if (gSavedSettings.getBOOL("AdultCheckEnablePurchse"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#endif // STINSON_ADULT_CHECK_HACK
|
||||
// In order to buy, there must only be 1 purchaseable object in
|
||||
// the selection manger.
|
||||
if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != 1) return false;
|
||||
|
|
@ -5971,6 +5966,12 @@ class LLWorldEnableBuyLand : public view_listener_t
|
|||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
#ifndef STINSON_ADULT_CHECK_HACK
|
||||
if (gSavedSettings.getBOOL("AdultCheckEnablePurchse"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#endif // STINSON_ADULT_CHECK_HACK
|
||||
bool new_value = LLViewerParcelMgr::getInstance()->canAgentBuyParcel(
|
||||
LLViewerParcelMgr::getInstance()->selectionEmpty()
|
||||
? LLViewerParcelMgr::getInstance()->getAgentParcel()
|
||||
|
|
@ -6670,15 +6671,6 @@ void handle_test_female(void*)
|
|||
//gGestureList.requestResetFromServer( FALSE );
|
||||
}
|
||||
|
||||
void handle_toggle_pg(void*)
|
||||
{
|
||||
gAgent.setTeen( !gAgent.isTeen() );
|
||||
|
||||
LLFloaterWorldMap::reloadIcons(NULL);
|
||||
|
||||
llinfos << "PG status set to " << (S32)gAgent.isTeen() << llendl;
|
||||
}
|
||||
|
||||
void handle_dump_attachments(void*)
|
||||
{
|
||||
if(!isAgentAvatarValid()) return;
|
||||
|
|
@ -8239,7 +8231,6 @@ void initialize_menus()
|
|||
|
||||
view_listener_t::addMenu(new LLAdvancedTestMale(), "Advanced.TestMale");
|
||||
view_listener_t::addMenu(new LLAdvancedTestFemale(), "Advanced.TestFemale");
|
||||
view_listener_t::addMenu(new LLAdvancedTogglePG(), "Advanced.TogglePG");
|
||||
|
||||
// Advanced > Character (toplevel)
|
||||
view_listener_t::addMenu(new LLAdvancedForceParamsToDefault(), "Advanced.ForceParamsToDefault");
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
#include "llinventorydefines.h"
|
||||
#include "lllslconstants.h"
|
||||
#include "llregionhandle.h"
|
||||
#include "llsd.h"
|
||||
#include "llsdserialize.h"
|
||||
#include "llteleportflags.h"
|
||||
#include "lltransactionflags.h"
|
||||
|
|
@ -107,6 +108,7 @@
|
|||
#include "llagentui.h"
|
||||
#include "llpanelblockedlist.h"
|
||||
#include "llpanelplaceprofile.h"
|
||||
#include "llviewerregion.h"
|
||||
|
||||
#include <boost/algorithm/string/split.hpp> //
|
||||
#include <boost/regex.hpp>
|
||||
|
|
@ -5389,23 +5391,114 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
|
|||
}
|
||||
}
|
||||
|
||||
void handle_maturity_preference_change_and_reteleport(U8 pActualMaturityRating, U8 pRequestedMaturityRating)
|
||||
{
|
||||
bool isMaturityPreferenceElevated = false;
|
||||
|
||||
switch (pActualMaturityRating)
|
||||
{
|
||||
case SIM_ACCESS_MIN :
|
||||
switch (pRequestedMaturityRating)
|
||||
{
|
||||
case SIM_ACCESS_MIN :
|
||||
isMaturityPreferenceElevated = true;
|
||||
break;
|
||||
case SIM_ACCESS_PG :
|
||||
case SIM_ACCESS_MATURE :
|
||||
case SIM_ACCESS_ADULT :
|
||||
default :
|
||||
isMaturityPreferenceElevated = false;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SIM_ACCESS_PG :
|
||||
switch (pRequestedMaturityRating)
|
||||
{
|
||||
case SIM_ACCESS_MIN :
|
||||
case SIM_ACCESS_PG :
|
||||
isMaturityPreferenceElevated = true;
|
||||
break;
|
||||
case SIM_ACCESS_MATURE :
|
||||
case SIM_ACCESS_ADULT :
|
||||
default :
|
||||
isMaturityPreferenceElevated = false;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SIM_ACCESS_MATURE :
|
||||
switch (pRequestedMaturityRating)
|
||||
{
|
||||
case SIM_ACCESS_MIN :
|
||||
case SIM_ACCESS_PG :
|
||||
case SIM_ACCESS_MATURE :
|
||||
isMaturityPreferenceElevated = true;
|
||||
break;
|
||||
case SIM_ACCESS_ADULT :
|
||||
default :
|
||||
isMaturityPreferenceElevated = false;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SIM_ACCESS_ADULT :
|
||||
switch (pRequestedMaturityRating)
|
||||
{
|
||||
case SIM_ACCESS_MIN :
|
||||
case SIM_ACCESS_PG :
|
||||
case SIM_ACCESS_MATURE :
|
||||
case SIM_ACCESS_ADULT :
|
||||
isMaturityPreferenceElevated = true;
|
||||
break;
|
||||
default :
|
||||
isMaturityPreferenceElevated = false;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default :
|
||||
isMaturityPreferenceElevated = false;
|
||||
break;
|
||||
}
|
||||
|
||||
bool handle_special_notification_callback(const LLSD& notification, const LLSD& response)
|
||||
if (isMaturityPreferenceElevated)
|
||||
{
|
||||
gAgent.setMaturityRatingChangeDuringTeleport(pActualMaturityRating);
|
||||
gAgent.restartFailedTeleportRequest();
|
||||
}
|
||||
else
|
||||
{
|
||||
LLSD args;
|
||||
args["RATING"] = LLViewerRegion::accessToString(pRequestedMaturityRating);
|
||||
LLNotificationsUtil::add("MaturityCouldNotBeChanged", args);
|
||||
gAgent.clearFailedTeleportRequest();
|
||||
}
|
||||
}
|
||||
|
||||
bool handle_prompt_for_maturity_level_change_callback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
|
||||
if (0 == option)
|
||||
{
|
||||
// set the preference to the maturity of the region we're calling
|
||||
int preferredMaturity = notification["payload"]["_region_access"].asInteger();
|
||||
gSavedSettings.setU32("PreferredMaturity", preferredMaturity);
|
||||
gAgent.sendMaturityPreferenceToServer(preferredMaturity);
|
||||
U8 preferredMaturity = static_cast<U8>(notification["payload"]["_region_access"].asInteger());
|
||||
gSavedSettings.setU32("PreferredMaturity", static_cast<U32>(preferredMaturity));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// notify user that the maturity preference has been changed
|
||||
LLSD args;
|
||||
args["RATING"] = LLViewerRegion::accessToString(preferredMaturity);
|
||||
LLNotificationsUtil::add("PreferredMaturityChanged", args);
|
||||
bool handle_prompt_for_maturity_level_change_and_reteleport_callback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
|
||||
if (0 == option)
|
||||
{
|
||||
// set the preference to the maturity of the region we're calling
|
||||
U8 preferredMaturity = static_cast<U8>(notification["payload"]["_region_access"].asInteger());
|
||||
gAgent.setMaturityPreferenceAndConfirm(static_cast<U32>(preferredMaturity), boost::bind(&handle_maturity_preference_change_and_reteleport, _1, preferredMaturity));
|
||||
}
|
||||
else
|
||||
{
|
||||
gAgent.clearFailedTeleportRequest();
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
@ -5414,39 +5507,86 @@ bool handle_special_notification_callback(const LLSD& notification, const LLSD&
|
|||
// some of the server notifications need special handling. This is where we do that.
|
||||
bool handle_special_notification(std::string notificationID, LLSD& llsdBlock)
|
||||
{
|
||||
int regionAccess = llsdBlock["_region_access"].asInteger();
|
||||
llsdBlock["REGIONMATURITY"] = LLViewerRegion::accessToString(regionAccess);
|
||||
|
||||
// we're going to throw the LLSD in there in case anyone ever wants to use it
|
||||
LLNotificationsUtil::add(notificationID+"_Notify", llsdBlock);
|
||||
U8 regionAccess = static_cast<U8>(llsdBlock["_region_access"].asInteger());
|
||||
std::string regionMaturity = LLViewerRegion::accessToString(regionAccess);
|
||||
LLStringUtil::toLower(regionMaturity);
|
||||
llsdBlock["REGIONMATURITY"] = regionMaturity;
|
||||
|
||||
bool returnValue = false;
|
||||
LLNotificationPtr maturityLevelNotification;
|
||||
std::string notifySuffix = "_Notify";
|
||||
if (regionAccess == SIM_ACCESS_MATURE)
|
||||
{
|
||||
if (gAgent.isTeen())
|
||||
{
|
||||
LLNotificationsUtil::add(notificationID+"_KB", llsdBlock);
|
||||
return true;
|
||||
gAgent.clearFailedTeleportRequest();
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
|
||||
returnValue = true;
|
||||
|
||||
notifySuffix = "_NotifyAdultsOnly";
|
||||
}
|
||||
else if (gAgent.prefersPG())
|
||||
{
|
||||
LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_special_notification_callback);
|
||||
return true;
|
||||
if ((LLStringUtil::compareStrings(notificationID, "RegionEntryAccessBlocked") == 0) &&
|
||||
gAgent.hasRestartableFailedTeleportRequest())
|
||||
{
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
|
||||
returnValue = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
gAgent.clearFailedTeleportRequest();
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
|
||||
returnValue = true;
|
||||
}
|
||||
}
|
||||
else if (LLStringUtil::compareStrings(notificationID, "RegionEntryAccessBlocked") == 0)
|
||||
{
|
||||
gAgent.clearFailedTeleportRequest();
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
|
||||
returnValue = true;
|
||||
}
|
||||
}
|
||||
else if (regionAccess == SIM_ACCESS_ADULT)
|
||||
{
|
||||
if (!gAgent.isAdult())
|
||||
{
|
||||
LLNotificationsUtil::add(notificationID+"_KB", llsdBlock);
|
||||
return true;
|
||||
gAgent.clearFailedTeleportRequest();
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
|
||||
returnValue = true;
|
||||
|
||||
notifySuffix = "_NotifyAdultsOnly";
|
||||
}
|
||||
else if (gAgent.prefersPG() || gAgent.prefersMature())
|
||||
{
|
||||
LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_special_notification_callback);
|
||||
return true;
|
||||
if ((LLStringUtil::compareStrings(notificationID, "RegionEntryAccessBlocked") == 0) &&
|
||||
gAgent.hasRestartableFailedTeleportRequest())
|
||||
{
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
|
||||
returnValue = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
gAgent.clearFailedTeleportRequest();
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
|
||||
returnValue = true;
|
||||
}
|
||||
}
|
||||
else if (LLStringUtil::compareStrings(notificationID, "RegionEntryAccessBlocked") == 0)
|
||||
{
|
||||
gAgent.clearFailedTeleportRequest();
|
||||
maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
|
||||
returnValue = true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
if ((maturityLevelNotification == NULL) || maturityLevelNotification->isIgnored())
|
||||
{
|
||||
// Given a simple notification if no maturityLevelNotification is set or it is ignore
|
||||
LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock);
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
bool attempt_standard_notification(LLMessageSystem* msgsystem)
|
||||
|
|
@ -5490,16 +5630,20 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
|
|||
|
||||
RegionEntryAccessBlocked
|
||||
RegionEntryAccessBlocked_Notify
|
||||
RegionEntryAccessBlocked_NotifyAdultsOnly
|
||||
RegionEntryAccessBlocked_Change
|
||||
RegionEntryAccessBlocked_KB
|
||||
RegionEntryAccessBlocked_AdultsOnlyContent
|
||||
RegionEntryAccessBlocked_ChangeAndReTeleport
|
||||
LandClaimAccessBlocked
|
||||
LandClaimAccessBlocked_Notify
|
||||
LandClaimAccessBlocked_NotifyAdultsOnly
|
||||
LandClaimAccessBlocked_Change
|
||||
LandClaimAccessBlocked_KB
|
||||
LandClaimAccessBlocked_AdultsOnlyContent
|
||||
LandBuyAccessBlocked
|
||||
LandBuyAccessBlocked_Notify
|
||||
LandBuyAccessBlocked_NotifyAdultsOnly
|
||||
LandBuyAccessBlocked_Change
|
||||
LandBuyAccessBlocked_KB
|
||||
LandBuyAccessBlocked_AdultsOnlyContent
|
||||
|
||||
-----------------------------------------------------------------------*/
|
||||
if (handle_special_notification(notificationID, llsdBlock))
|
||||
|
|
@ -5551,6 +5695,30 @@ void process_alert_message(LLMessageSystem *msgsystem, void **user_data)
|
|||
}
|
||||
}
|
||||
|
||||
bool handle_not_age_verified_alert(const std::string &pAlertName)
|
||||
{
|
||||
LLNotificationPtr notification = LLNotificationsUtil::add(pAlertName);
|
||||
if ((notification == NULL) || notification->isIgnored())
|
||||
{
|
||||
LLNotificationsUtil::add(pAlertName + "_Notify");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool handle_special_alerts(const std::string &pAlertName)
|
||||
{
|
||||
bool isHandled = false;
|
||||
|
||||
if (LLStringUtil::compareStrings(pAlertName, "NotAgeVerified") == 0)
|
||||
{
|
||||
|
||||
isHandled = handle_not_age_verified_alert(pAlertName);
|
||||
}
|
||||
|
||||
return isHandled;
|
||||
}
|
||||
|
||||
void process_alert_core(const std::string& message, BOOL modal)
|
||||
{
|
||||
// HACK -- handle callbacks for specific alerts. It also is localized in notifications.xml
|
||||
|
|
@ -5574,7 +5742,10 @@ void process_alert_core(const std::string& message, BOOL modal)
|
|||
// Allow the server to spawn a named alert so that server alerts can be
|
||||
// translated out of English.
|
||||
std::string alert_name(message.substr(ALERT_PREFIX.length()));
|
||||
LLNotificationsUtil::add(alert_name);
|
||||
if (!handle_special_alerts(alert_name))
|
||||
{
|
||||
LLNotificationsUtil::add(alert_name);
|
||||
}
|
||||
}
|
||||
else if (message.find(NOTIFY_PREFIX) == 0)
|
||||
{
|
||||
|
|
@ -6151,6 +6322,9 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
|
|||
std::string big_reason;
|
||||
LLSD args;
|
||||
|
||||
// Let the interested parties know that teleport failed.
|
||||
LLViewerParcelMgr::getInstance()->onTeleportFailed();
|
||||
|
||||
// if we have additional alert data
|
||||
if (msg->has(_PREHASH_AlertInfo) && msg->getSizeFast(_PREHASH_AlertInfo, _PREHASH_Message) > 0)
|
||||
{
|
||||
|
|
@ -6209,9 +6383,6 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
|
|||
|
||||
LLNotificationsUtil::add("CouldNotTeleportReason", args);
|
||||
|
||||
// Let the interested parties know that teleport failed.
|
||||
LLViewerParcelMgr::getInstance()->onTeleportFailed();
|
||||
|
||||
if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
|
||||
{
|
||||
gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
|
||||
|
|
|
|||
|
|
@ -654,6 +654,31 @@ std::string LLViewerRegion::accessToShortString(U8 sim_access)
|
|||
}
|
||||
}
|
||||
|
||||
// static
|
||||
U8 LLViewerRegion::shortStringToAccess(const std::string &sim_access)
|
||||
{
|
||||
U8 accessValue;
|
||||
|
||||
if (LLStringUtil::compareStrings(sim_access, "PG") == 0)
|
||||
{
|
||||
accessValue = SIM_ACCESS_PG;
|
||||
}
|
||||
else if (LLStringUtil::compareStrings(sim_access, "M") == 0)
|
||||
{
|
||||
accessValue = SIM_ACCESS_MATURE;
|
||||
}
|
||||
else if (LLStringUtil::compareStrings(sim_access, "A") == 0)
|
||||
{
|
||||
accessValue = SIM_ACCESS_ADULT;
|
||||
}
|
||||
else
|
||||
{
|
||||
accessValue = SIM_ACCESS_MIN;
|
||||
}
|
||||
|
||||
return accessValue;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLViewerRegion::processRegionInfo(LLMessageSystem* msg, void**)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -202,6 +202,7 @@ public:
|
|||
|
||||
// Returns "M", "PG", "A" etc.
|
||||
static std::string accessToShortString(U8 sim_access);
|
||||
static U8 shortStringToAccess(const std::string &sim_access);
|
||||
|
||||
// Return access icon name
|
||||
static std::string getAccessIcon(U8 sim_access);
|
||||
|
|
|
|||
|
|
@ -1700,9 +1700,6 @@ LLViewerWindow::LLViewerWindow(const Params& p)
|
|||
// Can't have spaces in settings.ini strings, so use underscores instead and convert them.
|
||||
LLStringUtil::replaceChar(mOverlayTitle, '_', ' ');
|
||||
|
||||
// sync the keyboard's setting with the saved setting
|
||||
gSavedSettings.getControl("NumpadControl")->firePropertyChanged();
|
||||
|
||||
mDebugText = new LLDebugText(this);
|
||||
|
||||
mWorldViewRectScaled = calcScaledRect(mWorldViewRectRaw, mDisplayScale);
|
||||
|
|
|
|||
|
|
@ -1354,79 +1354,13 @@ Only large parcels can be listed in search.
|
|||
top="150"
|
||||
width="430" />
|
||||
<combo_box
|
||||
enabled="false"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
top="194"
|
||||
name="land category with adult"
|
||||
visible="false"
|
||||
width="140">
|
||||
<combo_box.item
|
||||
label="Any Category"
|
||||
name="item0"
|
||||
value="any" />
|
||||
<combo_box.item
|
||||
label="Linden Location"
|
||||
name="item1"
|
||||
value="linden" />
|
||||
<combo_box.item
|
||||
label="Adult"
|
||||
name="item2"
|
||||
value="adult" />
|
||||
<combo_box.item
|
||||
label="Arts & Culture"
|
||||
name="item3"
|
||||
value="arts" />
|
||||
<combo_box.item
|
||||
label="Business"
|
||||
name="item4"
|
||||
value="store" />
|
||||
<combo_box.item
|
||||
label="Educational"
|
||||
name="item5"
|
||||
value="educational" />
|
||||
<combo_box.item
|
||||
label="Gaming"
|
||||
name="item6"
|
||||
value="game" />
|
||||
<combo_box.item
|
||||
label="Hangout"
|
||||
name="item7"
|
||||
value="gather" />
|
||||
<combo_box.item
|
||||
label="Newcomer Friendly"
|
||||
name="item8"
|
||||
value="newcomer" />
|
||||
<combo_box.item
|
||||
label="Parks & Nature"
|
||||
name="item9"
|
||||
value="park" />
|
||||
<combo_box.item
|
||||
label="Residential"
|
||||
name="item10"
|
||||
value="home" />
|
||||
<combo_box.item
|
||||
label="Shopping"
|
||||
name="item11"
|
||||
value="shopping" />
|
||||
<combo_box.item
|
||||
label="Rental"
|
||||
name="item13"
|
||||
value="rental" />
|
||||
<combo_box.item
|
||||
label="Other"
|
||||
name="item12"
|
||||
value="other" />
|
||||
</combo_box>
|
||||
<combo_box
|
||||
enabled="false"
|
||||
enabled="true"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
top="194"
|
||||
name="land category"
|
||||
visible="false"
|
||||
visible="true"
|
||||
width="140">
|
||||
<combo_box.item
|
||||
label="Any Category"
|
||||
|
|
@ -1989,11 +1923,11 @@ Only large parcels can be listed in search.
|
|||
<check_box
|
||||
follows="top|left"
|
||||
height="16"
|
||||
label="Have been age-verified [ESTATE_AGE_LIMIT]"
|
||||
label="Are age 18 or older [ESTATE_AGE_LIMIT]"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
name="limit_age_verified"
|
||||
tool_tip="Residents must be age verified to access this parcel. See the [SUPPORT_SITE] for more information."
|
||||
tool_tip="Residents must be age 18 or older to access this parcel. See the [SUPPORT_SITE] for more information."
|
||||
top_pad="4"
|
||||
width="278" />
|
||||
<check_box
|
||||
|
|
|
|||
|
|
@ -3098,12 +3098,6 @@
|
|||
<menu_item_call.on_click
|
||||
function="Advanced.TestFemale" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Toggle PG"
|
||||
name="Toggle PG">
|
||||
<menu_item_call.on_click
|
||||
function="Advanced.TogglePG" />
|
||||
</menu_item_call>
|
||||
<menu_item_check
|
||||
label="Allow Select Avatar"
|
||||
name="Allow Select Avatar">
|
||||
|
|
|
|||
|
|
@ -4070,9 +4070,7 @@ Are you sure you want to change the Estate Covenant?
|
|||
name="RegionEntryAccessBlocked"
|
||||
type="alertmodal">
|
||||
<tag>fail</tag>
|
||||
You are not allowed in that Region due to your maturity Rating. This may be a result of a lack of information validating your age.
|
||||
|
||||
Please verify you have the latest Viewer installed, and go to the Knowledge Base for details on accessing areas with this maturity rating.
|
||||
The region you're trying to visit contains content exceeding your current preferences. You can change your preferences using Me > Preferences > General.
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
|
|
@ -4080,13 +4078,11 @@ Please verify you have the latest Viewer installed, and go to the Knowledge Base
|
|||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="RegionEntryAccessBlocked_KB"
|
||||
name="RegionEntryAccessBlocked_AdultsOnlyContent"
|
||||
type="alertmodal">
|
||||
<tag>fail</tag>
|
||||
<tag>confirm</tag>
|
||||
You are not allowed in that region due to your maturity Rating.
|
||||
|
||||
Go to the Knowledge Base for more information about maturity Ratings?
|
||||
The region you're trying to visit contains [REGIONMATURITY] content, which is accessible to adults only.
|
||||
<url option="0" name="url">
|
||||
http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview
|
||||
</url>
|
||||
|
|
@ -4094,7 +4090,7 @@ Go to the Knowledge Base for more information about maturity Ratings?
|
|||
name="okcancelignore"
|
||||
yestext="Go to Knowledge Base"
|
||||
notext="Close"
|
||||
ignoretext="I can't enter this Region, due to restrictions of the maturity Rating"/>
|
||||
ignoretext="The region you're trying to visit contains content, which is accessible to adults only."/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
|
|
@ -4102,47 +4098,109 @@ Go to the Knowledge Base for more information about maturity Ratings?
|
|||
name="RegionEntryAccessBlocked_Notify"
|
||||
type="notifytip">
|
||||
<tag>fail</tag>
|
||||
You are not allowed in that region due to your maturity Rating.
|
||||
The region you're trying to visit contains [REGIONMATURITY] content, but your current preferences are set to exclude [REGIONMATURITY] content.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="RegionEntryAccessBlocked_NotifyAdultsOnly"
|
||||
type="notifytip">
|
||||
<tag>fail</tag>
|
||||
The region you're trying to visit contains content, which is accessible to adults only.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="RegionEntryAccessBlocked_ChangeAndReTeleport"
|
||||
type="alertmodal">
|
||||
<tag>fail</tag>
|
||||
<tag>confirm</tag>
|
||||
The region you're trying to visit contains [REGIONMATURITY] content, but your current preferences are set to exclude [REGIONMATURITY] content. We can change your preferences and continue with the teleport, or you can cancel this teleport.
|
||||
<form name="form">
|
||||
<button
|
||||
index="0"
|
||||
name="OK"
|
||||
text="Change and continue"/>
|
||||
<button
|
||||
default="true"
|
||||
index="1"
|
||||
name="Cancel"
|
||||
text="Cancel"/>
|
||||
<ignore name="ignore" text="The region you're trying to visit contains content excluded by your preferences. We can change your preferences and continue with the teleport."/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="RegionEntryAccessBlocked_Change"
|
||||
type="alertmodal">
|
||||
<tag>fail</tag>
|
||||
<tag>fail</tag>
|
||||
<tag>confirm</tag>
|
||||
You are not allowed in that Region due to your maturity Rating preference.
|
||||
|
||||
To enter the desired region, please change your maturity Rating preference. This will allow you to search for and access [REGIONMATURITY] content. To undo any changes, go to Me > Preferences > General.
|
||||
<form name="form">
|
||||
The region you're trying to visit contains [REGIONMATURITY] content, but your current preferences are set to exclude [REGIONMATURITY] content. We can change your preferences, or you can cancel the teleport. After your preferences are changed, you will need to attempt the teleport again.
|
||||
<form name="form">
|
||||
<button
|
||||
index="0"
|
||||
name="OK"
|
||||
text="Change Preference"/>
|
||||
<button
|
||||
text="Change preferences"/>
|
||||
<button
|
||||
default="true"
|
||||
index="1"
|
||||
name="Cancel"
|
||||
text="Close"/>
|
||||
<ignore name="ignore" text="My chosen Rating preference prevents me from entering a Region"/>
|
||||
text="Cancel"/>
|
||||
<ignore name="ignore" text="The region you're trying to visit contains content excluded by your preferences. We can change your preferences. Then, you will need to attempt the teleport again."/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
icon="alertmodal.tga"
|
||||
name="RegionEntryAccessBlocked_PreferencesOutOfSync"
|
||||
type="alertmodal">
|
||||
<tag>fail</tag>
|
||||
We are having technical difficulties with your teleport because your preferences are out of sync with the server.
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="PreferredMaturityChanged"
|
||||
type="notifytip">
|
||||
Your maturity Rating preference is now [RATING].
|
||||
type="alertmodal">
|
||||
You won't receive any more notifications that you're about to visit a region with [RATING] content. You may change your content preferences in the future by using Me > Preferences > General from the menu bar.
|
||||
<tag>confirm</tag>
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="MaturityCouldNotBeChanged"
|
||||
type="alertmodal">
|
||||
We were unable to change your preferences to view [RATING] content at this time. Please change your preferences by using Me > Preferences > General from the menu bar, and then attempt your teleport again.
|
||||
<tag>confirm</tag>
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="MaturityChangeError"
|
||||
type="alertmodal">
|
||||
We were unable to change your preferences to view [PREFERRED_MATURITY] content at this time. Your preferences have been reset to view [ACTUAL_MATURITY] content. You may attempt to change your preferences again by using Me > Preferences > General from the menu bar.
|
||||
<tag>confirm</tag>
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="LandClaimAccessBlocked"
|
||||
type="alertmodal">
|
||||
You cannot claim this land due to your maturity Rating. This may be a result of a lack of information validating your age.
|
||||
|
||||
Please verify you have the latest Viewer installed, and go to the Knowledge Base for details on accessing areas with this maturity rating.
|
||||
<tag>fail</tag>
|
||||
The land you're trying to claim has a maturity rating exceeding your current preferences. You can change your preferences using Me > Preferences > General.
|
||||
<tag>fail</tag>
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
|
|
@ -4150,12 +4208,10 @@ Please verify you have the latest Viewer installed, and go to the Knowledge Base
|
|||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="LandClaimAccessBlocked_KB"
|
||||
name="LandClaimAccessBlocked_AdultsOnlyContent"
|
||||
type="alertmodal">
|
||||
You cannot claim this land due to your maturity Rating.
|
||||
|
||||
Go to the Knowledge Base for more information about maturity Ratings?
|
||||
<tag>fail</tag>
|
||||
Only adults can claim this land.
|
||||
<tag>fail</tag>
|
||||
<tag>confirm</tag>
|
||||
<url option="0" name="url">
|
||||
http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview
|
||||
|
|
@ -4164,41 +4220,52 @@ Go to the Knowledge Base for more information about maturity Ratings?
|
|||
name="okcancelignore"
|
||||
yestext="Go to Knowledge Base"
|
||||
notext="Close"
|
||||
ignoretext="I can't claim this Land, due to restrictions of the maturity Rating"/>
|
||||
ignoretext="Only adults can claim this land."/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="LandClaimAccessBlocked_Notify"
|
||||
type="notifytip">
|
||||
You cannot claim this land due to your maturity Rating.
|
||||
<tag>fail</tag>
|
||||
The land you're trying to claim contains [REGIONMATURITY] content, but your current preferences are set to exclude [REGIONMATURITY] content.
|
||||
<tag>fail</tag>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="LandClaimAccessBlocked_NotifyAdultsOnly"
|
||||
type="notifytip">
|
||||
<tag>fail</tag>
|
||||
The land you're trying to claim contains content, which is accessible to adults only.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="LandClaimAccessBlocked_Change"
|
||||
type="alertmodal">
|
||||
You cannot claim this land due to your maturity Rating preference.
|
||||
|
||||
You can click 'Change Preference' to raise your maturity Rating preference now and allow you to enter. You will be able to search and access [REGIONMATURITY] content from now on. If you later want to change this setting back, go to Me > Preferences > General.
|
||||
The land you're trying to claim contains [REGIONMATURITY] content, but your current preferences are set to exclude [REGIONMATURITY] content. We can change your preferences, then you can try claiming the land again.
|
||||
<tag>fail</tag>
|
||||
<tag>confirm</tag>
|
||||
<usetemplate
|
||||
name="okcancelignore"
|
||||
yestext="Change Preference"
|
||||
notext="Close"
|
||||
ignoretext="My chosen Rating preference prevents me from claiming Land"/>
|
||||
<form name="form">
|
||||
<button
|
||||
index="0"
|
||||
name="OK"
|
||||
text="Change preferences"/>
|
||||
<button
|
||||
default="true"
|
||||
index="1"
|
||||
name="Cancel"
|
||||
text="Cancel"/>
|
||||
<ignore name="ignore" text="The land you're trying to claim contains content excluded by your preferences."/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="LandBuyAccessBlocked"
|
||||
type="alertmodal">
|
||||
You cannot buy this land due to your maturity Rating. This may be a result of a lack of information validating your age.
|
||||
|
||||
Please verify you have the latest Viewer installed, and go to the Knowledge Base for details on accessing areas with this maturity rating.
|
||||
<tag>fail</tag>
|
||||
The land you're trying to buy has a maturity rating exceeding your current preferences. You can change your preferences using Me > Preferences > General.
|
||||
<tag>fail</tag>
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
|
|
@ -4206,11 +4273,9 @@ Please verify you have the latest Viewer installed, and go to the Knowledge Base
|
|||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="LandBuyAccessBlocked_KB"
|
||||
name="LandBuyAccessBlocked_AdultsOnlyContent"
|
||||
type="alertmodal">
|
||||
You cannot buy this land due to your maturity Rating.
|
||||
|
||||
Go to the Knowledge Base for more information about maturity Ratings?
|
||||
Only adults can buy this land.
|
||||
<tag>confirm</tag>
|
||||
<tag>fail</tag>
|
||||
<url option="0" name="url">
|
||||
|
|
@ -4220,31 +4285,44 @@ Go to the Knowledge Base for more information about maturity Ratings?
|
|||
name="okcancelignore"
|
||||
yestext="Go to Knowledge Base"
|
||||
notext="Close"
|
||||
ignoretext="I can't buy this Land, due to restrictions of the maturity Rating"/>
|
||||
ignoretext="Only adults can buy this land."/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="LandBuyAccessBlocked_Notify"
|
||||
type="notifytip">
|
||||
You cannot buy this land due to your maturity Rating.
|
||||
<tag>fail</tag>
|
||||
The land you're trying to buy contains [REGIONMATURITY] content, but your current preferences are set to exclude [REGIONMATURITY] content.
|
||||
<tag>fail</tag>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="LandBuyAccessBlocked_NotifyAdultsOnly"
|
||||
type="notifytip">
|
||||
<tag>fail</tag>
|
||||
The land you're trying to buy contains content, which is accessible to adults only.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="LandBuyAccessBlocked_Change"
|
||||
type="alertmodal">
|
||||
You cannot buy this land due to your maturity Rating preference.
|
||||
|
||||
You can click 'Change Preference' to raise your maturity Rating preference now and allow you to enter. You will be able to search and access [REGIONMATURITY] content from now on. If you later want to change this setting back, go to Me > Preferences > General.
|
||||
The land you're trying to buy contains [REGIONMATURITY] content, but your current preferences are set to exclude [REGIONMATURITY] content. We can change your preferences, then you can try buying the land again.
|
||||
<tag>confirm</tag>
|
||||
<tag>fail</tag>
|
||||
<usetemplate
|
||||
name="okcancelignore"
|
||||
yestext="Change Preference"
|
||||
notext="Close"
|
||||
ignoretext="My chosen Rating preference prevents me from buying Land"/>
|
||||
<form name="form">
|
||||
<button
|
||||
index="0"
|
||||
name="OK"
|
||||
text="Change preferences"/>
|
||||
<button
|
||||
default="true"
|
||||
index="1"
|
||||
name="Cancel"
|
||||
text="Cancel"/>
|
||||
<ignore name="ignore" text="The land you're trying to buy contains content excluded by your preferences."/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
|
|
@ -4399,10 +4477,11 @@ Type a short announcement which will be sent to everyone in this region.
|
|||
label="Changed Region Maturity"
|
||||
name="RegionMaturityChange"
|
||||
type="alertmodal">
|
||||
The maturity rating for this region has been updated.
|
||||
It may take some time for the change to be reflected on the map.
|
||||
|
||||
To enter Adult regions, Residents must be Account Verified, either by age-verification or payment-verification.
|
||||
The maturity rating for this region has been changed.
|
||||
It may take some time for this change to be reflected on the map.
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
|
|
@ -5108,20 +5187,20 @@ Would you like to automatically wear the clothing you are about to create?
|
|||
icon="alertmodal.tga"
|
||||
name="NotAgeVerified"
|
||||
type="alertmodal">
|
||||
<tag>fail</tag>
|
||||
To access adult content and areas in Second Life you must be at least 18 years old. Please visit our age verification page to confirm you are over 18.
|
||||
Note this will launch your web browser.
|
||||
|
||||
[_URL]
|
||||
<tag>confirm</tag>
|
||||
<url option="0" name="url">
|
||||
https://secondlife.com/my/account/verification.php
|
||||
</url>
|
||||
The location you're trying to visit is restricted to residents age 18 and over.
|
||||
<tag>fail</tag>
|
||||
<usetemplate
|
||||
ignoretext="I have not verified my age"
|
||||
name="okcancelignore"
|
||||
notext="Cancel"
|
||||
yestext="Go to Age Verification"/>
|
||||
ignoretext="I am not old enough to visit age restricted areas."
|
||||
name="okignore"
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="NotAgeVerified_Notify"
|
||||
type="notifytip">
|
||||
Location restricted to age 18 and over.
|
||||
<tag>fail</tag>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
|
|
@ -5268,7 +5347,7 @@ Terrain.raw downloaded
|
|||
icon="notifytip.tga"
|
||||
name="GestureMissing"
|
||||
type="notifytip">
|
||||
Hmm. Gesture [NAME] is missing from the database.
|
||||
Gesture [NAME] is missing from the database.
|
||||
<tag>fail</tag>
|
||||
</notification>
|
||||
|
||||
|
|
@ -5806,9 +5885,7 @@ You can only claim public land in the Region you're in.
|
|||
persist="true"
|
||||
type="notify">
|
||||
<tag>fail</tag>
|
||||
You aren't allowed in that Region due to your maturity Rating. You may need to validate your age and/or install the latest Viewer.
|
||||
|
||||
Please go to the Knowledge Base for details on accessing areas with this maturity Rating.
|
||||
The region you're trying to visit contains content exceeding your current preferences. You can change your preferences using Me > Preferences > General.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
|
|
@ -5840,11 +5917,11 @@ You do not have proper payment status to enter this region.
|
|||
|
||||
<notification
|
||||
icon="notify.tga"
|
||||
name="MustGetAgeRgion"
|
||||
name="MustGetAgeRegion"
|
||||
persist="true"
|
||||
type="notify">
|
||||
<tag>fail</tag>
|
||||
You must be age-verified to enter this region.
|
||||
You must be age 18 or over to enter this region.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
|
|
@ -5853,7 +5930,7 @@ You must be age-verified to enter this region.
|
|||
persist="true"
|
||||
type="notify">
|
||||
<tag>fail</tag>
|
||||
You must be age-verified to enter this parcel.
|
||||
You must be age 18 or over to enter this parcel.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
|
|
|
|||
|
|
@ -149,11 +149,11 @@
|
|||
<check_box
|
||||
follows="top|left"
|
||||
height="16"
|
||||
label="Have been age-verified"
|
||||
label="Are age 18 or older"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
name="limit_age_verified"
|
||||
tool_tip="Residents must be age verified to access this estate. See the [SUPPORT_SITE] for more information."
|
||||
tool_tip="Residents must be age 18 or older to access this estate. See the [SUPPORT_SITE] for more information."
|
||||
top_pad="2"
|
||||
width="278" />
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,9 @@ Go to 'Welcome Island Public' to repeat the tutorial.
|
|||
<message name="no_inventory_host">
|
||||
The inventory system is currently unavailable.
|
||||
</message>
|
||||
<message name="MustGetAgeRegion">
|
||||
You must be age 18 or over to enter this region.
|
||||
</message>
|
||||
</message_set>
|
||||
<message_set name="progress">
|
||||
<message name="sending_dest">
|
||||
|
|
|
|||
|
|
@ -111,18 +111,6 @@ namespace tut
|
|||
ensure("1 isMature", !aa.isMature());
|
||||
ensure("1 isAdult", !aa.isAdult());
|
||||
|
||||
// this is kinda bad -- setting this forces maturity to MATURE but !teen != Mature anymore
|
||||
aa.setTeen(false);
|
||||
ensure("2 isTeen", !aa.isTeen());
|
||||
ensure("2 isMature", aa.isMature());
|
||||
ensure("2 isAdult", !aa.isAdult());
|
||||
|
||||
// have to flip it back and make sure it still works
|
||||
aa.setTeen(true);
|
||||
ensure("3 isTeen", aa.isTeen());
|
||||
ensure("3 isMature", !aa.isMature());
|
||||
ensure("3 isAdult", !aa.isAdult());
|
||||
|
||||
// check the conversion routine
|
||||
ensure_equals("1 conversion", SIM_ACCESS_PG, aa.convertTextToMaturity('P'));
|
||||
ensure_equals("2 conversion", SIM_ACCESS_MATURE, aa.convertTextToMaturity('M'));
|
||||
|
|
@ -131,21 +119,21 @@ namespace tut
|
|||
|
||||
// now try the other method of setting it - PG
|
||||
aa.setMaturity('P');
|
||||
ensure("4 isTeen", aa.isTeen());
|
||||
ensure("4 isMature", !aa.isMature());
|
||||
ensure("4 isAdult", !aa.isAdult());
|
||||
ensure("2 isTeen", aa.isTeen());
|
||||
ensure("2 isMature", !aa.isMature());
|
||||
ensure("2 isAdult", !aa.isAdult());
|
||||
|
||||
// Mature
|
||||
aa.setMaturity('M');
|
||||
ensure("5 isTeen", !aa.isTeen());
|
||||
ensure("5 isMature", aa.isMature());
|
||||
ensure("5 isAdult", !aa.isAdult());
|
||||
ensure("3 isTeen", !aa.isTeen());
|
||||
ensure("3 isMature", aa.isMature());
|
||||
ensure("3 isAdult", !aa.isAdult());
|
||||
|
||||
// Adult
|
||||
aa.setMaturity('A');
|
||||
ensure("6 isTeen", !aa.isTeen());
|
||||
ensure("6 isMature", aa.isMature());
|
||||
ensure("6 isAdult", aa.isAdult());
|
||||
ensure("4 isTeen", !aa.isTeen());
|
||||
ensure("4 isMature", aa.isMature());
|
||||
ensure("4 isAdult", aa.isAdult());
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -239,18 +227,6 @@ namespace tut
|
|||
cgr.declareU32("PreferredMaturity", SIM_ACCESS_PG, "declared_for_test", FALSE);
|
||||
LLAgentAccess aa(cgr);
|
||||
|
||||
ensure("1 transition starts false", !aa.isInTransition());
|
||||
aa.setTransition();
|
||||
ensure("2 transition now true", aa.isInTransition());
|
||||
}
|
||||
|
||||
template<> template<>
|
||||
void agentaccess_object_t::test<6>()
|
||||
{
|
||||
LLControlGroup cgr("test");
|
||||
cgr.declareU32("PreferredMaturity", SIM_ACCESS_PG, "declared_for_test", FALSE);
|
||||
LLAgentAccess aa(cgr);
|
||||
|
||||
cgr.setU32("PreferredMaturity", SIM_ACCESS_ADULT);
|
||||
aa.setMaturity('M');
|
||||
ensure("1 preferred maturity pegged to M when maturity is M", cgr.getU32("PreferredMaturity") == SIM_ACCESS_MATURE);
|
||||
|
|
|
|||
Loading…
Reference in New Issue