Assorted DN and RLVa fixes from Phoenix
This commit is contained in:
@@ -334,7 +334,15 @@ void LLAvatarNameCache::processName(const LLUUID& agent_id,
|
|||||||
{
|
{
|
||||||
if (add_to_cache)
|
if (add_to_cache)
|
||||||
{
|
{
|
||||||
|
// sCache[agent_id] = av_name;
|
||||||
|
// [SL:KB] - Patch: Agent-DisplayNames | Checked: 2010-12-28 (Catznip-2.4.0h) | Added: Catznip-2.4.0h
|
||||||
|
// Don't replace existing entries with dummies
|
||||||
|
cache_t::iterator itName = (av_name.mIsDummy) ? sCache.find(agent_id) : sCache.end();
|
||||||
|
if (sCache.end() != itName)
|
||||||
|
itName->second.mExpires = av_name.mExpires;
|
||||||
|
else
|
||||||
sCache[agent_id] = av_name;
|
sCache[agent_id] = av_name;
|
||||||
|
// [/SL:KB]
|
||||||
}
|
}
|
||||||
|
|
||||||
sPendingQueue.erase(agent_id);
|
sPendingQueue.erase(agent_id);
|
||||||
@@ -592,14 +600,14 @@ void LLAvatarNameCache::buildLegacyName(const std::string& full_name,
|
|||||||
av_name->mIsDummy = true;
|
av_name->mIsDummy = true;
|
||||||
av_name->mExpires = F64_MAX;
|
av_name->mExpires = F64_MAX;
|
||||||
|
|
||||||
// [Ansariel]
|
// [Ansariel/Henri]
|
||||||
// Why ain't those set? In case of disabled display names
|
// Why ain't those set? In case of disabled display names
|
||||||
// we would have to parse LLAvatarName::mDisplayName to get
|
// we would have to parse LLAvatarName::mDisplayName to get
|
||||||
// first and lastname if we need them. So do it already here
|
// first and lastname if we need them. So do it already here
|
||||||
// for convenience.
|
// for convenience.
|
||||||
std::istringstream fname(full_name);
|
std::istringstream fname(full_name);
|
||||||
fname >> av_name->mLegacyFirstName >> av_name->mLegacyLastName;
|
fname >> av_name->mLegacyFirstName >> av_name->mLegacyLastName;
|
||||||
// [/Ansariel]
|
// [/Ansariel/Henri]
|
||||||
}
|
}
|
||||||
|
|
||||||
// fills in av_name if it has it in the cache, even if expired (can check expiry time)
|
// fills in av_name if it has it in the cache, even if expired (can check expiry time)
|
||||||
|
|||||||
@@ -33,17 +33,6 @@
|
|||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</map>
|
</map>
|
||||||
|
|
||||||
<key>OptionShowGroupNameInChatIM</key>
|
|
||||||
<map>
|
|
||||||
<key>Comment</key>
|
|
||||||
<string>Show group name in IM notification</string>
|
|
||||||
<key>Persist</key>
|
|
||||||
<integer>1</integer>
|
|
||||||
<key>Type</key>
|
|
||||||
<string>Boolean</string>
|
|
||||||
<key>Value</key>
|
|
||||||
<integer>1</integer>
|
|
||||||
</map>
|
|
||||||
<key>BeauchampUseInventoryLinks</key>
|
<key>BeauchampUseInventoryLinks</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
|
|||||||
@@ -316,7 +316,7 @@ static BOOL gDoDisconnect = FALSE;
|
|||||||
static std::string gLaunchFileOnQuit;
|
static std::string gLaunchFileOnQuit;
|
||||||
|
|
||||||
// Used on Win32 for other apps to identify our window (eg, win_setup)
|
// Used on Win32 for other apps to identify our window (eg, win_setup)
|
||||||
const char* const VIEWER_WINDOW_CLASSNAME = "SingularityViewer";
|
const char* const VIEWER_WINDOW_CLASSNAME = "Second Life"; // Don't change
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
// File scope definitons
|
// File scope definitons
|
||||||
|
|||||||
@@ -745,6 +745,12 @@ void LLAvatarTracker::processTerminateFriendship(LLMessageSystem* msg, void**)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LLAvatarTracker::updateFriends()
|
||||||
|
{
|
||||||
|
mModifyMask |= LLFriendObserver::ADD | LLFriendObserver::REMOVE;
|
||||||
|
notifyObservers();
|
||||||
|
}
|
||||||
|
|
||||||
///----------------------------------------------------------------------------
|
///----------------------------------------------------------------------------
|
||||||
/// Tracking Data
|
/// Tracking Data
|
||||||
///----------------------------------------------------------------------------
|
///----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -153,6 +153,8 @@ public:
|
|||||||
|
|
||||||
static void formFriendship(const LLUUID& friend_id);
|
static void formFriendship(const LLUUID& friend_id);
|
||||||
|
|
||||||
|
void updateFriends();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void deleteTrackingData();
|
void deleteTrackingData();
|
||||||
void agentFound(const LLUUID& prey,
|
void agentFound(const LLUUID& prey,
|
||||||
|
|||||||
@@ -106,9 +106,24 @@ void LLFloaterDisplayName::onOpen()
|
|||||||
// display as "July 18 12:17 PM"
|
// display as "July 18 12:17 PM"
|
||||||
// std::string next_update_string =
|
// std::string next_update_string =
|
||||||
// next_update_local.toHTTPDateString("%B %d %I:%M %p");
|
// next_update_local.toHTTPDateString("%B %d %I:%M %p");
|
||||||
std::string next_update_string = next_update_local.asString();
|
std::string year = next_update_local.asString().substr(0,4);
|
||||||
getChild<LLUICtrl>("lockout_text")->setTextArg("[TIME]", next_update_string);
|
std::string month = next_update_local.asString().substr(5,2);
|
||||||
|
std::string day = next_update_local.asString().substr(8,2);
|
||||||
|
std::string hour = next_update_local.asString().substr(11,2);
|
||||||
|
std::string minute = next_update_local.asString().substr(14,2);
|
||||||
|
std::string second = next_update_local.asString().substr(17,2);
|
||||||
|
std::string next_update_string_date =
|
||||||
|
llformat("%s/%s/%s",year.c_str(),month.c_str(),
|
||||||
|
day.c_str());
|
||||||
|
std::string next_update_string_time =
|
||||||
|
llformat("%s:%s:%s",hour.c_str(),minute.c_str(),
|
||||||
|
second.c_str());
|
||||||
|
getChild<LLUICtrl>("lockout_text")->setTextArg("[DATE]",
|
||||||
|
next_update_string_date);
|
||||||
|
getChild<LLUICtrl>("lockout_text")->setTextArg("[TIME]",
|
||||||
|
next_update_string_time);
|
||||||
getChild<LLUICtrl>("lockout_text")->setVisible(true);
|
getChild<LLUICtrl>("lockout_text")->setVisible(true);
|
||||||
|
getChild<LLUICtrl>("no_lockout_text")->setVisible(false);
|
||||||
getChild<LLUICtrl>("save_btn")->setEnabled(false);
|
getChild<LLUICtrl>("save_btn")->setEnabled(false);
|
||||||
getChild<LLUICtrl>("display_name_editor")->setEnabled(false);
|
getChild<LLUICtrl>("display_name_editor")->setEnabled(false);
|
||||||
getChild<LLUICtrl>("display_name_confirm")->setEnabled(false);
|
getChild<LLUICtrl>("display_name_confirm")->setEnabled(false);
|
||||||
@@ -118,6 +133,7 @@ void LLFloaterDisplayName::onOpen()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
getChild<LLUICtrl>("lockout_text")->setVisible(false);
|
getChild<LLUICtrl>("lockout_text")->setVisible(false);
|
||||||
|
getChild<LLUICtrl>("no_lockout_text")->setVisible(true);
|
||||||
getChild<LLUICtrl>("save_btn")->setEnabled(true);
|
getChild<LLUICtrl>("save_btn")->setEnabled(true);
|
||||||
getChild<LLUICtrl>("display_name_editor")->setEnabled(true);
|
getChild<LLUICtrl>("display_name_editor")->setEnabled(true);
|
||||||
getChild<LLUICtrl>("display_name_confirm")->setEnabled(true);
|
getChild<LLUICtrl>("display_name_confirm")->setEnabled(true);
|
||||||
@@ -230,3 +246,4 @@ void LLFloaterDisplayName::onSave(void* data)
|
|||||||
self->setVisible(false);
|
self->setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,12 @@
|
|||||||
|
|
||||||
#include "llagent.h"
|
#include "llagent.h"
|
||||||
#include "llappviewer.h" // for gLastVersionChannel
|
#include "llappviewer.h" // for gLastVersionChannel
|
||||||
|
|
||||||
|
// [Ansariel: Display name support]
|
||||||
|
#include "llavatarname.h"
|
||||||
|
#include "llavatarnamecache.h"
|
||||||
|
// [/Ansariel: Display name support]
|
||||||
|
|
||||||
#include "llfloateravatarpicker.h"
|
#include "llfloateravatarpicker.h"
|
||||||
#include "llviewerwindow.h"
|
#include "llviewerwindow.h"
|
||||||
#include "llbutton.h"
|
#include "llbutton.h"
|
||||||
@@ -418,7 +424,25 @@ BOOL LLPanelFriends::addFriend(const LLUUID& agent_id)
|
|||||||
bool isOnline = relationInfo->isOnline();
|
bool isOnline = relationInfo->isOnline();
|
||||||
|
|
||||||
std::string fullname;
|
std::string fullname;
|
||||||
BOOL have_name = gCacheName->getFullName(agent_id, fullname);
|
// [Ansariel: Display name support]
|
||||||
|
//BOOL have_name = gCacheName->getFullName(agent_id, fullname);
|
||||||
|
LLAvatarName avatar_name;
|
||||||
|
BOOL have_name;
|
||||||
|
if (LLAvatarNameCache::get(agent_id, &avatar_name))
|
||||||
|
{
|
||||||
|
static LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||||
|
switch (phoenix_name_system)
|
||||||
|
{
|
||||||
|
case 0 : fullname = avatar_name.getLegacyName(); break;
|
||||||
|
case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||||
|
case 2 : fullname = avatar_name.mDisplayName; break;
|
||||||
|
default : fullname = avatar_name.getCompleteName(); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
have_name = TRUE;
|
||||||
|
}
|
||||||
|
else have_name = FALSE;
|
||||||
|
// [/Ansariel: Display name support]
|
||||||
|
|
||||||
LLSD element;
|
LLSD element;
|
||||||
element["id"] = agent_id;
|
element["id"] = agent_id;
|
||||||
@@ -500,7 +524,25 @@ BOOL LLPanelFriends::updateFriendItem(const LLUUID& agent_id, const LLRelationsh
|
|||||||
bool isOnline = info->isOnline();
|
bool isOnline = info->isOnline();
|
||||||
|
|
||||||
std::string fullname;
|
std::string fullname;
|
||||||
BOOL have_name = gCacheName->getFullName(agent_id, fullname);
|
// [Ansariel: Display name support]
|
||||||
|
//BOOL have_name = gCacheName->getFullName(agent_id, fullname);
|
||||||
|
LLAvatarName avatar_name;
|
||||||
|
BOOL have_name;
|
||||||
|
if (LLAvatarNameCache::get(agent_id, &avatar_name))
|
||||||
|
{
|
||||||
|
static LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||||
|
switch (phoenix_name_system)
|
||||||
|
{
|
||||||
|
case 0 : fullname = avatar_name.getLegacyName(); break;
|
||||||
|
case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||||
|
case 2 : fullname = avatar_name.mDisplayName; break;
|
||||||
|
default : fullname = avatar_name.getCompleteName(); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
have_name = TRUE;
|
||||||
|
}
|
||||||
|
else have_name = FALSE;
|
||||||
|
// [/Ansariel: Display name support]
|
||||||
|
|
||||||
// Name of the status icon to use
|
// Name of the status icon to use
|
||||||
std::string statusIcon;
|
std::string statusIcon;
|
||||||
@@ -861,12 +903,20 @@ void LLPanelFriends::onClickIM(void* user_data)
|
|||||||
{
|
{
|
||||||
LLUUID agent_id = ids[0];
|
LLUUID agent_id = ids[0];
|
||||||
const LLRelationship* info = LLAvatarTracker::instance().getBuddyInfo(agent_id);
|
const LLRelationship* info = LLAvatarTracker::instance().getBuddyInfo(agent_id);
|
||||||
std::string fullname;
|
// [Ansariel: Display name support]
|
||||||
if(info && gCacheName->getFullName(agent_id, fullname))
|
//std::string fullname;
|
||||||
|
//if(info && gCacheName->getFullName(agent_id, fullname))
|
||||||
|
//{
|
||||||
|
// gIMMgr->setFloaterOpen(TRUE);
|
||||||
|
// gIMMgr->addSession(fullname, IM_NOTHING_SPECIAL, agent_id);
|
||||||
|
//}
|
||||||
|
LLAvatarName avatar_name;
|
||||||
|
if (info && LLAvatarNameCache::get(agent_id, &avatar_name))
|
||||||
{
|
{
|
||||||
gIMMgr->setFloaterOpen(TRUE);
|
gIMMgr->setFloaterOpen(TRUE);
|
||||||
gIMMgr->addSession(fullname, IM_NOTHING_SPECIAL, agent_id);
|
gIMMgr->addSession(avatar_name.getLegacyName(),IM_NOTHING_SPECIAL,agent_id);
|
||||||
}
|
}
|
||||||
|
// [/Ansariel: Display name support]
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -983,12 +1033,30 @@ void LLPanelFriends::onClickRemove(void* user_data)
|
|||||||
if(ids.size() == 1)
|
if(ids.size() == 1)
|
||||||
{
|
{
|
||||||
LLUUID agent_id = ids[0];
|
LLUUID agent_id = ids[0];
|
||||||
std::string first, last;
|
// [Ansariel: Display name support]
|
||||||
if(gCacheName->getName(agent_id, first, last))
|
//std::string first, last;
|
||||||
|
//if(gCacheName->getName(agent_id, first, last))
|
||||||
|
//{
|
||||||
|
// args["FIRST_NAME"] = first;
|
||||||
|
// args["LAST_NAME"] = last;
|
||||||
|
//}
|
||||||
|
|
||||||
|
LLAvatarName avatar_name;
|
||||||
|
if (LLAvatarNameCache::get(agent_id, &avatar_name))
|
||||||
{
|
{
|
||||||
args["FIRST_NAME"] = first;
|
std::string fullname;
|
||||||
args["LAST_NAME"] = last;
|
static LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||||
|
switch (phoenix_name_system)
|
||||||
|
{
|
||||||
|
case 0 : fullname = avatar_name.getLegacyName(); break;
|
||||||
|
case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||||
|
case 2 : fullname = avatar_name.mDisplayName; break;
|
||||||
|
default : fullname = avatar_name.getCompleteName(); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
args["NAME"] = fullname;
|
||||||
|
}
|
||||||
|
// [/Ansariel: Display name support]
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1224,12 +1292,29 @@ void LLPanelFriends::confirmModifyRights(rights_map_t& ids, EGrantRevoke command
|
|||||||
if(ids.size() == 1)
|
if(ids.size() == 1)
|
||||||
{
|
{
|
||||||
LLUUID agent_id = ids.begin()->first;
|
LLUUID agent_id = ids.begin()->first;
|
||||||
std::string first, last;
|
//std::string first, last;
|
||||||
if(gCacheName->getName(agent_id, first, last))
|
//if(gCacheName->getName(agent_id, first, last))
|
||||||
|
//{
|
||||||
|
// args["FIRST_NAME"] = first;
|
||||||
|
// args["LAST_NAME"] = last;
|
||||||
|
//}
|
||||||
|
|
||||||
|
LLAvatarName avatar_name;
|
||||||
|
if (LLAvatarNameCache::get(agent_id, &avatar_name))
|
||||||
{
|
{
|
||||||
args["FIRST_NAME"] = first;
|
std::string fullname;
|
||||||
args["LAST_NAME"] = last;
|
static LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||||
|
switch (phoenix_name_system)
|
||||||
|
{
|
||||||
|
case 0 : fullname = avatar_name.getLegacyName(); break;
|
||||||
|
case 1 : fullname = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||||
|
case 2 : fullname = avatar_name.mDisplayName; break;
|
||||||
|
default : fullname = avatar_name.getCompleteName(); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
args["NAME"] = fullname;
|
||||||
|
}
|
||||||
|
|
||||||
if (command == GRANT)
|
if (command == GRANT)
|
||||||
{
|
{
|
||||||
LLNotifications::instance().add("GrantModifyRights",
|
LLNotifications::instance().add("GrantModifyRights",
|
||||||
|
|||||||
@@ -1618,13 +1618,42 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
std::string show_name = name;
|
||||||
|
LLAvatarName avatar_name;
|
||||||
|
if ((LLUUID::null != source) &&
|
||||||
|
LLAvatarNameCache::get(source, &avatar_name))
|
||||||
|
{
|
||||||
|
static LLCachedControl<S32> phoenix_name_system("PhoenixNameSystem", 0);
|
||||||
|
switch (phoenix_name_system)
|
||||||
|
{
|
||||||
|
case 0 : show_name = avatar_name.getCompleteName(); break;
|
||||||
|
case 1 : show_name = (avatar_name.mIsDisplayNameDefault ? avatar_name.mDisplayName : avatar_name.getCompleteName()); break;
|
||||||
|
case 2 : show_name = avatar_name.mDisplayName; break;
|
||||||
|
default : show_name = avatar_name.getCompleteName(); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
// Convert the name to a hotlink and add to message.
|
// Convert the name to a hotlink and add to message.
|
||||||
const LLStyleSP &source_style = LLStyleMap::instance().lookupAgent(source);
|
const LLStyleSP &source_style = LLStyleMap::instance().lookupAgent(source);
|
||||||
mHistoryEditor->appendStyledText(name,false,prepend_newline,source_style);
|
mHistoryEditor->appendStyledText(show_name,false,prepend_newline,source_style);
|
||||||
}
|
}
|
||||||
prepend_newline = false;
|
prepend_newline = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Kadah - Bold group mods chat. Doesnt work on the first msg of the session, dont have speakers list yet?
|
||||||
|
if (isModerator(source))
|
||||||
|
{
|
||||||
|
mHistoryEditor->appendColoredText(utf8msg.substr(0,1), false, prepend_newline, color);
|
||||||
|
LLStyleSP style(new LLStyle);
|
||||||
|
style->setVisible(true);
|
||||||
|
style->setColor(color);
|
||||||
|
style->setFontName(LLStringUtil::null);
|
||||||
|
style->mBold = TRUE;
|
||||||
|
mHistoryEditor->appendStyledText(utf8msg.substr(1), false, prepend_newline, style);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mHistoryEditor->appendColoredText(utf8msg, false, prepend_newline, color);
|
mHistoryEditor->appendColoredText(utf8msg, false, prepend_newline, color);
|
||||||
|
}
|
||||||
|
|
||||||
if (log_to_file
|
if (log_to_file
|
||||||
&& gSavedPerAccountSettings.getBOOL("LogInstantMessages") )
|
&& gSavedPerAccountSettings.getBOOL("LogInstantMessages") )
|
||||||
@@ -2522,3 +2551,14 @@ bool LLFloaterIMPanel::onConfirmForceCloseError(const LLSD& notification, const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Kadah
|
||||||
|
const bool LLFloaterIMPanel::isModerator(const LLUUID& speaker_id)
|
||||||
|
{
|
||||||
|
if (mSpeakers)
|
||||||
|
{
|
||||||
|
LLPointer<LLSpeaker> speakerp = mSpeakers->findSpeaker(speaker_id);
|
||||||
|
return speakerp && speakerp->mIsModerator;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -305,6 +305,8 @@ private:
|
|||||||
|
|
||||||
void sendTypingState(BOOL typing);
|
void sendTypingState(BOOL typing);
|
||||||
|
|
||||||
|
const bool isModerator(const LLUUID& speaker_id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
LLLineEditor* mInputEditor;
|
LLLineEditor* mInputEditor;
|
||||||
LLViewerTextEditor* mHistoryEditor;
|
LLViewerTextEditor* mHistoryEditor;
|
||||||
|
|||||||
@@ -201,7 +201,9 @@ struct LLWearInfo
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
BOOL gAddToOutfit = FALSE;
|
// [RLVa:KB] - Made this part of LLWearableHoldingPattern
|
||||||
|
//BOOL gAddToOutfit = FALSE;
|
||||||
|
// [/RLVa:KB]
|
||||||
|
|
||||||
// +=================================================+
|
// +=================================================+
|
||||||
// | LLInvFVBridge |
|
// | LLInvFVBridge |
|
||||||
@@ -1616,8 +1618,8 @@ BOOL LLFolderBridge::isUpToDate() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// <edit> trying to make it stop trying to fetch Local Inventory
|
// <edit> trying to make it stop trying to fetch Local Inventory
|
||||||
//return category->getVersion() != LLViewerInventoryCategory::VERSION_UNKNOWN;
|
return category->getVersion() != LLViewerInventoryCategory::VERSION_UNKNOWN;
|
||||||
return (category->getVersion() != LLViewerInventoryCategory::VERSION_UNKNOWN) || (mUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot));
|
//return (category->getVersion() != LLViewerInventoryCategory::VERSION_UNKNOWN) || (mUUID == gSystemFolderRoot) || (gInventory.isObjectDescendentOf(mUUID, gSystemFolderRoot));
|
||||||
// </edit>
|
// </edit>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3203,13 +3205,13 @@ void open_texture(const LLUUID& item_id,
|
|||||||
const LLUUID& source_id,
|
const LLUUID& source_id,
|
||||||
BOOL take_focus)
|
BOOL take_focus)
|
||||||
{
|
{
|
||||||
|
// [RLVa:KB] - Checked: 2009-11-11 (RLVa-1.1.0a) | Modified: RLVa-1.1.0a
|
||||||
|
if (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWTEXTURE))
|
||||||
|
{
|
||||||
|
RlvNotifications::notifyBlockedViewTexture();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// [/RLVa:KB]
|
||||||
|
|
||||||
// See if we can bring an exiting preview to the front
|
// See if we can bring an exiting preview to the front
|
||||||
if( !LLPreview::show( item_id, take_focus ) )
|
if( !LLPreview::show( item_id, take_focus ) )
|
||||||
@@ -3419,14 +3421,6 @@ void open_landmark(LLViewerInventoryItem* inv_item,
|
|||||||
const LLUUID& source_id,
|
const LLUUID& source_id,
|
||||||
BOOL take_focus)
|
BOOL take_focus)
|
||||||
{
|
{
|
||||||
// [RLVa:KB] - Checked: 2009-11-11 (RLVa-1.1.0a) | Modified: RLVa-1.1.0a
|
|
||||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWTEXTURE))
|
|
||||||
{
|
|
||||||
RlvNotifications::notifyBlockedViewTexture();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// [/RLVa:KB]
|
|
||||||
|
|
||||||
// See if we can bring an exiting preview to the front
|
// See if we can bring an exiting preview to the front
|
||||||
if( !LLPreview::show( inv_item->getUUID(), take_focus ) )
|
if( !LLPreview::show( inv_item->getUUID(), take_focus ) )
|
||||||
{
|
{
|
||||||
@@ -4116,8 +4110,8 @@ void LLObjectBridge::performAction(LLFolderView* folder, LLInventoryModel* model
|
|||||||
}
|
}
|
||||||
else if ("edit" == action)
|
else if ("edit" == action)
|
||||||
{
|
{
|
||||||
//if (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT))
|
if (gRlvHandler.hasBehaviour(RLV_BHVR_EDIT))
|
||||||
// return;
|
return;
|
||||||
LLVOAvatar* avatarp = gAgent.getAvatarObject();
|
LLVOAvatar* avatarp = gAgent.getAvatarObject();
|
||||||
if (!avatarp)
|
if (!avatarp)
|
||||||
return;
|
return;
|
||||||
@@ -5037,7 +5031,10 @@ void wear_inventory_category_on_avatar_step2( BOOL proceed, void* userdata )
|
|||||||
// [RLVa:KB] - Checked: 2010-03-05 (RLVa-1.2.0z) | Modified: RLVa-1.2.0b
|
// [RLVa:KB] - Checked: 2010-03-05 (RLVa-1.2.0z) | Modified: RLVa-1.2.0b
|
||||||
// Filter out any new attachments that can't be worn before adding them
|
// Filter out any new attachments that can't be worn before adding them
|
||||||
if ( (rlv_handler_t::isEnabled()) && (gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_ANY)) )
|
if ( (rlv_handler_t::isEnabled()) && (gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_ANY)) )
|
||||||
obj_items_new.erase(std::remove_if(obj_items_new.begin(), obj_items_new.end(), RlvPredCanNotWearItem(RLV_WEAR_REPLACE)), obj_items_new.end());
|
obj_items_new.erase(std::remove_if(obj_items_new.begin(), obj_items_new.end(),
|
||||||
|
RlvPredCanNotWearItem(RLV_WEAR_ADD)), obj_items_new.end());
|
||||||
|
for (S32 idxObjNew = 0; idxObjNew < obj_items_new.count(); idxObjNew++)
|
||||||
|
RlvAttachmentLockWatchdog::instance().onWearAttachment(obj_items_new.get(idxObjNew).get() , RLV_WEAR_ADD);
|
||||||
obj_items.insert(obj_items.end(), obj_items_new.begin(), obj_items_new.end());
|
obj_items.insert(obj_items.end(), obj_items_new.begin(), obj_items_new.end());
|
||||||
// [/RLVa:KB]
|
// [/RLVa:KB]
|
||||||
|
|
||||||
@@ -5118,7 +5115,7 @@ void wear_inventory_category_on_avatar_step3(LLWearableHoldingPattern* holder, B
|
|||||||
if( wearable && ((S32)wearable->getType() == i) )
|
if( wearable && ((S32)wearable->getType() == i) )
|
||||||
{
|
{
|
||||||
LLViewerInventoryItem* item;
|
LLViewerInventoryItem* item;
|
||||||
item = (LLViewerInventoryItem*)gInventory.getItem(data->mItemID);
|
item = (LLViewerInventoryItem*)gInventory.getLinkedItem(data->mItemID);
|
||||||
if( item && (item->getAssetUUID() == wearable->getID()) )
|
if( item && (item->getAssetUUID() == wearable->getID()) )
|
||||||
{
|
{
|
||||||
//RN: after discussing with Brashears, I disabled this code
|
//RN: after discussing with Brashears, I disabled this code
|
||||||
|
|||||||
@@ -1640,7 +1640,8 @@ void LLInventoryModel::bulkFetch(std::string url)
|
|||||||
if (cat)
|
if (cat)
|
||||||
{
|
{
|
||||||
// <edit> Pre-emptive strike
|
// <edit> Pre-emptive strike
|
||||||
if(!(gInventory.isObjectDescendentOf(cat->getUUID(), gSystemFolderRoot)))
|
//if(!(gInventory.isObjectDescendentOf(cat->getUUID(), gSystemFolderRoot)))
|
||||||
|
if(true)
|
||||||
{
|
{
|
||||||
// </edit>
|
// </edit>
|
||||||
if ( LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion())
|
if ( LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion())
|
||||||
@@ -3858,11 +3859,9 @@ bool LLInventoryCollectFunctor::itemTransferCommonlyAllowed(LLInventoryItem* ite
|
|||||||
|
|
||||||
switch(item->getType())
|
switch(item->getType())
|
||||||
{
|
{
|
||||||
// <edit> I don't even think changing this did anything
|
case LLAssetType::AT_CALLINGCARD:
|
||||||
//case LLAssetType::AT_CALLINGCARD:
|
// not allowed
|
||||||
// // not allowed
|
break;
|
||||||
// break;
|
|
||||||
// </edit>
|
|
||||||
|
|
||||||
case LLAssetType::AT_OBJECT:
|
case LLAssetType::AT_OBJECT:
|
||||||
my_avatar = gAgent.getAvatarObject();
|
my_avatar = gAgent.getAvatarObject();
|
||||||
|
|||||||
@@ -1203,12 +1203,12 @@ void LLPanelAvatarPicks::processAvatarPicksReply(LLMessageSystem* msg, void**)
|
|||||||
// static
|
// static
|
||||||
void LLPanelAvatarPicks::onClickNew(void* data)
|
void LLPanelAvatarPicks::onClickNew(void* data)
|
||||||
{
|
{
|
||||||
|
// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a)
|
||||||
|
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// [/RLVa:KB]
|
||||||
LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data;
|
LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data;
|
||||||
LLPanelPick* panel_pick = new LLPanelPick(FALSE);
|
LLPanelPick* panel_pick = new LLPanelPick(FALSE);
|
||||||
LLTabContainer* tabs = self->getChild<LLTabContainer>("picks tab");
|
LLTabContainer* tabs = self->getChild<LLTabContainer>("picks tab");
|
||||||
@@ -1224,12 +1224,6 @@ void LLPanelAvatarPicks::onClickNew(void* data)
|
|||||||
//Pick import and export - RK
|
//Pick import and export - RK
|
||||||
void LLPanelAvatarPicks::onClickImport(void* data)
|
void LLPanelAvatarPicks::onClickImport(void* data)
|
||||||
{
|
{
|
||||||
// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a)
|
|
||||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// [/RLVa:KB]
|
|
||||||
LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data;
|
LLPanelAvatarPicks* self = (LLPanelAvatarPicks*)data;
|
||||||
LLPanelPick* panel_pick = new LLPanelPick(FALSE);
|
LLPanelPick* panel_pick = new LLPanelPick(FALSE);
|
||||||
LLTabContainer* tabs = self->getChild<LLTabContainer>("picks tab");
|
LLTabContainer* tabs = self->getChild<LLTabContainer>("picks tab");
|
||||||
|
|||||||
@@ -46,6 +46,7 @@
|
|||||||
#include "llviewerregion.h"
|
#include "llviewerregion.h"
|
||||||
#include "llavatarnamecache.h"
|
#include "llavatarnamecache.h"
|
||||||
#include "llvoavatar.h"
|
#include "llvoavatar.h"
|
||||||
|
#include "llcallingcard.h"
|
||||||
|
|
||||||
LLPanelGeneral::LLPanelGeneral()
|
LLPanelGeneral::LLPanelGeneral()
|
||||||
{
|
{
|
||||||
@@ -128,7 +129,9 @@ void LLPanelGeneral::apply()
|
|||||||
if(gAgent.getRegion()){
|
if(gAgent.getRegion()){
|
||||||
if(namesystem_combobox->getCurrentIndex()<=0 || namesystem_combobox->getCurrentIndex()>2) LLAvatarNameCache::setUseDisplayNames(false);
|
if(namesystem_combobox->getCurrentIndex()<=0 || namesystem_combobox->getCurrentIndex()>2) LLAvatarNameCache::setUseDisplayNames(false);
|
||||||
else LLAvatarNameCache::setUseDisplayNames(true);
|
else LLAvatarNameCache::setUseDisplayNames(true);
|
||||||
//LLVOAvatar::invalidateNameTags(); No need, they'll be updated on the next loop
|
LLVOAvatar::invalidateNameTags(); // Remove all clienttags to get them updated
|
||||||
|
|
||||||
|
LLAvatarTracker::instance().updateFriends();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1698,7 +1698,11 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||||||
to_id.isNull() )
|
to_id.isNull() )
|
||||||
do_auto_response = false;
|
do_auto_response = false;
|
||||||
|
|
||||||
if( do_auto_response )
|
// if( do_auto_response )
|
||||||
|
// [RLVa:KB] - Alternate: Phoenix-370
|
||||||
|
// Phoenix specific: auto-response should be blocked if the avie is RLV @sendim=n restricted and the recipient is not an exception
|
||||||
|
if ( (do_auto_response) && ( (!gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM)) || (gRlvHandler.isException(RLV_BHVR_SENDIM, from_id)) ) )
|
||||||
|
// [/RLVa:KB]
|
||||||
{
|
{
|
||||||
if((dialog == IM_NOTHING_SPECIAL && !is_auto_response) ||
|
if((dialog == IM_NOTHING_SPECIAL && !is_auto_response) ||
|
||||||
(dialog == IM_TYPING_START && gSavedPerAccountSettings.getBOOL("AscentInstantMessageAnnounceIncoming"))
|
(dialog == IM_TYPING_START && gSavedPerAccountSettings.getBOOL("AscentInstantMessageAnnounceIncoming"))
|
||||||
@@ -2371,7 +2375,17 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||||||
position,
|
position,
|
||||||
true);
|
true);
|
||||||
|
|
||||||
chat.mText = std::string("IM: ") + name + separator_string + saved + message.substr(message_offset);
|
if (gAgent.isInGroup(session_id)&& gSavedSettings.getBOOL("OptionShowGroupNameInChatIM"))
|
||||||
|
{
|
||||||
|
prepend_msg = "[";
|
||||||
|
prepend_msg += std::string((char*)binary_bucket);
|
||||||
|
prepend_msg += "] ";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
prepend_msg = std::string("IM: ");
|
||||||
|
}
|
||||||
|
chat.mText = prepend_msg + name + separator_string + saved + message.substr(message_offset);
|
||||||
LLFloaterChat::addChat(chat, TRUE, is_this_agent);
|
LLFloaterChat::addChat(chat, TRUE, is_this_agent);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -2462,11 +2476,22 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||||||
|
|
||||||
case IM_LURE_USER:
|
case IM_LURE_USER:
|
||||||
{
|
{
|
||||||
if (is_muted)
|
// [RLVa:KB] - Checked: 2010-12-11 (RLVa-1.2.2c) | Added: RLVa-1.2.2c
|
||||||
|
// If the lure sender is a specific @accepttp exception they will override muted and busy status
|
||||||
|
bool fRlvSummon = (rlv_handler_t::isEnabled()) && (gRlvHandler.isException(RLV_BHVR_ACCEPTTP, from_id));
|
||||||
|
// [/RLVa:KB]
|
||||||
|
|
||||||
|
// if (is_muted)
|
||||||
|
// [RLVa:KB] - Checked: 2010-12-11 (RLVa-1.2.2c) | Added: RLVa-1.2.2c
|
||||||
|
if ( (is_muted) && (!fRlvSummon) )
|
||||||
|
// [/RLVa:KB]
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (is_busy)
|
// else if (is_busy)
|
||||||
|
// [RLVa:KB] - Checked: 2010-12-11 (RLVa-1.2.2c) | Added: RLVa-1.2.2c
|
||||||
|
else if ( (is_busy) && (!fRlvSummon) )
|
||||||
|
// [/RLVa:KB]
|
||||||
{
|
{
|
||||||
busy_message(msg,from_id);
|
busy_message(msg,from_id);
|
||||||
}
|
}
|
||||||
@@ -2475,12 +2500,11 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||||||
// [RLVa:KB] - Checked: 2010-04-01 (RLVa-1.1.3a) | Modified: RLVa-1.0.0d
|
// [RLVa:KB] - Checked: 2010-04-01 (RLVa-1.1.3a) | Modified: RLVa-1.0.0d
|
||||||
if (rlv_handler_t::isEnabled())
|
if (rlv_handler_t::isEnabled())
|
||||||
{
|
{
|
||||||
// Block if: 1) @tplure=n restricted (and sender isn't an exception), or 2) @unsit=n restricted and currently sitting
|
if (!gRlvHandler.canTeleportViaLure(from_id))
|
||||||
LLVOAvatar* pAvatar = gAgent.getAvatarObject();
|
|
||||||
if ( ( (gRlvHandler.hasBehaviour(RLV_BHVR_TPLURE)) && (!gRlvHandler.isException(RLV_BHVR_TPLURE, from_id)) ) ||
|
|
||||||
( (gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) && (pAvatar) && (pAvatar->mIsSitting) ) )
|
|
||||||
{
|
{
|
||||||
RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_TPLURE_REMOTE));
|
RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_TPLURE_REMOTE));
|
||||||
|
if (is_busy)
|
||||||
|
busy_message(msg,from_id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3078,7 +3102,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
|
|||||||
{
|
{
|
||||||
if (CHAT_SOURCE_AGENT == chat.mSourceType)
|
if (CHAT_SOURCE_AGENT == chat.mSourceType)
|
||||||
{
|
{
|
||||||
chat.mFromName = RlvStrings::getAnonym(from_name);
|
chat.mFromName = from_name = RlvStrings::getAnonym(from_name);
|
||||||
chat.mRlvNamesFiltered = TRUE;
|
chat.mRlvNamesFiltered = TRUE;
|
||||||
}
|
}
|
||||||
else if ( (!is_owned_by_me) || (!is_attachment) )
|
else if ( (!is_owned_by_me) || (!is_attachment) )
|
||||||
|
|||||||
@@ -77,11 +77,14 @@ LLVLComposition::LLVLComposition(LLSurface *surfacep, const U32 width, const F32
|
|||||||
setDetailTextureID(2, TERRAIN_MOUNTAIN_DETAIL);
|
setDetailTextureID(2, TERRAIN_MOUNTAIN_DETAIL);
|
||||||
setDetailTextureID(3, TERRAIN_ROCK_DETAIL);
|
setDetailTextureID(3, TERRAIN_ROCK_DETAIL);
|
||||||
|
|
||||||
|
static const LLCachedControl<F32> terrain_color_start_height("TerrainColorStartHeight", 20.f);
|
||||||
|
static const LLCachedControl<F32> terrain_color_height_range("TerrainColorHeightRange", 60.f);
|
||||||
|
|
||||||
// Initialize the texture matrix to defaults.
|
// Initialize the texture matrix to defaults.
|
||||||
for (S32 i = 0; i < CORNER_COUNT; ++i)
|
for (S32 i = 0; i < CORNER_COUNT; ++i)
|
||||||
{
|
{
|
||||||
mStartHeight[i] = gSavedSettings.getF32("TerrainColorStartHeight");
|
mStartHeight[i] = terrain_color_start_height;
|
||||||
mHeightRange[i] = gSavedSettings.getF32("TerrainColorHeightRange");
|
mHeightRange[i] = terrain_color_height_range;
|
||||||
}
|
}
|
||||||
mTexScaleX = 16.f;
|
mTexScaleX = 16.f;
|
||||||
mTexScaleY = 16.f;
|
mTexScaleY = 16.f;
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
#include "llviewerprecompiledheaders.h"
|
#include "llviewerprecompiledheaders.h"
|
||||||
#include "llagent.h"
|
#include "llagent.h"
|
||||||
#include "llappviewer.h"
|
#include "llappviewer.h"
|
||||||
|
#include "llavatarnamecache.h"
|
||||||
#include "lluictrlfactory.h"
|
#include "lluictrlfactory.h"
|
||||||
#include "llversionviewer.h"
|
#include "llversionviewer.h"
|
||||||
#include "llviewermenu.h"
|
#include "llviewermenu.h"
|
||||||
@@ -117,9 +118,6 @@ void RlvSettings::initClass()
|
|||||||
if (gSavedSettings.controlExists(RLV_SETTING_SHOWNAMETAGS))
|
if (gSavedSettings.controlExists(RLV_SETTING_SHOWNAMETAGS))
|
||||||
gSavedSettings.getControl(RLV_SETTING_SHOWNAMETAGS)->getSignal()->connect(boost::bind(&onChangedSettingBOOL, _1, &fShowNameTags));
|
gSavedSettings.getControl(RLV_SETTING_SHOWNAMETAGS)->getSignal()->connect(boost::bind(&onChangedSettingBOOL, _1, &fShowNameTags));
|
||||||
|
|
||||||
if (gSavedSettings.controlExists(RLV_SETTING_AVATAROFFSET_Z))
|
|
||||||
gSavedSettings.getControl(RLV_SETTING_AVATAROFFSET_Z)->getSignal()->connect(boost::bind(&onChangedAvatarOffset, _1));
|
|
||||||
|
|
||||||
fInitialized = true;
|
fInitialized = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,13 +138,6 @@ void RlvSettings::initClass()
|
|||||||
}
|
}
|
||||||
#endif // RLV_EXTENSION_STARTLOCATION
|
#endif // RLV_EXTENSION_STARTLOCATION
|
||||||
|
|
||||||
// Checked: 2010-10-11 (RLVa-1.2.0e) | Added: RLVa-1.2.0e
|
|
||||||
bool RlvSettings::onChangedAvatarOffset(const LLSD& sdValue)
|
|
||||||
{
|
|
||||||
gAgent.sendAgentSetAppearance();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Checked: 2009-12-18 (RLVa-1.1.0k) | Added: RLVa-1.1.0i
|
// Checked: 2009-12-18 (RLVa-1.1.0k) | Added: RLVa-1.1.0i
|
||||||
bool RlvSettings::onChangedSettingBOOL(const LLSD& newvalue, BOOL* pfSetting)
|
bool RlvSettings::onChangedSettingBOOL(const LLSD& newvalue, BOOL* pfSetting)
|
||||||
{
|
{
|
||||||
@@ -240,8 +231,6 @@ const std::string& RlvStrings::getAnonym(const std::string& strName)
|
|||||||
for (int idx = 0, cnt = strName.length(); idx < cnt; idx++)
|
for (int idx = 0, cnt = strName.length(); idx < cnt; idx++)
|
||||||
nHash += pszName[idx];
|
nHash += pszName[idx];
|
||||||
|
|
||||||
static const std::string empty = "";
|
|
||||||
if (m_Anonyms.size() == 0) return empty;
|
|
||||||
return m_Anonyms[nHash % m_Anonyms.size()];
|
return m_Anonyms[nHash % m_Anonyms.size()];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,18 +352,38 @@ void RlvUtil::filterLocation(std::string& strUTF8Text)
|
|||||||
rlvStringReplace(strUTF8Text, pParcelMgr->getAgentParcelName(), RlvStrings::getString(RLV_STRING_HIDDEN_PARCEL));
|
rlvStringReplace(strUTF8Text, pParcelMgr->getAgentParcelName(), RlvStrings::getString(RLV_STRING_HIDDEN_PARCEL));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Checked: 2010-04-22 (RLVa-1.2.0f) | Modified: RLVa-1.2.0f
|
// Checked: 2010-12-08 (RLVa-1.2.2c) | Modified: RLVa-1.2.2c
|
||||||
void RlvUtil::filterNames(std::string& strUTF8Text)
|
void RlvUtil::filterNames(std::string& strUTF8Text, bool fFilterLegacy)
|
||||||
{
|
{
|
||||||
std::vector<LLUUID> idAgents;
|
std::vector<LLUUID> idAgents;
|
||||||
LLWorld::getInstance()->getAvatars(&idAgents, NULL);
|
LLWorld::getInstance()->getAvatars(&idAgents, NULL);
|
||||||
|
|
||||||
std::string strFullName;
|
|
||||||
for (int idxAgent = 0, cntAgent = idAgents.size(); idxAgent < cntAgent; idxAgent++)
|
for (int idxAgent = 0, cntAgent = idAgents.size(); idxAgent < cntAgent; idxAgent++)
|
||||||
{
|
{
|
||||||
// LLCacheName::getFullName() will add the UUID to the lookup queue if we don't know it yet
|
LLAvatarName avName;
|
||||||
if (gCacheName->getFullName(idAgents[idxAgent], strFullName))
|
if (LLAvatarNameCache::get(idAgents[idxAgent], &avName))
|
||||||
rlvStringReplace(strUTF8Text, strFullName, RlvStrings::getAnonym(strFullName));
|
{
|
||||||
|
const std::string& strAnonym = RlvStrings::getAnonym(avName.mDisplayName);
|
||||||
|
|
||||||
|
// NOTE: if the legacy first and last name are empty we get a legacy name of " " which would replace all spaces in the string
|
||||||
|
std::string strLegacyName;
|
||||||
|
if ( (fFilterLegacy) && (!avName.mIsDisplayNameDefault) && (!avName.mLegacyFirstName.empty()) )
|
||||||
|
strLegacyName = avName.getLegacyName();
|
||||||
|
|
||||||
|
// If the display name is a subset of the legacy name we need to filter that first, otherwise it's the other way around
|
||||||
|
if (std::string::npos != strLegacyName.find(avName.mDisplayName))
|
||||||
|
{
|
||||||
|
if (!strLegacyName.empty())
|
||||||
|
rlvStringReplace(strUTF8Text, strLegacyName, strAnonym);
|
||||||
|
rlvStringReplace(strUTF8Text, avName.mDisplayName, strAnonym);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rlvStringReplace(strUTF8Text, avName.mDisplayName, strAnonym);
|
||||||
|
if (!strLegacyName.empty())
|
||||||
|
rlvStringReplace(strUTF8Text, strLegacyName, strAnonym);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -67,10 +67,6 @@ inline BOOL rlvGetPerUserSettingsBOOL(const std::string& strSetting, BOOL fDefau
|
|||||||
{
|
{
|
||||||
return (gSavedPerAccountSettings.controlExists(strSetting)) ? gSavedPerAccountSettings.getBOOL(strSetting) : fDefault;
|
return (gSavedPerAccountSettings.controlExists(strSetting)) ? gSavedPerAccountSettings.getBOOL(strSetting) : fDefault;
|
||||||
}
|
}
|
||||||
inline BOOL rlvGetSettingF32(const std::string& strSetting, F32 nDefault)
|
|
||||||
{
|
|
||||||
return (gSavedSettings.controlExists(strSetting)) ? gSavedSettings.getF32(strSetting) : nDefault;
|
|
||||||
}
|
|
||||||
inline std::string rlvGetSettingString(const std::string& strSetting, const std::string& strDefault)
|
inline std::string rlvGetSettingString(const std::string& strSetting, const std::string& strDefault)
|
||||||
{
|
{
|
||||||
return (gSavedSettings.controlExists(strSetting)) ? gSavedSettings.getString(strSetting) : strDefault;
|
return (gSavedSettings.controlExists(strSetting)) ? gSavedSettings.getString(strSetting) : strDefault;
|
||||||
@@ -79,7 +75,6 @@ inline std::string rlvGetSettingString(const std::string& strSetting, const std:
|
|||||||
class RlvSettings
|
class RlvSettings
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static F32 getAvatarOffsetZ() { return rlvGetSettingF32(RLV_SETTING_AVATAROFFSET_Z, 0.0); }
|
|
||||||
static BOOL getDebug() { return rlvGetSettingBOOL(RLV_SETTING_DEBUG, FALSE); }
|
static BOOL getDebug() { return rlvGetSettingBOOL(RLV_SETTING_DEBUG, FALSE); }
|
||||||
static BOOL getForbidGiveToRLV() { return rlvGetSettingBOOL(RLV_SETTING_FORBIDGIVETORLV, TRUE); }
|
static BOOL getForbidGiveToRLV() { return rlvGetSettingBOOL(RLV_SETTING_FORBIDGIVETORLV, TRUE); }
|
||||||
static BOOL getNoSetEnv() { return fNoSetEnv; }
|
static BOOL getNoSetEnv() { return fNoSetEnv; }
|
||||||
@@ -107,7 +102,6 @@ public:
|
|||||||
|
|
||||||
static void initClass();
|
static void initClass();
|
||||||
protected:
|
protected:
|
||||||
static bool onChangedAvatarOffset(const LLSD& sdValue);
|
|
||||||
static bool onChangedSettingBOOL(const LLSD& newvalue, BOOL* pfSetting);
|
static bool onChangedSettingBOOL(const LLSD& newvalue, BOOL* pfSetting);
|
||||||
|
|
||||||
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
|
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
|
||||||
@@ -157,7 +151,7 @@ public:
|
|||||||
static bool isNearbyRegion(const std::string& strRegion); // @showloc
|
static bool isNearbyRegion(const std::string& strRegion); // @showloc
|
||||||
|
|
||||||
static void filterLocation(std::string& strUTF8Text); // @showloc
|
static void filterLocation(std::string& strUTF8Text); // @showloc
|
||||||
static void filterNames(std::string& strUTF8Text); // @shownames
|
static void filterNames(std::string& strUTF8Text, bool fFilterLegacy = true); // @shownames
|
||||||
|
|
||||||
static bool isForceTp() { return m_fForceTp; }
|
static bool isForceTp() { return m_fForceTp; }
|
||||||
static void forceTp(const LLVector3d& posDest); // Ignores restrictions that might otherwise prevent tp'ing
|
static void forceTp(const LLVector3d& posDest); // Ignores restrictions that might otherwise prevent tp'ing
|
||||||
|
|||||||
@@ -57,6 +57,7 @@
|
|||||||
// Experimental commands (not part of the RLV API spec, disabled on public releases)
|
// Experimental commands (not part of the RLV API spec, disabled on public releases)
|
||||||
#ifdef RLV_EXPERIMENTAL_CMDS
|
#ifdef RLV_EXPERIMENTAL_CMDS
|
||||||
#define RLV_EXTENSION_CMD_ALLOWIDLE // Forces "Away" status when idle (effect is the same as setting AllowIdleAFK to TRUE)
|
#define RLV_EXTENSION_CMD_ALLOWIDLE // Forces "Away" status when idle (effect is the same as setting AllowIdleAFK to TRUE)
|
||||||
|
#define RLV_EXTENSION_CMD_GETCOMMAND // @getcommand:<option>=<channel>
|
||||||
// #define RLV_EXTENSION_CMD_GETXXXNAMES // @get[add|rem]attachnames:<option>=<channel> and @get[add|rem]outfitnames=<channel>
|
// #define RLV_EXTENSION_CMD_GETXXXNAMES // @get[add|rem]attachnames:<option>=<channel> and @get[add|rem]outfitnames=<channel>
|
||||||
#define RLV_EXTENSION_CMD_INTERACT // @interact=n
|
#define RLV_EXTENSION_CMD_INTERACT // @interact=n
|
||||||
#define RLV_EXTENSION_CMD_TOUCHXXX // @touch:uuid=n|y, @touchworld[:<uuid>]=n|y, @touchattach[:<uuid>]=n|y, @touchud[:<uuid>]=n|y
|
#define RLV_EXTENSION_CMD_TOUCHXXX // @touch:uuid=n|y, @touchworld[:<uuid>]=n|y, @touchattach[:<uuid>]=n|y, @touchud[:<uuid>]=n|y
|
||||||
@@ -211,6 +212,7 @@ enum ERlvBehaviour {
|
|||||||
RLV_BHVR_GETINV, // "getinv"
|
RLV_BHVR_GETINV, // "getinv"
|
||||||
RLV_BHVR_GETINVWORN, // "getinvworn"
|
RLV_BHVR_GETINVWORN, // "getinvworn"
|
||||||
RLV_BHVR_GETSITID, // "getsitid"
|
RLV_BHVR_GETSITID, // "getsitid"
|
||||||
|
RLV_BHVR_GETCOMMAND, // "getcommand"
|
||||||
RLV_BHVR_GETSTATUS, // "getstatus"
|
RLV_BHVR_GETSTATUS, // "getstatus"
|
||||||
RLV_BHVR_GETSTATUSALL, // "getstatusall"
|
RLV_BHVR_GETSTATUSALL, // "getstatusall"
|
||||||
|
|
||||||
@@ -282,9 +284,8 @@ enum ERlvAttachGroupType
|
|||||||
|
|
||||||
#define RLV_SETTING_MAIN "RestrainedLove"
|
#define RLV_SETTING_MAIN "RestrainedLove"
|
||||||
#define RLV_SETTING_DEBUG "RestrainedLoveDebug"
|
#define RLV_SETTING_DEBUG "RestrainedLoveDebug"
|
||||||
#define RLV_SETTING_AVATAROFFSET_Z "RestrainedLoveOffsetAvatarZ"
|
|
||||||
#define RLV_SETTING_FORBIDGIVETORLV "RestrainedLoveForbidGiveToRLV"
|
|
||||||
#define RLV_SETTING_NOSETENV "RestrainedLoveNoSetEnv"
|
#define RLV_SETTING_NOSETENV "RestrainedLoveNoSetEnv"
|
||||||
|
#define RLV_SETTING_FORBIDGIVETORLV "RestrainedLoveForbidGiveToRLV"
|
||||||
#define RLV_SETTING_WEARADDPREFIX "RestrainedLoveStackWhenFolderBeginsWith"
|
#define RLV_SETTING_WEARADDPREFIX "RestrainedLoveStackWhenFolderBeginsWith"
|
||||||
#define RLV_SETTING_WEARREPLACEPREFIX "RestrainedLoveReplaceWhenFolderBeginsWith"
|
#define RLV_SETTING_WEARREPLACEPREFIX "RestrainedLoveReplaceWhenFolderBeginsWith"
|
||||||
|
|
||||||
|
|||||||
@@ -90,6 +90,8 @@ bool RlvExtGetSet::processCommand(const RlvCommand& rlvCmd, ERlvCmdRet& eRet)
|
|||||||
{
|
{
|
||||||
if (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETDEBUG, rlvCmd.getObjectID()))
|
if (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETDEBUG, rlvCmd.getObjectID()))
|
||||||
eRet = onSetDebug(strSetting, rlvCmd.getOption());
|
eRet = onSetDebug(strSetting, rlvCmd.getOption());
|
||||||
|
else
|
||||||
|
eRet = RLV_RET_FAILED_LOCK;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -105,6 +107,8 @@ bool RlvExtGetSet::processCommand(const RlvCommand& rlvCmd, ERlvCmdRet& eRet)
|
|||||||
{
|
{
|
||||||
if (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETENV, rlvCmd.getObjectID()))
|
if (!gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETENV, rlvCmd.getObjectID()))
|
||||||
eRet = onSetEnv(strSetting, rlvCmd.getOption());
|
eRet = onSetEnv(strSetting, rlvCmd.getOption());
|
||||||
|
else
|
||||||
|
eRet = RLV_RET_FAILED_LOCK;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -127,7 +131,9 @@ bool RlvExtGetSet::processCommand(const RlvCommand& rlvCmd, ERlvCmdRet& eRet)
|
|||||||
eRet = RLV_RET_SUCCESS;
|
eRet = RLV_RET_SUCCESS;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
eRet = RLV_RET_FAILED_OPTION;
|
eRet = RLV_RET_FAILED_OPTION;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "llviewerprecompiledheaders.h"
|
#include "llviewerprecompiledheaders.h"
|
||||||
|
#include "floateravatarlist.h"
|
||||||
#include "llavatarnamecache.h"
|
#include "llavatarnamecache.h"
|
||||||
#include "llfloaterbeacons.h"
|
#include "llfloaterbeacons.h"
|
||||||
#include "llfloaterchat.h"
|
#include "llfloaterchat.h"
|
||||||
@@ -1089,6 +1090,10 @@ ERlvCmdRet RlvHandler::processAddRemCommand(const RlvCommand& rlvCmd)
|
|||||||
|
|
||||||
// Close the "Active Speakers" panel if it's currently visible
|
// Close the "Active Speakers" panel if it's currently visible
|
||||||
LLFloaterChat::getInstance()->childSetVisible("active_speakers_panel", false);
|
LLFloaterChat::getInstance()->childSetVisible("active_speakers_panel", false);
|
||||||
|
|
||||||
|
// Close the "Avatar List/Radar" floater if it's currently visible
|
||||||
|
if ( (LLFloaterAvatarList::getInstance()) && (LLFloaterAvatarList::getInstance()->getVisible()) )
|
||||||
|
LLFloaterAvatarList::toggle(NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1489,15 +1494,12 @@ ERlvCmdRet RlvHandler::processForceCommand(const RlvCommand& rlvCmd) const
|
|||||||
break;
|
break;
|
||||||
case RLV_BHVR_DETACHME: // @detachme=force - Checked: 2010-09-04 (RLVa-1.2.1c) | Modified: RLVa-1.2.1c
|
case RLV_BHVR_DETACHME: // @detachme=force - Checked: 2010-09-04 (RLVa-1.2.1c) | Modified: RLVa-1.2.1c
|
||||||
{
|
{
|
||||||
// NOTE: @detachme=force could be seen as a @detach:<attachpt>=force but RLV implements it as a "detach by UUID"
|
|
||||||
VERIFY_OPTION(rlvCmd.getOption().empty());
|
VERIFY_OPTION(rlvCmd.getOption().empty());
|
||||||
LLViewerObject* pObj = NULL; LLVOAvatar* pAvatar = NULL; LLViewerJointAttachment* pAttachPt = NULL;
|
// NOTE: @detachme should respect locks but shouldn't respect things like nostrip
|
||||||
if ( ((pObj = gObjectList.findObject(rlvCmd.getObjectID())) != NULL) && (pObj->isAttachment()) &&
|
const LLViewerObject* pAttachObj = gObjectList.findObject(rlvCmd.getObjectID());
|
||||||
((pAvatar = gAgent.getAvatarObject()) != NULL) &&
|
if ( (pAttachObj) && (pAttachObj->isAttachment()) )
|
||||||
((pAttachPt = pAvatar->getTargetAttachmentPoint(pObj->getRootEdit())) != NULL) )
|
|
||||||
{
|
{
|
||||||
// @detachme should respect locks but shouldn't respect things like nostrip so handle it like a manual user detach
|
LLVOAvatar::detachAttachmentIntoInventory(pAttachObj->getAttachmentItemID());
|
||||||
handle_detach_from_avatar(pAttachPt);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1677,6 +1679,7 @@ ERlvCmdRet RlvHandler::processReplyCommand(const RlvCommand& rlvCmd) const
|
|||||||
eRet = onFindFolder(rlvCmd, strReply);
|
eRet = onFindFolder(rlvCmd, strReply);
|
||||||
break;
|
break;
|
||||||
case RLV_BHVR_GETPATH: // @getpath[:<option>]=<channel>
|
case RLV_BHVR_GETPATH: // @getpath[:<option>]=<channel>
|
||||||
|
case RLV_BHVR_GETPATHNEW: // @getpathnew[:<option>]=<channel>
|
||||||
eRet = onGetPath(rlvCmd, strReply);
|
eRet = onGetPath(rlvCmd, strReply);
|
||||||
break;
|
break;
|
||||||
case RLV_BHVR_GETINV: // @getinv[:<path>]=<channel>
|
case RLV_BHVR_GETINV: // @getinv[:<path>]=<channel>
|
||||||
@@ -1700,6 +1703,16 @@ ERlvCmdRet RlvHandler::processReplyCommand(const RlvCommand& rlvCmd) const
|
|||||||
strReply = idSitObj.asString();
|
strReply = idSitObj.asString();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#ifdef RLV_EXTENSION_CMD_GETCOMMAND
|
||||||
|
case RLV_BHVR_GETCOMMAND: // @getcommand:<option>=<channel> - Checked: 2010-12-11 (RLVa-1.2.2c) | Added: RLVa-1.2.2c
|
||||||
|
{
|
||||||
|
RlvCommand::bhvr_map_t cmdList;
|
||||||
|
if (RlvCommand::getCommands(cmdList, rlvCmd.getOption()))
|
||||||
|
for (RlvCommand::bhvr_map_t::const_iterator itCmd = cmdList.begin(); itCmd != cmdList.end(); ++itCmd)
|
||||||
|
strReply.append("/").append(itCmd->first);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif // RLV_EXTENSION_CMD_GETCOMMAND
|
||||||
case RLV_BHVR_GETSTATUS: // @getstatus[:<option>]=<channel> - Checked: 2009-11-26 (RLVa-1.1.0f) | Modified: RLVa-1.1.0f
|
case RLV_BHVR_GETSTATUS: // @getstatus[:<option>]=<channel> - Checked: 2009-11-26 (RLVa-1.1.0f) | Modified: RLVa-1.1.0f
|
||||||
{
|
{
|
||||||
// NOTE: specification says response should start with '/' but RLV-1.16.1 returns an empty string when no rules are set
|
// NOTE: specification says response should start with '/' but RLV-1.16.1 returns an empty string when no rules are set
|
||||||
@@ -1980,7 +1993,7 @@ ERlvCmdRet RlvHandler::onGetOutfit(const RlvCommand& rlvCmd, std::string& strRep
|
|||||||
const EWearableType wtRlvTypes[] =
|
const EWearableType wtRlvTypes[] =
|
||||||
{
|
{
|
||||||
WT_GLOVES, WT_JACKET, WT_PANTS, WT_SHIRT, WT_SHOES, WT_SKIRT, WT_SOCKS,
|
WT_GLOVES, WT_JACKET, WT_PANTS, WT_SHIRT, WT_SHOES, WT_SKIRT, WT_SOCKS,
|
||||||
WT_UNDERPANTS, WT_UNDERSHIRT, WT_SKIN, WT_EYES, WT_HAIR, WT_SHAPE
|
WT_UNDERPANTS, WT_UNDERSHIRT, WT_SKIN, WT_EYES, WT_HAIR, WT_SHAPE, WT_ALPHA, WT_TATTOO
|
||||||
};
|
};
|
||||||
|
|
||||||
for (int idxType = 0, cntType = sizeof(wtRlvTypes) / sizeof(EWearableType); idxType < cntType; idxType++)
|
for (int idxType = 0, cntType = sizeof(wtRlvTypes) / sizeof(EWearableType); idxType < cntType; idxType++)
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ public:
|
|||||||
bool canShowHoverText(LLViewerObject* pObj) const; // @showhovertext* command family
|
bool canShowHoverText(LLViewerObject* pObj) const; // @showhovertext* command family
|
||||||
bool canSit(LLViewerObject* pObj, const LLVector3& posOffset = LLVector3::zero) const;
|
bool canSit(LLViewerObject* pObj, const LLVector3& posOffset = LLVector3::zero) const;
|
||||||
bool canStand() const;
|
bool canStand() const;
|
||||||
|
bool canTeleportViaLure(const LLUUID& idAgent) const;
|
||||||
bool canTouch(const LLViewerObject* pObj, const LLVector3& posOffset = LLVector3::zero) const; // @touch
|
bool canTouch(const LLViewerObject* pObj, const LLVector3& posOffset = LLVector3::zero) const; // @touch
|
||||||
void filterChat(std::string& strUTF8Text, bool fFilterEmote) const; // @sendchat, @recvchat and @redirchat
|
void filterChat(std::string& strUTF8Text, bool fFilterEmote) const; // @sendchat, @recvchat and @redirchat
|
||||||
bool redirectChatOrEmote(const std::string& strUTF8Test) const; // @redirchat and @rediremote
|
bool redirectChatOrEmote(const std::string& strUTF8Test) const; // @redirchat and @rediremote
|
||||||
@@ -256,6 +257,12 @@ inline bool RlvHandler::canStand() const
|
|||||||
return (!hasBehaviour(RLV_BHVR_UNSIT)) || ((gAgent.getAvatarObject()) && (!gAgent.getAvatarObject()->mIsSitting));
|
return (!hasBehaviour(RLV_BHVR_UNSIT)) || ((gAgent.getAvatarObject()) && (!gAgent.getAvatarObject()->mIsSitting));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Checked: 2010-12-11 (RLVa-1.2.2c) | Added: RLVa-1.2.2c
|
||||||
|
inline bool RlvHandler::canTeleportViaLure(const LLUUID& idAgent) const
|
||||||
|
{
|
||||||
|
return ((!hasBehaviour(RLV_BHVR_TPLURE)) || (isException(RLV_BHVR_TPLURE, idAgent))) && (canStand());
|
||||||
|
}
|
||||||
|
|
||||||
// Checked: 2010-04-11 (RLVa-1.2.0e) | Modified: RLVa-1.1.0l
|
// Checked: 2010-04-11 (RLVa-1.2.0e) | Modified: RLVa-1.1.0l
|
||||||
inline bool RlvHandler::canTouch(const LLViewerObject* pObj, const LLVector3& posOffset /*=LLVector3::zero*/) const
|
inline bool RlvHandler::canTouch(const LLViewerObject* pObj, const LLVector3& posOffset /*=LLVector3::zero*/) const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ void wear_inventory_category_on_avatar_loop(LLWearable* wearable, void*);
|
|||||||
// RlvCommmand
|
// RlvCommmand
|
||||||
//
|
//
|
||||||
|
|
||||||
RlvCommand::RlvBhvrTable RlvCommand::m_BhvrMap;
|
RlvCommand::bhvr_map_t RlvCommand::m_BhvrMap;
|
||||||
|
|
||||||
// Checked: 2009-12-27 (RLVa-1.1.0k) | Modified: RLVa-1.1.0k
|
// Checked: 2009-12-27 (RLVa-1.1.0k) | Modified: RLVa-1.1.0k
|
||||||
RlvCommand::RlvCommand(const LLUUID& idObj, const std::string& strCommand)
|
RlvCommand::RlvCommand(const LLUUID& idObj, const std::string& strCommand)
|
||||||
@@ -121,12 +121,31 @@ ERlvBehaviour RlvCommand::getBehaviourFromString(const std::string& strBhvr, boo
|
|||||||
*pfStrict = fStrict;
|
*pfStrict = fStrict;
|
||||||
|
|
||||||
RLV_ASSERT(m_BhvrMap.size() > 0);
|
RLV_ASSERT(m_BhvrMap.size() > 0);
|
||||||
RlvBhvrTable::const_iterator itBhvr = m_BhvrMap.find( (!fStrict) ? strBhvr : strBhvr.substr(0, idxStrict));
|
bhvr_map_t::const_iterator itBhvr = m_BhvrMap.find( (!fStrict) ? strBhvr : strBhvr.substr(0, idxStrict));
|
||||||
if ( (itBhvr != m_BhvrMap.end()) && ((!fStrict) || (hasStrictVariant(itBhvr->second))) )
|
if ( (itBhvr != m_BhvrMap.end()) && ((!fStrict) || (hasStrictVariant(itBhvr->second))) )
|
||||||
return itBhvr->second;
|
return itBhvr->second;
|
||||||
return RLV_BHVR_UNKNOWN;
|
return RLV_BHVR_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Checked: 2010-12-11 (RLVa-1.2.2c) | Added: RLVa-1.2.2c
|
||||||
|
bool RlvCommand::getCommands(bhvr_map_t& cmdList, const std::string &strMatch)
|
||||||
|
{
|
||||||
|
if (strMatch.empty())
|
||||||
|
return false;
|
||||||
|
cmdList.clear();
|
||||||
|
|
||||||
|
RLV_ASSERT(m_BhvrMap.size() > 0);
|
||||||
|
for (bhvr_map_t::const_iterator itBhvr = m_BhvrMap.begin(); itBhvr != m_BhvrMap.end(); ++itBhvr)
|
||||||
|
{
|
||||||
|
std::string strCmd = itBhvr->first; ERlvBehaviour eBhvr = itBhvr->second;
|
||||||
|
if (std::string::npos != strCmd.find(strMatch))
|
||||||
|
cmdList.insert(std::pair<std::string, ERlvBehaviour>(strCmd, eBhvr));
|
||||||
|
if ( (hasStrictVariant(eBhvr)) && (std::string::npos != strCmd.append("_sec").find(strMatch)) )
|
||||||
|
cmdList.insert(std::pair<std::string, ERlvBehaviour>(strCmd, eBhvr));
|
||||||
|
}
|
||||||
|
return (0 != cmdList.size());
|
||||||
|
}
|
||||||
|
|
||||||
// Checked: 2010-02-27 (RLVa-1.2.0a) | Modified: RLVa-1.1.0h
|
// Checked: 2010-02-27 (RLVa-1.2.0a) | Modified: RLVa-1.1.0h
|
||||||
void RlvCommand::initLookupTable()
|
void RlvCommand::initLookupTable()
|
||||||
{
|
{
|
||||||
@@ -145,7 +164,7 @@ void RlvCommand::initLookupTable()
|
|||||||
"attachthisover", "detachthis", "attachall", "attachallover", "detachall", "attachallthis", "attachallthisover",
|
"attachthisover", "detachthis", "attachall", "attachallover", "detachall", "attachallthis", "attachallthisover",
|
||||||
"detachallthis", "tpto", "version", "versionnew", "versionnum", "getattach", "getattachnames", "getaddattachnames",
|
"detachallthis", "tpto", "version", "versionnew", "versionnum", "getattach", "getattachnames", "getaddattachnames",
|
||||||
"getremattachnames", "getoutfit", "getoutfitnames", "getaddoutfitnames", "getremoutfitnames", "findfolder", "findfolders",
|
"getremattachnames", "getoutfit", "getoutfitnames", "getaddoutfitnames", "getremoutfitnames", "findfolder", "findfolders",
|
||||||
"getpath", "getpathnew", "getinv", "getinvworn", "getsitid", "getstatus", "getstatusall"
|
"getpath", "getpathnew", "getinv", "getinvworn", "getsitid", "getcommand", "getstatus", "getstatusall"
|
||||||
};
|
};
|
||||||
|
|
||||||
for (int idxBvhr = 0; idxBvhr < RLV_BHVR_COUNT; idxBvhr++)
|
for (int idxBvhr = 0; idxBvhr < RLV_BHVR_COUNT; idxBvhr++)
|
||||||
@@ -366,6 +385,7 @@ void RlvForceWear::forceFolder(const LLViewerInventoryCategory* pFolder, EWearAc
|
|||||||
case LLAssetType::AT_CLOTHING:
|
case LLAssetType::AT_CLOTHING:
|
||||||
if (isWearAction(eAction))
|
if (isWearAction(eAction))
|
||||||
{
|
{
|
||||||
|
eCurAction = ACTION_WEAR_REPLACE; // 1.X doesn't support multi-wearables so "add" means "replace" for wearables
|
||||||
ERlvWearMask eWearMask = gRlvWearableLocks.canWear(pRlvItem);
|
ERlvWearMask eWearMask = gRlvWearableLocks.canWear(pRlvItem);
|
||||||
if ( ((ACTION_WEAR_REPLACE == eCurAction) && (eWearMask & RLV_WEAR_REPLACE)) ||
|
if ( ((ACTION_WEAR_REPLACE == eCurAction) && (eWearMask & RLV_WEAR_REPLACE)) ||
|
||||||
((ACTION_WEAR_ADD == eCurAction) && (eWearMask & RLV_WEAR_ADD)) )
|
((ACTION_WEAR_ADD == eCurAction) && (eWearMask & RLV_WEAR_ADD)) )
|
||||||
@@ -688,7 +708,6 @@ void RlvForceWear::remAttachment(const LLViewerObject* pAttachObj)
|
|||||||
// Checked: 2010-08-30 (RLVa-1.1.3b) | Modified: RLVa-1.2.1c
|
// Checked: 2010-08-30 (RLVa-1.1.3b) | Modified: RLVa-1.2.1c
|
||||||
void RlvForceWear::addWearable(const LLViewerInventoryItem* pItem, EWearAction eAction)
|
void RlvForceWear::addWearable(const LLViewerInventoryItem* pItem, EWearAction eAction)
|
||||||
{
|
{
|
||||||
eAction = ACTION_WEAR_REPLACE; // 1.X doesn't support multi-wearables so "add" means "replace" for wearables
|
|
||||||
const LLWearable* pWearable = gAgent.getWearableFromWearableItem(pItem->getLinkedUUID());
|
const LLWearable* pWearable = gAgent.getWearableFromWearableItem(pItem->getLinkedUUID());
|
||||||
// When replacing remove all currently worn wearables of this type *unless* the item is currently worn
|
// When replacing remove all currently worn wearables of this type *unless* the item is currently worn
|
||||||
if ( (ACTION_WEAR_REPLACE == eAction) && (!pWearable) )
|
if ( (ACTION_WEAR_REPLACE == eAction) && (!pWearable) )
|
||||||
@@ -812,7 +831,7 @@ void RlvForceWear::done()
|
|||||||
LLViewerInventoryItem* pItem = wearItems.get(0);
|
LLViewerInventoryItem* pItem = wearItems.get(0);
|
||||||
if ( (pItem) && ((LLAssetType::AT_BODYPART == pItem->getType()) || (LLAssetType::AT_CLOTHING == pItem->getType())) )
|
if ( (pItem) && ((LLAssetType::AT_BODYPART == pItem->getType()) || (LLAssetType::AT_CLOTHING == pItem->getType())) )
|
||||||
{
|
{
|
||||||
LLFoundData* pFound = new LLFoundData(pItem->getUUID(), pItem->getAssetUUID(), pItem->getName(), pItem->getType());
|
LLFoundData* pFound = new LLFoundData(pItem->getLinkedUUID(), pItem->getAssetUUID(), pItem->getName(), pItem->getType());
|
||||||
pWearData->mFoundList.push_front(pFound);
|
pWearData->mFoundList.push_front(pFound);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -904,6 +923,15 @@ void RlvBehaviourNotifyHandler::changed(const RlvCommand& rlvCmd, bool fInternal
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RLVa-HACK: @notify:<channel>;XXX=add will trigger itself, but shouldn't... this is a bad fix but won't create new bugs, revisit later
|
||||||
|
// -> it works since the command did succeed and will trigger RlvHandler::notifyBehaviourObservers() which in turn will trigger us
|
||||||
|
// and cause the code below to run, but meanwhile the code above will not process the @notify because it's not been added yet
|
||||||
|
if (!m_NotificationsDelayed.empty())
|
||||||
|
{
|
||||||
|
m_Notifications.insert(m_NotificationsDelayed.begin(), m_NotificationsDelayed.end());
|
||||||
|
m_NotificationsDelayed.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Checked: 2010-09-23 (RLVa-1.2.1e) | Modified: RLVa-1.2.1e
|
// Checked: 2010-09-23 (RLVa-1.2.1e) | Modified: RLVa-1.2.1e
|
||||||
|
|||||||
@@ -59,7 +59,9 @@ public:
|
|||||||
bool isStrict() const { return m_fStrict; }
|
bool isStrict() const { return m_fStrict; }
|
||||||
bool isValid() const { return m_fValid; }
|
bool isValid() const { return m_fValid; }
|
||||||
|
|
||||||
|
typedef std::map<std::string, ERlvBehaviour> bhvr_map_t;
|
||||||
static ERlvBehaviour getBehaviourFromString(const std::string& strBhvr, bool* pfStrict = NULL);
|
static ERlvBehaviour getBehaviourFromString(const std::string& strBhvr, bool* pfStrict = NULL);
|
||||||
|
static bool getCommands(bhvr_map_t& cmdList, const std::string& strMatch);
|
||||||
static const std::string& getStringFromBehaviour(ERlvBehaviour eBhvr);
|
static const std::string& getStringFromBehaviour(ERlvBehaviour eBhvr);
|
||||||
static bool hasStrictVariant(ERlvBehaviour eBhvr);
|
static bool hasStrictVariant(ERlvBehaviour eBhvr);
|
||||||
|
|
||||||
@@ -86,8 +88,7 @@ protected:
|
|||||||
std::string m_strParam;
|
std::string m_strParam;
|
||||||
ERlvParamType m_eParamType;
|
ERlvParamType m_eParamType;
|
||||||
|
|
||||||
typedef std::map<std::string, ERlvBehaviour> RlvBhvrTable;
|
static bhvr_map_t m_BhvrMap;
|
||||||
static RlvBhvrTable m_BhvrMap;
|
|
||||||
|
|
||||||
friend class RlvHandler;
|
friend class RlvHandler;
|
||||||
};
|
};
|
||||||
@@ -317,7 +318,9 @@ protected:
|
|||||||
public:
|
public:
|
||||||
void addNotify(const LLUUID& idObj, S32 nChannel, const std::string& strFilter)
|
void addNotify(const LLUUID& idObj, S32 nChannel, const std::string& strFilter)
|
||||||
{
|
{
|
||||||
m_Notifications.insert(std::pair<LLUUID, notifyData>(idObj, notifyData(nChannel, strFilter)));
|
//m_Notifications.insert(std::pair<LLUUID, notifyData>(idObj, notifyData(nChannel, strFilter)));
|
||||||
|
// RLVa-HACK: see RlvBehaviourNotifyHandler::changed()
|
||||||
|
m_NotificationsDelayed.insert(std::pair<LLUUID, notifyData>(idObj, notifyData(nChannel, strFilter)));
|
||||||
}
|
}
|
||||||
void removeNotify(const LLUUID& idObj, S32 nChannel, const std::string& strFilter)
|
void removeNotify(const LLUUID& idObj, S32 nChannel, const std::string& strFilter)
|
||||||
{
|
{
|
||||||
@@ -330,8 +333,6 @@ public:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (m_Notifications.empty())
|
|
||||||
delete this; // Delete ourself if we have nothing to do
|
|
||||||
}
|
}
|
||||||
void sendNotification(const std::string& strText, const std::string& strSuffix = LLStringUtil::null) const;
|
void sendNotification(const std::string& strText, const std::string& strSuffix = LLStringUtil::null) const;
|
||||||
protected:
|
protected:
|
||||||
@@ -345,6 +346,7 @@ protected:
|
|||||||
notifyData(S32 channel, const std::string& filter) : nChannel(channel), strFilter(filter) {}
|
notifyData(S32 channel, const std::string& filter) : nChannel(channel), strFilter(filter) {}
|
||||||
};
|
};
|
||||||
std::multimap<LLUUID, notifyData> m_Notifications;
|
std::multimap<LLUUID, notifyData> m_Notifications;
|
||||||
|
std::multimap<LLUUID, notifyData> m_NotificationsDelayed;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|||||||
@@ -372,7 +372,7 @@ void RlvRenameOnWearObserver::doneIdle()
|
|||||||
}
|
}
|
||||||
|
|
||||||
const LLViewerJointAttachment* pAttachPt = NULL; S32 idxAttachPt = 0;
|
const LLViewerJointAttachment* pAttachPt = NULL; S32 idxAttachPt = 0;
|
||||||
RLV_ASSERT(mComplete.size() > 0); // Catch instances where we forgot to call startFetch()
|
// RLV_ASSERT(mComplete.size() > 0); // Catch instances where we forgot to call startFetch()
|
||||||
for (uuid_vec_t::const_iterator itItem = mComplete.begin(); itItem != mComplete.end(); ++itItem)
|
for (uuid_vec_t::const_iterator itItem = mComplete.begin(); itItem != mComplete.end(); ++itItem)
|
||||||
{
|
{
|
||||||
const LLUUID& idAttachItem = *itItem;
|
const LLUUID& idAttachItem = *itItem;
|
||||||
@@ -389,7 +389,7 @@ void RlvRenameOnWearObserver::doneIdle()
|
|||||||
if ( ((pAttachPt = pAvatar->getWornAttachmentPoint(idAttachItem)) == NULL) ||
|
if ( ((pAttachPt = pAvatar->getWornAttachmentPoint(idAttachItem)) == NULL) ||
|
||||||
((idxAttachPt = RlvAttachPtLookup::getAttachPointIndex(pAttachPt)) == 0) )
|
((idxAttachPt = RlvAttachPtLookup::getAttachPointIndex(pAttachPt)) == 0) )
|
||||||
{
|
{
|
||||||
RLV_ASSERT(false);
|
// RLV_ASSERT(false);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -636,7 +636,7 @@ bool RlvWearableItemCollector::onCollectFolder(const LLInventoryCategory* pFolde
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
bool fAttach = RlvForceWear::isWearAction(m_eWearAction);
|
bool fAttach = RlvForceWear::isWearAction(m_eWearAction);
|
||||||
bool fMatchAll = (!fLinkedFolder) && (m_eWearFlags | RlvForceWear::FLAG_MATCHALL);
|
bool fMatchAll = (!fLinkedFolder) && (m_eWearFlags & RlvForceWear::FLAG_MATCHALL);
|
||||||
|
|
||||||
if ( (!fLinkedFolder) && (RlvInventory::isFoldedFolder(pFolder, false)) ) // Check for folder that should get folded under its parent
|
if ( (!fLinkedFolder) && (RlvInventory::isFoldedFolder(pFolder, false)) ) // Check for folder that should get folded under its parent
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -283,7 +283,7 @@ Save all changes to clothing/body parts?
|
|||||||
name="GrantModifyRights"
|
name="GrantModifyRights"
|
||||||
type="alertmodal">
|
type="alertmodal">
|
||||||
Granting modify rights to another resident allows them to change, delete or take ANY objects you may have in-world. Be VERY careful when handing out this permission.
|
Granting modify rights to another resident allows them to change, delete or take ANY objects you may have in-world. Be VERY careful when handing out this permission.
|
||||||
Do you want to grant modify rights for [FIRST_NAME] [LAST_NAME]?
|
Do you want to grant modify rights for [NAME]?
|
||||||
<usetemplate
|
<usetemplate
|
||||||
name="okcancelbuttons"
|
name="okcancelbuttons"
|
||||||
notext="No"
|
notext="No"
|
||||||
@@ -306,7 +306,7 @@ Do you want to grant modify rights for the selected Residents?
|
|||||||
icon="alertmodal.tga"
|
icon="alertmodal.tga"
|
||||||
name="RevokeModifyRights"
|
name="RevokeModifyRights"
|
||||||
type="alertmodal">
|
type="alertmodal">
|
||||||
Do you want to revoke modify rights for [FIRST_NAME] [LAST_NAME]?
|
Do you want to revoke modify rights for [NAME]?
|
||||||
<usetemplate
|
<usetemplate
|
||||||
name="okcancelbuttons"
|
name="okcancelbuttons"
|
||||||
notext="No"
|
notext="No"
|
||||||
@@ -2153,7 +2153,7 @@ Would you be my friend?
|
|||||||
icon="alertmodal.tga"
|
icon="alertmodal.tga"
|
||||||
name="RemoveFromFriends"
|
name="RemoveFromFriends"
|
||||||
type="alertmodal">
|
type="alertmodal">
|
||||||
Do you want to remove [FIRST_NAME] [LAST_NAME] from your Friends List?
|
Do you want to remove [NAME] from your Friends List?
|
||||||
<usetemplate
|
<usetemplate
|
||||||
name="okcancelbuttons"
|
name="okcancelbuttons"
|
||||||
notext="Cancel"
|
notext="Cancel"
|
||||||
|
|||||||
Reference in New Issue
Block a user