Processing of RLV commands by temporary attachments can be toggled by the user

-> "RLVaEnableTemporaryAttachments" debug setting (enabled by default)

--HG--
branch : RLVa
meow-7.2.2
Kitty Barnett 2016-07-09 22:49:33 +02:00
parent fda5eb9ccc
commit 5e4235be4e
7 changed files with 34 additions and 16 deletions

View File

@ -167,6 +167,17 @@
<key>Value</key>
<boolean>1</boolean>
</map>
<key>RLVaEnableTemporaryAttachments</key>
<map>
<key>Comment</key>
<string>Allows temporary attachments (regardless of origin) to issue RLV commands</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<boolean>1</boolean>
</map>
<key>RLVaExperimentalCommands</key>
<map>
<key>Comment</key>
@ -244,17 +255,6 @@
<key>Value</key>
<boolean>1</boolean>
</map>
<key>WarnFirstRLVGiveToRLV</key>
<map>
<key>Comment</key>
<string>Enables FirstRLVGiveToRLV warning dialog</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<boolean>1</boolean>
</map>
<key>ImporterDebug</key>
<map>
<key>Comment</key>

View File

@ -4027,7 +4027,8 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
case CHAT_TYPE_OWNER:
// [RLVa:KB] - Checked: 2010-02-XX (RLVa-1.2.0a) | Modified: RLVa-1.1.0f
// TODO-RLVa: [RLVa-1.2.0] consider rewriting this before a RLVa-1.2.0 release
if ( (rlv_handler_t::isEnabled()) && (mesg.length() > 3) && (RLV_CMD_PREFIX == mesg[0]) && (CHAT_TYPE_OWNER == chat.mChatType) )
if ( (rlv_handler_t::isEnabled()) && (mesg.length() > 3) && (RLV_CMD_PREFIX == mesg[0]) && (CHAT_TYPE_OWNER == chat.mChatType) &&
((!chatter) || (!chatter->isAttachment()) || (!chatter->isTempAttachment()) || (RlvSettings::getEnableTemporaryAttachments())) )
{
mesg.erase(0, 1);
LLStringUtil::toLower(mesg);

View File

@ -83,6 +83,7 @@ bool RlvSettings::s_fCompositeFolders = false;
bool RlvSettings::s_fCanOOC = true;
bool RlvSettings::s_fLegacyNaming = true;
bool RlvSettings::s_fNoSetEnv = false;
bool RlvSettings::s_fTempAttach = true;
std::list<LLUUID> RlvSettings::s_CompatItemCreators;
std::list<std::string> RlvSettings::s_CompatItemNames;
@ -94,6 +95,10 @@ void RlvSettings::initClass()
{
initCompatibilityMode(LLStringUtil::null);
s_fTempAttach = rlvGetSetting<bool>(RLV_SETTING_ENABLETEMPATTACH, true);
if (gSavedSettings.controlExists(RLV_SETTING_ENABLETEMPATTACH))
gSavedSettings.getControl(RLV_SETTING_ENABLETEMPATTACH)->getSignal()->connect(boost::bind(&onChangedSettingBOOL, _2, &s_fTempAttach));
#ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS
s_fCompositeFolders = rlvGetSetting<bool>(RLV_SETTING_ENABLECOMPOSITES, false);
if (gSavedSettings.controlExists(RLV_SETTING_ENABLECOMPOSITES))

View File

@ -94,6 +94,7 @@ public:
static bool getEnableIMQuery() { return rlvGetSetting<bool>("RLVaEnableIMQuery", true); }
static bool getEnableLegacyNaming() { return s_fLegacyNaming; }
static bool getEnableSharedWear() { return rlvGetSetting<bool>(RLV_SETTING_ENABLESHAREDWEAR, false); }
static bool getEnableTemporaryAttachments() { return s_fTempAttach; }
static bool getHideLockedLayers() { return rlvGetSetting<bool>(RLV_SETTING_HIDELOCKEDLAYER, false); }
static bool getHideLockedAttach() { return rlvGetSetting<bool>(RLV_SETTING_HIDELOCKEDATTACH, false); }
static bool getHideLockedInventory() { return rlvGetSetting<bool>(RLV_SETTING_HIDELOCKEDINVENTORY, false); }
@ -122,6 +123,7 @@ protected:
static bool s_fCanOOC;
static bool s_fLegacyNaming;
static bool s_fNoSetEnv;
static bool s_fTempAttach;
static std::list<LLUUID> s_CompatItemCreators;
static std::list<std::string> s_CompatItemNames;
};

View File

@ -348,6 +348,7 @@ enum ERlvAttachGroupType
#define RLV_SETTING_ENABLECOMPOSITES "RLVaEnableCompositeFolders"
#define RLV_SETTING_ENABLELEGACYNAMING "RLVaEnableLegacyNaming"
#define RLV_SETTING_ENABLESHAREDWEAR "RLVaEnableSharedWear"
#define RLV_SETTING_ENABLETEMPATTACH "RLVaEnableTemporaryAttachments"
#define RLV_SETTING_HIDELOCKEDLAYER "RLVaHideLockedLayers"
#define RLV_SETTING_HIDELOCKEDATTACH "RLVaHideLockedAttachments"
#define RLV_SETTING_HIDELOCKEDINVENTORY "RLVaHideLockedInventory"

View File

@ -475,15 +475,14 @@ inline bool RlvAttachmentLocks::isLockedAttachment(const LLViewerObject* pAttach
RLV_ASSERT( (!pAttachObj) || (pAttachObj == pAttachObj->getRootEdit()) );
// Object is locked if:
// - it's not a temporary attachment
// - it's specifically marked as non-detachable (ie @detach=n)
// - it's attached to an attachment point that is RLV_LOCK_REMOVE locked (ie @remattach:<attachpt>=n)
// - it's part of a locked folder
return
(pAttachObj) && (pAttachObj->isAttachment()) && (!pAttachObj->isTempAttachment()) &&
( (m_AttachObjRem.find(pAttachObj->getID()) != m_AttachObjRem.end()) ||
(pAttachObj) && (pAttachObj->isAttachment()) &&
( (m_AttachObjRem.find(pAttachObj->getID()) != m_AttachObjRem.end()) ||
(isLockedAttachmentPoint(RlvAttachPtLookup::getAttachPointIndex(pAttachObj), RLV_LOCK_REMOVE)) ||
(RlvFolderLocks::instance().isLockedAttachment(pAttachObj->getAttachmentItemID())) );
((!pAttachObj->isTempAttachment()) && (RlvFolderLocks::instance().isLockedAttachment(pAttachObj->getAttachmentItemID()))) );
}
// Checked: 2010-02-28 (RLVa-1.2.0a) | Added: RLVa-1.0.5a

View File

@ -1623,6 +1623,16 @@
function="ToggleControl"
parameter="RestrainedLoveCanOOC" />
</menu_item_check>
<menu_item_check
label="Allow Temporary Attachments"
name="Allow Temporary Attachments">
<menu_item_check.on_check
function="CheckControl"
parameter="RLVaEnableTemporaryAttachments" />
<menu_item_check.on_click
function="ToggleControl"
parameter="RLVaEnableTemporaryAttachments" />
</menu_item_check>
<menu_item_check
label="Forbid Give to #RLV"
name="Forbid Give to #RLV">