diff --git a/indra/newview/alfloaterregiontracker.cpp b/indra/newview/alfloaterregiontracker.cpp index c19295924..cc58da211 100644 --- a/indra/newview/alfloaterregiontracker.cpp +++ b/indra/newview/alfloaterregiontracker.cpp @@ -48,17 +48,11 @@ #include "llworldmap.h" #include "llworldmapmessage.h" -#include - const std::string TRACKER_FILE = "tracked_regions.json"; ALFloaterRegionTracker::ALFloaterRegionTracker(const LLSD&) : LLFloater(), - LLEventTimer(5.f), - mRefreshRegionListBtn(NULL), - mRemoveRegionBtn(NULL), - mOpenMapBtn(NULL), - mRegionScrollList(NULL) + LLEventTimer(5.f) { LLUICtrlFactory::instance().buildFloater(this, "floater_region_tracker.xml"); loadFromJSON(); @@ -119,7 +113,7 @@ void ALFloaterRegionTracker::refresh() } std::vector saved_selected_values; - BOOST_FOREACH(const LLScrollListItem* item, mRegionScrollList->getAllSelected()) + for(const auto* item : mRegionScrollList->getAllSelected()) { saved_selected_values.push_back(item->getValue().asString()); } @@ -195,7 +189,7 @@ void ALFloaterRegionTracker::requestRegionData() for (LLSD::map_const_iterator it = mRegionMap.beginMap(); it != mRegionMap.endMap(); it++) { - const std::string& name = it->first; + const auto& name = it->first; if (LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromName(name)) { info->updateAgentCount(LLTimer::getElapsedSeconds()); @@ -210,7 +204,7 @@ void ALFloaterRegionTracker::requestRegionData() void ALFloaterRegionTracker::removeRegions() { - BOOST_FOREACH(const LLScrollListItem* item, mRegionScrollList->getAllSelected()) + for (const auto* item : mRegionScrollList->getAllSelected()) { mRegionMap.erase(item->getValue().asString()); } diff --git a/indra/newview/alfloaterregiontracker.h b/indra/newview/alfloaterregiontracker.h index bf7db79a1..230973f6a 100644 --- a/indra/newview/alfloaterregiontracker.h +++ b/indra/newview/alfloaterregiontracker.h @@ -41,11 +41,11 @@ private: ALFloaterRegionTracker(const LLSD& key); virtual ~ALFloaterRegionTracker(); public: - /*virtual*/ BOOL postBuild(); - /*virtual*/ void onOpen(/*const LLSD& key*/); - /*virtual*/ void onClose(bool app_quitting); - /*virtual*/ void refresh(); - /*virtual*/ BOOL tick(); + BOOL postBuild() override; + void onOpen(/*const LLSD& key*/) override; + void onClose(bool app_quitting) override; + void refresh() override; + BOOL tick() override; using LLFloaterSingleton::getInstance; private: @@ -62,8 +62,8 @@ public: private: LLSD mRegionMap; - LLButton* mRefreshRegionListBtn; - LLButton* mRemoveRegionBtn; - LLButton* mOpenMapBtn; - LLScrollListCtrl* mRegionScrollList; + LLButton* mRefreshRegionListBtn = nullptr; + LLButton* mRemoveRegionBtn = nullptr; + LLButton* mOpenMapBtn = nullptr; + LLScrollListCtrl* mRegionScrollList = nullptr; }; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 8d4cd4388..4138b8bf5 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -2031,24 +2031,35 @@ static bool parse_lure_bucket(const std::string& bucket, tokenizer tokens(bucket, sep); tokenizer::iterator iter = tokens.begin(); - S32 e[8]; + S32 gx,gy,rx,ry,rz,lx,ly,lz; try { - for (int i = 0; i < 8 && iter != tokens.end(); ++i) - { - e[i] = boost::lexical_cast((*(iter++)).c_str()); - } + gx = std::stoi(*(iter)); + gy = std::stoi(*(++iter)); + rx = std::stoi(*(++iter)); + ry = std::stoi(*(++iter)); + rz = std::stoi(*(++iter)); + lx = std::stoi(*(++iter)); + ly = std::stoi(*(++iter)); + lz = std::stoi(*(++iter)); } - catch( boost::bad_lexical_cast& ) + catch( const std::invalid_argument& ) { LL_WARNS("parse_lure_bucket") - << "Couldn't parse lure bucket with content \"" << bucket << "\"." + << "Couldn't parse lure bucket." + << LL_ENDL; + return false; + } + catch( const std::out_of_range& ) + { + LL_WARNS("parse_lure_bucket") + << "Couldn't parse lure bucket." << LL_ENDL; return false; } // Grab region access region_access = SIM_ACCESS_MIN; - if (iter != tokens.end()) + if (++iter != tokens.end()) { std::string access_str((*iter).c_str()); LLStringUtil::trim(access_str); @@ -2066,10 +2077,10 @@ static bool parse_lure_bucket(const std::string& bucket, } } - pos.setVec((F32)e[2], (F32)e[3], (F32)e[4]); - look_at.setVec((F32)e[5], (F32)e[6], (F32)e[7]); + pos.setVec((F32)rx, (F32)ry, (F32)rz); + look_at.setVec((F32)lx, (F32)ly, (F32)lz); - region_handle = to_region_handle(e[0], e[1]); + region_handle = to_region_handle(gx, gy); return true; } @@ -2182,32 +2193,29 @@ void god_message_name_cb(const LLAvatarName& av_name, LLChat chat, std::string m } -// Replace wild cards in autoresponse messages -std::string replace_wildcards(std::string autoresponse, const LLUUID& id, const std::string& name) +// Replace wild cards in message strings +std::string replace_wildcards(std::string input, const LLUUID& id, const std::string& name) { - // Add in their legacy name - boost::algorithm::replace_all(autoresponse, "#n", name); + boost::algorithm::replace_all(input, "#n", name); LLSLURL slurl; LLAgentUI::buildSLURL(slurl); + boost::algorithm::replace_all(input, "#r", slurl.getSLURLString()); - // Add in our location's slurl - boost::algorithm::replace_all(autoresponse, "#r", slurl.getSLURLString()); - - // Add in their display name LLAvatarName av_name; - boost::algorithm::replace_all(autoresponse, "#d", LLAvatarNameCache::get(id, &av_name) ? av_name.getDisplayName() : name); + boost::algorithm::replace_all(input, "#d", LLAvatarNameCache::get(id, &av_name) ? av_name.getDisplayName() : name); - if (!isAgentAvatarValid()) return autoresponse; - // Add in idle time - LLStringUtil::format_map_t args; - args["[MINS]"] = boost::lexical_cast(gAgentAvatarp->mIdleTimer.getElapsedTimeF32()/60); - boost::algorithm::replace_all(autoresponse, "#i", LLTrans::getString("IM_autoresponse_minutes", args)); + if (isAgentAvatarValid()) + { + LLStringUtil::format_map_t args; + args["[MINS]"] = boost::lexical_cast(gAgentAvatarp->mIdleTimer.getElapsedTimeF32()/60); + boost::algorithm::replace_all(input, "#i", LLTrans::getString("IM_autoresponse_minutes", args)); + } - return autoresponse; + return input; } -void autoresponder_finish(bool show_autoresponded, const LLUUID& computed_session_id, const LLUUID& from_id, const std::string& name, const LLUUID& itemid, bool is_muted) +void autoresponder_finish(bool show_autoresponded, const LLUUID& session_id, const LLUUID& from_id, const std::string& name, const LLUUID& itemid, bool is_muted) { LLAvatarName av_name; const std::string ns_name(LLAvatarNameCache::get(from_id, &av_name) ? av_name.getNSName() : name); @@ -2215,15 +2223,15 @@ void autoresponder_finish(bool show_autoresponded, const LLUUID& computed_sessio if (show_autoresponded) { const std::string notice(LLTrans::getString("IM_autoresponded_to") + ' ' + ns_name); - is_muted ? cmdline_printchat(notice) : gIMMgr->addMessage(computed_session_id, from_id, name, notice); + is_muted ? cmdline_printchat(notice) : gIMMgr->addMessage(session_id, from_id, name, notice); } if (LLViewerInventoryItem* item = gInventory.getItem(itemid)) { - LLGiveInventory::doGiveInventoryItem(from_id, item, computed_session_id); + LLGiveInventory::doGiveInventoryItem(from_id, item, session_id); if (show_autoresponded) { const std::string notice(llformat("%s %s \"%s\"", ns_name.c_str(), LLTrans::getString("IM_autoresponse_sent_item").c_str(), item->getName().c_str())); - is_muted ? cmdline_printchat(notice) : gIMMgr->addMessage(computed_session_id, from_id, name, notice); + is_muted ? cmdline_printchat(notice) : gIMMgr->addMessage(session_id, from_id, name, notice); } } } @@ -2315,15 +2323,14 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // bool is_do_not_disturb = gAgent.isDoNotDisturb(); - BOOL is_muted = LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat) + bool is_muted = LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat) // object IMs contain sender object id in session_id (STORM-1209) - || dialog == IM_FROM_TASK && LLMuteList::getInstance()->isMuted(session_id); - BOOL is_linden = LLMuteList::getInstance()->isLinden(name); - BOOL is_owned_by_me = FALSE; - BOOL is_friend = (LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL) ? false : true; - BOOL accept_im_from_only_friend = gSavedSettings.getBOOL("InstantMessagesFriendsOnly"); - - LLUUID computed_session_id = LLIMMgr::computeSessionID(dialog,from_id); + || (dialog == IM_FROM_TASK && LLMuteList::getInstance()->isMuted(session_id)); + bool is_owned_by_me = false; + bool is_friend = (LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL) ? false : true; + bool accept_im_from_only_friend = gSavedSettings.getBOOL("InstantMessagesFriendsOnly"); + bool is_linden = chat.mSourceType != CHAT_SOURCE_OBJECT && + LLMuteList::getInstance()->isLinden(name); chat.mMuted = is_muted && !is_linden; chat.mFromID = from_id; @@ -2359,10 +2366,17 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) } // These bools are here because they would make mess of logic down below in IM_NOTHING_SPECIAL. - bool autorespond_status = gAgent.getAFK() || !gSavedPerAccountSettings.getBOOL("AutoresponseOnlyIfAway") || gSavedSettings.getBOOL("FakeAway"); - bool is_autorespond = !is_muted && autorespond_status && (is_friend || !gSavedPerAccountSettings.getBOOL("AutoresponseAnyoneFriendsOnly")) && gSavedPerAccountSettings.getBOOL("AutoresponseAnyone"); - bool is_autorespond_muted = is_muted && gSavedPerAccountSettings.getBOOL("AutoresponseMuted"); - bool is_autorespond_nonfriends = !is_friend && !is_muted && autorespond_status && gSavedPerAccountSettings.getBOOL("AutoresponseNonFriends"); + static LLCachedControl sAutorespond(gSavedPerAccountSettings, "AutoresponseAnyone", false); + static LLCachedControl sAutorespondFriendsOnly(gSavedPerAccountSettings, "AutoresponseAnyoneFriendsOnly", false); + static LLCachedControl sAutorespondAway(gSavedPerAccountSettings, "AutoresponseOnlyIfAway", false); + static LLCachedControl sAutorespondNonFriend(gSavedPerAccountSettings, "AutoresponseNonFriends", false); + static LLCachedControl sAutorespondMuted(gSavedPerAccountSettings, "AutoresponseMuted", false); + static LLCachedControl sAutorespondRepeat(gSavedPerAccountSettings, "AscentInstantMessageResponseRepeat", false); + static LLCachedControl sFakeAway(gSavedSettings, "FakeAway", false); + bool autorespond_status = !sAutorespondAway || sFakeAway || gAgent.getAFK(); + bool is_autorespond = !is_muted && autorespond_status && (is_friend || !sAutorespondFriendsOnly) && sAutorespond; + bool is_autorespond_muted = is_muted && sAutorespondMuted; + bool is_autorespond_nonfriends = !is_friend && !is_muted && autorespond_status && sAutorespondNonFriend; LLSD args; switch(dialog) @@ -2375,7 +2389,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) LLNotificationsUtil::add("SystemMessageTip",args); break; - case IM_NOTHING_SPECIAL: + case IM_NOTHING_SPECIAL: // p2p IM // Don't show dialog, just do IM if (!gAgent.isGodlike() && gAgent.getRegion()->isPrelude() @@ -2394,35 +2408,21 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) gIMMgr->processIMTypingStop(im_info); } // [/RLVa:KB] -// else if (offline == IM_ONLINE -// && is_do_not_disturb -// && !is_muted // Singu Note: Never if muted -// && from_id.notNull() //not a system message -// && to_id.notNull()) //not global message -// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0) else if (offline == IM_ONLINE && is_do_not_disturb - && !is_muted // Singu Note: Never if muted + && !is_muted // Note: Never if muted && from_id.notNull() //not a system message && to_id.notNull() //not global message +// [RLVa:KB] - Checked: 2010-11-30 (RLVa-1.3.0) && RlvActions::canReceiveIM(from_id)) // [/RLVa:KB] { - // return a standard "do not disturb" message, but only do it to online IM - // (i.e. not other auto responses and not store-and-forward IM) - if (!gIMMgr->hasSession(session_id) || gSavedPerAccountSettings.getBOOL("AscentInstantMessageResponseRepeat")) - { - // if the user wants to repeat responses over and over or - // if there is not a panel for this conversation (i.e. it is a new IM conversation - // initiated by the other party) then... - send_do_not_disturb_message(msg, from_id, session_id); - } - // now store incoming IM in chat history buffer = separator_string + message.substr(message_offset); LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; script_msg_api(from_id.asString() + ", 0"); + // add to IM panel, but do not bother the user gIMMgr->addMessage( session_id, @@ -2439,23 +2439,35 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // pretend this is chat generated by self, so it does not show up on screen chat.mText = std::string("IM: ") + name + separator_string + message.substr(message_offset); LLFloaterChat::addChat(chat, true, true); + + if (sAutorespondRepeat || !gIMMgr->hasSession(session_id)) + { + // if the user wants to repeat responses over and over or + // if there is not a panel for this conversation (i.e. it is a new IM conversation + // initiated by the other party) then... + // return a standard "do not disturb" message, but only do it to online IM + // (i.e. not other auto responses and not store-and-forward IM) + send_do_not_disturb_message(msg, from_id, session_id); + } + } -// else if (offline == IM_ONLINE && (is_autorespond || is_autorespond_nonfriends || is_autorespond_muted) && from_id.notNull() && to_id.notNull()) + else if (offline == IM_ONLINE + && (is_autorespond || is_autorespond_nonfriends || is_autorespond_muted) + && from_id.notNull() //not a system message + && to_id.notNull() //not global message // [RLVa:LF] - Same as above: Checked: 2010-11-30 (RLVa-1.3.0) - else if (offline == IM_ONLINE && (is_autorespond || is_autorespond_nonfriends || is_autorespond_muted) && from_id.notNull() && to_id.notNull() && RlvActions::canReceiveIM(from_id) && RlvActions::canSendIM(from_id)) + && RlvActions::canReceiveIM(from_id) && RlvActions::canSendIM(from_id)) // [/RLVa:LF] { - // now store incoming IM in chat history - buffer = separator_string + message.substr(message_offset); LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; if (!is_muted) script_msg_api(from_id.asString() + ", 0"); - bool send_autoresponse = !gIMMgr->hasSession(session_id) || gSavedPerAccountSettings.getBOOL("AscentInstantMessageResponseRepeat"); + + bool send_response = !gIMMgr->hasSession(session_id) || sAutorespondRepeat; // add to IM panel, but do not bother the user - gIMMgr->addMessage( - session_id, + gIMMgr->addMessage(session_id, from_id, name, buffer, @@ -2470,9 +2482,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) chat.mText = std::string("IM: ") + name + separator_string + message.substr(message_offset); LLFloaterChat::addChat( chat, TRUE, TRUE ); - // return a standard "busy" message, but only do it to online IM - // (i.e. not other auto responses and not store-and-forward IM) - if (send_autoresponse) + if (send_response) { // if there is not a panel for this conversation (i.e. it is a new IM conversation // initiated by the other party) then... @@ -2515,9 +2525,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) session_id); gAgent.sendReliableMessage(); - autoresponder_finish(show_autoresponded, computed_session_id, from_id, name, itemid, is_muted); + autoresponder_finish(show_autoresponded, session_id, from_id, name, itemid, is_muted); } - // We stored the incoming IM in history before autoresponding, logically. } else if (from_id.isNull()) { @@ -2597,7 +2606,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) LLFloaterChat::addChat(chat, true, true); // Autoresponse to muted avatars - if (!gIMMgr->isNonFriendSessionNotified(session_id) && gSavedPerAccountSettings.getBOOL("AutoresponseMuted")) + if (!gIMMgr->isNonFriendSessionNotified(session_id) && sAutorespondMuted) { std::string my_name; LLAgentUI::buildFullname(my_name); @@ -2613,7 +2622,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) IM_BUSY_AUTO_RESPONSE, session_id); gAgent.sendReliableMessage(); - autoresponder_finish(gSavedPerAccountSettings.getBOOL("AutoresponseMutedShow"), computed_session_id, from_id, name, gSavedPerAccountSettings.getBOOL("AutoresponseMutedItem") ? static_cast(gSavedPerAccountSettings.getString("AutoresponseMutedItemID")) : LLUUID::null, true); + autoresponder_finish(gSavedPerAccountSettings.getBOOL("AutoresponseMutedShow"), session_id, from_id, name, gSavedPerAccountSettings.getBOOL("AutoresponseMutedItem") ? static_cast(gSavedPerAccountSettings.getString("AutoresponseMutedItemID")) : LLUUID::null, true); } } } @@ -2621,14 +2630,18 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) case IM_TYPING_START: { + static LLCachedControl sNotifyIncomingMessage(gSavedSettings, "AscentInstantMessageAnnounceIncoming"); // Don't announce that someone has started messaging, if they're muted or when in busy mode - if (!is_muted && (!accept_im_from_only_friend || is_friend) && !is_do_not_disturb && !gIMMgr->hasSession(computed_session_id) && gSavedSettings.getBOOL("AscentInstantMessageAnnounceIncoming")) + if (sNotifyIncomingMessage && + ((accept_im_from_only_friend && (is_friend || is_linden)) || + (!(is_muted || is_do_not_disturb))) && + !gIMMgr->hasSession(session_id) + ) { LLAvatarName av_name; std::string ns_name = LLAvatarNameCache::get(from_id, &av_name) ? av_name.getNSName() : name; - gIMMgr->addMessage( - computed_session_id, + gIMMgr->addMessage(session_id, from_id, name, llformat("%s ", ns_name.c_str()) + LLTrans::getString("IM_announce_incoming"), @@ -2642,7 +2655,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // This block is very similar to the one above, but is necessary, since a session is opened to announce incoming message.. // In order to prevent doubling up on the first response, We neglect to send this if Repeat for each message is on. - if ((is_autorespond_nonfriends || is_autorespond) && !gSavedPerAccountSettings.getBOOL("AscentInstantMessageResponseRepeat")) + if ((is_autorespond_nonfriends || is_autorespond) && !sAutorespondRepeat) { std::string my_name; LLAgentUI::buildFullname(my_name); @@ -2666,7 +2679,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) pack_instant_message(gMessageSystem, gAgentID, false, gAgentSessionID, from_id, my_name, replace_wildcards(response, from_id, name), IM_ONLINE, IM_BUSY_AUTO_RESPONSE, session_id); gAgent.sendReliableMessage(); - autoresponder_finish(show_autoresponded, computed_session_id, from_id, name, itemid, is_muted); + autoresponder_finish(show_autoresponded, session_id, from_id, name, itemid, is_muted); } } LLPointer im_info = new LLIMInfo(gMessageSystem); @@ -2719,7 +2732,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // The group notice packet does not have an AgentID. Obtain one from the name cache. // If last name is "Resident" strip it out so the cache name lookup works. - U32 index = original_name.find(" Resident"); + size_t index = original_name.find(" Resident"); if (index != std::string::npos) { original_name = original_name.substr(0, index); @@ -3493,15 +3506,15 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) } } -void send_do_not_disturb_message (LLMessageSystem* msg, const LLUUID& from_id, const LLUUID& session_id) +void send_do_not_disturb_message(LLMessageSystem* msg, const LLUUID& from_id, const LLUUID& session_id) { if (gAgent.isDoNotDisturb()) { std::string my_name; LLAgentUI::buildFullname(my_name); - std::string from_name; - msg->getStringFast(_PREHASH_MessageBlock, _PREHASH_FromAgentName, from_name); - from_name = LLCacheName::cleanFullName(from_name); + std::string name; + msg->getStringFast(_PREHASH_MessageBlock, _PREHASH_FromAgentName, name); + name = LLCacheName::cleanFullName(name); std::string response = gSavedPerAccountSettings.getString("BusyModeResponse"); pack_instant_message( msg, @@ -3510,24 +3523,20 @@ void send_do_not_disturb_message (LLMessageSystem* msg, const LLUUID& from_id, c gAgent.getSessionID(), from_id, my_name, - replace_wildcards(response, from_id, from_name), + replace_wildcards(response, from_id, name), IM_ONLINE, - IM_BUSY_AUTO_RESPONSE); + IM_BUSY_AUTO_RESPONSE, + session_id); gAgent.sendReliableMessage(); LLAvatarName av_name; - std::string ns_name = LLAvatarNameCache::get(from_id, &av_name) ? av_name.getNSName() : from_name; - LLUUID session_id; - msg->getUUIDFast(_PREHASH_MessageBlock, _PREHASH_ID, session_id); - if (gSavedPerAccountSettings.getBOOL("BusyModeResponseShow")) gIMMgr->addMessage(session_id, from_id, from_name, LLTrans::getString("IM_autoresponded_to") + ' ' + ns_name); + std::string ns_name = LLAvatarNameCache::get(from_id, &av_name) ? av_name.getNSName() : name; + if (gSavedPerAccountSettings.getBOOL("BusyModeResponseShow")) gIMMgr->addMessage(session_id, from_id, name, LLTrans::getString("IM_autoresponded_to") + ' ' + ns_name); if (!gSavedPerAccountSettings.getBOOL("BusyModeResponseItem")) return; // Not sending an item, finished if (LLViewerInventoryItem* item = gInventory.getItem(static_cast(gSavedPerAccountSettings.getString("BusyModeResponseItemID")))) { - U8 d; - msg->getU8Fast(_PREHASH_MessageBlock, _PREHASH_Dialog, d); - LLUUID computed_session_id = LLIMMgr::computeSessionID(static_cast(d), from_id); - LLGiveInventory::doGiveInventoryItem(from_id, item, computed_session_id); + LLGiveInventory::doGiveInventoryItem(from_id, item, session_id); if (gSavedPerAccountSettings.getBOOL("BusyModeResponseShow")) - gIMMgr->addMessage(computed_session_id, from_id, from_name, llformat("%s %s \"%s\"", ns_name.c_str(), LLTrans::getString("IM_autoresponse_sent_item").c_str(), item->getName().c_str())); + gIMMgr->addMessage(session_id, from_id, name, llformat("%s %s \"%s\"", ns_name.c_str(), LLTrans::getString("IM_autoresponse_sent_item").c_str(), item->getName().c_str())); } } } diff --git a/indra/newview/skins/default/xui/en-us/strings.xml b/indra/newview/skins/default/xui/en-us/strings.xml index cd1faf0fb..bba92c151 100644 --- a/indra/newview/skins/default/xui/en-us/strings.xml +++ b/indra/newview/skins/default/xui/en-us/strings.xml @@ -158,7 +158,7 @@ Make sure you entered the correct Login URI. An example of a Login URI is: \"htt Searching... None found. - + Retrieving... Release Notes @@ -350,6 +350,8 @@ Make sure you entered the correct Login URI. An example of a Login URI is: \"htt Track your camera Control your camera Teleport you + Manage your estates silently + Change your default animations Join an experience Suppress alerts when managing estate access lists Replace your default animations @@ -389,13 +391,21 @@ Make sure you entered the correct Login URI. An example of a Login URI is: \"htt Load Targa Images Bitmap Images + PNG Images + JPEG Images + Jpeg2000 Images + Targa, PNG, JPEG, Jpeg2000, or Bitmap Images AVI Movie File XAF Anim File XML File + Comma separated values RAW File Compressed Images Load Files Choose Directory + Scripts + Dictionaries + Zip files Sound: @@ -586,11 +596,11 @@ Returns the wind velocity at the object position + offset llSetStatus(integer status, integer value) -Sets status (STATUS_PHYSICS, STATUS_PHANTOM, STATUS_BLOCK_GRAB, STATUS_ROTATE_X, STATUS_ROTATE_Y, and/or STATUS_ROTATE_Z) to value +Sets status (STATUS_PHYSICS, STATUS_PHANTOM, STATUS_BLOCK_GRAB, STATUS_BLOCK_GRAB_OBJECT, STATUS_ROTATE_X, STATUS_ROTATE_Y, and/or STATUS_ROTATE_Z) to value integer llGetStatus(integer status) -Returns value of status (STATUS_PHYSICS, STATUS_PHANTOM, STATUS_BLOCK_GRAB, STATUS_ROTATE_X, STATUS_ROTATE_Y, and/or STATUS_ROTATE_Z) +Returns the boolean value of status (STATUS_PHYSICS, STATUS_PHANTOM, STATUS_BLOCK_GRAB, STATUS_BLOCK_GRAB_OBJECT, STATUS_ROTATE_X, STATUS_ROTATE_Y, and/or STATUS_ROTATE_Z) llSetScale(vector scale) @@ -746,7 +756,7 @@ Returns the script time in seconds and then resets the script timer to zero llSound(string sound, float volume, integer queue, integer loop) -Plays sound at volume and whether it should loop or not +Plays sound at volume and whether it should loop or not. llPlaySound(string sound, float volume)