Made AntiSpam better
AntiSpamNotify setting to turn off notifications, which seemed to become a new form of spam, otherwise. Add tool_tips to UI explaining how to make the system less sensitive. Made defaults for antispam a lot less sensitive, so users used to the old antispam defaults won't likely need to configure the new panel. Pull in license from NaCl... (Why wasn't it already there, Ruby?!) Fixed spaces being where tabs should be... Added in selective Dialog disabling, instead of just all, nice little feature in itself. Potentially fixed a bug where sounds would be blocked when they shouldn't be... but, if this still happens, I'll put in a debug setting to disable sound antispam.
This commit is contained in:
@@ -1,3 +1,18 @@
|
||||
/* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
* Version 2, December 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||
*
|
||||
* Everyone is permitted to copy and distribute verbatim or modified
|
||||
* copies of this license document, and changing it is allowed as long
|
||||
* as the name is changed.
|
||||
*
|
||||
* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
* TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
*
|
||||
* 0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
#include "NACLantispam.h"
|
||||
#include "llviewercontrol.h"
|
||||
@@ -263,7 +278,7 @@ void NACLAntiSpamRegistry::blockGlobalEntry(LLUUID& source)
|
||||
}
|
||||
globalEntries[source.asString()]->setBlocked();
|
||||
}
|
||||
bool NACLAntiSpamRegistry::checkQueue(U32 name, LLUUID& source, U32 multiplier, bool silent)
|
||||
bool NACLAntiSpamRegistry::checkQueue(U32 name, LLUUID& source, U32 multiplier)
|
||||
{
|
||||
if(source.isNull()) return false;
|
||||
if(gAgent.getID() == source) return false;
|
||||
@@ -295,7 +310,7 @@ bool NACLAntiSpamRegistry::checkQueue(U32 name, LLUUID& source, U32 multiplier,
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!silent)
|
||||
if(gSavedSettings.getBOOL("AntiSpamNotify"))
|
||||
{
|
||||
LLSD args;
|
||||
args["MESSAGE"] = std::string(getQueueName(name))+": Blocked object "+source.asString();
|
||||
|
||||
@@ -1,3 +1,18 @@
|
||||
/* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
* Version 2, December 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||
*
|
||||
* Everyone is permitted to copy and distribute verbatim or modified
|
||||
* copies of this license document, and changing it is allowed as long
|
||||
* as the name is changed.
|
||||
*
|
||||
* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
* TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
*
|
||||
* 0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
*/
|
||||
|
||||
#ifndef NACLANTISPAM_H
|
||||
#define NACLANTISPAM_H
|
||||
#include <boost/tr1/unordered_map.hpp>
|
||||
@@ -48,7 +63,7 @@ public:
|
||||
static void setRegisteredQueueAmount(U32 name,U32 amount);
|
||||
static void setAllQueueTimes(U32 amount);
|
||||
static void setAllQueueAmounts(U32 time);
|
||||
static bool checkQueue(U32 name, LLUUID& source, U32 multiplier=1, bool silent=false);
|
||||
static bool checkQueue(U32 name, LLUUID& source, U32 multiplier=1);
|
||||
static bool handleNaclAntiSpamGlobalQueueChanged(const LLSD& newvalue);
|
||||
static bool handleNaclAntiSpamTimeChanged(const LLSD& newvalue);
|
||||
static bool handleNaclAntiSpamAmountChanged(const LLSD& newvalue);
|
||||
@@ -86,7 +101,6 @@ private:
|
||||
static void blockGlobalEntry(LLUUID& source);
|
||||
};
|
||||
|
||||
|
||||
extern const std::string COLLISION_SOUNDS[];
|
||||
extern const int COLLISION_SOUNDS_SIZE;
|
||||
|
||||
|
||||
@@ -894,7 +894,95 @@
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>_NACL_Antispam</key>
|
||||
<key>AntiSpamAlerts</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When true, dialogs from alerts will be blocked.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AntiSpamFriendshipOffers</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When true, dialogs from friendship requests will be blocked.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AntiSpamGroupInvites</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When true, dialogs from group invites will be blocked.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AntiSpamGroupNotices</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When true, dialogs from group notices will be blocked.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AntiSpamItemOffers</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When true, dialogs from inventory item offers will be blocked.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AntiSpamNotify</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When true, notifications will appear any time a spamtype is blocked.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>AntiSpamScripts</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When true, dialogs from scripts, including script-driven teleports and questions, and other interactive script stuff, will be blocked.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AntiSpamTeleports</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When true, dialogs from teleport requests from other residents will be blocked.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>_NACL_Antispam</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When true, all dialogs will be blocked, resets on restart.</string>
|
||||
@@ -908,7 +996,7 @@
|
||||
<key>_NACL_AntiSpamGlobalQueue</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string> </string>
|
||||
<string>Collect spamtypes together, instead of individually counting them</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
@@ -919,24 +1007,24 @@
|
||||
<key>_NACL_AntiSpamTime</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string> </string>
|
||||
<string>Time in seconds for spamtype to accumulate the _NACL_AntiSpamAmount and be blocked</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>2</integer>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>_NACL_AntiSpamAmount</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string> </string>
|
||||
<string>Amount of spamtype to be reached before the blocking will occur.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>10</integer>
|
||||
<integer>30</integer>
|
||||
</map>
|
||||
<key>_NACL_AntiSpamSoundMulti</key>
|
||||
<map>
|
||||
@@ -947,7 +1035,7 @@
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>4</integer>
|
||||
<integer>20</integer>
|
||||
</map>
|
||||
<key>_NACL_AntiSpamNewlines</key>
|
||||
<map>
|
||||
@@ -958,7 +1046,7 @@
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>30</integer>
|
||||
<integer>20</integer>
|
||||
</map>
|
||||
<key>_NACL_AntiSpamSoundPreloadMulti</key>
|
||||
<map>
|
||||
@@ -969,7 +1057,7 @@
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>4</integer>
|
||||
<integer>20</integer>
|
||||
</map>
|
||||
<!-- Vanilla SL settings that are now optionally Account-Specific -->
|
||||
<key>AgentChatColor</key>
|
||||
|
||||
@@ -95,6 +95,7 @@ LLPrefsAscentChat::LLPrefsAscentChat()
|
||||
|
||||
childSetEnabled("reset_antispam", started);
|
||||
childSetCommitCallback("reset_antispam", onCommitResetAS, this);
|
||||
childSetCommitCallback("antispam_checkbox", onCommitDialogBlock, this);
|
||||
|
||||
childSetCommitCallback("KeywordsOn", onCommitKeywords, this);
|
||||
childSetCommitCallback("KeywordsList", onCommitKeywords, this);
|
||||
@@ -248,6 +249,21 @@ void LLPrefsAscentChat::onCommitResetAS(LLUICtrl*, void*)
|
||||
NACLAntiSpamRegistry::purgeAllQueues();
|
||||
}
|
||||
|
||||
//static
|
||||
void LLPrefsAscentChat::onCommitDialogBlock(LLUICtrl* ctrl, void* user_data)
|
||||
{
|
||||
LLPrefsAscentChat* self = (LLPrefsAscentChat*)user_data;
|
||||
bool enabled = ctrl->getValue().asBoolean();
|
||||
self->childSetEnabled("Block All Dialogs From", !enabled);
|
||||
self->childSetEnabled("Alerts", !enabled);
|
||||
self->childSetEnabled("Friendship Offers", !enabled);
|
||||
self->childSetEnabled("Group Invites", !enabled);
|
||||
self->childSetEnabled("Group Notices", !enabled);
|
||||
self->childSetEnabled("Item Offers", !enabled);
|
||||
self->childSetEnabled("Scripts", !enabled);
|
||||
self->childSetEnabled("Teleport Offers", !enabled);
|
||||
}
|
||||
|
||||
//static
|
||||
void LLPrefsAscentChat::onCommitKeywords(LLUICtrl* ctrl, void* user_data)
|
||||
{
|
||||
@@ -331,6 +347,14 @@ void LLPrefsAscentChat::refreshValues()
|
||||
mChatSpamCount = gSavedSettings.getU32("_NACL_AntiSpamAmount");
|
||||
mChatSpamTime = gSavedSettings.getU32("_NACL_AntiSpamTime");
|
||||
mBlockDialogSpam = gSavedSettings.getBOOL("_NACL_Antispam");
|
||||
mBlockAlertSpam = gSavedSettings.getBOOL("AntiSpamAlerts");
|
||||
mBlockFriendSpam = gSavedSettings.getBOOL("AntiSpamFriendshipOffers");
|
||||
mBlockGroupInviteSpam = gSavedSettings.getBOOL("AntiSpamGroupInvites");
|
||||
mBlockGroupNoticeSpam = gSavedSettings.getBOOL("AntiSpamGroupNotices");
|
||||
mBlockItemOfferSpam = gSavedSettings.getBOOL("AntiSpamItemOffers");
|
||||
mBlockScriptSpam = gSavedSettings.getBOOL("AntiSpamScripts");
|
||||
mBlockTeleportSpam = gSavedSettings.getBOOL("AntiSpamTeleports");
|
||||
mNotifyOnSpam = gSavedSettings.getBOOL("AntiSpamNotify");
|
||||
mSoundMulti = gSavedSettings.getU32("_NACL_AntiSpamSoundMulti");
|
||||
mNewLines = gSavedSettings.getU32("_NACL_AntiSpamNewlines");
|
||||
mPreloadMulti = gSavedSettings.getU32("_NACL_AntiSpamSoundPreloadMulti");
|
||||
@@ -378,6 +402,16 @@ void LLPrefsAscentChat::refresh()
|
||||
LLWStringUtil::replaceChar(auto_response, '%', ' ');
|
||||
childSetText("im_response", wstring_to_utf8str(auto_response));
|
||||
|
||||
//Antispam ------------------------------------------------------------------------
|
||||
childSetEnabled("Block All Dialogs From", !mBlockDialogSpam);
|
||||
childSetEnabled("Alerts", !mBlockDialogSpam);
|
||||
childSetEnabled("Friendship Offers", !mBlockDialogSpam);
|
||||
childSetEnabled("Group Invites", !mBlockDialogSpam);
|
||||
childSetEnabled("Group Notices", !mBlockDialogSpam);
|
||||
childSetEnabled("Item Offers", !mBlockDialogSpam);
|
||||
childSetEnabled("Scripts", !mBlockDialogSpam);
|
||||
childSetEnabled("Teleport Offers", !mBlockDialogSpam);
|
||||
|
||||
//Text Options ------------------------------------------------------------------------
|
||||
combo = getChild<LLComboBox>("SpellBase");
|
||||
|
||||
@@ -518,6 +552,14 @@ void LLPrefsAscentChat::cancel()
|
||||
gSavedSettings.setU32("_NACL_AntiSpamAmount", mChatSpamCount);
|
||||
gSavedSettings.setU32("_NACL_AntiSpamTime", mChatSpamTime);
|
||||
gSavedSettings.setBOOL("_NACL_Antispam", mBlockDialogSpam);
|
||||
gSavedSettings.setBOOL("AntiSpamAlerts", mBlockAlertSpam);
|
||||
gSavedSettings.setBOOL("AntiSpamFriendshipOffers", mBlockFriendSpam);
|
||||
gSavedSettings.setBOOL("AntiSpamGroupNotices", mBlockGroupNoticeSpam);
|
||||
gSavedSettings.setBOOL("AntiSpamGroupInvites", mBlockGroupInviteSpam);
|
||||
gSavedSettings.setBOOL("AntiSpamItemOffers", mBlockItemOfferSpam);
|
||||
gSavedSettings.setBOOL("AntiSpamScripts", mBlockScriptSpam);
|
||||
gSavedSettings.setBOOL("AntiSpamTeleports", mBlockTeleportSpam);
|
||||
gSavedSettings.setBOOL("AntiSpamNotify", mNotifyOnSpam);
|
||||
gSavedSettings.setU32("_NACL_AntiSpamSoundMulti", mSoundMulti);
|
||||
gSavedSettings.setU32("_NACL_AntiSpamNewlines", mNewLines);
|
||||
gSavedSettings.setU32("_NACL_AntiSpamSoundPreloadMulti", mPreloadMulti);
|
||||
|
||||
@@ -57,6 +57,7 @@ protected:
|
||||
static void onCommitTimeDate(LLUICtrl* ctrl, void *userdata);
|
||||
static void onCommitAutoResponse(LLUICtrl* ctrl, void* user_data);
|
||||
static void onCommitResetAS(LLUICtrl*,void*);
|
||||
static void onCommitDialogBlock(LLUICtrl*, void*);
|
||||
static void onCommitKeywords(LLUICtrl* ctrl, void* user_data);
|
||||
|
||||
//Chat/IM -----------------------------------------------------------------------------
|
||||
@@ -89,6 +90,14 @@ protected:
|
||||
U32 mChatSpamCount;
|
||||
U32 mChatSpamTime;
|
||||
BOOL mBlockDialogSpam;
|
||||
BOOL mBlockAlertSpam;
|
||||
BOOL mBlockFriendSpam;
|
||||
BOOL mBlockGroupNoticeSpam;
|
||||
BOOL mBlockGroupInviteSpam;
|
||||
BOOL mBlockItemOfferSpam;
|
||||
BOOL mBlockScriptSpam;
|
||||
BOOL mBlockTeleportSpam;
|
||||
BOOL mNotifyOnSpam;
|
||||
BOOL mSoundMulti;
|
||||
U32 mNewLines;
|
||||
U32 mPreloadMulti;
|
||||
|
||||
@@ -1638,7 +1638,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
|
||||
|
||||
void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
|
||||
{
|
||||
//Until throttling is implmented, busy mode should reject inventory instead of silently
|
||||
//Until throttling is implemented, busy mode should reject inventory instead of silently
|
||||
//accepting it. SEE SL-39554
|
||||
if (gAgent.getBusy())
|
||||
{
|
||||
@@ -1648,7 +1648,7 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
|
||||
|
||||
// NaCl - Antispam Registry
|
||||
static LLCachedControl<bool> antispam(gSavedSettings,"_NACL_Antispam");
|
||||
if(antispam || NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_INVENTORY,info->mFromID))
|
||||
if(antispam || gSavedSettings.getBOOL("AntiSpamItemOffers") || NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_INVENTORY,info->mFromID))
|
||||
return;
|
||||
// NaCl End
|
||||
//If muted, don't even go through the messaging stuff. Just curtail the offer here.
|
||||
@@ -1933,24 +1933,27 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
//msg->getData("MessageBlock", "Count", &count);
|
||||
msg->getStringFast(_PREHASH_MessageBlock, _PREHASH_FromAgentName, name);
|
||||
msg->getStringFast(_PREHASH_MessageBlock, _PREHASH_Message, message);
|
||||
// NaCl - Newline flood protection
|
||||
LLViewerObject* obj=gObjectList.findObject(from_id);
|
||||
if(!from_id.isNull() //Not from nothing.
|
||||
&& gAgent.getID() != from_id //Not from self.
|
||||
&& !(obj && obj->permYouOwner())) //Not from own object.
|
||||
{
|
||||
static LLCachedControl<U32> SpamNewlines(gSavedSettings,"_NACL_AntiSpamNewlines");
|
||||
boost::sregex_iterator iter(message.begin(), message.end(), NEWLINES);
|
||||
if((U32)std::abs(std::distance(iter, boost::sregex_iterator())) > SpamNewlines)
|
||||
{
|
||||
NACLAntiSpamRegistry::blockOnQueue((U32)NACLAntiSpamRegistry::QUEUE_IM,from_id);
|
||||
LLSD args;
|
||||
args["MESSAGE"] = "Message: Blocked newline flood from "+from_id.asString();
|
||||
LLNotificationsUtil::add("SystemMessageTip", args);
|
||||
return;
|
||||
}
|
||||
}
|
||||
// NaCl End
|
||||
// NaCl - Newline flood protection
|
||||
LLViewerObject* obj=gObjectList.findObject(from_id);
|
||||
if(!from_id.isNull() //Not from nothing.
|
||||
&& gAgent.getID() != from_id //Not from self.
|
||||
&& !(obj && obj->permYouOwner())) //Not from own object.
|
||||
{
|
||||
static LLCachedControl<U32> SpamNewlines(gSavedSettings,"_NACL_AntiSpamNewlines");
|
||||
boost::sregex_iterator iter(message.begin(), message.end(), NEWLINES);
|
||||
if((U32)std::abs(std::distance(iter, boost::sregex_iterator())) > SpamNewlines)
|
||||
{
|
||||
NACLAntiSpamRegistry::blockOnQueue((U32)NACLAntiSpamRegistry::QUEUE_IM,from_id);
|
||||
if(gSavedSettings.getBOOL("AntiSpamNotify"))
|
||||
{
|
||||
LLSD args;
|
||||
args["MESSAGE"] = "Message: Blocked newline flood from "+from_id.asString();
|
||||
LLNotificationsUtil::add("SystemMessageTip", args);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
// NaCl End
|
||||
msg->getU32Fast(_PREHASH_MessageBlock, _PREHASH_ParentEstateID, parent_estate_id);
|
||||
msg->getUUIDFast(_PREHASH_MessageBlock, _PREHASH_RegionID, region_id);
|
||||
msg->getVector3Fast(_PREHASH_MessageBlock, _PREHASH_Position, position);
|
||||
@@ -1959,10 +1962,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
EInstantMessage dialog = (EInstantMessage)d;
|
||||
|
||||
// NaCl - Antispam Registry
|
||||
if((dialog != IM_TYPING_START && dialog != IM_TYPING_STOP)
|
||||
&& NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_IM,from_id))
|
||||
return;
|
||||
// NaCl End
|
||||
if((dialog != IM_TYPING_START && dialog != IM_TYPING_STOP)
|
||||
&& NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_IM,from_id))
|
||||
return;
|
||||
// NaCl End
|
||||
|
||||
// make sure that we don't have an empty or all-whitespace name
|
||||
LLStringUtil::trim(name);
|
||||
@@ -2427,7 +2430,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
case IM_GROUP_NOTICE_REQUESTED:
|
||||
{
|
||||
// NaCl - Antispam
|
||||
if(antispam)
|
||||
if(antispam || gSavedSettings.getBOOL("AntiSpamGroupNotices"))
|
||||
return;
|
||||
// NaCl End
|
||||
LL_INFOS("Messaging") << "Received IM_GROUP_NOTICE message." << LL_ENDL;
|
||||
@@ -2526,7 +2529,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
case IM_GROUP_INVITATION:
|
||||
{
|
||||
// NaCl - Antispam
|
||||
if(antispam)
|
||||
if(antispam || gSavedSettings.getBOOL("AntiSpamGroupInvites"))
|
||||
return;
|
||||
// NaCl End
|
||||
//if (!is_linden && (is_busy || is_muted))
|
||||
@@ -2574,7 +2577,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
// Someone has offered us some inventory.
|
||||
{
|
||||
// NaCl - Antispam
|
||||
if(antispam)
|
||||
if(antispam || gSavedSettings.getBOOL("AntiSpamItemOffers"))
|
||||
return;
|
||||
// NaCl End
|
||||
LLOfferInfo* info = new LLOfferInfo;
|
||||
@@ -2829,10 +2832,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
}
|
||||
break;
|
||||
case IM_FROM_TASK_AS_ALERT:
|
||||
// NaCl - Antispam
|
||||
if(antispam)
|
||||
return;
|
||||
// NaCl End
|
||||
// NaCl - Antispam
|
||||
if(antispam || (!is_owned_by_me && gSavedSettings.getBOOL("AntiSpamAlerts")))
|
||||
return;
|
||||
// NaCl End
|
||||
if (is_busy && !is_owned_by_me)
|
||||
{
|
||||
return;
|
||||
@@ -2870,7 +2873,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
|
||||
case IM_LURE_USER:
|
||||
{
|
||||
if(antispam) return; //NaCl Antispam
|
||||
if(antispam || gSavedSettings.getBOOL("AntiSpamTeleports")) return; //NaCl Antispam
|
||||
// [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));
|
||||
@@ -3011,10 +3014,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
|
||||
case IM_GOTO_URL:
|
||||
{
|
||||
// NaCl - Antispam
|
||||
if(antispam)
|
||||
return;
|
||||
// NaCl End
|
||||
LLSD args;
|
||||
// n.b. this is for URLs sent by the system, not for
|
||||
// URLs sent by scripts (i.e. llLoadURL)
|
||||
@@ -3040,7 +3039,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
case IM_FRIENDSHIP_OFFERED:
|
||||
{
|
||||
// NaCl - Antispam
|
||||
if(antispam)
|
||||
if(antispam || gSavedSettings.getBOOL("AntiSpamFriendshipOffers"))
|
||||
return;
|
||||
// NaCl End
|
||||
LLSD payload;
|
||||
@@ -3179,7 +3178,7 @@ void process_offer_callingcard(LLMessageSystem* msg, void**)
|
||||
{
|
||||
// NaCl - Antispam
|
||||
static LLCachedControl<bool> antispam(gSavedSettings,"_NACL_Antispam");
|
||||
if(antispam)
|
||||
if(antispam || gSavedSettings.getBOOL("AntiSpamFriendshipOffers"))
|
||||
return;
|
||||
// NaCl End
|
||||
// someone has offered to form a friendship
|
||||
@@ -3189,9 +3188,9 @@ void process_offer_callingcard(LLMessageSystem* msg, void**)
|
||||
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, source_id);
|
||||
|
||||
// NaCl - Antispam Registry
|
||||
if(NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_CALLING_CARD,source_id))
|
||||
return;
|
||||
// NaCl End
|
||||
if(NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_CALLING_CARD,source_id))
|
||||
return;
|
||||
// NaCl End
|
||||
|
||||
LLUUID tid;
|
||||
msg->getUUIDFast(_PREHASH_AgentBlock, _PREHASH_TransactionID, tid);
|
||||
@@ -3379,13 +3378,12 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
|
||||
msg->getU8("ChatData", "ChatType", type_temp);
|
||||
chat.mChatType = (EChatType)type_temp;
|
||||
|
||||
|
||||
// NaCL - Antispam Registry
|
||||
if((chat.mChatType != CHAT_TYPE_START && chat.mChatType != CHAT_TYPE_STOP) //Chat type isn't typing
|
||||
&&((owner_id.isNull() && NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_CHAT,from_id)) //Spam from an object?
|
||||
||(NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_CHAT,owner_id)))) //Spam from a resident?
|
||||
return;
|
||||
// NaCl End
|
||||
// NaCL - Antispam Registry
|
||||
if((chat.mChatType != CHAT_TYPE_START && chat.mChatType != CHAT_TYPE_STOP) //Chat type isn't typing
|
||||
&&((owner_id.isNull() && NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_CHAT,from_id)) //Spam from an object?
|
||||
||(NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_CHAT,owner_id)))) //Spam from a resident?
|
||||
return;
|
||||
// NaCl End
|
||||
|
||||
msg->getU8Fast(_PREHASH_ChatData, _PREHASH_Audible, audible_temp);
|
||||
chat.mAudible = (EChatAudible)audible_temp;
|
||||
@@ -3507,23 +3505,26 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
|
||||
msg->getStringFast(_PREHASH_ChatData, _PREHASH_Message, mesg);
|
||||
|
||||
// NaCl - Newline flood protection
|
||||
LLViewerObject* obj=gObjectList.findObject(from_id);
|
||||
if(!(from_id.isNull()) //Not from nothing.
|
||||
|| !(gAgent.getID() != from_id) //Not from self.
|
||||
|| !(obj && obj->permYouOwner())) //Not from own object.
|
||||
{
|
||||
static LLCachedControl<U32> SpamNewlines(gSavedSettings,"_NACL_AntiSpamNewlines");
|
||||
boost::sregex_iterator iter(mesg.begin(), mesg.end(), NEWLINES);
|
||||
if((U32)std::abs(std::distance(iter, boost::sregex_iterator())) > SpamNewlines)
|
||||
{
|
||||
NACLAntiSpamRegistry::blockOnQueue((U32)NACLAntiSpamRegistry::QUEUE_CHAT,owner_id);
|
||||
LLSD args;
|
||||
args["MESSAGE"] = "Chat: Blocked newline flood from "+owner_id.asString();
|
||||
LLNotificationsUtil::add("SystemMessageTip", args);
|
||||
return;
|
||||
}
|
||||
}
|
||||
// NaCl End
|
||||
LLViewerObject* obj=gObjectList.findObject(from_id);
|
||||
if(!(from_id.isNull()) //Not from nothing.
|
||||
|| !(gAgent.getID() != from_id) //Not from self.
|
||||
|| !(obj && obj->permYouOwner())) //Not from own object.
|
||||
{
|
||||
static LLCachedControl<U32> SpamNewlines(gSavedSettings,"_NACL_AntiSpamNewlines");
|
||||
boost::sregex_iterator iter(mesg.begin(), mesg.end(), NEWLINES);
|
||||
if((U32)std::abs(std::distance(iter, boost::sregex_iterator())) > SpamNewlines)
|
||||
{
|
||||
NACLAntiSpamRegistry::blockOnQueue((U32)NACLAntiSpamRegistry::QUEUE_CHAT,owner_id);
|
||||
if(gSavedSettings.getBOOL("AntiSpamNotify"))
|
||||
{
|
||||
LLSD args;
|
||||
args["MESSAGE"] = "Chat: Blocked newline flood from "+owner_id.asString();
|
||||
LLNotificationsUtil::add("SystemMessageTip", args);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
// NaCl End
|
||||
|
||||
static std::map<LLUUID, bool> sChatObjectAuth;
|
||||
|
||||
@@ -4850,19 +4851,18 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
|
||||
msg->getUUIDFast(_PREHASH_SoundData, _PREHASH_ObjectID, object_id);
|
||||
|
||||
// NaCl - Antispam Registry
|
||||
/*if(owner_id.isNull())
|
||||
{*/
|
||||
bool bDoSpamCheck=1;
|
||||
std::string sSound=sound_id.asString();
|
||||
static LLCachedControl<U32> _NACL_AntiSpamSoundMulti(gSavedSettings,"_NACL_AntiSpamSoundMulti");
|
||||
for(int i=0;i< COLLISION_SOUNDS_SIZE;i++)
|
||||
if(COLLISION_SOUNDS[i] == sSound)
|
||||
bDoSpamCheck=0;
|
||||
static LLCachedControl<U32> _NACL_AntiSpamSoundMulti(gSavedSettings,"_NACL_AntiSpamSoundMulti");
|
||||
if(owner_id.isNull())
|
||||
{
|
||||
bool bDoSpamCheck=1;
|
||||
std::string sSound=sound_id.asString();
|
||||
for(int i=0;i< COLLISION_SOUNDS_SIZE;i++)
|
||||
if(COLLISION_SOUNDS[i] == sSound)
|
||||
bDoSpamCheck=0;
|
||||
if(bDoSpamCheck)
|
||||
if(NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SOUND,object_id, _NACL_AntiSpamSoundMulti,true)) return;
|
||||
/*}
|
||||
else
|
||||
if(NACLAntiSpamRegistry::checkQueue("Soundspam",owner_id)) return;*/
|
||||
if(NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SOUND,object_id, _NACL_AntiSpamSoundMulti)) return;
|
||||
}
|
||||
else if(NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SOUND,owner_id, _NACL_AntiSpamSoundMulti)) return;
|
||||
// NaCl End
|
||||
|
||||
msg->getUUIDFast(_PREHASH_SoundData, _PREHASH_ParentID, parent_id);
|
||||
@@ -4928,13 +4928,13 @@ void process_preload_sound(LLMessageSystem *msg, void **user_data)
|
||||
msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_ObjectID, object_id);
|
||||
msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_OwnerID, owner_id);
|
||||
|
||||
// NaCl - Antispam Registry
|
||||
static LLCachedControl<U32> _NACL_AntiSpamSoundPreloadMulti(gSavedSettings,"_NACL_AntiSpamSoundPreloadMulti");
|
||||
if((owner_id.isNull()
|
||||
&& NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SOUND_PRELOAD,object_id,_NACL_AntiSpamSoundPreloadMulti))
|
||||
|| NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SOUND_PRELOAD,owner_id,_NACL_AntiSpamSoundPreloadMulti))
|
||||
return;
|
||||
// NaCl End
|
||||
// NaCl - Antispam Registry
|
||||
static LLCachedControl<U32> _NACL_AntiSpamSoundPreloadMulti(gSavedSettings,"_NACL_AntiSpamSoundPreloadMulti");
|
||||
if((owner_id.isNull()
|
||||
&& NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SOUND_PRELOAD,object_id,_NACL_AntiSpamSoundPreloadMulti))
|
||||
|| NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SOUND_PRELOAD,owner_id,_NACL_AntiSpamSoundPreloadMulti))
|
||||
return;
|
||||
// NaCl End
|
||||
|
||||
LLViewerObject *objectp = gObjectList.findObject(object_id);
|
||||
if (!objectp) return;
|
||||
@@ -4972,12 +4972,12 @@ void process_attached_sound(LLMessageSystem *msg, void **user_data)
|
||||
msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_ObjectID, object_id);
|
||||
msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_OwnerID, owner_id);
|
||||
|
||||
// NaCl - Antispam Registry
|
||||
if(/*owner_id.isNull()
|
||||
&&*/ NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SOUND,object_id))
|
||||
/*|| (NACLAntiSpamRegistry::checkQueue("Soundspam",owner_id))*/
|
||||
return;
|
||||
// NaCl End
|
||||
// NaCl - Antispam Registry
|
||||
if((owner_id.isNull()
|
||||
&& NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SOUND,object_id))
|
||||
|| NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SOUND,owner_id))
|
||||
return;
|
||||
// NaCl End
|
||||
|
||||
msg->getF32Fast(_PREHASH_DataBlock, _PREHASH_Gain, gain);
|
||||
msg->getU8Fast(_PREHASH_DataBlock, _PREHASH_Flags, flags);
|
||||
@@ -6243,7 +6243,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
|
||||
{
|
||||
// NaCl - Antispam
|
||||
static LLCachedControl<bool> antispam(gSavedSettings,"_NACL_Antispam");
|
||||
if(antispam)
|
||||
if(antispam || gSavedSettings.getBOOL("AntiSpamScripts"))
|
||||
return;
|
||||
// NaCl End
|
||||
// *TODO: Translate owner name -> [FIRST] [LAST]
|
||||
@@ -6261,12 +6261,12 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
|
||||
// itemid -> script asset key of script requesting permissions
|
||||
msg->getUUIDFast(_PREHASH_Data, _PREHASH_ItemID, itemid );
|
||||
|
||||
// NaCl - Antispam Registry
|
||||
if((taskid.isNull()
|
||||
&& NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SCRIPT_DIALOG,itemid))
|
||||
|| NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SCRIPT_DIALOG,taskid))
|
||||
return;
|
||||
// NaCl End
|
||||
// NaCl - Antispam Registry
|
||||
if((taskid.isNull()
|
||||
&& NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SCRIPT_DIALOG,itemid))
|
||||
|| NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SCRIPT_DIALOG,taskid))
|
||||
return;
|
||||
// NaCl End
|
||||
|
||||
msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectName, object_name);
|
||||
msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectOwner, owner_name);
|
||||
@@ -6928,7 +6928,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
|
||||
{
|
||||
// NaCl - Antispam
|
||||
static LLCachedControl<bool> antispam(gSavedSettings,"_NACL_Antispam");
|
||||
if(antispam)
|
||||
if(antispam || gSavedSettings.getBOOL("AntiSpamScripts"))
|
||||
return;
|
||||
// NaCl End
|
||||
S32 i;
|
||||
@@ -6938,9 +6938,9 @@ void process_script_dialog(LLMessageSystem* msg, void**)
|
||||
msg->getUUID("Data", "ObjectID", object_id);
|
||||
|
||||
// NaCl - Antispam Registry
|
||||
if(NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SCRIPT_DIALOG,object_id))
|
||||
return;
|
||||
// NaCl End
|
||||
if(NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SCRIPT_DIALOG,object_id))
|
||||
return;
|
||||
// NaCl End
|
||||
|
||||
// For compability with OS grids first check for presence of extended packet before fetching data.
|
||||
LLUUID owner_id;
|
||||
@@ -6948,11 +6948,10 @@ void process_script_dialog(LLMessageSystem* msg, void**)
|
||||
{
|
||||
msg->getUUID("OwnerData", "OwnerID", owner_id);
|
||||
|
||||
// NaCl - Antispam Registry
|
||||
if(NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SCRIPT_DIALOG,owner_id))
|
||||
return;
|
||||
// NaCl End
|
||||
|
||||
// NaCl - Antispam Registry
|
||||
if(NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SCRIPT_DIALOG,owner_id))
|
||||
return;
|
||||
// NaCl End
|
||||
}
|
||||
|
||||
if (LLMuteList::getInstance()->isMuted(object_id) || LLMuteList::getInstance()->isMuted(owner_id))
|
||||
@@ -7110,7 +7109,7 @@ void process_load_url(LLMessageSystem* msg, void**)
|
||||
{
|
||||
// NaCl - Antispam
|
||||
static LLCachedControl<bool> antispam(gSavedSettings,"_NACL_Antispam");
|
||||
if(antispam)
|
||||
if(antispam || gSavedSettings.getBOOL("AntiSpamScripts"))
|
||||
return;
|
||||
// NaCl End
|
||||
LLUUID object_id;
|
||||
@@ -7124,12 +7123,12 @@ void process_load_url(LLMessageSystem* msg, void**)
|
||||
msg->getUUID( "Data", "ObjectID", object_id);
|
||||
msg->getUUID( "Data", "OwnerID", owner_id);
|
||||
|
||||
// NaCl - Antispam Registry
|
||||
if((owner_id.isNull()
|
||||
&& NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SCRIPT_DIALOG,object_id))
|
||||
|| NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SCRIPT_DIALOG,owner_id))
|
||||
return;
|
||||
// NaCl End
|
||||
// NaCl - Antispam Registry
|
||||
if((owner_id.isNull()
|
||||
&& NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SCRIPT_DIALOG,object_id))
|
||||
|| NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_SCRIPT_DIALOG,owner_id))
|
||||
return;
|
||||
// NaCl End
|
||||
|
||||
msg->getBOOL( "Data", "OwnerIsGroup", owner_is_group);
|
||||
msg->getString("Data", "Message", 256, message);
|
||||
@@ -7205,7 +7204,7 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
|
||||
{
|
||||
// NaCl - Antispam
|
||||
static LLCachedControl<bool> antispam(gSavedSettings,"_NACL_Antispam");
|
||||
if(antispam)
|
||||
if(antispam || gSavedSettings.getBOOL("AntiSpamScripts"))
|
||||
return;
|
||||
// NaCl End
|
||||
if (!gSavedSettings.getBOOL("ScriptsCanShowUI")) return;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<view_border bevel_style="none" border_thickness="1" bottom_delta="0" follows="top|left" height="75"
|
||||
left="235" name="CmdDivisor" width="0"/>
|
||||
-->
|
||||
<text bottom="-15" left="250" name="objects_link_text_box2" width="300">Chat:</text>
|
||||
<text bottom="-15" left="250" name="objects_link_text_box2" width="300">Chat:</text>
|
||||
<check_box bottom_delta="-25" left_delta="-5" follows="left|top" control_name="PlayTypingSound" initial_value="true"
|
||||
label="Play the typing sound for local chat" tool_tip="Silences the chatting type sound, making it quieter for things like performances." name="play_typing_sound_check"/>
|
||||
<check_box bottom_delta="-20" follows="left|top" control_name="HideNotificationsInChat" initial_value="false"
|
||||
@@ -25,7 +25,7 @@
|
||||
label="Allow MU pose method." tool_tip="Allows the use of both /me and : to perform emotes." name="allow_mu_pose_check"/>
|
||||
<check_box bottom_delta="-20" follows="left|top" control_name="AscentAutoCloseOOC"
|
||||
label="Auto-close OOC comments." tool_tip="Will automatically append '))' to any message starting with '((', or visa versa." name="close_ooc_check"/>
|
||||
<text bottom_delta="-15" follows="left|top" name="objects_link_text_box3">Show links on chatting object names in chat history for:</text>
|
||||
<text bottom_delta="-15" follows="left|top" name="objects_link_text_box3">Show links on chatting object names in chat history for:</text>
|
||||
<radio_group bottom_delta="-26" control_name="LinksForChattingObjects" tool_tip="Enables a link to show you the owner of the speaking object."
|
||||
follows="top" height="20" left="20" name="objects_link" width="350">
|
||||
<radio_item bottom_delta="0" left_delta="5" name="no_object" width="48">No object</radio_item>
|
||||
@@ -70,12 +70,21 @@
|
||||
<panel border="true" left="1" bottom="-408" height="408" width="500" label="Spam" name="Spam">
|
||||
<check_box control_name="_NACL_AntiSpamGlobalQueue" label="No messagetype-specific spam queues" name="spammsg_checkbox" width="256" left="6"/>
|
||||
<button height="23" label="Reset antispam queues" label_selected="Reset antispam queues" name="reset_antispam" width="230" bottom_delta="0" left="260"/>
|
||||
<spinner control_name="_NACL_AntiSpamTime" decimal_digits="0" increment="1" min_val="1" max_val="60" label="Antispam time(seconds):" label_width="330" name="antispamtime" width="390" left="10"/>
|
||||
<spinner control_name="_NACL_AntiSpamAmount" decimal_digits="0" increment="1" min_val="5" max_val="100" label="Antispam amount:" label_width="330" name="antispamamount" width="390"/>
|
||||
<spinner control_name="_NACL_AntiSpamSoundMulti" decimal_digits="0" increment="1" min_val="1" max_val="100" label="Amount multiplicatior for sound antispam:" label_width="330" left="10" name="antispamsoundmulti" width="390"/>
|
||||
<spinner control_name="_NACL_AntiSpamSoundPreloadMulti" decimal_digits="0" increment="1" min_val="1" max_val="99999" label="Amount multiplicatior for sound preload antispam:" label_width="330" name="antispamsoundpreloadmulti" width="390"/>
|
||||
<spinner control_name="_NACL_AntiSpamNewlines" decimal_digits="0" increment="1" min_val="5" max_val="99999" label="Amount of newlines to instablock message:" label_width="330" name="antispamnewlines" width="390"/>
|
||||
<check_box control_name="_NACL_Antispam" height="16" label="Disable -all- dialogs (resets on login)" name="antispam_checkbox" left="6"/>
|
||||
<spinner control_name="_NACL_AntiSpamTime" decimal_digits="0" increment="1" min_val="1" max_val="60" label="Antispam time(seconds):" label_width="330" tool_tip="Lower is less sensitive" name="antispamtime" width="390" left="10"/>
|
||||
<spinner control_name="_NACL_AntiSpamAmount" decimal_digits="0" increment="1" min_val="5" max_val="99999" label="Antispam amount:" label_width="330" tool_tip="Higher is less sensitive" name="antispamamount" width="390"/>
|
||||
<spinner control_name="_NACL_AntiSpamSoundMulti" decimal_digits="0" increment="1" min_val="1" max_val="99999" label="Amount multiplicatior for sound antispam:" label_width="330" tool_tip="Higher is less sensitive" left="10" name="antispamsoundmulti" width="390"/>
|
||||
<spinner control_name="_NACL_AntiSpamSoundPreloadMulti" decimal_digits="0" increment="1" min_val="1" max_val="99999" label="Amount multiplicatior for sound preload antispam:" label_width="330" tool_tip="Higher is less sensitive" name="antispamsoundpreloadmulti" width="390"/>
|
||||
<spinner control_name="_NACL_AntiSpamNewlines" decimal_digits="0" increment="1" min_val="5" max_val="99999" label="Amount of newlines to instablock message:" label_width="330" tool_tip="Higher is less sensitive" name="antispamnewlines" width="390"/>
|
||||
<check_box control_name="_NACL_Antispam" height="16" label="Disable -all- dialogs (resets on login)" name="antispam_checkbox" left="6"/>
|
||||
<text name="Block All Dialogs From" left="10">Block All Dialogs From</text>
|
||||
<check_box control_name="AntiSpamAlerts" height="16" label="Alerts" name="Alerts" left="14"/>
|
||||
<check_box control_name="AntiSpamFriendshipOffers" height="16" label="Friendship Offers" name="Friendship Offers" bottom_delta="0" left_delta="120"/>
|
||||
<check_box control_name="AntiSpamGroupInvites" height="16" label="Group Invites" name="Group Invites" bottom_delta="0" left_delta="120"/>
|
||||
<check_box control_name="AntiSpamGroupNotices" height="16" label="Group Notices" name="Group Notices" bottom_delta="0" left_delta="120"/>
|
||||
<check_box control_name="AntiSpamItemOffers" height="16" label="Item Offers" name="Item Offers" left="14"/>
|
||||
<check_box control_name="AntiSpamScripts" height="16" label="Scripts" name="Scripts" bottom_delta="0" left_delta="120"/>
|
||||
<check_box control_name="AntiSpamTeleports" height="16" label="Teleport Offers" name="Teleport Offers" bottom_delta="0" left_delta="120"/>
|
||||
<check_box control_name="AntiSpamNotify" height="16" label="Notify when spam is blocked" name="Notify On Spam" tool_tip="When enabled, the bottom right corner may become a source of pseudo-spam whenever real spam is blocked." left="6"/>
|
||||
</panel>
|
||||
|
||||
<panel border="true" bottom="-580" height="525" label="Text Options" left="1" name="TextOptions" width="418">
|
||||
|
||||
Reference in New Issue
Block a user