Sync with Alchemy.

This commit is contained in:
Lirusaito
2016-02-22 20:46:34 -05:00
parent c3e593c20e
commit 3227a44e0f
4 changed files with 131 additions and 118 deletions

View File

@@ -48,17 +48,11 @@
#include "llworldmap.h"
#include "llworldmapmessage.h"
#include <boost/foreach.hpp>
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<std::string> 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());
}

View File

@@ -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<ALFloaterRegionTracker>::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;
};

View File

@@ -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<S32>((*(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<std::string, int>(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<std::string, int>(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)
// </edit>
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<bool> sAutorespond(gSavedPerAccountSettings, "AutoresponseAnyone", false);
static LLCachedControl<bool> sAutorespondFriendsOnly(gSavedPerAccountSettings, "AutoresponseAnyoneFriendsOnly", false);
static LLCachedControl<bool> sAutorespondAway(gSavedPerAccountSettings, "AutoresponseOnlyIfAway", false);
static LLCachedControl<bool> sAutorespondNonFriend(gSavedPerAccountSettings, "AutoresponseNonFriends", false);
static LLCachedControl<bool> sAutorespondMuted(gSavedPerAccountSettings, "AutoresponseMuted", false);
static LLCachedControl<bool> sAutorespondRepeat(gSavedPerAccountSettings, "AscentInstantMessageResponseRepeat", false);
static LLCachedControl<bool> 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<LLUUID>(gSavedPerAccountSettings.getString("AutoresponseMutedItemID")) : LLUUID::null, true);
autoresponder_finish(gSavedPerAccountSettings.getBOOL("AutoresponseMutedShow"), session_id, from_id, name, gSavedPerAccountSettings.getBOOL("AutoresponseMutedItem") ? static_cast<LLUUID>(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<bool> 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<LLIMInfo> 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<LLUUID>(gSavedPerAccountSettings.getString("BusyModeResponseItemID"))))
{
U8 d;
msg->getU8Fast(_PREHASH_MessageBlock, _PREHASH_Dialog, d);
LLUUID computed_session_id = LLIMMgr::computeSessionID(static_cast<EInstantMessage>(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()));
}
}
}

View File

@@ -158,7 +158,7 @@ Make sure you entered the correct Login URI. An example of a Login URI is: \"htt
<string name="Searching">Searching...</string>
<string name="NoneFound">None found.</string>
<!-- Indicates that an avatar's name or other similar datum is being retrieved. General usage. -->
<!-- Indicates that an avatar name or other similar datum is being retrieved. General usage. -->
<string name="RetrievingData">Retrieving...</string>
<string name="ReleaseNotes">Release Notes</string>
@@ -350,6 +350,8 @@ Make sure you entered the correct Login URI. An example of a Login URI is: \"htt
<string name="TrackYourCamera">Track your camera</string>
<string name="ControlYourCamera">Control your camera</string>
<string name="TeleportYourAgent">Teleport you</string>
<string name="ManageEstateSilently">Manage your estates silently</string>
<string name="ChangeYourDefaultAnimations">Change your default animations</string>
<string name="JoinAnExperience">Join an experience</string> <!-- not used -->
<string name="SilentlyManageEstateAccess">Suppress alerts when managing estate access lists</string>
<string name="OverrideYourAnimations">Replace your default animations</string>
@@ -389,13 +391,21 @@ Make sure you entered the correct Login URI. An example of a Login URI is: \"htt
<string name="load_file_verb">Load</string>
<string name="targa_image_files">Targa Images</string>
<string name="bitmap_image_files">Bitmap Images</string>
<string name="png_image_files">PNG Images</string>
<string name="jpg_image_files">JPEG Images</string>
<string name="j2c_image_files">Jpeg2000 Images</string>
<string name="save_texture_image_files">Targa, PNG, JPEG, Jpeg2000, or Bitmap Images</string>
<string name="avi_movie_file">AVI Movie File</string>
<string name="xaf_animation_file">XAF Anim File</string>
<string name="xml_file">XML File</string>
<string name="csv_files">Comma separated values</string>
<string name="raw_file">RAW File</string>
<string name="compressed_image_files">Compressed Images</string>
<string name="load_files">Load Files</string>
<string name="choose_the_directory">Choose Directory</string>
<string name="script_files">Scripts</string>
<string name="dictionary_files">Dictionaries</string>
<string name="zip_files">Zip files</string>
<string name="Sound: ">Sound: </string>
@@ -586,11 +596,11 @@ Returns the wind velocity at the object position + offset
</string>
<string name="LSLTipText_llSetStatus">
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
</string>
<string name="LSLTipText_llGetStatus">
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)
</string>
<string name="LSLTipText_llSetScale">
llSetScale(vector scale)
@@ -746,7 +756,7 @@ Returns the script time in seconds and then resets the script timer to zero
</string>
<string name="LSLTipText_llSound">
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.
</string>
<string name="LSLTipText_llPlaySound">
llPlaySound(string sound, float volume)