Merge in Storm-1838
This commit is contained in:
@@ -1960,7 +1960,7 @@ static std::string clean_name_from_im(const std::string& name, EInstantMessage t
|
||||
case IM_LURE_ACCEPTED:
|
||||
case IM_LURE_DECLINED:
|
||||
case IM_GODLIKE_LURE_USER:
|
||||
case IM_YET_TO_BE_USED:
|
||||
case IM_TELEPORT_REQUEST:
|
||||
case IM_GROUP_ELECTION_DEPRECATED:
|
||||
//IM_GOTO_URL
|
||||
//IM_FROM_TASK_AS_ALERT
|
||||
@@ -3020,8 +3020,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
break;
|
||||
|
||||
case IM_LURE_USER:
|
||||
case IM_TELEPORT_REQUEST:
|
||||
{
|
||||
if(antispam || gSavedSettings.getBOOL("AntiSpamTeleports")) return; //NaCl Antispam
|
||||
if (antispam || gSavedSettings.getBOOL(dialog == IM_LURE_USER ? "AntiSpamTeleports" : "AntiSpamTeleportRequests")) 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));
|
||||
@@ -3054,7 +3055,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
bool canUserAccessDstRegion = true;
|
||||
bool doesUserRequireMaturityIncrease = false;
|
||||
|
||||
if (parse_lure_bucket(region_info, region_handle, pos, look_at, region_access))
|
||||
// Do not parse the (empty) lure bucket for TELEPORT_REQUEST
|
||||
if (IM_TELEPORT_REQUEST != dialog && parse_lure_bucket(region_info, region_handle, pos, look_at, region_access))
|
||||
{
|
||||
region_access_str = LLViewerRegion::accessToString(region_access);
|
||||
region_access_icn = LLViewerRegion::getAccessIcon(region_access);
|
||||
@@ -3098,7 +3100,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
// [RLVa:KB] - Checked: 2010-12-11 (RLVa-1.2.2c) | Modified: RLVa-1.2.2c
|
||||
if (rlv_handler_t::isEnabled())
|
||||
{
|
||||
if (!gRlvHandler.canTeleportViaLure(from_id))
|
||||
if (IM_TELEPORT_REQUEST != dialog && !gRlvHandler.canTeleportViaLure(from_id))
|
||||
{
|
||||
RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_TPLURE_REMOTE));
|
||||
if (is_busy)
|
||||
@@ -3107,7 +3109,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
}
|
||||
|
||||
// Censor lure message if: 1) restricted from receiving IMs from the sender, or 2) @showloc=n restricted
|
||||
if ( (!gRlvHandler.canReceiveIM(from_id)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) )
|
||||
if ( (!gRlvHandler.canReceiveIM(from_id)) || (IM_TELEPORT_REQUEST != dialog && gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) )
|
||||
{
|
||||
message = RlvStrings::getString(RLV_STRING_HIDDEN);
|
||||
}
|
||||
@@ -3129,7 +3131,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
//LLNotificationsUtil::add("TeleportOffered", args, payload);
|
||||
|
||||
// [RLVa:KB] - Checked: 2010-12-11 (RLVa-1.2.2c) | Modified: RLVa-1.2.2c
|
||||
if ( (rlv_handler_t::isEnabled()) && ((gRlvHandler.hasBehaviour(RLV_BHVR_ACCEPTTP)) || (fRlvSummon)) )
|
||||
if ( IM_TELEPORT_REQUEST != dialog && (rlv_handler_t::isEnabled()) && ((gRlvHandler.hasBehaviour(RLV_BHVR_ACCEPTTP)) || (fRlvSummon)) )
|
||||
{
|
||||
gRlvHandler.setCanCancelTp(false);
|
||||
if (is_busy)
|
||||
@@ -3138,9 +3140,27 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotificationsUtil::add("TeleportOffered", args, payload);
|
||||
/* Singu Note: No default constructor for LLNotification::Params
|
||||
LLNotification::Params params;
|
||||
if (IM_LURE_USER == dialog)
|
||||
{
|
||||
params.name = "TeleportOffered";
|
||||
params.functor_name = "TeleportOffered";
|
||||
}
|
||||
else if (IM_TELEPORT_REQUEST == dialog)
|
||||
{
|
||||
params.name = "TeleportRequest";
|
||||
params.functor_name = "TeleportRequest";
|
||||
}
|
||||
*/
|
||||
LLNotification::Params params(IM_LURE_USER == dialog ? "TeleportOffered" : "TeleportRequest");
|
||||
|
||||
params.substitutions = args;
|
||||
params.payload = payload;
|
||||
LLNotifications::instance().add(params);
|
||||
// <edit>
|
||||
gAgent.showLureDestination(name, region_handle, pos.mV[VX], pos.mV[VY], pos.mV[VZ]);
|
||||
if (IM_LURE_USER == dialog)
|
||||
gAgent.showLureDestination(name, region_handle, pos.mV[VX], pos.mV[VY], pos.mV[VZ]);
|
||||
// </edit>
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
@@ -7440,6 +7460,49 @@ void send_group_notice(const LLUUID& group_id,
|
||||
bin_bucket_size);
|
||||
}
|
||||
|
||||
void send_lures(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
std::string text = response["message"].asString();
|
||||
LLSLURL slurl;
|
||||
LLAgentUI::buildSLURL(slurl);
|
||||
text.append("\r\n").append(slurl.getSLURLString());
|
||||
|
||||
// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0c) | Modified: RLVa-1.3.0c
|
||||
if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SENDIMTO)) )
|
||||
{
|
||||
// Filter the lure message if one of the recipients of the lure can't be sent an IM to
|
||||
for (LLSD::array_const_iterator it = notification["payload"]["ids"].beginArray();
|
||||
it != notification["payload"]["ids"].endArray(); ++it)
|
||||
{
|
||||
if (!gRlvHandler.canSendIM(it->asUUID()))
|
||||
{
|
||||
text = RlvStrings::getString(RLV_STRING_HIDDEN);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_StartLure);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->nextBlockFast(_PREHASH_Info);
|
||||
msg->addU8Fast(_PREHASH_LureType, (U8)0); // sim will fill this in.
|
||||
msg->addStringFast(_PREHASH_Message, text);
|
||||
for(LLSD::array_const_iterator it = notification["payload"]["ids"].beginArray();
|
||||
it != notification["payload"]["ids"].endArray();
|
||||
++it)
|
||||
{
|
||||
LLUUID target_id = it->asUUID();
|
||||
|
||||
msg->nextBlockFast(_PREHASH_TargetData);
|
||||
msg->addUUIDFast(_PREHASH_TargetID, target_id);
|
||||
}
|
||||
gAgent.sendReliableMessage();
|
||||
}
|
||||
|
||||
bool handle_lure_callback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
static const unsigned OFFER_RECIPIENT_LIMIT = 250;
|
||||
@@ -7453,49 +7516,12 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response)
|
||||
LLNotificationsUtil::add("TooManyTeleportOffers", args);
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string text = response["message"].asString();
|
||||
LLSLURL slurl;
|
||||
LLAgentUI::buildSLURL(slurl);
|
||||
text.append("\r\n").append(slurl.getSLURLString());
|
||||
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
|
||||
if(0 == option)
|
||||
{
|
||||
// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0c) | Modified: RLVa-1.3.0c
|
||||
if ( (gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM)) || (gRlvHandler.hasBehaviour(RLV_BHVR_SENDIMTO)) )
|
||||
{
|
||||
// Filter the lure message if one of the recipients of the lure can't be sent an IM to
|
||||
for (LLSD::array_const_iterator it = notification["payload"]["ids"].beginArray();
|
||||
it != notification["payload"]["ids"].endArray(); ++it)
|
||||
{
|
||||
if (!gRlvHandler.canSendIM(it->asUUID()))
|
||||
{
|
||||
text = RlvStrings::getString(RLV_STRING_HIDDEN);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessageFast(_PREHASH_StartLure);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->nextBlockFast(_PREHASH_Info);
|
||||
msg->addU8Fast(_PREHASH_LureType, (U8)0); // sim will fill this in.
|
||||
msg->addStringFast(_PREHASH_Message, text);
|
||||
for(LLSD::array_const_iterator it = notification["payload"]["ids"].beginArray();
|
||||
it != notification["payload"]["ids"].endArray();
|
||||
++it)
|
||||
{
|
||||
LLUUID target_id = it->asUUID();
|
||||
|
||||
msg->nextBlockFast(_PREHASH_TargetData);
|
||||
msg->addUUIDFast(_PREHASH_TargetID, target_id);
|
||||
}
|
||||
gAgent.sendReliableMessage();
|
||||
send_lures(notification, response);
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -7551,6 +7577,66 @@ void handle_lure(const uuid_vec_t& ids)
|
||||
}
|
||||
}
|
||||
|
||||
bool teleport_request_callback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
LLUUID from_id = notification["payload"]["from_id"].asUUID();
|
||||
if(from_id.isNull())
|
||||
{
|
||||
llwarns << "from_id is NULL" << llendl;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string from_name;
|
||||
gCacheName->getFullName(from_id, from_name);
|
||||
|
||||
if(LLMuteList::getInstance()->isMuted(from_id) && !LLMuteList::getInstance()->isLinden(from_name))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
S32 option = 0;
|
||||
if (response.isInteger())
|
||||
{
|
||||
option = response.asInteger();
|
||||
}
|
||||
else
|
||||
{
|
||||
option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
}
|
||||
|
||||
switch(option)
|
||||
{
|
||||
// Yes
|
||||
case 0:
|
||||
{
|
||||
LLSD dummy_notification;
|
||||
dummy_notification["payload"]["ids"][0] = from_id;
|
||||
|
||||
LLSD dummy_response;
|
||||
dummy_response["message"] = response["message"];
|
||||
|
||||
send_lures(dummy_notification, dummy_response);
|
||||
}
|
||||
break;
|
||||
|
||||
// Profile
|
||||
case 3:
|
||||
{
|
||||
LLAvatarActions::showProfile(from_id);
|
||||
LLNotificationsUtil::add(notification["name"], notification["substitutions"], notification["payload"]); //Respawn!
|
||||
}
|
||||
break;
|
||||
|
||||
// No
|
||||
case 1:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLNotificationFunctorRegistration teleport_request_callback_reg("TeleportRequest", teleport_request_callback);
|
||||
|
||||
void send_improved_im(const LLUUID& to_id,
|
||||
const std::string& name,
|
||||
|
||||
Reference in New Issue
Block a user