From 68ceac36782c8ae08d3d05027016e6249a120c65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Liru=20F=C3=A6rs?= Date: Sat, 29 Feb 2020 06:46:20 -0500 Subject: [PATCH] llDialog & llTextBox with linked owner name and object name --- indra/newview/llviewermessage.cpp | 35 +++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index a96026652..982a0bc81 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -6993,20 +6993,51 @@ void process_script_dialog(LLMessageSystem* msg, void**) } } + LLSD query_string; + query_string["owner"] = owner_id; + if (rlv_handler_t::isEnabled() && (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) || gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMETAGS)) && !is_group && RlvUtil::isNearbyAgent(owner_id)) + { + query_string["rlv_shownames"] = true; + } + + if (const auto& obj = chatter ? chatter : gObjectList.findObject(owner_id)) // Fallback on the owner, if the chatter isn't present + { + // Compute the object SLURL. + const auto& pos = obj ? obj->getPositionRegion() : LLVector3::zero; + S32 x = ll_round((F32)fmod((F64)pos.mV[VX], (F64)REGION_WIDTH_METERS)); + S32 y = ll_round((F32)fmod((F64)pos.mV[VY], (F64)REGION_WIDTH_METERS)); + S32 z = ll_round((F32)pos.mV[VZ]); + std::ostringstream location; + location << obj->getRegion() << '/' << x << '/' << y << '/' << z; + if (chatter != obj) location << "?owner_not_object"; + auto loc = location.str(); + if (rlv_handler_t::isEnabled() && gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) + { + auto idxPos = loc.find('/'); + if ((std::string::npos != idxPos) && (RlvUtil::isNearbyRegion(loc.substr(0, idxPos)))) + loc = RlvStrings::getString(RLV_STRING_HIDDEN_REGION); + } + query_string["slurl"] = loc; + } + query_string["name"] = object_name; + query_string["groupowned"] = is_group; + object_name = LLSLURL("objectim", object_id, LLURI::mapToQueryString(query_string)).getSLURLString(); + LLSD args; args["TITLE"] = object_name; args["MESSAGE"] = message; args["CHANNEL"] = chat_channel; LLNotificationPtr notification; char const* name = (is_group && !is_text_box) ? "GROUPNAME" : "NAME"; - args[name] = is_group ? last_name : LLCacheName::buildFullName(first_name, last_name); + args[name] = has_owner ? is_group ? LLGroupActions::getSLURL(owner_id) : LLAvatarActions::getSLURL(owner_id) : + is_group ? last_name : LLCacheName::buildFullName(first_name, last_name); if (is_text_box) { args["DEFAULT"] = default_text; payload["textbox"] = "true"; LLNotificationsUtil::add("ScriptTextBoxDialog", args, payload, callback_script_dialog); } - else if (!first_name.empty()) + else if (!is_group) { notification = LLNotifications::instance().add( LLNotification::Params("ScriptDialog").substitutions(args).payload(payload).form_elements(form.asLLSD()));