Merge branch 'curlthreading2' into curlthreading3

This commit is contained in:
Aleric Inglewood
2012-09-19 04:14:25 +02:00
49 changed files with 980 additions and 740 deletions

View File

@@ -7,10 +7,8 @@ set(Boost_FIND_REQUIRED ON)
if (STANDALONE)
include(FindBoost)
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
set(BOOST_REGEX_LIBRARY boost_regex-mt)
set(BOOST_SYSTEM_LIBRARY boost_system-mt)
set(Boost_USE_MULTITHREADED ON)
find_package(Boost 1.40.0 COMPONENTS date_time filesystem program_options regex system thread wave)
else (STANDALONE)
use_prebuilt_binary(boost)
set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
@@ -18,36 +16,36 @@ else (STANDALONE)
if (WINDOWS)
set(BOOST_VERSION 1_45)
# SNOW-788
# 00-Common.cmake alreay sets MSVC_SUFFIX to be correct for the VS we are using eg VC71, VC80, VC90 etc
# The precompiled boost libs for VC71 use a different suffix to VS80 and VS90
# This code should ensure the cmake rules are valid for any VS being used in future as long as the approprate
# boost libs are avaiable - RC.
if (MSVC71)
set(BOOST_OPTIM_SUFFIX mt-s)
set(BOOST_DEBUG_SUFFIX mt-sgd)
else (MSVC71)
set(BOOST_OPTIM_SUFFIX mt)
set(BOOST_DEBUG_SUFFIX mt-gd)
endif (MSVC71)
set(BOOST_PROGRAM_OPTIONS_LIBRARY
# SNOW-788
# 00-Common.cmake alreay sets MSVC_SUFFIX to be correct for the VS we are using eg VC71, VC80, VC90 etc
# The precompiled boost libs for VC71 use a different suffix to VS80 and VS90
# This code should ensure the cmake rules are valid for any VS being used in future as long as the approprate
# boost libs are avaiable - RC.
if (MSVC71)
set(BOOST_OPTIM_SUFFIX mt-s)
set(BOOST_DEBUG_SUFFIX mt-sgd)
else (MSVC71)
set(BOOST_OPTIM_SUFFIX mt)
set(BOOST_DEBUG_SUFFIX mt-gd)
endif (MSVC71)
set(Boost_PROGRAM_OPTIONS_LIBRARY
optimized libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION}
debug libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION})
set(BOOST_REGEX_LIBRARY
set(Boost_REGEX_LIBRARY
optimized libboost_regex-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION}
debug libboost_regex-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION})
elseif (DARWIN)
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem)
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options)
set(BOOST_REGEX_LIBRARY boost_regex)
set(BOOST_SYSTEM_LIBRARY boost_system)
set(Boost_FILESYSTEM_LIBRARY boost_filesystem)
set(Boost_PROGRAM_OPTIONS_LIBRARY boost_program_options)
set(Boost_REGEX_LIBRARY boost_regex)
set(Boost_SYSTEM_LIBRARY boost_system)
elseif (LINUX)
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
set(BOOST_REGEX_LIBRARY boost_regex-mt)
set(BOOST_SYSTEM_LIBRARY boost_system-mt)
set(Boost_FILESYSTEM_LIBRARY boost_filesystem-mt)
set(Boost_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
set(Boost_REGEX_LIBRARY boost_regex-mt)
set(Boost_SYSTEM_LIBRARY boost_system-mt)
endif (WINDOWS)
endif (STANDALONE)

View File

@@ -8,7 +8,7 @@ if(INSTALL_PROPRIETARY)
endif(INSTALL_PROPRIETARY)
find_library(FMODEX_LIBRARY
NAMES fmodex fmodex_vc fmodexL_vc
NAMES fmodex fmodexL fmodex_vc fmodexL_vc
PATHS
optimized ${ARCH_PREBUILT_DIRS_RELEASE}
debug ${ARCH_PREBUILT_DIRS_DEBUG}
@@ -26,26 +26,25 @@ if (NOT FMODEX_LIBRARY)
${FMODEX_SDK_DIR}
)
endif(FMODEX_SDK_DIR)
if(WINDOWS AND NOT FMODEX_LIBRARY)
set(FMODEX_PROG_DIR "$ENV{PROGRAMFILES}/FMOD SoundSystem/FMOD Programmers API Windows")
find_library(FMODEX_LIBRARY
fmodex_vc fmodexL_vc
set(FMODEX_PROG_DIR "$ENV{PROGRAMFILES}/FMOD SoundSystem/FMOD Programmers API Windows")
find_library(FMODEX_LIBRARY
fmodex_vc fmodexL_vc
PATHS
${FMODEX_PROG_DIR}/api/lib
${FMODEX_PROG_DIR}/api
${FMODEX_PROG_DIR}
${FMODEX_PROG_DIR}/api
${FMODEX_PROG_DIR}
)
if(FMODEX_LIBRARY)
message(STATUS "Found fmodex in ${FMODEX_PROG_DIR}")
set(FMODEX_SDK_DIR ${FMODEX_PROG_DIR})
set(FMODEX_SDK_DIR ${FMODEX_PROG_DIR} CACHE PATH "Path to the FMOD Ex SDK." FORCE)
endif(FMODEX_LIBRARY)
if(FMODEX_LIBRARY)
message(STATUS "Found fmodex in ${FMODEX_PROG_DIR}")
set(FMODEX_SDK_DIR ${FMODEX_PROG_DIR})
set(FMODEX_SDK_DIR ${FMODEX_PROG_DIR} CACHE PATH "Path to the FMOD Ex SDK." FORCE)
endif(FMODEX_LIBRARY)
endif(WINDOWS AND NOT FMODEX_LIBRARY)
endif (NOT FMODEX_LIBRARY)
find_path(FMODEX_INCLUDE_DIR fmod.h
find_path(FMODEX_INCLUDE_DIR fmod.hpp
${LIBS_PREBUILT_DIR}/include/fmodex
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/fmodex
${FMODEX_SDK_DIR}/api/inc

View File

@@ -5,7 +5,7 @@ FIND_PATH(HUNSPELL_INCLUDE_DIR hunspell.hxx
/usr/include
)
SET(HUNSPELL_NAMES ${HUNSPELL_NAMES} hunspell hunspell-1.2)
SET(HUNSPELL_NAMES ${HUNSPELL_NAMES} hunspell hunspell-1.2 hunspell-1.3)
FIND_LIBRARY(HUNSPELL_LIBRARY
NAMES ${HUNSPELL_NAMES}
PATHS /usr/lib /usr/local/lib

View File

@@ -8,5 +8,5 @@ set(LLVFS_INCLUDE_DIRS
set(LLVFS_LIBRARIES
llvfs
${BOOST_REGEX_LIBRARY}
${Boost_REGEX_LIBRARY}
)

View File

@@ -268,7 +268,7 @@ target_link_libraries(
${EXPAT_LIBRARIES}
${ZLIB_LIBRARIES}
${WINDOWS_LIBRARIES}
${BOOST_REGEX_LIBRARY}
${Boost_REGEX_LIBRARY}
${CORESERVICES_LIBRARY}
)

View File

@@ -35,7 +35,7 @@
const S32 LL_VERSION_MAJOR = 1;
const S32 LL_VERSION_MINOR = 7;
const S32 LL_VERSION_PATCH = 1;
const S32 LL_VERSION_PATCH = 2;
const S32 LL_VERSION_BUILD = ${vBUILD};
const char * const LL_CHANNEL = "${VIEWER_CHANNEL}";

View File

@@ -379,6 +379,7 @@ void LLPluginProcessParent::idle(void)
}
else
{
// Set PluginAttachDebuggerToPlugins to TRUE to use this. You might also want to set DebugPluginDisableTimeout to TRUE.
if(mDebug)
{
// If we're set to debug, start up a gdb instance in a new terminal window and have it attach to the plugin process and continue.
@@ -400,14 +401,37 @@ void LLPluginProcessParent::idle(void)
mDebugger.launch();
#elif LL_LINUX
// The command we're constructing would look like this on the command line:
// /usr/bin/xterm -geometry 160x24-0+0 -e '/usr/bin/gdb -n /proc/12345/exe 12345'
// This can be changed by setting the following environment variables, for example:
// export LL_DEBUG_TERMINAL_COMMAND="/usr/bin/gnome-terminal --geometry=165x24-0+0 -e %s"
// /usr/bin/xterm -geometry 160x24-0+0 -e /usr/bin/gdb -n /proc/12345/exe 12345
// Note that most terminals demand that all arguments to the process that is
// started with -e are passed as arguments to the terminal: there are no quotes
// around '/usr/bin/gdb -n /proc/12345/exe 12345'. This is the case for xterm,
// uxterm, konsole etc. The exception might be gnome-terminal.
//
// The constructed command can be changed by setting the following environment
// variables, for example:
//
// export LL_DEBUG_GDB_PATH=/usr/bin/gdb
// export LL_DEBUG_TERMINAL_COMMAND='/usr/bin/gnome-terminal --geometry=165x24-0+0 -e "%s"'
//
// Or, as second example, if you are running the viewer on host 'A', and you want
// to open the gdb terminal on the X display of host 'B', you would run on host B:
// 'ssh -X A' (and then start the viewer, or just leave the terminal open), and
// then use:
//
// export LL_DEBUG_TERMINAL_COMMAND="/usr/bin/uxterm -fs 9 -fa 'DejaVu Sans Mono' -display localhost:10 -geometry 209x31+0-50 -e %s"
//
// which would open the terminal on B (no quotes around the %s, since this uses uxterm!).
// For a list of available strings to pass to the -fa, run in a terminal: fc-list :scalable=true:spacing=mono: family
char const* env;
std::string const terminal_command = (env = getenv("LL_DEBUG_TERMINAL_COMMAND")) ? env : "/usr/bin/xterm -geometry 160x24+0+0 -e %s";
std::string terminal_command = (env = getenv("LL_DEBUG_TERMINAL_COMMAND")) ? env : "/usr/bin/xterm -geometry 160x24+0+0 -e %s";
char const* const gdb_path = (env = getenv("LL_DEBUG_GDB_PATH")) ? env : "/usr/bin/gdb";
cmd << gdb_path << " -n /proc/" << mProcess.getProcessID() << "/exe " << mProcess.getProcessID();
std::string::size_type pos = terminal_command.find("%s");
if (pos != std::string::npos)
{
terminal_command.replace(pos, 2, cmd.str());
}
typedef boost::tokenizer< boost::escaped_list_separator<
char>, std::basic_string<
@@ -429,14 +453,7 @@ void LLPluginProcessParent::idle(void)
mDebugger.setExecutable(*token);
while (++token != tokens.end())
{
if (*token == "%s")
{
mDebugger.addArgument(cmd.str());
}
else
{
mDebugger.addArgument(*token);
}
mDebugger.addArgument(*token);
}
mDebugger.launch();
#endif

View File

@@ -52,7 +52,14 @@ add_executable(SLPlugin
set_target_properties(SLPlugin
PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/slplugin_info.plist
)
if (WINDOWS)
set_target_properties(SLPlugin
PROPERTIES
LINK_FLAGS "/OPT:NOREF"
)
endif()
target_link_libraries(SLPlugin
${LLPLUGIN_LIBRARIES}

View File

@@ -244,14 +244,16 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
BOOL LLGLSLShader::attachObject(std::string object)
{
if (LLShaderMgr::instance()->mShaderObjects.count(object) > 0)
std::multimap<std::string, LLShaderMgr::CachedObjectInfo>::iterator it = LLShaderMgr::instance()->mShaderObjects.begin();
for(; it!=LLShaderMgr::instance()->mShaderObjects.end(); it++)
{
stop_glerror();
glAttachObjectARB(mProgramObject, LLShaderMgr::instance()->mShaderObjects[object]);
stop_glerror();
return TRUE;
if((*it).first == object)
{
glAttachObjectARB(mProgramObject, (*it).second.mHandle);
stop_glerror();
return TRUE;
}
}
else
{
LL_WARNS("ShaderLoading") << "Attempting to attach shader object that hasn't been compiled: " << object << LL_ENDL;
return FALSE;
@@ -262,6 +264,20 @@ void LLGLSLShader::attachObject(GLhandleARB object)
{
if (object != 0)
{
std::multimap<std::string, LLShaderMgr::CachedObjectInfo>::iterator it = LLShaderMgr::instance()->mShaderObjects.begin();
for(; it!=LLShaderMgr::instance()->mShaderObjects.end(); it++)
{
if((*it).second.mHandle == object)
{
LL_DEBUGS("ShaderLoading") << "Attached: " << (*it).first << llendl;
break;
}
}
if(it == LLShaderMgr::instance()->mShaderObjects.end())
{
LL_WARNS("ShaderLoading") << "Attached unknown shader!" << llendl;
}
stop_glerror();
glAttachObjectARB(mProgramObject, object);
stop_glerror();

View File

@@ -525,6 +525,14 @@ void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns)
GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type, S32 texture_index_channels)
{
std::pair<std::multimap<std::string, CachedObjectInfo >::iterator, std::multimap<std::string, CachedObjectInfo>::iterator> range;
range = mShaderObjects.equal_range(filename);
for (std::multimap<std::string, CachedObjectInfo>::iterator it = range.first; it != range.second;++it)
{
if((*it).second.mLevel == shader_level && (*it).second.mType == type)
return (*it).second.mHandle;
}
GLenum error = GL_NO_ERROR;
if (gDebugGL)
{
@@ -888,7 +896,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
if (ret)
{
// Add shader file to map
mShaderObjects[filename] = ret;
mShaderObjects.insert(make_pair(filename,CachedObjectInfo(ret,try_gpu_class,type)));
shader_level = try_gpu_class;
}
else

View File

@@ -185,8 +185,16 @@ public:
virtual void updateShaderUniforms(LLGLSLShader * shader) = 0; // Pure Virtual
public:
struct CachedObjectInfo
{
CachedObjectInfo(GLhandleARB handle, U32 level, GLenum type) :
mHandle(handle), mLevel(level), mType(type) {}
GLhandleARB mHandle; //Actual handle of the opengl shader object.
U32 mLevel; //Level /might/ not be needed, but it's stored to ensure there's no change in behavior.
GLenum mType; //GL_VERTEX_SHADER_ARB or GL_FRAGMENT_SHADER_ARB. Tracked because some utility shaders can be loaded as both types (carefully).
};
// Map of shader names to compiled
std::map<std::string, GLhandleARB> mShaderObjects;
std::multimap<std::string, CachedObjectInfo > mShaderObjects; //Singu Note: Packing more info here. Doing such provides capability to skip unneeded duplicate loading..
//global (reserved slot) shader parameters
std::vector<std::string> mReservedAttribs;

View File

@@ -63,8 +63,8 @@ add_library (llvfs ${llvfs_SOURCE_FILES})
add_dependencies(llvfs prepare)
target_link_libraries(llvfs
${BOOST_FILESYSTEM_LIBRARY}
${BOOST_SYSTEM_LIBRARY}
${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY}
)
if (DARWIN)

View File

@@ -56,12 +56,6 @@ void parse_string();
#define ECHO do { } while (0)
#if defined(__cplusplus)
extern "C" { int yylex( void ); }
extern "C" { int yyparse( void ); }
extern "C" { int yyerror(const char *fmt, ...); }
#endif
%}
%%

View File

@@ -2,10 +2,6 @@
#include "linden_common.h"
#include "lscript_tree.h"
#ifdef __cplusplus
extern "C" {
#endif
int yylex(void);
int yyparse( void );
int yyerror(const char *fmt, ...);
@@ -19,10 +15,6 @@
#pragma warning (disable : 4702) // warning C4702: unreachable code
#pragma warning( disable : 4065 ) // warning: switch statement contains 'default' but no 'case' labels
#endif
#ifdef __cplusplus
}
#endif
%}
%union

View File

@@ -8,10 +8,10 @@ include(DBusGlib)
include(DirectX)
include(ELFIO)
if(FMODEX)
include(FMODEX)
set(FMOD OFF)
include(FMODEX)
set(FMOD OFF)
else(FMODEX)
include(FMOD)
include(FMOD)
endif(FMODEX)
include(OPENAL)
include(FindOpenGL)
@@ -1561,10 +1561,10 @@ target_link_libraries(${VIEWER_BINARY_NAME}
${LLCOMMON_LIBRARIES}
${NDOF_LIBRARY}
${viewer_LIBRARIES}
${BOOST_FILESYSTEM_LIBRARY}
${BOOST_PROGRAM_OPTIONS_LIBRARY}
${BOOST_REGEX_LIBRARY}
${BOOST_SYSTEM_LIBRARY}
${Boost_FILESYSTEM_LIBRARY}
${Boost_PROGRAM_OPTIONS_LIBRARY}
${Boost_REGEX_LIBRARY}
${Boost_SYSTEM_LIBRARY}
${DBUSGLIB_LIBRARIES}
${OPENGL_LIBRARIES}
${FMODWRAPPER_LIBRARY} # must come after LLAudio

View File

@@ -19,7 +19,9 @@
#include "llnotificationsutil.h"
#include "llviewerobjectlist.h"
#include "llagent.h"
#include "lltrans.h"
#include <time.h>
#include <boost/lexical_cast.hpp>
U32 NACLAntiSpamRegistry::globalAmount;
U32 NACLAntiSpamRegistry::globalTime;
@@ -28,6 +30,7 @@ NACLAntiSpamQueue* NACLAntiSpamRegistry::queues[NACLAntiSpamRegistry::QUEUE_MAX]
std::tr1::unordered_map<std::string,NACLAntiSpamQueueEntry*> NACLAntiSpamRegistry::globalEntries;
std::tr1::unordered_map<std::string,NACLAntiSpamQueueEntry*>::iterator NACLAntiSpamRegistry::it2;
// The following sounds will be ignored for purposes of spam protection. They have been gathered from wiki documentation of frequent official sounds.
const std::string COLLISION_SOUNDS[] ={"dce5fdd4-afe4-4ea1-822f-dd52cac46b08","51011582-fbca-4580-ae9e-1a5593f094ec","68d62208-e257-4d0c-bbe2-20c9ea9760bb","75872e8c-bc39-451b-9b0b-042d7ba36cba","6a45ba0b-5775-4ea8-8513-26008a17f873","992a6d1b-8c77-40e0-9495-4098ce539694","2de4da5a-faf8-46be-bac6-c4d74f1e5767","6e3fb0f7-6d9c-42ca-b86b-1122ff562d7d","14209133-4961-4acc-9649-53fc38ee1667","bc4a4348-cfcc-4e5e-908e-8a52a8915fe6","9e5c1297-6eed-40c0-825a-d9bcd86e3193","e534761c-1894-4b61-b20c-658a6fb68157","8761f73f-6cf9-4186-8aaa-0948ed002db1","874a26fd-142f-4173-8c5b-890cd846c74d","0e24a717-b97e-4b77-9c94-b59a5a88b2da","75cf3ade-9a5b-4c4d-bb35-f9799bda7fb2","153c8bf7-fb89-4d89-b263-47e58b1b4774","55c3e0ce-275a-46fa-82ff-e0465f5e8703","24babf58-7156-4841-9a3f-761bdbb8e237","aca261d8-e145-4610-9e20-9eff990f2c12","0642fba6-5dcf-4d62-8e7b-94dbb529d117","25a863e8-dc42-4e8a-a357-e76422ace9b5","9538f37c-456e-4047-81be-6435045608d4","8c0f84c3-9afd-4396-b5f5-9bca2c911c20","be582e5d-b123-41a2-a150-454c39e961c8","c70141d4-ba06-41ea-bcbc-35ea81cb8335","7d1826f4-24c4-4aac-8c2e-eff45df37783","063c97d3-033a-4e9b-98d8-05c8074922cb","00000000-0000-0000-0000-000000000120"};
const int COLLISION_SOUNDS_SIZE=29;
@@ -45,11 +48,11 @@ void NACLAntiSpamQueueEntry::clearEntry()
entryAmount=0;
blocked=false;
}
U32 NACLAntiSpamQueueEntry::getEntryAmount()
U32 NACLAntiSpamQueueEntry::getEntryAmount() const
{
return entryAmount;
}
U32 NACLAntiSpamQueueEntry::getEntryTime()
U32 NACLAntiSpamQueueEntry::getEntryTime() const
{
return entryTime;
}
@@ -65,7 +68,7 @@ void NACLAntiSpamQueueEntry::setBlocked()
{
blocked=true;
}
bool NACLAntiSpamQueueEntry::getBlocked()
bool NACLAntiSpamQueueEntry::getBlocked() const
{
return blocked;
}
@@ -85,6 +88,14 @@ void NACLAntiSpamQueue::setTime(U32 time)
{
queueTime=time;
}
U32 NACLAntiSpamQueue::getAmount() const
{
return queueAmount;
}
U32 NACLAntiSpamQueue::getTime() const
{
return queueTime;
}
void NACLAntiSpamQueue::clearEntries()
{
for(it = entries.begin(); it != entries.end(); it++)
@@ -110,6 +121,7 @@ void NACLAntiSpamQueue::blockEntry(LLUUID& source)
entries[source.asString()]->setBlocked();
}
int NACLAntiSpamQueue::checkEntry(LLUUID& name, U32 multiplier)
// Returns 0 if unblocked/disabled, 1 if check results in a new block, 2 if by an existing block
{
static LLCachedControl<bool> enabled(gSavedSettings,"AntiSpamEnabled",false);
if(!enabled) return 0;
@@ -141,6 +153,7 @@ int NACLAntiSpamQueue::checkEntry(LLUUID& name, U32 multiplier)
}
else
{
//lldebugs << "[antispam] New queue entry:" << name.asString() << llendl;
entries[name.asString()]=new NACLAntiSpamQueueEntry();
entries[name.asString()]->updateEntryAmount();
entries[name.asString()]->updateEntryTime();
@@ -154,8 +167,8 @@ static const char* QUEUE_NAME[NACLAntiSpamRegistry::QUEUE_MAX] = {
"Chat",
"Inventory",
"Instant Message",
"Calling Card",
"Sound",
"calling card",
"sound",
"Sound Preload",
"Script Dialog",
"Teleport"};
@@ -171,12 +184,14 @@ NACLAntiSpamRegistry::NACLAntiSpamRegistry(U32 time, U32 amount)
queues[queue] = new NACLAntiSpamQueue(time,amount);
}
}
//static
const char* NACLAntiSpamRegistry::getQueueName(U32 queue_id)
{
if(queue_id >= QUEUE_MAX)
return "Unknown";
return QUEUE_NAME[queue_id];
}
//static
void NACLAntiSpamRegistry::registerQueues(U32 time, U32 amount)
{
globalTime=time;
@@ -188,16 +203,16 @@ void NACLAntiSpamRegistry::registerQueues(U32 time, U32 amount)
queues[queue] = new NACLAntiSpamQueue(time,amount);
}
}
void NACLAntiSpamRegistry::registerQueue(U32 name, U32 time, U32 amount)
//static
/*void NACLAntiSpamRegistry::registerQueue(U32 name, U32 time, U32 amount)
{
/*
it=queues.find(name);
if(it == queues.end())
{
queues[name]=new NACLAntiSpamQueue(time,amount);
}
*/
}
}*/
//static
void NACLAntiSpamRegistry::setRegisteredQueueTime(U32 name, U32 time)
{
if(name >= QUEUE_MAX || queues[name] == 0)
@@ -208,6 +223,7 @@ void NACLAntiSpamRegistry::setRegisteredQueueTime(U32 name, U32 time)
queues[name]->setTime(time);
}
//static
void NACLAntiSpamRegistry::setRegisteredQueueAmount(U32 name, U32 amount)
{
if(name >= QUEUE_MAX || queues[name] == 0)
@@ -218,23 +234,28 @@ void NACLAntiSpamRegistry::setRegisteredQueueAmount(U32 name, U32 amount)
queues[name]->setAmount(amount);
}
//static
void NACLAntiSpamRegistry::setAllQueueTimes(U32 time)
{
globalTime=time;
for(int queue = 0; queue < QUEUE_MAX; ++queue)
queues[queue]->setTime(time);
if( queues[queue] )
queues[queue]->setTime(time);
}
//static
void NACLAntiSpamRegistry::setAllQueueAmounts(U32 amount)
{
globalAmount=amount;
for(int queue = 0; queue < QUEUE_MAX; ++queue)
{
if(!queues[queue]) continue;
if(queue == QUEUE_SOUND || queue == QUEUE_SOUND_PRELOAD)
queues[queue]->setAmount(amount*5);
else
queues[queue]->setAmount(amount);
}
}
//static
void NACLAntiSpamRegistry::clearRegisteredQueue(U32 name)
{
if(name >= QUEUE_MAX || queues[name] == 0)
@@ -245,6 +266,7 @@ void NACLAntiSpamRegistry::clearRegisteredQueue(U32 name)
queues[name]->clearEntries();
}
//static
void NACLAntiSpamRegistry::purgeRegisteredQueue(U32 name)
{
if(name >= QUEUE_MAX || queues[name] == 0)
@@ -255,6 +277,7 @@ void NACLAntiSpamRegistry::purgeRegisteredQueue(U32 name)
queues[name]->purgeEntries();
}
//static
void NACLAntiSpamRegistry::blockOnQueue(U32 name, LLUUID& source)
{
if(bGlobalQueue)
@@ -271,6 +294,7 @@ void NACLAntiSpamRegistry::blockOnQueue(U32 name, LLUUID& source)
queues[name]->blockEntry(source);
}
}
//static
void NACLAntiSpamRegistry::blockGlobalEntry(LLUUID& source)
{
it2=globalEntries.find(source.asString());
@@ -280,13 +304,13 @@ void NACLAntiSpamRegistry::blockGlobalEntry(LLUUID& source)
}
globalEntries[source.asString()]->setBlocked();
}
//static
bool NACLAntiSpamRegistry::checkQueue(U32 name, LLUUID& source, U32 multiplier)
//returns true if blocked
{
if(source.isNull()) return false;
if(gAgent.getID() == source) return false;
if(source.isNull() || gAgent.getID() == source) return false;
LLViewerObject *obj=gObjectList.findObject(source);
if(obj)
if(obj->permYouOwner()) return false;
if(obj && obj->permYouOwner()) return false;
int result;
if(bGlobalQueue)
@@ -302,40 +326,45 @@ bool NACLAntiSpamRegistry::checkQueue(U32 name, LLUUID& source, U32 multiplier)
}
result=queues[name]->checkEntry(source,multiplier);
}
if(result==0)
{
if(result == 0) //Safe
return false;
}
else if(result==2)
else if(result == 2) //Previously blocked
{
return true;
}
else
else //Just blocked!
{
if(gSavedSettings.getBOOL("AntiSpamNotify"))
{
LLSD args;
args["MESSAGE"] = std::string(getQueueName(name))+": Blocked object "+source.asString();
LLNotificationsUtil::add("SystemMessageTip", args);
LLSD args;
args["SOURCE"] = source.asString().c_str();
args["TYPE"] = LLTrans::getString(getQueueName(name));
args["AMOUNT"] = boost::lexical_cast<std::string>(multiplier * queues[name]->getAmount());
args["TIME"] = boost::lexical_cast<std::string>(queues[name]->getTime());
LLNotificationsUtil::add("AntiSpamBlock", args);
}
return true;
}
}
// Global queue stoof
//static
void NACLAntiSpamRegistry::setGlobalQueue(bool value)
{
NACLAntiSpamRegistry::purgeAllQueues();
bGlobalQueue=value;
}
//static
void NACLAntiSpamRegistry::setGlobalAmount(U32 amount)
{
globalAmount=amount;
}
//static
void NACLAntiSpamRegistry::setGlobalTime(U32 time)
{
globalTime=time;
}
//static
void NACLAntiSpamRegistry::clearAllQueues()
{
if(bGlobalQueue)
@@ -343,9 +372,10 @@ void NACLAntiSpamRegistry::clearAllQueues()
else
for(int queue = 0; queue < QUEUE_MAX; ++queue)
{
queues[queue]->clearEntries();
if(queues[queue]) queues[queue]->clearEntries();
}
}
//static
void NACLAntiSpamRegistry::purgeAllQueues()
{
if(bGlobalQueue)
@@ -353,9 +383,11 @@ void NACLAntiSpamRegistry::purgeAllQueues()
else
for(int queue = 0; queue < QUEUE_MAX; ++queue)
{
queues[queue]->purgeEntries();
if(queues[queue]) queues[queue]->purgeEntries();
}
llinfos << "AntiSpam Queues Purged" << llendl;
}
//static
int NACLAntiSpamRegistry::checkGlobalEntry(LLUUID& name, U32 multiplier)
{
static LLCachedControl<bool> enabled(gSavedSettings,"AntiSpamEnabled",false);
@@ -391,6 +423,7 @@ int NACLAntiSpamRegistry::checkGlobalEntry(LLUUID& name, U32 multiplier)
return 0;
}
}
//static
void NACLAntiSpamRegistry::clearGlobalEntries()
{
for(it2 = globalEntries.begin(); it2 != globalEntries.end(); it2++)
@@ -398,6 +431,7 @@ void NACLAntiSpamRegistry::clearGlobalEntries()
it2->second->clearEntry();
}
}
//static
void NACLAntiSpamRegistry::purgeGlobalEntries()
{
for(it2 = globalEntries.begin(); it2 != globalEntries.end(); it2++)
@@ -407,16 +441,21 @@ void NACLAntiSpamRegistry::purgeGlobalEntries()
}
globalEntries.clear();
}
//Handlers
//static
bool NACLAntiSpamRegistry::handleNaclAntiSpamGlobalQueueChanged(const LLSD& newvalue)
{
setGlobalQueue(newvalue.asBoolean());
return true;
}
//static
bool NACLAntiSpamRegistry::handleNaclAntiSpamTimeChanged(const LLSD& newvalue)
{
setAllQueueTimes(newvalue.asInteger());
return true;
}
//static
bool NACLAntiSpamRegistry::handleNaclAntiSpamAmountChanged(const LLSD& newvalue)
{
setAllQueueAmounts(newvalue.asInteger());

View File

@@ -25,11 +25,11 @@ class NACLAntiSpamQueueEntry
protected:
NACLAntiSpamQueueEntry();
void clearEntry();
U32 getEntryAmount();
U32 getEntryTime();
U32 getEntryAmount() const;
U32 getEntryTime() const;
void updateEntryAmount();
void updateEntryTime();
bool getBlocked();
bool getBlocked() const;
void setBlocked();
private:
U32 entryAmount;
@@ -39,6 +39,9 @@ private:
class NACLAntiSpamQueue
{
friend class NACLAntiSpamRegistry;
public:
U32 getAmount() const;
U32 getTime() const;
protected:
NACLAntiSpamQueue(U32 time, U32 amount);
void setAmount(U32 amount);
@@ -58,7 +61,7 @@ class NACLAntiSpamRegistry
public:
NACLAntiSpamRegistry(U32 time=2, U32 amount=10);
static void registerQueues(U32 time=2, U32 amount=10);
static void registerQueue(U32 name, U32 time, U32 amount);
// static void registerQueue(U32 name, U32 time, U32 amount);
static void setRegisteredQueueTime(U32 name, U32 time);
static void setRegisteredQueueAmount(U32 name,U32 amount);
static void setAllQueueTimes(U32 amount);

View File

@@ -9,6 +9,17 @@
<string>settings_rlv.xml</string>
</array>
<key>SGAllowRiggedMeshSelection</key>
<map>
<key>Comment</key>
<string>Allow selection of your worn rigged meshes in build mode</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>SGShiftCrouchToggle</key>
<map>
<key>Comment</key>
@@ -20,7 +31,6 @@
<key>Value</key>
<integer>1</integer>
</map>
<key>SGServerVersionChangedNotification</key>
<map>
<key>Comment</key>
@@ -1032,7 +1042,7 @@
<key>_NACL_AntiSpamGlobalQueue</key>
<map>
<key>Comment</key>
<string>Collect spamtypes together, instead of individually counting them</string>
<string>Collect spamtypes together, instead of individually counting them; Use in cases of extreme spam, only.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -1043,7 +1053,7 @@
<key>_NACL_AntiSpamTime</key>
<map>
<key>Comment</key>
<string>Time in seconds for spamtype to accumulate the _NACL_AntiSpamAmount and be blocked</string>
<string>Time in seconds for spamtype to accumulate to more than _NACL_AntiSpamAmount and be blocked</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -1054,7 +1064,7 @@
<key>_NACL_AntiSpamAmount</key>
<map>
<key>Comment</key>
<string>Amount of spamtype to be reached before the blocking will occur.</string>
<string>Count of spamtype to be reached during _NACL_AntiSpamTime before the spam blocking will occur.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -1065,7 +1075,7 @@
<key>_NACL_AntiSpamSoundMulti</key>
<map>
<key>Comment</key>
<string> </string>
<string>Multiplier for _NACL_AntiSpamTime for sounds heard in _NACL_AntiSpamTime interval needed to trigger a block, since sounds are more common than messages</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -1076,18 +1086,18 @@
<key>_NACL_AntiSpamNewlines</key>
<map>
<key>Comment</key>
<string>How many newlines a message can have before it's considered spam.</string>
<string>How many newlines a message is allowed to have without being considered spam.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
<integer>20</integer>
<integer>70</integer>
</map>
<key>_NACL_AntiSpamSoundPreloadMulti</key>
<map>
<key>Comment</key>
<string> </string>
<string>Multiplier for _NACL_AntiSpamTime for sounds preloaded in _NACL_AntiSpamTime interval needed to trigger a block, since sound preloads are more common than messages</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>

View File

@@ -1598,16 +1598,18 @@ void LLDrawPoolInvisible::renderDeferred( S32 pass )
}
LLFastTimer t(FTM_RENDER_INVISIBLE);
gOcclusionProgram.bind();
U32 invisi_mask = LLVertexBuffer::MAP_VERTEX;
glStencilMask(0);
glStencilOp(GL_ZERO, GL_KEEP, GL_REPLACE);
gGL.setColorMask(false, false);
pushBatches(LLRenderPass::PASS_INVISIBLE, invisi_mask, FALSE);
gGL.setColorMask(true, true);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
glStencilMask(0xFFFFFFFF);
gOcclusionProgram.unbind();
if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY))
{
beginShiny(true);

View File

@@ -35,7 +35,9 @@
#include "llfloateractivespeakers.h"
#include "llagent.h"
#include "llvoavatar.h"
#include "llappviewer.h"
#include "llimview.h"
#include "llsdutil.h"
#include "llfloateravatarinfo.h"
#include "lluictrlfactory.h"
#include "llviewercontrol.h"
@@ -44,12 +46,10 @@
#include "lltextbox.h"
#include "llmutelist.h"
#include "llviewerobjectlist.h"
#include "llvoavatar.h"
#include "llimpanel.h" // LLVoiceChannel
#include "llsdutil.h"
#include "llimview.h"
#include "llviewerwindow.h"
#include "llworld.h"
#include "llappviewer.h"
// [RLVa:KB]
#include "rlvhandler.h"
@@ -90,9 +90,7 @@ LLSpeaker::LLSpeaker(const LLUUID& id, const std::string& name, const ESpeakerTy
mDisplayName = name;
mLegacyName = name;
}
gVoiceClient->setUserVolume(id, LLMuteList::getInstance()->getSavedResidentVolume(id));
mActivityTimer.reset(SPEAKER_TIMEOUT);
}
@@ -104,7 +102,7 @@ void LLSpeaker::lookupName()
// [/Ansariel: Display name support]
}
//static
//static
// [Ansariel: Display name support]
void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const LLAvatarName& avatar_name, void* user_data)
// [/Ansariel: Display name support]
@@ -122,12 +120,12 @@ void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const LLAvatarName& avatar_
case 2 : speaker_ptr->mDisplayName = avatar_name.mDisplayName; break;
default : speaker_ptr->mDisplayName = avatar_name.getLegacyName(); break;
}
// Also set the legacy name. We will need it to initiate a new
// IM session.
speaker_ptr->mLegacyName = LLCacheName::cleanFullName(avatar_name.getLegacyName());
// [/Ansariel: Display name support]
// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-1.0.0g
// TODO-RLVa: this seems to get called per frame which is very likely an LL bug that will eventuall get fixed
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
@@ -500,7 +498,7 @@ void LLPanelActiveSpeakers::refreshSpeakers()
}
LLColor4 icon_color;
if (speakerp->mStatus == LLSpeaker::STATUS_MUTED)
{
icon_cell->setValue(mute_icon_image);
@@ -605,7 +603,7 @@ void LLPanelActiveSpeakers::refreshSpeakers()
speaking_status_cell->setValue(speaking_order_sort_string);
}
}
// we potentially modified the sort order by touching the list items
mSpeakerList->setSorted(FALSE);
@@ -860,25 +858,25 @@ void LLPanelActiveSpeakers::onModeratorMuteVoice(LLUICtrl* ctrl, void* user_data
if ( gIMMgr )
{
//403 == you're not a mod
//should be disabled if you're not a moderator
LLFloaterIMPanel* floaterp;
floaterp = gIMMgr->findFloaterBySession(mSessionID);
if ( floaterp )
{
//403 == you're not a mod
//should be disabled if you're not a moderator
if ( 403 == status )
{
floaterp->showSessionEventError(
"mute",
"not_a_moderator");
"not_a_mod_error");
}
else
{
floaterp->showSessionEventError(
"mute",
"generic");
"generic_request_error");
}
}
}
@@ -925,25 +923,25 @@ void LLPanelActiveSpeakers::onModeratorMuteText(LLUICtrl* ctrl, void* user_data)
if ( gIMMgr )
{
//403 == you're not a mod
//should be disabled if you're not a moderator
LLFloaterIMPanel* floaterp;
floaterp = gIMMgr->findFloaterBySession(mSessionID);
if ( floaterp )
{
//403 == you're not a mod
//should be disabled if you're not a moderator
if ( 403 == status )
{
floaterp->showSessionEventError(
"mute",
"not_a_moderator");
"not_a_mod_error");
}
else
{
floaterp->showSessionEventError(
"mute",
"generic");
"generic_request_error");
}
}
}
@@ -1194,6 +1192,9 @@ void LLSpeakerMgr::updateSpeakerList()
const LLPointer<LLSpeaker> LLSpeakerMgr::findSpeaker(const LLUUID& speaker_id)
{
//In some conditions map causes crash if it is empty(Windows only), adding check (EK)
if (mSpeakers.size() == 0)
return NULL;
speaker_map_t::iterator found_it = mSpeakers.find(speaker_id);
if (found_it == mSpeakers.end())
{

View File

@@ -74,6 +74,7 @@
#include "llsurface.h"
#include "llviewercontrol.h"
#include "lluictrlfactory.h"
#include "lltrans.h"
#include "lltransfertargetfile.h"
#include "lltransfersourcefile.h"
@@ -172,6 +173,7 @@ LLFloaterGodTools::~LLFloaterGodTools()
// children automatically deleted
}
U32 LLFloaterGodTools::computeRegionFlags() const
{
U32 flags = gAgent.getRegion()->getRegionFlags();
@@ -245,14 +247,16 @@ void LLFloaterGodTools::showPanel(const std::string& panel_name)
void LLFloaterGodTools::onTabChanged(LLUICtrl* ctrl, const LLSD& param)
{
LLPanel* panel = (LLPanel*)ctrl->getChildView(param.asString(),false,false);
if(panel)
if (panel)
panel->setFocus(TRUE);
}
// static
void LLFloaterGodTools::processRegionInfo(LLMessageSystem* msg)
{
llassert(msg);
if (!msg) return;
//const S32 SIM_NAME_BUF = 256;
U32 region_flags;
U8 sim_access;
@@ -307,12 +311,12 @@ void LLFloaterGodTools::processRegionInfo(LLMessageSystem* msg)
regionp->setBillableFactor(billable_factor);
}
if (!sGodTools) return;
// push values to god tools, if available
if (sGodTools
if ( gAgent.isGodlike()
&& sGodTools->mPanelRegionTools
&& sGodTools->mPanelObjectTools
&& msg
&& gAgent.isGodlike())
&& sGodTools->mPanelObjectTools)
{
LLPanelRegionTools* rtool = sGodTools->mPanelRegionTools;
sGodTools->mCurrentHost = host;
@@ -371,6 +375,8 @@ void LLFloaterGodTools::sendRegionInfoRequest()
void LLFloaterGodTools::sendGodUpdateRegionInfo()
{
if (!sGodTools) return;
LLViewerRegion *regionp = gAgent.getRegion();
if (gAgent.isGodlike()
&& sGodTools->mPanelRegionTools
@@ -777,9 +783,7 @@ void LLPanelRegionTools::setPricePerMeter(S32 price)
// static
void LLPanelRegionTools::onChangeAnything(LLUICtrl* ctrl, void* userdata)
{
if (sGodTools
&& userdata
&& gAgent.isGodlike())
if (sGodTools && userdata && gAgent.isGodlike())
{
LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
region_tools->childEnable("Apply");
@@ -803,9 +807,7 @@ void LLPanelRegionTools::onChangePrelude(LLUICtrl* ctrl, void* data)
// static
void LLPanelRegionTools::onChangeSimName(LLLineEditor* caller, void* userdata )
{
if (sGodTools
&& userdata
&& gAgent.isGodlike())
if (sGodTools && userdata && gAgent.isGodlike())
{
LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
region_tools->childEnable("Apply");
@@ -815,10 +817,9 @@ void LLPanelRegionTools::onChangeSimName(LLLineEditor* caller, void* userdata )
//static
void LLPanelRegionTools::onRefresh(void* userdata)
{
if(!sGodTools) return;
LLViewerRegion *region = gAgent.getRegion();
if (region
&& sGodTools
&& gAgent.isGodlike())
if (region && gAgent.isGodlike())
{
sGodTools->sendRegionInfoRequest();
}
@@ -827,11 +828,9 @@ void LLPanelRegionTools::onRefresh(void* userdata)
// static
void LLPanelRegionTools::onApplyChanges(void* userdata)
{
if(!sGodTools) return;
LLViewerRegion *region = gAgent.getRegion();
if (region
&& sGodTools
&& userdata
&& gAgent.isGodlike())
if (region && userdata && gAgent.isGodlike())
{
LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
@@ -840,19 +839,19 @@ void LLPanelRegionTools::onApplyChanges(void* userdata)
}
}
// static
// static
void LLPanelRegionTools::onBakeTerrain(void *userdata)
{
LLPanelRequestTools::sendRequest("terrain", "bake", gAgent.getRegionHost());
}
// static
// static
void LLPanelRegionTools::onRevertTerrain(void *userdata)
{
LLPanelRequestTools::sendRequest("terrain", "revert", gAgent.getRegionHost());
}
// static
// static
void LLPanelRegionTools::onSwapTerrain(void *userdata)
{
LLPanelRequestTools::sendRequest("terrain", "swap", gAgent.getRegionHost());
@@ -953,7 +952,6 @@ bool LLPanelGridTools::finishKick(const LLSD& notification, const LLSD& response
{
S32 option = LLNotification::getSelectedOption(notification, response);
if (option == 0)
{
LLMessageSystem* msg = gMessageSystem;
@@ -1027,7 +1025,8 @@ bool LLPanelGridTools::flushMapVisibilityCachesConfirm(const LLSD& notification,
// Default constructor
LLPanelObjectTools::LLPanelObjectTools(const std::string& title)
: LLPanel(title), mTargetAvatar()
: LLPanel(title),
mTargetAvatar()
{
}
@@ -1063,7 +1062,7 @@ void LLPanelObjectTools::setTargetAvatar(const LLUUID &target_id)
mTargetAvatar = target_id;
if (target_id.isNull())
{
childSetValue("target_avatar_name", "(no target)");
childSetValue("target_avatar_name", getString("no_target"));
}
}
@@ -1146,8 +1145,9 @@ void LLPanelObjectTools::enableAllWidgets()
// static
void LLPanelObjectTools::onGetTopColliders(void* userdata)
{
if (sGodTools
&& gAgent.isGodlike())
if(!sGodTools) return;
if (gAgent.isGodlike())
{
LLFloaterTopObjects::show();
LLFloaterTopObjects::setMode(STAT_REPORT_TOP_COLLIDERS);
@@ -1158,8 +1158,9 @@ void LLPanelObjectTools::onGetTopColliders(void* userdata)
// static
void LLPanelObjectTools::onGetTopScripts(void* userdata)
{
if (sGodTools
&& gAgent.isGodlike())
if(!sGodTools) return;
if (gAgent.isGodlike())
{
LLFloaterTopObjects::show();
LLFloaterTopObjects::setMode(STAT_REPORT_TOP_SCRIPTS);
@@ -1170,8 +1171,7 @@ void LLPanelObjectTools::onGetTopScripts(void* userdata)
// static
void LLPanelObjectTools::onGetScriptDigest(void* userdata)
{
if (sGodTools
&& gAgent.isGodlike())
if (sGodTools && gAgent.isGodlike())
{
// get the list of scripts and number of occurences of each
// (useful for finding self-replicating objects)
@@ -1281,7 +1281,10 @@ void LLPanelObjectTools::onClickSetBySelection(void* data)
LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
panelp->mTargetAvatar = owner_id;
std::string name = "Object " + node->mName + " owned by " + owner_name;
LLStringUtil::format_map_t args;
args["[OBJECT]"] = node->mName;
args["[OWNER]"] = owner_name;
std::string name = LLTrans::getString("GodToolsObjectOwnedBy", args);
panelp->childSetValue("target_avatar_name", name);
}
@@ -1295,11 +1298,10 @@ void LLPanelObjectTools::callbackAvatarID(const std::vector<std::string>& names,
object_tools->refresh();
}
// static
void LLPanelObjectTools::onChangeAnything(LLUICtrl* ctrl, void* userdata)
{
if (sGodTools
if (sGodTools
&& userdata
&& gAgent.isGodlike())
{
@@ -1311,15 +1313,12 @@ void LLPanelObjectTools::onChangeAnything(LLUICtrl* ctrl, void* userdata)
// static
void LLPanelObjectTools::onApplyChanges(void* userdata)
{
if(!sGodTools) return;
LLViewerRegion *region = gAgent.getRegion();
if (region
&& sGodTools
&& userdata
&& gAgent.isGodlike())
if (region && userdata && gAgent.isGodlike())
{
LLPanelObjectTools* object_tools = (LLPanelObjectTools*) userdata;
// TODO -- implement this
object_tools->childDisable("Apply");
sGodTools->sendGodUpdateRegionInfo();
}

View File

@@ -2260,8 +2260,8 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
BOOL allow_damage = !self->mCheckSafe->get();
BOOL allow_fly = self->mCheckFly->get();
BOOL allow_landmark = self->mCheckLandmark->get();
BOOL allow_group_scripts = self->mCheckGroupScripts->get() || self->mCheckOtherScripts->get();
BOOL allow_other_scripts = self->mCheckOtherScripts->get();
BOOL allow_group_scripts = self->mCheckGroupScripts->get() || allow_other_scripts;
BOOL allow_publish = FALSE;
BOOL mature_publish = self->mMatureCtrl->get();
BOOL push_restriction = self->mPushRestrictionCtrl->get();
@@ -2424,7 +2424,7 @@ void LLPanelLandAccess::refresh()
mListAccess->deleteAllItems();
if (mListBanned)
mListBanned->deleteAllItems();
LLParcel *parcel = mParcel->getParcel();
// Display options

View File

@@ -157,7 +157,10 @@ BOOL LLFloaterNameDesc::postBuild()
// OK button
childSetLabelArg("ok_btn", "[UPLOADFEE]", gHippoGridManager->getConnectedGrid()->getUploadFee());
//childSetAction("ok_btn", onBtnOK, this);
if (exten == "wav")
{
childSetAction("ok_btn", onBtnOK, this);
}
setDefaultBtn("ok_btn");
return TRUE;

View File

@@ -165,6 +165,7 @@ bool estate_dispatch_initialized = false;
//S32 LLFloaterRegionInfo::sRequestSerial = 0;
LLUUID LLFloaterRegionInfo::sRequestInvoice;
LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed)
{
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_region_info.xml", NULL, FALSE);
@@ -176,26 +177,6 @@ BOOL LLFloaterRegionInfo::postBuild()
// contruct the panels
LLPanelRegionInfo* panel;
panel = new LLPanelRegionGeneralInfo;
mInfoPanels.push_back(panel);
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_general.xml");
mTab->addTabPanel(panel, panel->getLabel(), TRUE);
panel = new LLPanelRegionDebugInfo;
mInfoPanels.push_back(panel);
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_debug.xml");
mTab->addTabPanel(panel, panel->getLabel(), FALSE);
panel = new LLPanelRegionTextureInfo;
mInfoPanels.push_back(panel);
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_texture.xml");
mTab->addTabPanel(panel, panel->getLabel(), FALSE);
panel = new LLPanelRegionTerrainInfo;
mInfoPanels.push_back(panel);
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_terrain.xml");
mTab->addTabPanel(panel, panel->getLabel(), FALSE);
panel = new LLPanelEstateInfo;
mInfoPanels.push_back(panel);
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_estate.xml");
@@ -206,6 +187,26 @@ BOOL LLFloaterRegionInfo::postBuild()
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_covenant.xml");
mTab->addTabPanel(panel, panel->getLabel(), FALSE);
panel = new LLPanelRegionGeneralInfo;
mInfoPanels.push_back(panel);
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_general.xml");
mTab->addTabPanel(panel, panel->getLabel(), TRUE);
panel = new LLPanelRegionTerrainInfo;
mInfoPanels.push_back(panel);
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_terrain.xml");
mTab->addTabPanel(panel, panel->getLabel(), FALSE);
panel = new LLPanelRegionTextureInfo;
mInfoPanels.push_back(panel);
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_texture.xml");
mTab->addTabPanel(panel, panel->getLabel(), FALSE);
panel = new LLPanelRegionDebugInfo;
mInfoPanels.push_back(panel);
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_debug.xml");
mTab->addTabPanel(panel, panel->getLabel(), FALSE);
gMessageSystem->setHandlerFunc(
"EstateOwnerMessage",
&processEstateOwnerRequest);
@@ -331,6 +332,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
msg->getSize("RegionInfo2", "ProductName") > 0)
{
msg->getString("RegionInfo2", "ProductName", sim_type);
LLTrans::findString(sim_type, sim_type); // try localizing sim product name
}
// GENERAL PANEL
@@ -1234,6 +1236,7 @@ bool LLPanelRegionTerrainInfo::refreshFromRegion(LLViewerRegion* region)
return LLPanelRegionInfo::refreshFromRegion(region);
}
// virtual
BOOL LLPanelRegionTerrainInfo::sendUpdate()
{
@@ -1390,6 +1393,7 @@ bool LLPanelRegionTerrainInfo::callbackBakeTerrain(const LLSD& notification, con
strings.push_back("bake");
LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
return false;
}
@@ -1669,26 +1673,29 @@ bool LLPanelEstateInfo::kickUserConfirm(const LLSD& notification, const LLSD& re
std::string all_estates_text()
{
LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
if (!panel) return "(error)";
if (!panel) return "(" + LLTrans::getString("RegionInfoError") + ")";
LLStringUtil::format_map_t args;
std::string owner = panel->getOwnerName();
LLViewerRegion* region = gAgent.getRegion();
if (gAgent.isGodlike())
{
return llformat("all estates\nowned by %s", owner.c_str());
args["[OWNER]"] = owner.c_str();
return LLTrans::getString("RegionInfoAllEstatesOwnedBy", args);
}
else if (region && region->getOwner() == gAgent.getID())
{
return "all estates you own";
return LLTrans::getString("RegionInfoAllEstatesYouOwn");
}
else if (region && region->isEstateManager())
{
return llformat("all estates that\nyou manage for %s", owner.c_str());
args["[OWNER]"] = owner.c_str();
return LLTrans::getString("RegionInfoAllEstatesYouManage", args);
}
else
{
return "(error)";
return "(" + LLTrans::getString("RegionInfoError") + ")";
}
}
@@ -2254,6 +2261,7 @@ bool LLPanelEstateInfo::callbackChangeLindenEstate(const LLSD& notification, con
LLFloaterRegionInfo::nextInvoice();
commitEstateInfoDataserver();
}
// we don't want to do this because we'll get it automatically from the sim
// after the spaceserver processes it
// else
@@ -2723,7 +2731,6 @@ bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region)
region_landtype->setText(region->getLocalizedSimProductName());
}
// let the parent class handle the general data collection.
bool rv = LLPanelRegionInfo::refreshFromRegion(region);
LLMessageSystem *msg = gMessageSystem;
@@ -2863,7 +2870,7 @@ void LLPanelEstateCovenant::loadInvItem(LLInventoryItem *itemp)
else
{
mAssetStatus = ASSET_LOADED;
setCovenantTextEditor("There is no Covenant provided for this Estate.");
setCovenantTextEditor(LLTrans::getString("RegionNoCovenant"));
sendChangeCovenantID(LLUUID::null);
}
}
@@ -3179,9 +3186,10 @@ bool LLDispatchSetEstateAccess::operator()(
totalAllowedAgents += allowed_agent_name_list->getItemCount();
}
std::string msg = llformat("Allowed residents: (%d, max %d)",
totalAllowedAgents,
ESTATE_MAX_ACCESS_IDS);
LLStringUtil::format_map_t args;
args["[ALLOWEDAGENTS]"] = llformat ("%d", totalAllowedAgents);
args["[MAXACCESS]"] = llformat ("%d", ESTATE_MAX_ACCESS_IDS);
std::string msg = LLTrans::getString("RegionInfoAllowedResidents", args);
panel->childSetValue("allow_resident_label", LLSD(msg));
if (allowed_agent_name_list)
@@ -3203,9 +3211,10 @@ bool LLDispatchSetEstateAccess::operator()(
LLNameListCtrl* allowed_group_name_list;
allowed_group_name_list = panel->getChild<LLNameListCtrl>("allowed_group_name_list");
std::string msg = llformat("Allowed groups: (%d, max %d)",
num_allowed_groups,
(S32) ESTATE_MAX_GROUP_IDS);
LLStringUtil::format_map_t args;
args["[ALLOWEDGROUPS]"] = llformat ("%d", num_allowed_groups);
args["[MAXACCESS]"] = llformat ("%d", ESTATE_MAX_GROUP_IDS);
std::string msg = LLTrans::getString("RegionInfoAllowedGroups", args);
panel->childSetValue("allow_group_label", LLSD(msg));
if (allowed_group_name_list)

View File

@@ -64,6 +64,7 @@
#include "llscrolllistctrl.h"
#include "lltextbox.h"
#include "lltracker.h"
#include "lltrans.h"
#include "llurldispatcher.h"
#include "llviewermenu.h"
#include "llviewerregion.h"
@@ -1625,7 +1626,8 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
}
else
{
list->addCommentText(std::string("None found."));
// if we found nothing, say "none"
list->addCommentText(LLTrans::getString("worldmap_results_none_found"));
list->operateOnAll(LLCtrlListInterface::OP_DESELECT);
}
}

View File

@@ -50,19 +50,20 @@
#include "llchat.h"
#include "llconsole.h"
#include "llfloater.h"
#include "llfloatergroupinfo.h"
#include "llimview.h"
#include "llfloaterinventory.h"
#include "llinventory.h"
#include "llinventoryfunctions.h"
#include "llfloateractivespeakers.h"
#include "llfloateravatarinfo.h"
#include "llfloaterchat.h"
#include "llfloatergroupinfo.h"
#include "llimview.h"
#include "llinventory.h"
#include "llinventoryfunctions.h"
#include "llfloaterinventory.h"
#include "llcheckboxctrl.h"
#include "llkeyboard.h"
#include "lllineeditor.h"
#include "llcheckboxctrl.h"
#include "llnotify.h"
#include "llresmgr.h"
#include "lltrans.h"
#include "lltabcontainer.h"
#include "llviewertexteditor.h"
#include "llviewermessage.h"
@@ -2544,7 +2545,7 @@ void LLFloaterIMPanel::chatFromLogFile(LLLogChat::ELogLineType type, std::string
// add log end message
if (gSavedPerAccountSettings.getBOOL("LogInstantMessages"))
{
message = LLFloaterChat::getInstance()->getString("IM_logging_string");
message = LLFloaterChat::getInstance()->getString("IM_end_log_string");
}
break;
case LLLogChat::LOG_LINE:
@@ -2562,19 +2563,8 @@ void LLFloaterIMPanel::chatFromLogFile(LLLogChat::ELogLineType type, std::string
void LLFloaterIMPanel::showSessionStartError(
const std::string& error_string)
{
//the error strings etc. should be really be static and local
//to this file instead of in the LLFloaterIM
//but they were in llimview.cpp first and unfortunately
//some translations into non English languages already occurred
//thus making it a tad harder to change over to a
//"correct" solution. The best solution
//would be to store all of the misc. strings into
//their own XML file which would be read in by any LLIMPanel
//post build function instead of repeating the same info
//in the group, adhoc and normal IM xml files.
LLSD args;
args["REASON"] =
LLFloaterIM::sErrorStringsMap[error_string];
args["REASON"] = LLTrans::getString(error_string);
args["RECIPIENT"] = getTitle();
LLSD payload;
@@ -2592,13 +2582,14 @@ void LLFloaterIMPanel::showSessionEventError(
const std::string& error_string)
{
LLSD args;
std::string recipient = getTitle();
std::string reason = LLFloaterIM::sErrorStringsMap[error_string];
boost::replace_all(reason, "[RECIPIENT]", recipient);
std::string event = LLFloaterIM::sEventStringsMap[event_string];
boost::replace_all(event, "[RECIPIENT]", recipient);
args["REASON"] = reason;
args["EVENT"] = event;
LLStringUtil::format_map_t event_args;
event_args["RECIPIENT"] = getTitle();
args["REASON"] =
LLTrans::getString(error_string);
args["EVENT"] =
LLTrans::getString(event_string, event_args);
LLNotifications::instance().add(
"ChatterBoxSessionEventError",
@@ -2611,7 +2602,7 @@ void LLFloaterIMPanel::showSessionForceClose(
LLSD args;
args["NAME"] = getTitle();
args["REASON"] = LLFloaterIM::sForceCloseSessionMap[reason_string];
args["REASON"] = LLTrans::getString(reason_string);
LLSD payload;
payload["session_id"] = mSessionUUID;

View File

@@ -41,6 +41,7 @@
#include "llhttpclient.h"
#include "llsdutil_math.h"
#include "llstring.h"
#include "lltrans.h"
#include "lluictrlfactory.h"
#include "llagent.h"
@@ -81,19 +82,6 @@
//
LLIMMgr* gIMMgr = NULL;
//
// Statics
//
// *FIXME: make these all either UIStrings or Strings
static std::string sOnlyUserMessage;
static LLUIString sOfflineMessage;
static std::string sMutedMessage;
static LLUIString sInviteMessage;
std::map<std::string,std::string> LLFloaterIM::sEventStringsMap;
std::map<std::string,std::string> LLFloaterIM::sErrorStringsMap;
std::map<std::string,std::string> LLFloaterIM::sForceCloseSessionMap;
//
// Helper Functions
//
@@ -172,18 +160,16 @@ public:
gIMMgr->clearPendingAgentListUpdates(mSessionID);
gIMMgr->clearPendingInvitation(mSessionID);
LLFloaterIMPanel* floaterp =
gIMMgr->findFloaterBySession(mSessionID);
LLFloaterIMPanel* floaterp = gIMMgr->findFloaterBySession(mSessionID);
if ( floaterp )
{
if ( 404 == statusNum )
{
std::string error_string;
error_string = "does not exist";
error_string = "session_does_not_exist_error";
floaterp->showSessionStartError(
error_string);
floaterp->showSessionStartError(error_string);
}
}
}
@@ -250,86 +236,6 @@ LLFloaterIM::LLFloaterIM()
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_im.xml");
}
BOOL LLFloaterIM::postBuild()
{
// IM session initiation warnings
sOnlyUserMessage = getString("only_user_message");
sOfflineMessage = getString("offline_message");
sMutedMessage = getString("muted_message");
sInviteMessage = getString("invite_message");
if ( sErrorStringsMap.find("generic") == sErrorStringsMap.end() )
{
sErrorStringsMap["generic"] =
getString("generic_request_error");
}
if ( sErrorStringsMap.find("unverified") ==
sErrorStringsMap.end() )
{
sErrorStringsMap["unverified"] =
getString("insufficient_perms_error");
}
if ( sErrorStringsMap.end() ==
sErrorStringsMap.find("no_ability") )
{
sErrorStringsMap["no_ability"] =
getString("no_ability_error");
}
if ( sErrorStringsMap.end() ==
sErrorStringsMap.find("muted") )
{
sErrorStringsMap["muted"] =
getString("muted_error");
}
if ( sErrorStringsMap.end() ==
sErrorStringsMap.find("not_a_moderator") )
{
sErrorStringsMap["not_a_moderator"] =
getString("not_a_mod_error");
}
if ( sErrorStringsMap.end() ==
sErrorStringsMap.find("does not exist") )
{
sErrorStringsMap["does not exist"] =
getString("session_does_not_exist_error");
}
if ( sEventStringsMap.end() == sEventStringsMap.find("add") )
{
sEventStringsMap["add"] =
getString("add_session_event");
}
if ( sEventStringsMap.end() == sEventStringsMap.find("message") )
{
sEventStringsMap["message"] =
getString("message_session_event");
}
if ( sForceCloseSessionMap.end() ==
sForceCloseSessionMap.find("removed") )
{
sForceCloseSessionMap["removed"] =
getString("removed_from_group");
}
if ( sForceCloseSessionMap.end() ==
sForceCloseSessionMap.find("no ability") )
{
sForceCloseSessionMap["no ability"] =
getString("close_on_no_ability");
}
return TRUE;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLIMViewFriendObserver
//
@@ -645,10 +551,10 @@ void LLIMMgr::addMessage(
{
// *TODO:translate (low priority, god ability)
std::ostringstream bonus_info;
bonus_info << "*** parent estate: "
bonus_info << LLTrans::getString("***")+ " "+ LLTrans::getString("IMParentEstate") + LLTrans::getString(":") + " "
<< parent_estate_id
<< ((parent_estate_id == 1) ? ", mainland" : "")
<< ((parent_estate_id == 5) ? ", teen" : "");
<< ((parent_estate_id == 1) ? LLTrans::getString(",") + LLTrans::getString("IMMainland") : "")
<< ((parent_estate_id == 5) ? LLTrans::getString(",") + LLTrans::getString ("IMTeen") : "");
// once we have web-services (or something) which returns
// information about a region id, we can print this out
@@ -717,23 +623,20 @@ void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& mess
// null session id means near me (chat history)
if (session_id.isNull())
{
LLFloaterChat* floaterp = LLFloaterChat::getInstance();
message = floaterp->getString(message_name);
message = LLTrans::getString(message_name);
message.setArgs(args);
LLChat chat(message);
chat.mSourceType = CHAT_SOURCE_SYSTEM;
LLFloaterChat::getInstance()->addChatHistory(chat);
}
else // going to IM session
{
LLFloaterIMPanel* floaterp = findFloaterBySession(session_id);
if (floaterp)
message = LLTrans::getString(message_name + "-im");
message.setArgs(args);
if (hasSession(session_id))
{
message = floaterp->getString(message_name);
message.setArgs(args);
gIMMgr->addMessage(session_id, LLUUID::null, SYSTEM_FROM, message.getString());
}
}
@@ -764,7 +667,7 @@ int LLIMMgr::getIMUnreadCount()
}
// This method returns TRUE if the local viewer has a session
// currently open keyed to the uuid.
// currently open keyed to the uuid.
BOOL LLIMMgr::isIMSessionOpen(const LLUUID& uuid)
{
LLFloaterIMPanel* floater = findFloaterBySession(uuid);
@@ -780,12 +683,14 @@ LLUUID LLIMMgr::addP2PSession(const std::string& name,
LLUUID session_id = addSession(name, IM_NOTHING_SPECIAL, other_participant_id);
LLFloaterIMPanel* floater = findFloaterBySession(session_id);
if(floater)
if (floater)
{
LLVoiceChannelP2P* voice_channelp = (LLVoiceChannelP2P*)floater->getVoiceChannel();
voice_channelp->setSessionHandle(voice_session_handle, caller_uri);
LLVoiceChannelP2P* voice_channel = dynamic_cast<LLVoiceChannelP2P*>(floater->getVoiceChannel());
if (voice_channel)
{
voice_channel->setSessionHandle(voice_session_handle, caller_uri);
}
}
return session_id;
}
@@ -951,7 +856,7 @@ void LLIMMgr::inviteToSession(
payload["session_handle"] = session_handle;
payload["session_uri"] = session_uri;
payload["notify_box_type"] = notify_box_type;
LLVoiceChannel* channelp = LLVoiceChannel::getChannelByID(session_id);
if (channelp && channelp->callStarted())
{
@@ -962,17 +867,13 @@ void LLIMMgr::inviteToSession(
if (type == IM_SESSION_P2P_INVITE || ad_hoc_invite)
{
// is the inviter a friend?
if (LLAvatarTracker::instance().getBuddyInfo(caller_id) == NULL)
if ( // we're rejecting non-friend voice calls and this isn't a friend
(gSavedSettings.getBOOL("VoiceCallsFriendsOnly") && (LLAvatarTracker::instance().getBuddyInfo(caller_id) == NULL))
)
{
// if not, and we are ignoring voice invites from non-friends
// then silently decline
if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly"))
{
// invite not from a friend, so decline
LLNotifications::instance().forceResponse(LLNotification::Params("VoiceInviteP2P").payload(payload), 1);
return;
}
// silently decline the call
LLNotifications::instance().forceResponse(LLNotification::Params("VoiceInviteP2P").payload(payload), 1);
return;
}
}
@@ -980,7 +881,8 @@ void LLIMMgr::inviteToSession(
{
if (caller_name.empty())
{
gCacheName->get(caller_id, true, boost::bind(&LLIMMgr::onInviteNameLookup,_1,_2,_3,payload));
gCacheName->get(caller_id, true, // voice
boost::bind(&LLIMMgr::onInviteNameLookup, _1, _2, _3, payload));
}
else
{
@@ -998,7 +900,7 @@ void LLIMMgr::inviteToSession(
}
}
//static
//static
void LLIMMgr::onInviteNameLookup(const LLUUID& id, const std::string& full_name, bool is_group, LLSD payload)
{
payload["caller_name"] = full_name;
@@ -1234,7 +1136,8 @@ void LLIMMgr::noteOfflineUsers(
S32 count = ids.count();
if(count == 0)
{
floater->addHistoryLine(sOnlyUserMessage, gSavedSettings.getColor4("SystemChatColor"));
const std::string& only_user = LLTrans::getString("only_user_message");
floater->addHistoryLine(only_user, gSavedSettings.getColor4("SystemChatColor"));
}
else
{
@@ -1244,10 +1147,11 @@ void LLIMMgr::noteOfflineUsers(
{
info = at.getBuddyInfo(ids.get(i));
std::string full_name;
if(info && !info->isOnline()
&& gCacheName->getFullName(ids.get(i), full_name))
if (info
&& !info->isOnline()
&& gCacheName->getFullName(ids.get(i), full_name))
{
LLUIString offline = sOfflineMessage;
LLUIString offline = LLTrans::getString("offline_message");
offline.setArg("[NAME]", full_name);
floater->addHistoryLine(offline, gSavedSettings.getColor4("SystemChatColor"));
}
@@ -1272,7 +1176,8 @@ void LLIMMgr::noteMutedUsers(LLFloaterIMPanel* floater,
{
if( ml->isMuted(ids.get(i)) )
{
LLUIString muted = sMutedMessage;
LLUIString muted = LLTrans::getString("muted_message");
floater->addHistoryLine(muted);
break;
}
@@ -1474,10 +1379,8 @@ public:
}
else
{
//throw an error dialog and close the temp session's
//floater
LLFloaterIMPanel* floater =
gIMMgr->findFloaterBySession(temp_session_id);
//throw an error dialog and close the temp session's floater
LLFloaterIMPanel* floater = gIMMgr->findFloaterBySession(temp_session_id);
if ( floater )
{

View File

@@ -221,7 +221,7 @@ private:
std::list<LLUUID> mIgnoreGroupList;
public:
S32 getIgnoreGroupListCount() { return mIgnoreGroupList.size(); }
};
@@ -230,11 +230,6 @@ class LLFloaterIM : public LLMultiFloater
{
public:
LLFloaterIM();
/*virtual*/ BOOL postBuild();
static std::map<std::string,std::string> sEventStringsMap;
static std::map<std::string,std::string> sErrorStringsMap;
static std::map<std::string,std::string> sForceCloseSessionMap;
};
// Globals

View File

@@ -99,7 +99,7 @@ std::string LLLogChat::timestamp(bool withdate)
//static
void LLLogChat::saveHistory(std::string filename, std::string line)
void LLLogChat::saveHistory(std::string const& filename, std::string line)
{
if(!filename.size())
{
@@ -120,7 +120,7 @@ void LLLogChat::saveHistory(std::string filename, std::string line)
}
}
void LLLogChat::loadHistory(std::string filename , void (*callback)(ELogLineType,std::string,void*), void* userdata)
void LLLogChat::loadHistory(std::string const& filename , void (*callback)(ELogLineType,std::string,void*), void* userdata)
{
if(!filename.size())
{

View File

@@ -34,6 +34,8 @@
#ifndef LL_LLLOGCHAT_H
#define LL_LLLOGCHAT_H
#include <string>
class LLLogChat
{
public:
@@ -44,9 +46,9 @@ public:
LOG_END
};
static std::string timestamp(bool withdate = false);
static std::string makeLogFileName(std::string(filename));
static void saveHistory(std::string filename, std::string line);
static void loadHistory(std::string filename,
static std::string makeLogFileName(std::string filename);
static void saveHistory(std::string const& filename, std::string line);
static void loadHistory(std::string const& filename,
void (*callback)(ELogLineType,std::string,void*),
void* userdata);
private:

View File

@@ -152,7 +152,7 @@ public:
public:
Matcher(){}
virtual ~Matcher() {}
virtual BOOL matches(const LLNotificationPtr) const = 0;
virtual bool matches(const LLNotificationPtr) const = 0;
};
// Walks the list and removes any stacked messages for which the given matcher returns TRUE.
// Useful when muting people and things in order to clear out any similar previously queued messages.

View File

@@ -1105,7 +1105,7 @@ void LLGroupMoneyDetailsTabEventHandler::processReply(LLMessageSystem* msg,
text.append(1, '\n');
text.append(llformat("%-24s %6d\n", "Total", total_amount));
text.append(llformat("%-24s %6d\n", LLTrans::getString("GroupMoneyTotal").c_str(), total_amount));
if ( mImplementationp->mTextEditorp )
{
@@ -1227,7 +1227,7 @@ void LLGroupMoneySalesTabEventHandler::processReply(LLMessageSystem* msg,
S32 transactions = msg->getNumberOfBlocksFast(_PREHASH_HistoryData);
if (transactions == 0)
{
text.append("(none)");
text.append(LLTrans::getString("none_text"));
}
else
{
@@ -1252,22 +1252,22 @@ void LLGroupMoneySalesTabEventHandler::processReply(LLMessageSystem* msg,
switch(type)
{
case TRANS_OBJECT_SALE:
verb = "bought";
verb = LLTrans::getString("GroupMoneyBought").c_str();
break;
case TRANS_GIFT:
verb = "paid you";
verb = LLTrans::getString("GroupMoneyPaidYou").c_str();
break;
case TRANS_PAY_OBJECT:
verb = "paid into";
verb = LLTrans::getString("GroupMoneyPaidInto").c_str();
break;
case TRANS_LAND_PASS_SALE:
verb = "bought pass to";
verb = LLTrans::getString("GroupMoneyBoughtPassTo").c_str();
break;
case TRANS_EVENT_FEE:
verb = "paid fee for event";
verb = LLTrans::getString("GroupMoneyPaidFeeForEvent").c_str();
break;
case TRANS_EVENT_PRIZE:
verb = "paid prize for event";
verb = LLTrans::getString("GroupMoneyPaidPrizeForEvent").c_str();
break;
default:
verb = "";
@@ -1429,15 +1429,18 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
return;
}
text.append("Summary for this week, beginning on ");
text.append(LLTrans::getString("SummaryForTheWeek"));
text.append(start_date);
text.append(". ");
if (current_interval == 0)
{
text.append("The next stipend day is ");
text.append(LLTrans::getString("NextStipendDay"));
text.append(next_stipend_date);
text.append("\n\n");
text.append(llformat("%-24s%s%6d\n", "Balance",
text.append(".\n\n");
text.append(llformat("%-24s%s%6d\n", LLTrans::getString("GroupMoneyBalance").c_str(),
gHippoGridManager->getConnectedGrid()->getCurrencySymbol().c_str(),
balance));
text.append(1, '\n');
@@ -1445,15 +1448,15 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
// [DEV-29503] Hide the individual info since
// non_exempt_member here is a wrong choice to calculate individual shares.
// text.append( " Group Individual Share\n");
// text.append(llformat( "%-24s %6d %6d \n", "Credits", total_credits, (S32)floor((F32)total_credits/(F32)non_exempt_members)));
// text.append(llformat( "%-24s %6d %6d \n", "Debits", total_debits, (S32)floor((F32)total_debits/(F32)non_exempt_members)));
// text.append(llformat( "%-24s %6d %6d \n", "Total", total_credits + total_debits, (S32)floor((F32)(total_credits + total_debits)/(F32)non_exempt_members)));
// text.append( LLTrans::getString("GroupIndividualShare"));
// text.append(llformat( "%-24s %6d %6d \n", LLTrans::getString("GroupMoneyCredits").c_str(), total_credits, (S32)floor((F32)total_credits/(F32)non_exempt_members)));
// text.append(llformat( "%-24s %6d %6d \n", LLTrans::getString("GroupMoneyDebits").c_str(), total_debits, (S32)floor((F32)total_debits/(F32)non_exempt_members)));
// text.append(llformat( "%-24s %6d %6d \n", LLTrans::getString("GroupMoneyTotal").c_str(), total_credits + total_debits, (S32)floor((F32)(total_credits + total_debits)/(F32)non_exempt_members)));
text.append( " Group\n");
text.append(llformat( "%-24s %6d\n", "Credits", total_credits));
text.append(llformat( "%-24s %6d\n", "Debits", total_debits));
text.append(llformat( "%-24s %6d\n", "Total", total_credits + total_debits));
text.append(llformat( "%s\n", LLTrans::getString("GroupColumn").c_str()));
text.append(llformat( "%-24s %6d\n", LLTrans::getString("GroupMoneyCredits").c_str(), total_credits));
text.append(llformat( "%-24s %6d\n", LLTrans::getString("GroupMoneyDebits").c_str(), total_debits));
text.append(llformat( "%-24s %6d\n", LLTrans::getString("GroupMoneyTotal").c_str(), total_credits + total_debits));
if ( mImplementationp->mTextEditorp )
{

View File

@@ -514,8 +514,11 @@ void LLPanelObject::getState( )
mCtrlPosY->setEnabled(enable_move);
mCtrlPosZ->setEnabled(enable_move);
mBtnLinkObj->setEnabled(LLSelectMgr::getInstance()->enableLinkObjects());
mBtnUnlinkObj->setEnabled((LLSelectMgr::getInstance()->enableUnlinkObjects()
&& (selected_count > 1) && LLSelectMgr::getInstance()->getSelection()->getRootObjectCount()<=1));
LLViewerObject* linkset_parent = objectp->getSubParent()? objectp->getSubParent() : objectp;
mBtnUnlinkObj->setEnabled(
LLSelectMgr::getInstance()->enableUnlinkObjects()
&& (linkset_parent->numChildren() >= 1)
&& LLSelectMgr::getInstance()->getSelection()->getRootObjectCount()<=1);
mBtnCopyPos->setEnabled(enable_move);
mBtnPastePos->setEnabled(enable_move);
mBtnPastePosClip->setEnabled(enable_move);

View File

@@ -94,8 +94,8 @@ public:
LLTaskInvFVBridge(LLPanelObjectInventory* panel,
const LLUUID& uuid,
const std::string& name,
U32 flags=0);
virtual ~LLTaskInvFVBridge( ) {}
U32 flags=0);
virtual ~LLTaskInvFVBridge() {}
virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; }
virtual std::string getLabelSuffix() const { return LLStringUtil::null; }
@@ -243,9 +243,9 @@ void LLTaskInvFVBridge::buyItem()
if (sale_info.getSaleType() != LLSaleInfo::FS_CONTENTS)
{
U32 next_owner_mask = perm.getMaskNextOwner();
args["MODIFYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_MODIFY) ? "PermYes" : "PermNo");
args["COPYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_COPY) ? "PermYes" : "PermNo");
args["RESELLPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_TRANSFER) ? "PermYes" : "PermNo");
args["MODIFYPERM"] = LLTrans::getString((next_owner_mask & PERM_MODIFY) ? "PermYes" : "PermNo");
args["COPYPERM"] = LLTrans::getString((next_owner_mask & PERM_COPY) ? "PermYes" : "PermNo");
args["RESELLPERM"] = LLTrans::getString((next_owner_mask & PERM_TRANSFER) ? "PermYes" : "PermNo");
}
std::string alertdesc;
@@ -318,10 +318,18 @@ const std::string& LLTaskInvFVBridge::getName() const
const std::string& LLTaskInvFVBridge::getDisplayName() const
{
LLInventoryItem* item = findItem();
if(item)
{
mDisplayName.assign(item->getName());
// Localize "New Script", "New Script 1", "New Script 2", etc.
if (item->getType() == LLAssetType::AT_LSL_TEXT &&
LLStringUtil::startsWith(item->getName(), "New Script"))
{
LLStringUtil::replaceString(mDisplayName, "New Script", LLTrans::getString("PanelContentsNewScript"));
}
const LLPermissions& perm(item->getPermissions());
BOOL copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
BOOL mod = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE);
@@ -677,7 +685,9 @@ void LLTaskInvFVBridge::performAction(LLInventoryModel* model, std::string actio
{
if (price > 0 && price > gStatusBar->getBalance())
{
LLFloaterBuyCurrency::buyCurrency("This costs", price);
LLStringUtil::format_map_t args;
args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
LLFloaterBuyCurrency::buyCurrency( LLTrans::getString("this_costs", args), price );
}
else
{
@@ -723,7 +733,7 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
else
{
std::ostringstream info;
info << "Buy for " << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() << price;
info << LLTrans::getString("Buyfor") << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() << price;
label.assign(info.str());
}
@@ -1013,8 +1023,8 @@ class LLTaskSoundBridge : public LLTaskInvFVBridge
{
public:
LLTaskSoundBridge(LLPanelObjectInventory* panel,
const LLUUID& uuid,
const std::string& name) :
const LLUUID& uuid,
const std::string& name) :
LLTaskInvFVBridge(panel, uuid, name) {}
virtual BOOL canOpenItem() const { return TRUE; }
@@ -1086,7 +1096,7 @@ void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
else
{
std::ostringstream info;
info << "Buy for " << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() << price;
info << LLTrans::getString("Buyfor") << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() << price;
label.assign(info.str());
}
@@ -1121,6 +1131,7 @@ void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
items.push_back(std::string("Task Play"));
/*menu.addSeparator();
menu.append(new LLMenuItemCallGL("Play",
&LLTaskSoundBridge::playSound,
@@ -1138,8 +1149,8 @@ class LLTaskLandmarkBridge : public LLTaskInvFVBridge
{
public:
LLTaskLandmarkBridge(LLPanelObjectInventory* panel,
const LLUUID& uuid,
const std::string& name) :
const LLUUID& uuid,
const std::string& name) :
LLTaskInvFVBridge(panel, uuid, name) {}
};

View File

@@ -5484,6 +5484,8 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
gGL.matrixMode(LLRender::MM_MODELVIEW);
gGL.pushMatrix();
gGL.pushUIMatrix();
gGL.loadUIIdentity();
gGL.loadIdentity();
gGL.loadMatrix(OGL_TO_CFR_ROTATION); // Load Cory's favorite reference frame
gGL.translatef(-hud_bbox.getCenterLocal().mV[VX] + (depth *0.5f), 0.f, 0.f);
@@ -5576,6 +5578,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
gGL.matrixMode(LLRender::MM_MODELVIEW);
gGL.popMatrix();
gGL.popUIMatrix();
stop_glerror();
}
@@ -5898,8 +5901,8 @@ void pushWireframe(LLDrawable* drawable)
if (drawable->isState(LLDrawable::RIGGED))
{
vobj->updateRiggedVolume();
volume = vobj->getRiggedVolume();
vobj->updateRiggedVolume();
volume = vobj->getRiggedVolume();
}
else
{
@@ -5941,6 +5944,8 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color)
gDebugProgram.bind();
}
static LLCachedControl<U32> mode("OutlineMode",0);
gGL.matrixMode(LLRender::MM_MODELVIEW);
gGL.pushMatrix();
@@ -5961,10 +5966,12 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color)
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
//Singu Note: Diverges from v3. If sRenderHiddenSelections set, draw non-z-culled wireframe, else draw occluded 'thick' wireframe to create an outline.
if (LLSelectMgr::sRenderHiddenSelections) // && gFloaterTools && gFloaterTools->getVisible())
{
gGL.blendFunc(LLRender::BF_SOURCE_COLOR, LLRender::BF_ONE);
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL);
if (shader)
{
gGL.diffuseColor4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f);
@@ -5986,18 +5993,21 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color)
pushWireframe(drawable);
}
}
gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
else
{
LLGLEnable cull_face(GL_CULL_FACE);
LLGLEnable offset(GL_POLYGON_OFFSET_LINE);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
gGL.diffuseColor4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2);
glPolygonOffset(3.f, 3.f);
glLineWidth(3.f);
pushWireframe(drawable);
glLineWidth(1.f);
}
gGL.flush();
gGL.setSceneBlendType(LLRender::BT_ALPHA);
gGL.diffuseColor4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2);
LLGLEnable offset(GL_POLYGON_OFFSET_LINE);
glPolygonOffset(3.f, 3.f);
glLineWidth(3.f);
pushWireframe(drawable);
glLineWidth(1.f);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
gGL.popMatrix();
@@ -6053,6 +6063,9 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
gGL.matrixMode(LLRender::MM_MODELVIEW);
gGL.pushMatrix();
gGL.pushUIMatrix();
gGL.loadUIIdentity();
if (!is_hud_object)
{
gGL.loadIdentity();
@@ -6169,6 +6182,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
gGL.flush();
}
gGL.popMatrix();
gGL.popUIMatrix();
if (shader)
{

View File

@@ -1103,6 +1103,7 @@ LLTextureCtrl::LLTextureCtrl(
LLFontGL::getFontSansSerifSmall() );
mTentativeLabel->setHAlign( LLFontGL::HCENTER );
mTentativeLabel->setFollowsAll();
mTentativeLabel->setMouseOpaque(FALSE);
addChild( mTentativeLabel );
LLRect border_rect(0, getRect().getHeight(), getRect().getWidth(), 0);

View File

@@ -31,8 +31,8 @@
*/
#include "llviewerprecompiledheaders.h"
#include "llviewermessage.h"
#include <boost/lexical_cast.hpp>
#include <deque>
@@ -78,7 +78,6 @@
#include "llviewercontrol.h"
#include "lldrawpool.h"
#include "llfirstuse.h"
#include "llfloateractivespeakers.h"
#include "llfloateranimpreview.h"
#include "llfloaterbuycurrency.h"
#include "llfloaterbuyland.h"
@@ -115,6 +114,7 @@
#include "llstatenums.h"
#include "llstatusbar.h"
#include "llimview.h"
#include "llfloateractivespeakers.h"
#include "lltexturestats.h"
#include "lltool.h"
#include "lltoolbar.h"
@@ -127,14 +127,13 @@
#include "llviewerdisplay.h"
#include "llviewerfoldertype.h"
#include "llviewergenericmessage.h"
#include "llviewermenu.h"
#include "llviewerinventory.h"
#include "llviewerjoystick.h"
#include "llviewermenu.h"
#include "llviewerobject.h"
#include "llviewerobjectlist.h"
#include "llviewerparcelmgr.h"
#include "llviewerpartsource.h"
#include "llviewerregion.h"
#include "llviewerstats.h"
#include "llviewertexteditor.h"
#include "llviewerthrottle.h"
@@ -148,6 +147,7 @@
#include "llfloaterworldmap.h"
#include "llviewerdisplay.h"
#include "llkeythrottle.h"
#include "llviewerregion.h"
// <edit>
#include "llviewernetwork.h"
// </edit>
@@ -336,7 +336,9 @@ void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_
}
else
{
LLFloaterBuyCurrency::buyCurrency("Giving", amount);
LLStringUtil::format_map_t args;
args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
LLFloaterBuyCurrency::buyCurrency( LLTrans::getString("giving", args)+" ", amount );
}
}
@@ -399,12 +401,10 @@ void process_layer_data(LLMessageSystem *mesgsys, void **user_data)
{
LLViewerRegion *regionp = LLWorld::getInstance()->getRegion(mesgsys->getSender());
if (!regionp || gNoRender)
if(!regionp || gNoRender)
{
return;
}
S32 size;
S8 type;
@@ -796,6 +796,7 @@ static void highlight_inventory_objects_in_panel(const std::vector<LLUUID>& item
}
}
}
static LLNotificationFunctorRegistration jgr_1("JoinGroup", join_group_response);
static LLNotificationFunctorRegistration jgr_2("JoinedTooManyGroupsMember", join_group_response);
static LLNotificationFunctorRegistration jgr_3("JoinGroupCanAfford", join_group_response);
@@ -1160,21 +1161,29 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
{
// Use the name of the last item giver, who is probably the person
// spamming you.
std::ostringstream message;
message << LLAppViewer::instance()->getSecondLifeTitle();
LLStringUtil::format_map_t arg;
std::string log_msg;
std::ostringstream time ;
time<<OFFER_THROTTLE_TIME;
arg["APP_NAME"] = LLAppViewer::instance()->getSecondLifeTitle();
arg["TIME"] = time.str();
if (!from_name.empty())
{
message << ": Items coming in too fast from " << from_name;
arg["FROM_NAME"] = from_name;
log_msg = LLTrans::getString("ItemsComingInTooFastFrom", arg);
}
else
{
message << ": Items coming in too fast";
log_msg = LLTrans::getString("ItemsComingInTooFast", arg);
}
message << ", automatic preview disabled for "
<< OFFER_THROTTLE_TIME << " seconds.";
chat.mText = message.str();
chat.mText = log_msg;
//this is kinda important, so actually put it on screen
LLFloaterChat::addChat(chat, FALSE, FALSE);
throttle_logged=true;
}
return false;
@@ -1186,7 +1195,7 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
}
}
}
void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name)
{
uuid_vec_t::const_iterator it = items.begin();
@@ -1321,7 +1330,7 @@ void inventory_offer_mute_callback(const LLUUID& blocked_id,
{
public:
OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {}
BOOL matches(const LLNotificationPtr notification) const
bool matches(const LLNotificationPtr notification) const
{
if(notification->getName() == "ObjectGiveItem"
|| notification->getName() == "ObjectGiveItemUnknownUser"
@@ -1701,7 +1710,7 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
}
// [/RLVa:KB]
}
LLSD args;
args["[OBJECTNAME]"] = msg;
@@ -1711,7 +1720,9 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
std::string typestr = ll_safe_string(LLAssetType::lookupHumanReadable(info->mType));
if (!typestr.empty())
{
args["OBJECTTYPE"] = typestr;
// human readable matches string name from strings.xml
// lets get asset type localized name
args["OBJECTTYPE"] = LLTrans::getString(typestr);
}
else
{
@@ -1730,7 +1741,6 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
payload["from_id"] = info->mFromID;
args["OBJECTFROMNAME"] = info->mFromName;
args["NAME"] = info->mFromName;
if (info->mFromGroup)
{
std::string group_name;
@@ -1934,7 +1944,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
LLChat chat;
std::string buffer;
// *TODO:translate - need to fix the full name to first/last (maybe)
// *TODO: Translate - need to fix the full name to first/last (maybe)
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, from_id);
msg->getBOOLFast(_PREHASH_MessageBlock, _PREHASH_FromGroup, from_group);
msg->getUUIDFast(_PREHASH_MessageBlock, _PREHASH_ToAgentID, to_id);
@@ -1958,11 +1968,13 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
if((U32)std::abs(std::distance(iter, boost::sregex_iterator())) > SpamNewlines)
{
NACLAntiSpamRegistry::blockOnQueue((U32)NACLAntiSpamRegistry::QUEUE_IM,from_id);
llinfos << "[antispam] blocked owner due to too many newlines: " << from_id << llendl;
if(gSavedSettings.getBOOL("AntiSpamNotify"))
{
LLSD args;
args["MESSAGE"] = "Message: Blocked newline flood from "+from_id.asString();
LLNotificationsUtil::add("SystemMessageTip", args);
args["SOURCE"] = from_id.asString();
args["AMOUNT"] = boost::lexical_cast<std::string>(SpamNewlines);
LLNotificationsUtil::add("AntiSpamNewlineFlood", args);
}
return;
}
@@ -1999,7 +2011,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
BOOL is_muted = LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat);
BOOL is_linden = LLMuteList::getInstance()->isLinden(name);
BOOL is_owned_by_me = FALSE;
LLUUID computed_session_id = LLIMMgr::computeSessionID(dialog,from_id);
chat.mMuted = is_muted && !is_linden;
@@ -2438,7 +2450,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
case IM_MESSAGEBOX:
{
// This is a block, modeless dialog.
// *TODO:translate
// *TODO: Translate
args["MESSAGE"] = message;
LLNotificationsUtil::add("SystemMessage", args);
}
@@ -2598,7 +2610,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
return;
// NaCl End
LLOfferInfo* info = new LLOfferInfo;
if (IM_INVENTORY_OFFERED == dialog)
{
struct offer_agent_bucket_t
@@ -2642,19 +2653,12 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
info->mTransactionID = session_id;
info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType));
if (dialog == IM_TASK_INVENTORY_OFFERED)
{
info->mFromObject = TRUE;
}
else
{
info->mFromObject = FALSE;
}
info->mFromObject = (dialog == IM_TASK_INVENTORY_OFFERED);
info->mFromName = name;
info->mDesc = message;
info->mHost = msg->getSender();
//if (((is_busy && !is_owned_by_me) || is_muted))
if ( is_muted )
if (is_muted)
{
// Same as closing window
info->forceResponse(IOR_DECLINE);
@@ -2810,8 +2814,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
chat.mFromName = name;
// Build a link to open the object IM info window.
std::string location = ll_safe_string((char*)binary_bucket,binary_bucket_size);
std::string location = ll_safe_string((char*)binary_bucket, binary_bucket_size);
LLSD query_string;
query_string["owner"] = from_id;
query_string["slurl"] = location.c_str();
@@ -2819,7 +2823,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
if (from_group)
{
query_string["groupowned"] = "true";
}
}
if (session_id.notNull())
{
@@ -2932,7 +2936,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
// [/RLVa:KB]
LLSD args;
// *TODO:translate -> [FIRST] [LAST] (maybe)
// *TODO: Translate -> [FIRST] [LAST] (maybe)
args["NAME"] = name;
args["MESSAGE"] = message;
LLSD payload;
@@ -3085,7 +3089,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
else
{
args["[MESSAGE]"] = message;
LLNotificationsUtil::add("OfferFriendship", args, payload);
LLNotificationsUtil::add("OfferFriendship", args, payload);
}
}
}
@@ -3128,7 +3132,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
}
}
void busy_message (LLMessageSystem* msg, LLUUID from_id)
{
if (gAgent.getBusy())
@@ -3226,7 +3229,7 @@ void process_offer_callingcard(LLMessageSystem* msg, void**)
LLNameValue* nvlast = source->getNVPair("LastName");
if (nvfirst && nvlast)
{
args["NAME"] = LLCacheName::buildFullName(
source_name = LLCacheName::buildFullName(
nvfirst->getString(), nvlast->getString());
}
}
@@ -3241,6 +3244,7 @@ void process_offer_callingcard(LLMessageSystem* msg, void**)
}
else
{
args["NAME"] = source_name;
LLNotificationsUtil::add("OfferCallingCard", args, payload);
}
}
@@ -3355,7 +3359,7 @@ class AuthHandler : public HippoRestHandlerRaw
void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
{
LLChat chat;
LLChat chat;
std::string mesg;
std::string from_name;
U8 source_temp;
@@ -3376,19 +3380,15 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
msg->getUUID("ChatData", "SourceID", from_id);
chat.mFromID = from_id;
chatter = gObjectList.findObject(from_id);
if(chatter)
if(chatter && chatter->isAvatar())
{
if(chatter->isAvatar())
{
((LLVOAvatar*)chatter)->mIdleTimer.reset();
}
((LLVOAvatar*)chatter)->mIdleTimer.reset();
}
// Object owner for objects
msg->getUUID("ChatData", "OwnerID", owner_id);
msg->getU8Fast(_PREHASH_ChatData, _PREHASH_SourceType, source_temp);
chat.mSourceType = (EChatSourceType)source_temp;
@@ -3450,7 +3450,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
LLSD args;
args["NAME"] = from_name;
chat.mPosAgent = chatter->getPositionAgent();
// Make swirly things only for talking objects. (not script debug messages, though)
// if (chat.mSourceType == CHAT_SOURCE_OBJECT
// && chat.mChatType != CHAT_TYPE_DEBUG_MSG
@@ -3907,7 +3907,7 @@ void process_teleport_start(LLMessageSystem *msg, void**)
//if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL)
// [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | Added: RLVa-0.2.0b
if ( (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL) || (!gRlvHandler.getCanCancelTp()) )
if ( (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL) || (!gRlvHandler.getCanCancelTp()) )
// [/RLVa:KB]
{
gViewerWindow->setProgressCancelButtonVisible(FALSE);
@@ -3927,6 +3927,7 @@ void process_teleport_start(LLMessageSystem *msg, void**)
make_ui_sound("UISndTeleportOut");
LL_INFOS("Messaging") << "Teleport initiated by remote TeleportStart message with TeleportFlags: " << teleport_flags << LL_ENDL;
// Don't call LLFirstUse::useTeleport here because this could be
// due to being killed, which would send you home, not to a Telehub
}
@@ -4160,7 +4161,7 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
// Make sure we're standing
gAgent.standUp();
// now, use the circuit info to tell simulator about us!
LL_INFOS("Messaging") << "process_teleport_finish() Enabling "
<< sim_host << " with code " << msg->mOurCircuitCode << LL_ENDL;
@@ -4294,14 +4295,15 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
gAgent.sendAgentSetAppearance();
// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a)
if ( (isAgentAvatarValid()) && (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) )
if (isAgentAvatarValid() && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
// [/RLVa:KB]
// if (avatarp)
// if (isAgentAvatarValid())
{
// Chat the "back" SLURL. (DEV-4907)
LLChat chat("Teleport completed from " + gAgent.getTeleportSourceSLURL());
LLChat chat(LLTrans::getString("completed_from") + " " + gAgent.getTeleportSourceSLURL());
chat.mSourceType = CHAT_SOURCE_SYSTEM;
LLFloaterChat::addChatHistory(chat);
LLFloaterChat::addChatHistory(chat);
// Set the new position
gAgentAvatarp->setPositionAgent(agent_pos);
@@ -4314,7 +4316,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
}
else
{
// This is likely just the initial logging in phase.
// This is initial log-in or a region crossing
gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
if(LLStartUp::getStartupState() < STATE_STARTED)
@@ -4529,6 +4531,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
// </edit>
MASK key_mask = gKeyboard->currentMask(TRUE);
if (key_mask & MASK_ALT || key_mask & MASK_CONTROL)
{
control_flags &= ~( AGENT_CONTROL_LBUTTON_DOWN |
@@ -4557,7 +4560,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
control_flag_change != 0 ||
flag_change != 0)
{
/*
/*
if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT)
{
//LL_INFOS("Messaging") << "head rot " << head_rotation << LL_ENDL;
@@ -4579,7 +4582,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
{
LL_INFOS("Messaging") << "dcf = " << control_flag_change << LL_ENDL;
}
*/
*/
duplicate_count = 0;
}
@@ -4918,7 +4921,7 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
if(owner_id != gAgent.getID() || !gSavedSettings.getBOOL("EnableGestureSoundsSelf"))
return;
}
// <edit>
//gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global);
gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global, object_id);
@@ -5327,7 +5330,7 @@ void process_avatar_appearance(LLMessageSystem *mesgsys, void **user_data)
mesgsys->getUUIDFast(_PREHASH_Sender, _PREHASH_ID, uuid);
LLVOAvatar* avatarp = gObjectList.findAvatar(uuid);
if( avatarp )
if (avatarp)
{
avatarp->processAvatarAppearance( mesgsys );
}
@@ -5649,7 +5652,6 @@ void process_time_dilation(LLMessageSystem *msg, void **user_data)
*/
void process_money_balance_reply( LLMessageSystem* msg, void** )
{
S32 balance = 0;
@@ -5926,24 +5928,33 @@ void process_alert_core(const std::string& message, BOOL modal)
}
else
{
// *TODO:translate
args["MESSAGE"] = text;
std::string new_msg =LLNotifications::instance().getGlobalString(text);
args["MESSAGE"] = new_msg;
LLNotificationsUtil::add("SystemMessage", args);
}
}
else if (modal)
{
// *TODO:translate
LLSD args;
args["ERROR_MESSAGE"] = message;
std::string new_msg =LLNotifications::instance().getGlobalString(message);
args["ERROR_MESSAGE"] = new_msg;
LLNotificationsUtil::add("ErrorMessage", args);
}
else
{
// *TODO:translate
LLSD args;
args["MESSAGE"] = message;
LLNotificationsUtil::add("SystemMessageTip", args);
// Hack fix for EXP-623 (blame fix on RN :)) to avoid a sim deploy
const std::string AUTOPILOT_CANCELED_MSG("Autopilot canceled");
if (message.find(AUTOPILOT_CANCELED_MSG) == std::string::npos )
{
LLSD args;
std::string new_msg =LLNotifications::instance().getGlobalString(message);
std::string localized_msg;
bool is_message_localized = LLTrans::findString(localized_msg, new_msg);
args["MESSAGE"] = is_message_localized ? localized_msg : new_msg;
LLNotificationsUtil::add("SystemMessageTip", args);
}
}
}
@@ -6230,7 +6241,7 @@ bool script_question_cb(const LLSD& notification, const LLSD& response)
{
public:
OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {}
BOOL matches(const LLNotificationPtr notification) const
bool matches(const LLNotificationPtr notification) const
{
if (notification->getName() == "ScriptQuestionCaution"
|| notification->getName() == "ScriptQuestion")
@@ -6416,7 +6427,7 @@ void container_inventory_arrived(LLViewerObject* object,
// create a new inventory category to put this in
LLUUID cat_id;
cat_id = gInventory.createNewCategory(gInventory.getRootFolderID(),
LLFolderType::FT_NONE,
LLFolderType::FT_NONE,
LLTrans::getString("AcquiredItems"));
LLInventoryObject::object_list_t::const_iterator it = inventory->begin();
@@ -6524,6 +6535,9 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
std::string big_reason;
LLSD args;
// Let the interested parties know that teleport failed.
LLViewerParcelMgr::getInstance()->onTeleportFailed();
// if we have additional alert data
if (msg->has(_PREHASH_AlertInfo) && msg->getSizeFast(_PREHASH_AlertInfo, _PREHASH_Message) > 0)
{
@@ -6582,9 +6596,6 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
LLNotificationsUtil::add("CouldNotTeleportReason", args);
// Let the interested parties know that teleport failed.
LLViewerParcelMgr::getInstance()->onTeleportFailed();
if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
{
gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
@@ -6608,7 +6619,7 @@ void process_teleport_local(LLMessageSystem *msg,void**)
msg->getVector3Fast(_PREHASH_Info, _PREHASH_Position, pos);
msg->getVector3Fast(_PREHASH_Info, _PREHASH_LookAt, look_at);
msg->getU32Fast(_PREHASH_Info, _PREHASH_TeleportFlags, teleport_flags);
if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
{
if( gAgent.getTeleportState() == LLAgent::TELEPORT_LOCAL )
@@ -6782,6 +6793,7 @@ void handle_lure(const uuid_vec_t& ids)
if (ids.empty()) return;
if (!gAgent.getRegion()) return;
LLSD edit_args;
// [RLVa:KB] - Version: 1.23.4 | Checked: 2009-07-04 (RLVa-1.0.0a)
edit_args["REGION"] =
@@ -6909,6 +6921,7 @@ const char* SCRIPT_DIALOG_HEADER = "Script Dialog:\n";
bool callback_script_dialog(const LLSD& notification, const LLSD& response)
{
LLNotificationForm form(notification["form"]);
std::string button = LLNotification::getSelectedOptionName(response);
S32 button_idx = LLNotification::getSelectedOption(notification, response);
// Didn't click "Ignore"
@@ -6954,7 +6967,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
return;
// NaCl End
// For compability with OS grids first check for presence of extended packet before fetching data.
// For compability with OS grids first check for presence of extended packet before fetching data.
LLUUID owner_id;
if (gMessageSystem->getNumberOfBlocks("OwnerData") > 0)
{
@@ -6974,12 +6987,12 @@ void process_script_dialog(LLMessageSystem* msg, void**)
std::string message;
std::string first_name;
std::string last_name;
std::string title;
std::string object_name;
S32 chat_channel;
msg->getString("Data", "FirstName", first_name);
msg->getString("Data", "LastName", last_name);
msg->getString("Data", "ObjectName", title);
msg->getString("Data", "ObjectName", object_name);
msg->getString("Data", "Message", message);
msg->getS32("Data", "ChatChannel", chat_channel);
@@ -7017,7 +7030,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
}
else
{
for (i = 1; i < button_count; i++)
for (i = 1; i < button_count; i++)
{
std::string tdesc;
msg->getString("Buttons", "ButtonLabel", tdesc, i);
@@ -7026,7 +7039,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
}
LLSD args;
args["TITLE"] = title;
args["TITLE"] = object_name;
args["MESSAGE"] = message;
// <edit>
args["CHANNEL"] = chat_channel;
@@ -7090,7 +7103,7 @@ void callback_load_url_name(const LLUUID& id, const std::string& full_name, bool
std::string owner_name;
if (is_group)
{
owner_name = full_name + " (group)";
owner_name = full_name + LLTrans::getString("Group");
}
else
{
@@ -7220,7 +7233,7 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
return;
// NaCl End
if (!gSavedSettings.getBOOL("ScriptsCanShowUI")) return;
std::string object_name;
std::string sim_name;
LLVector3 pos;
@@ -7292,11 +7305,11 @@ void process_covenant_reply(LLMessageSystem* msg, void**)
if (estate_owner_id.isNull())
{
// mainland
covenant_text = "There is no Covenant provided for this Estate.";
covenant_text = LLTrans::getString("RegionNoCovenant");
}
else
{
covenant_text = "There is no Covenant provided for this Estate. The land on this estate is being sold by the Estate owner, not Linden Lab. Please contact the Estate Owner for sales details.";
covenant_text = LLTrans::getString("RegionNoCovenantOtherOwner");
}
LLPanelEstateCovenant::updateCovenantText(covenant_text, covenant_id);
LLPanelLandCovenant::updateCovenantText(covenant_text);
@@ -7432,3 +7445,4 @@ void LLOfferInfo::forceResponse(InventoryOfferResponse response)
params.functor(boost::bind(&LLOfferInfo::inventory_offer_callback, this, _1, _2));
LLNotifications::instance().forceResponse(params, response);
}

View File

@@ -576,10 +576,10 @@ void LLViewerShaderMgr::setShaders()
//Flag base shader objects for deletion
//Don't worry-- they won't be deleted until no programs refrence them.
std::map<std::string, GLhandleARB>::iterator it = mShaderObjects.begin();
std::multimap<std::string, LLShaderMgr::CachedObjectInfo >::iterator it = mShaderObjects.begin();
for(; it!=mShaderObjects.end();++it)
if(it->second)
glDeleteObjectARB(it->second);
if(it->second.mHandle)
glDeleteObjectARB(it->second.mHandle);
mShaderObjects.clear();
}
else

View File

@@ -2099,7 +2099,9 @@ LLViewerObject* LLVOAvatar::lineSegmentIntersectRiggedAttachments(const LLVector
LLVector3* normal,
LLVector3* bi_normal)
{
if (isSelf() && !gAgent.needsRenderAvatar())
static const LLCachedControl<bool> allow_mesh_picking("SGAllowRiggedMeshSelection");
if (!allow_mesh_picking || (isSelf() && !gAgent.needsRenderAvatar()))
{
return NULL;
}

View File

@@ -1605,9 +1605,13 @@ S32 LLVOVolume::setTEColor(const U8 te, const LLColor4& color)
}
else if (color != tep->getColor())
{
if (color.mV[3] != tep->getColor().mV[3])
F32 old_alpha = tep->getColor().mV[3];
if ((color.mV[3] != old_alpha) && (color.mV[3] == 1.f || old_alpha == 1.f))
{
gPipeline.markTextured(mDrawable);
//treat this alpha change as an LoD update since render batches may need to get rebuilt
mLODChanged = TRUE;
gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, FALSE);
}
retval = LLPrimitive::setTEColor(te, color);
if (mDrawable.notNull() && retval)
@@ -2827,10 +2831,11 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
if (mDrawable->isState(LLDrawable::RIGGED))
{
if (gFloaterTools->getVisible() && getAvatar()->isSelf())
static const LLCachedControl<bool> allow_mesh_picking("SGAllowRiggedMeshSelection");
if (allow_mesh_picking && gFloaterTools->getVisible() && getAvatar()->isSelf())
{
updateRiggedVolume();
genBBoxes(FALSE);
//genBBoxes(FALSE);
volume = mRiggedVolume;
transform = false;
}

View File

@@ -177,8 +177,7 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID
else
{
LLSD args;
// *TODO:translate
args["TYPE"] = LLAssetType::lookupHumanReadable(data->mAssetType);
args["TYPE"] =LLTrans::getString(LLAssetType::lookupHumanReadable(data->mAssetType));
if (isNewWearable)
{
LLNotificationsUtil::add("InvalidWearable");
@@ -230,7 +229,7 @@ LLWearable* LLWearableList::createNewWearable( LLWearableType::EType type )
LLWearable *wearable = generateNewWearable();
wearable->setType( type );
std::string name = LLWearableType::getTypeDefaultNewName(wearable->getType());
std::string name = LLTrans::getString( LLWearableType::getTypeDefaultNewName(wearable->getType()) );
wearable->setName( name );
LLPermissions perm;

View File

@@ -154,6 +154,10 @@
</panel>
<panel border="true" bottom="-363" follows="left|top|right|bottom" height="347"
label="Objects" left="1" mouse_opaque="false" name="objects" width="398">
<string
name="no_target">
(no target)
</string>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-20" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"

View File

@@ -7,49 +7,4 @@
<tab_container border="false" bottom="-422" enabled="true" follows="left|top|right|bottom"
height="406" left="1" mouse_opaque="false" name="Preview Tabs"
tab_position="bottom" width="417" />
<string name="only_user_message">
You are the only user in this session.
</string>
<string name="offline_message">
[NAME] is offline.
</string>
<string name="invite_message">
Click the [BUTTON NAME] button to accept/connect to this voice chat.
</string>
<string name="muted_message">
You have muted this resident. Sending a message will automatically unmute them.
</string>
<string name="generic_request_error">
Error making request, please try again later.
</string>
<string name="insufficient_perms_error">
You do not have sufficient permissions.
</string>
<string name="session_does_not_exist_error">
The session no longer exists
</string>
<string name="no_ability_error">
You do not have that ability.
</string>
<string name="not_a_mod_error">
You are not a session moderator.
</string>
<string name="muted_error">
A group moderator disabled your text chat.
</string>
<!-- ALL of the event strings should have [RECIPIENT] in them -->
<string name="add_session_event">
Unable to add users to chat session with [RECIPIENT].
</string>
<string name="message_session_event">
Unable to send your message to the chat session with [RECIPIENT].
</string>
<string name="removed_from_group">
You have been removed from the group.
</string>
<string name="close_on_no_ability">
You no longer have the ability to be in the chat session.
</string>
</multi_floater>

View File

@@ -17,7 +17,7 @@
<check_box bottom="-37" follows="top" height="20" left_delta="80" name="rp_mode">RP Mode</check_box>
<button bottom="-37" follows="left|top" height="20" image_overlay="icn_voice-call-start.tga" image_overlay_alignment="left" label="Call" left_delta="80" name="start_call_btn" width="80"/>
<button bottom="-37" follows="top" height="20" image_overlay="icn_voice-call-end.tga" image_overlay_alignment="left" label="End" name="end_call_btn" visible="false" width="80"/>
<panel border="false" bottom="-34" follows="left|top" height="20" left_delta="50" name="speaker_controls" width="100">
<panel border="false" bottom="-34" follows="left|top" height="20" left_delta="80" name="speaker_controls" width="100">
<volume_slider bottom="0" follows="bottom" height="15" increment="0.05" initial_val="0.5" max_val="1.0" min_val="0.0" name="speaker_volume" width="56"/>
<button bottom="0" height="20" image_selected="icn_speaker-muted_dark.tga" image_unselected="icn_speaker_dark.tga" scale_image="false" label="" left_delta="56" name="mute_btn" tool_tip="Mute voice" width="25"/>
</panel>

View File

@@ -9,7 +9,7 @@
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-110" drop_shadow_visible="true" enabled="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="center" height="14" left="4"
mouse_opaque="true" name="Multiple" v_pad="0" width="163">
mouse_opaque="false" name="Multiple" v_pad="0" width="163">
Multiple
</text>
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"

View File

@@ -3346,6 +3346,87 @@ You are no longer frozen.
</form>
</notification>
<notification
icon="alertmodal.tga"
name="SetDisplayNameSuccess"
type="alert">
Hi [DISPLAY_NAME]!
Just like in real life, it takes a while for everyone to learn about a new name. Please allow several days for [http://wiki.secondlife.com/wiki/Setting_your_display_name your name to update] in objects, scripts, search, etc.
</notification>
<notification
icon="alertmodal.tga"
name="SetDisplayNameBlocked"
type="alert">
Sorry, you cannot change your display name. If you feel this is in error, please contact support.
</notification>
<notification
icon="alertmodal.tga"
name="SetDisplayNameFailedLength"
type="alertmodal">
Sorry, that name is too long. Display names can have a maximum of [LENGTH] characters.
Please try a shorter name.
</notification>
<notification
icon="alertmodal.tga"
name="SetDisplayNameFailedGeneric"
type="alertmodal">
Sorry, we could not set your display name. Please try again later.
</notification>
<notification
icon="alertmodal.tga"
name="SetDisplayNameMismatch"
type="alertmodal">
The display names you entered do not match. Please re-enter.
</notification>
<!-- *NOTE: This should never happen -->
<notification
icon="alertmodal.tga"
name="AgentDisplayNameUpdateThresholdExceeded"
type="alertmodal">
Sorry, you have to wait longer before you can change your display name.
See http://wiki.secondlife.com/wiki/Setting_your_display_name
Please try again later.
</notification>
<notification
icon="alertmodal.tga"
name="AgentDisplayNameSetBlocked"
type="alertmodal">
Sorry, we could not set your requested name because it contains a banned word.
Please try a different name.
</notification>
<notification
icon="alertmodal.tga"
name="AgentDisplayNameSetInvalidUnicode"
type="alertmodal">
The display name you wish to set contains invalid characters.
</notification>
<notification
icon="alertmodal.tga"
name="AgentDisplayNameSetOnlyPunctuation"
type="alertmodal">
Your display name must contain letters other than punctuation.
</notification>
<notification
icon="notifytip.tga"
name="DisplayNameUpdate"
type="notifytip">
[OLD_NAME] ([SLID]) is now known as [NEW_NAME].
</notification>
<notification
icon="alertmodal.tga"
name="OfferTeleport"
@@ -5488,7 +5569,7 @@ Topic: [SUBJECT], Message: [MESSAGE]
icon="notifytip.tga"
name="AddSelfFriend"
type="notifytip">
You cannot add yourself as a friend.
Although you're very nice, you cannot add yourself as a friend.
</notification>
<notification
@@ -5499,12 +5580,12 @@ Uploading in-world and web site snapshots...
(Takes about 5 minutes.)
</notification>
<notification
<notification
icon="notify.tga"
name="UploadPayment"
type="notify">
You paid [CURRENCY][AMOUNT] to upload.
</notification>
</notification>
<notification
icon="notifytip.tga"
@@ -5705,7 +5786,7 @@ Copy failed because you lack copy permission
icon="notifytip.tga"
name="InventoryAccepted"
type="notifytip">
[NAME] accepted your inventory offer.
[NAME] received your inventory offer.
</notification>
<notification
@@ -5857,13 +5938,13 @@ If you want to view streaming media on parcels that support it you should go to
icon="notify.tga"
name="NoPlugin"
type="notify">
No Media Plugin was found to handle the "[MIME_TYPE]" mime type. Media of this type will be unavailable.
No Media Plugin was found to handle the "[MIME_TYPE]" mime type. Media of this type will be unavailable.
</notification>
<notification
icon="alertmodal.tga"
name="MediaPluginFailed"
type="alertmodal">
The following Media Plugin has failed:
The following Media Plugin has failed:
[PLUGIN]
Please re-install the plugin or contact the vendor if you continue to experience problems.
@@ -6000,6 +6081,7 @@ You cannot create objects here.
yestext="OK"
/>
</notification>
<notification
icon="notify.tga"
name="SeeAvatars"
@@ -6128,7 +6210,7 @@ Could not teleport closer to destination.
icon="notify.tga"
name="TPCancelled"
type="notify">
Teleport cancelled.
Teleport cancelled.
</notification>
<notification
@@ -6503,7 +6585,7 @@ Failed to find [TYPE] named [DESC] in database.
icon="notify.tga"
name="InvalidWearable"
type="notify">
The item you are trying to wear uses a feature that your viewer can&apos;t read. Please consider using the latest [APP_NAME].
The item you are trying to wear uses a feature that your Viewer can&apos;t read. Please consider using the latest [APP_NAME].
</notification>
<notification
@@ -7135,10 +7217,6 @@ You uploaded a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] second
You locally updated a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] seconds.
</notification>
<global name="UnsupportedCPU">
- Your CPU speed does not meet the minimum requirements.
</global>
<notification
icon="alertmodal.tga"
name="PathfindingLinksets_ChangeToFlexiblePath"
@@ -7152,123 +7230,6 @@ You locally updated a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME]
yestext="OK"/>
</notification>
<global name="UnsupportedGLRequirements">
You do not appear to have the proper hardware requirements for [APP_NAME]. The viewer requires an OpenGL graphics card that has multitexture support. If this is the case, you may want to make sure that you have the latest drivers for your graphics card, and service packs and patches for your operating system.
</global>
<global name="UnsupportedCPUSSE2">
You do not appear to have the proper hardware requirements for [APP_NAME]. The viewer requires a CPU that supports SSE2
</global>
<global name="UnsupportedCPUSSE">
You do not appear to have the proper hardware requirements for [APP_NAME]. The viewer requires a CPU that supports SSE
</global>
<global name="UnsupportedCPUAmount">
796
</global>
<global name="UnsupportedRAMAmount">
510
</global>
<global name="UnsupportedGPU">
- Your graphics card does not meet the minimum requirements.
</global>
<global name="UnsupportedRAM">
- Your system memory does not meet the minimum requirements.
</global>
<global name="PermYes">
Yes
</global>
<global name="PermNo">
No
</global>
<notification
icon="alertmodal.tga"
name="SetDisplayNameSuccess"
type="alert">
Hi [DISPLAY_NAME]!
Just like in real life, it takes a while for everyone to learn about a new name. Please allow several days for [http://wiki.secondlife.com/wiki/Setting_your_display_name your name to update] in objects, scripts, search, etc.
</notification>
<notification
icon="alertmodal.tga"
name="SetDisplayNameBlocked"
type="alert">
Sorry, you cannot change your display name. If you feel this is in error, please contact support.
</notification>
<notification
icon="alertmodal.tga"
name="SetDisplayNameFailedLength"
type="alertmodal">
Sorry, that name is too long. Display names can have a maximum of [LENGTH] characters.
Please try a shorter name.
</notification>
<notification
icon="alertmodal.tga"
name="SetDisplayNameFailedGeneric"
type="alertmodal">
Sorry, we could not set your display name. Please try again later.
</notification>
<notification
icon="alertmodal.tga"
name="SetDisplayNameMismatch"
type="alertmodal">
The display names you entered do not match. Please re-enter.
</notification>
<!-- *NOTE: This should never happen -->
<notification
icon="alertmodal.tga"
name="AgentDisplayNameUpdateThresholdExceeded"
type="alertmodal">
Sorry, you have to wait longer before you can change your display name.
See http://wiki.secondlife.com/wiki/Setting_your_display_name
Please try again later.
</notification>
<notification
icon="alertmodal.tga"
name="AgentDisplayNameSetBlocked"
type="alertmodal">
Sorry, we could not set your requested name because it contains a banned word.
Please try a different name.
</notification>
<notification
icon="alertmodal.tga"
name="AgentDisplayNameSetInvalidUnicode"
type="alertmodal">
The display name you wish to set contains invalid characters.
</notification>
<notification
icon="alertmodal.tga"
name="AgentDisplayNameSetOnlyPunctuation"
type="alertmodal">
Your display name must contain letters other than punctuation.
</notification>
<notification
icon="notifytip.tga"
name="DisplayNameUpdate"
type="notifytip">
[OLD_NAME] ([SLID]) is now known as [NEW_NAME].
</notification>
<notification
icon="notify.tga"
name="FirstAO"
@@ -7276,13 +7237,6 @@ No
For instructions, make a new template in the AO. Use the toolbar to toggle the AO on/off.
</notification>
<notification icon="notifytip.tga" name="BlockedCards" type="notifytip">Blocked calling cards from [NAME] ([SOURCE])</notification>
<notification icon="notifytip.tga" name="BlockedDialogs" type="notifytip">Blocking all dialogs from [NAME]'s objects. (Origin: [SOURCE])</notification>
<notification icon="notifytip.tga" name="BlockedGeneralAvatar" type="notifytip">Blocked spam from avatar [NAME] ([SOURCE])</notification>
<notification icon="notifytip.tga" name="BlockedGeneralObjects" type="notifytip">Blocked spam from objects owned by [OWNER] ([SOURCE])</notification>
<notification icon="notifytip.tga" name="BlockedChatterAvatar" type="notifytip">Blocked chat-spam from avatar [NAME] ([SOURCE])</notification>
<notification icon="notifytip.tga" name="BlockedChatterObjects" type="notifytip">Blocked chat-spam from objects owned by [OWNER] ([SOURCE])</notification>
<notification
icon="notify.tga"
name="FirstPhysicsWearable"
@@ -7405,5 +7359,60 @@ Only textures will upload as temporary on Agni and Aditi.
canceltext="Cancel"/>
</notification>
<global name="UnsupportedGLRequirements">
You do not appear to have the proper hardware requirements for [APP_NAME]. The viewer requires an OpenGL graphics card that has multitexture support. If this is the case, you may want to make sure that you have the latest drivers for your graphics card, and service packs and patches for your operating system.
</global>
<global name="UnsupportedCPUAmount">
796
</global>
<global name="UnsupportedRAMAmount">
510
</global>
<global name="UnsupportedCPU">
- Your CPU speed does not meet the minimum requirements.
</global>
<global name="UnsupportedCPUSSE2">
You do not appear to have the proper hardware requirements for [APP_NAME]. The viewer requires a CPU that supports SSE2
</global>
<global name="UnsupportedCPUSSE">
You do not appear to have the proper hardware requirements for [APP_NAME]. The viewer requires a CPU that supports SSE
</global>
<global name="UnsupportedGPU">
- Your graphics card does not meet the minimum requirements.
</global>
<global name="UnsupportedRAM">
- Your system memory does not meet the minimum requirements.
</global>
<!-- these are alert strings from server. the name needs to match entire the server string, and needs to be changed
whenever the server string changes -->
<global name="You can only set your 'Home Location' on your land or at a mainland Infohub.">
If you own a piece of land, you can make it your home location.
Otherwise, you can look at the Map and find places marked &quot;Infohub&quot;.
</global>
<global name="You died and have been teleported to your home location">
You died and have been teleported to your home location.
</global>
<notification
icon="notifytip.tga"
name="AntiSpamBlock"
type="notifytip">
AntiSpam: Blocked [SOURCE] for spamming [TYPE]s [AMOUNT] times in [TIME] seconds.
</notification>
<notification
icon="notifytip.tga"
name="AntiSpamNewlineFlood"
type="notifytip">
AntiSpam: Blocked newline flood from [SOURCE] (over [AMOUNT] newlines).
</notification>
</notifications>

View File

@@ -335,12 +335,12 @@
<button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20"
label="Delete..." label_selected="Delete..." left_delta="74"
mouse_opaque="true" name="Delete..." width="70" />
<!-- <button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20"
<button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20"
label="Import..." label_selected="Import..." left_delta="74"
mouse_opaque="true" name="Import..." width="70" />
<button bottom="-44" follows="left|top" font="SansSerif" halign="center" height="20"
label="Export..." label_selected="Export..." left_delta="74"
mouse_opaque="true" name="Export..." width="70" />-->
mouse_opaque="true" name="Export..." width="70" />
<tab_container bottom="-411" follows="left|top" height="363" left="4" mouse_opaque="false"
name="picks tab" tab_position="left" width="412" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"

View File

@@ -73,8 +73,8 @@
<check_box control_name="_NACL_AntiSpamGlobalQueue" label="No messagetype-specific spam queues" name="spammsg_checkbox" width="256" left="6" bottom_delta="-20"/>
<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" bottom_delta="-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_AntiSpamSoundMulti" decimal_digits="0" increment="1" min_val="1" max_val="99999" label="Amount multiplier for sound plays:" 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 multiplier for sound preloads:" 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="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" bottom_delta="-22"/>
<check_box control_name="_NACL_Antispam" height="16" label="Disable -all- dialogs (resets on login)" name="antispam_checkbox" left="3"/>

View File

@@ -151,6 +151,45 @@
<string name="AssetErrorPriceMismatch">Viewer and server do not agree on price</string>
<string name="AssetErrorUnknownStatus">Unknown status</string>
<!-- Asset Type human readable names: these will replace variable [TYPE] in notification FailedToFindWearable* -->
<!-- Will also replace [OBJECTTYPE] in notifications: UserGiveItem, ObjectGiveItem -->
<!-- Also used by AntiSpamBlock notification for [TYPE], since this looks like a good place. -->
<string name="texture">texture</string>
<string name="sound">sound</string>
<string name="calling card">calling card</string>
<string name="Inventory">inventory</string>
<string name="Instant Message">instant message</string>
<string name="Script Dialog">script dialog</string>
<string name="Sound Preload">sound preload</string>
<string name="Teleport">teleport</string>
<string name="Unknown">unknown</string>
<string name="landmark">landmark</string>
<string name="legacy script">legacy script</string>
<string name="clothing">clothing</string>
<string name="object">object</string>
<string name="note card">notecard</string>
<string name="folder">folder</string>
<string name="root">root</string>
<string name="lsl2 script">LSL2 script</string>
<string name="lsl bytecode">LSL bytecode</string>
<string name="tga texture">tga texture</string>
<string name="body part">body part</string>
<string name="snapshot">snapshot</string>
<string name="lost and found">Lost and Found</string>
<string name="targa image">targa image</string>
<string name="trash">Trash</string>
<string name="jpeg image">jpeg image</string>
<string name="animation">animation</string>
<string name="gesture">gesture</string>
<string name="simstate">simstate</string>
<string name="favorite">favorite</string>
<string name="symbolic link">link</string>
<string name="symbolic folder link">folder link</string>
<string name="current outfit">current outfit</string>
<string name="outfit">outfit</string>
<string name="my outfits">my outfits</string>
<string name="mesh">mesh</string>
<!-- llvoavatar. Displayed in the avatar's chat bubble -->
<string name="AvatarEditingAppearance">(Editing Appearance)</string>
<string name="AvatarAway">Away</string>
@@ -234,12 +273,29 @@
<!-- world map -->
<string name="texture_loading">Loading...</string>
<string name="worldmap_offline">Offline</string>
<string name="worldmap_results_none_found">None found.</string>
<!-- animations uploading status codes -->
<string name="Ok">OK</string>
<!-- Chat -->
<string name="whisper">whispers:</string>
<string name="shout">shouts:</string>
<string name="ringing">Connecting to in-world Voice Chat...</string>
<string name="connected">Connected</string>
<string name="unavailable">Voice not available at your current location</string>
<string name="hang_up">Disconnected from in-world Voice Chat</string>
<string name="ScriptTakeMoney">Take currency from you</string>
<string name="ActOnControlInputs">Act on your control inputs</string>
<string name="RemapControlInputs">Remap your control inputs</string>
<string name="AnimateYourAvatar">Animate your avatar</string>
<string name="AttachToYourAvatar">Attach to your avatar</string>
<string name="ReleaseOwnership">Release ownership and become public</string>
<string name="LinkAndDelink">Link and delink from other objects</string>
<string name="AddAndRemoveJoints">Add and remove joints with other objects</string>
<string name="ChangePermissions">Change its permissions</string>
<string name="TrackYourCamera">Track your camera</string>
<string name="ControlYourCamera">Control your camera</string>
<string name="TeleportYourAgent">Teleport you</string>
<!-- Sim Access labels -->
<string name="SIM_ACCESS_PG">PG</string>
@@ -1204,7 +1260,7 @@ Returns the mean region frames per second
</string>
<string name="LSLTipText_llParticleSystem">
llParticleSystem(list rules)
Creates a particle system based on rules. An empty list removes the particle system.
Creates a particle system based on rules. An empty list removes the particle system.
List format is [ rule1, data1, rule2, data2 . . . rulen, datan ]
</string>
<string name="LSLTipText_llGroundRepel">
@@ -1241,7 +1297,7 @@ Removes the enabled bits in &apos;flags&apos;
</string>
<string name="LSLTipText_llSitTarget">
llSitTarget(vector offset, rotation rot)
Sets the sit location for the prim. If offset == &lt;0,0,0&gt; then the sit target is removed.
Sets the sit location for the prim. If offset == &lt;0,0,0&gt; then the sit target is removed.
</string>
<string name="LSLTipText_llAvatarOnSitTarget">
key llAvatarOnSitTarget()
@@ -1720,7 +1776,8 @@ Returns the media params for a particular face on an object, given the desired l
</string>
<string name="LSLTipText_llClearPrimMedia">
integer llClearPrimMedia(integer face)
Clears (deletes) the media and all params from the given face. </string>
Clears (deletes) the media and all params from the given face.
</string>
<string name="LSLTipText_llSetLinkPrimitiveParamsFast">
llSetLinkPrimitiveParamsFast(integer linknumber, list rules)
Set primitive parameters for linknumber based on rules with no built-in script sleep.
@@ -2811,10 +2868,14 @@ Where tag = tag string to match. Removes bot's matching the tag.
<string name="WornOnAttachmentPoint" value=" (worn on [ATTACHMENT_POINT])" />
<string name="LockedOnAttachmentPoint" value=" (locked to [ATTACHMENT_POINT])" />
<string name="ActiveGesture" value="[GESLABEL] (active)"/>
<!-- Inventory permissions -->
<string name="PermYes">Yes</string>
<string name="PermNo">No</string>
<!-- Gestures labels -->
<!-- use value="" because they have preceding spaces -->
<string name="Chat Message" value=" Chat : " />
<string name="Sound" value=" Sound : " />
<!-- use value="" because they have preceding spaces -->
<string name="Chat Message" value=" Chat : " />
<string name="Sound" value=" Sound : " />
<string name="Wait" value=" --- Wait : " />
<string name="AnimFlagStop" value=" Stop Animation : " />
<string name="AnimFlagStart" value=" Start Animation : " />
@@ -2845,6 +2906,7 @@ Where tag = tag string to match. Removes bot's matching the tag.
<!-- inventory FVBridge -->
<!-- This is used in llpanelinventory.cpp when constructing a context menu for an item for Sale -->
<string name="Buy">Buy</string>
<string name="Buyfor" value="Buy for "/><!-- Grid currency is appended automatically -->
<string name="Stone">Stone</string>
<string name="Metal">Metal</string>
@@ -2877,7 +2939,44 @@ Where tag = tag string to match. Removes bot's matching the tag.
<string name="SaveComplete">Save complete.</string>
<string name="ObjectOutOfRange">Script (object out of range)</string>
<!-- god tools -->
<string name="GodToolsObjectOwnedBy">Object [OBJECT] owned by [OWNER]</string>
<!-- groups -->
<string name="Group" value=" (group)" />
<string name="Unknown">(Unknown)</string>
<string name="SummaryForTheWeek" value="Summary for this week, beginning on " />
<string name="NextStipendDay" value="The next stipend day is " />
<string name="GroupIndividualShare" value=" Group Individual Share" />
<string name="GroupColumn" value=" Group" />
<!-- floater IM bonus_info: When a Linden with Admin/god status receives a new IM this displays the estate (Mainland vs. teen grid) of the source avatar.
This is to help Lindens when answering questions. -->
<string name="IMParentEstate">parent estate</string>
<string name="IMMainland">mainland</string>
<string name="IMTeen">teen</string>
<!-- floater region info -->
<!-- The following will replace variable [ALL_ESTATES] in notifications EstateAllowed*, EstateBanned*, EstateManager* -->
<string name="RegionInfoError">error</string>
<string name="RegionInfoAllEstatesOwnedBy">
all estates owned by [OWNER]
</string>
<string name="RegionInfoAllEstatesYouOwn">all estates that you own</string>
<string name="RegionInfoAllEstatesYouManage">
all estates that you manage for [OWNER]
</string>
<string name="RegionInfoAllowedResidents">Allowed Residents: ([ALLOWEDAGENTS], max [MAXACCESS])</string>
<string name="RegionInfoAllowedGroups">Allowed groups: ([ALLOWEDGROUPS], max [MAXACCESS])</string>
<!-- panel contents -->
<string name="PanelContentsNewScript">New Script</string>
<!-- Region/Estate Covenant -->
<string name="RegionNoCovenant">There is no Covenant provided for this Estate.</string>
<string name="RegionNoCovenantOtherOwner">There is no Covenant provided for this Estate. The land on this estate is being sold by the Estate owner, not Linden Lab. Please contact the Estate Owner for sales details.</string>
<string name="none_text" value=" (none) " />
<!-- Environment settings -->
<string name="Local">Local</string>
<string name="LocalSettings">Local Settings</string>
@@ -2893,6 +2992,18 @@ Where tag = tag string to match. Removes bot's matching the tag.
<string name="InvOfferGaveYou">gave you</string>
<string name="InvOfferDecline">You decline [DESC] from [NAME].</string>
<!-- group money -->
<string name="GroupMoneyTotal">Total</string>
<string name="GroupMoneyBought">bought</string>
<string name="GroupMoneyPaidYou">paid you</string>
<string name="GroupMoneyPaidInto">paid into</string>
<string name="GroupMoneyBoughtPassTo">bought pass to</string>
<string name="GroupMoneyPaidFeeForEvent">paid fee for event</string>
<string name="GroupMoneyPaidPrizeForEvent">paid prize for event</string>
<string name="GroupMoneyBalance">Balance</string>
<string name="GroupMoneyCredits">Credits</string>
<string name="GroupMoneyDebits">Debits</string>
<!-- Viewer menu -->
<string name="AcquiredItems">Acquired Items</string>
<string name="Cancel">Cancel</string>
@@ -3575,12 +3686,16 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="Wild">Wild</string>
<string name="Wrinkles">Wrinkles</string>
<!-- System Messages -->
<string name="ItemsComingInTooFastFrom">[APP_NAME]: Items coming in too fast from [FROM_NAME], automatic preview disabled for [TIME] seconds.</string>
<string name="ItemsComingInTooFast">[APP_NAME]: Items coming in too fast, automatic preview disabled for [TIME] seconds.</string>
<!-- IM system messages -->
<string name="IM_announce_incoming">has begun an IM session with you.</string>
<string name="IM_autoresponded_to">Autoresponse sent to</string>
<string name="IM_autoresponse_sent_item">was sent auto-response item</string>
<string name="Unnamed">(Unnamed)</string>
<string name="Saved_message">(Saved [LONG_TIMESTAMP]) </string>
<string name="Saved_message" value="(Saved [LONG_TIMESTAMP]) "/>
<string name="PowerUser1">You are bestowed with powers beyond mortal comprehension.</string>
<string name="PowerUser2">Use your newfound abilities wisely.</string>
<string name="Unlocked:">Unlocked:</string>
@@ -3589,6 +3704,110 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="PowerUser4">Destroy objects - Permanently deletes an object immediately, when you don't feel like waiting for the server to respond.</string>
<string name="PowerUser5">Explode objects - Turns an object physical, temporary, and delinks it.</string>
<!-- voice calls -->
<string name="ringing-im">
Joining voice call...
</string>
<string name="connected-im">
Connected, click Leave Call to hang up
</string>
<string name="hang_up-im">
Left voice call
</string>
<string name="answering-im">
Connecting...
</string>
<string name="inventory_item_offered-im">
Inventory item offered
</string>
<string name="only_user_message">
You are the only user in this session.
</string>
<string name="offline_message">
[NAME] is offline.
</string>
<string name="invite_message">
Click the [BUTTON NAME] button to accept/connect to this voice chat.
</string>
<string name="muted_message">
You have muted this Resident. Sending a message will automatically unmute them.
</string>
<!--Sometimes string name is gotten from the body of server response.
For ex.: from gIMMgr::showSessionStartError in the LLViewerChatterBoxSessionStartReply::post.
In case of the EXT-3115 issue 'generic' is passed into the gIMMgr::showSessionStartError as a string name.
Also there are some other places where "generic" is used.
So, let's add string with name="generic" with the same value as "generic_request_error" -->
<string name="generic">
Error making request, please try again later.
</string>
<string name="generic_request_error">
Error making request, please try again later.
</string>
<string name="insufficient_perms_error">
You do not have sufficient permissions.
</string>
<string name="session_does_not_exist_error">
The session no longer exists
</string>
<string name="no_ability_error">
You do not have that ability.
</string>
<string name="no_ability">
You do not have that ability.
</string>
<string name="not_a_mod_error">
You are not a session moderator.
</string>
<!--Sometimes string name is gotten from the body of server response.
For ex.: from gIMMgr::showSessionStartError in the LLViewerChatterBoxSessionStartReply::post.
In case of the EXT-3562 issue 'muted' is passed into the gIMMgr::showSessionStartError as a string name.
So, let's add string with name="muted" with the same value as "muted_error" -->
<string name="muted">
A group moderator disabled your text chat.
</string>
<string name="muted_error">
A group moderator disabled your text chat.
</string>
<string name="add_session_event">
Unable to add users to chat session with [RECIPIENT].
</string>
<!--Sometimes string name is gotten from the body of server response.
For ex.: from gIMMgr::showSessionStartError in the LLViewerChatterBoxSessionStartReply::post.
In case of the EXT-3562 issue 'message' is passed into the gIMMgr::showSessionStartError as a string name.
So, let's add string with name="message" with the same value as "message_session_event" -->
<string name="message">
Unable to send your message to the chat session with [RECIPIENT].
</string>
<string name="message_session_event">
Unable to send your message to the chat session with [RECIPIENT].
</string>
<string name="mute">
Error while moderating.
</string>
<!--Sometimes string name is gotten from the body of server response.
For ex.: from gIMMgr::showSessionStartError in the LLViewerChatterBoxSessionStartReply::post.
In case of the EXT-3459 issue 'removed' is passed into the gIMMgr::showSessionStartError as a string name.
So, let's add string with name="removed" with the same value as "removed_from_group" -->
<string name="removed">
You have been removed from the group.
</string>
<string name="removed_from_group">
You have been removed from the group.
</string>
<string name="close_on_no_ability">
You no longer have the ability to be in the chat session.
</string>
<string name="Home position set.">Home position set.</string>
<!-- Financial operations strings -->
<string name="this_costs">This costs [CURRENCY]</string>
<string name="giving">Giving [CURRENCY]</string>
<string name="group_role_everyone">Everyone</string>
<string name="group_role_officers">Officers</string>
<string name="group_role_owners">Owners</string>
@@ -3598,13 +3817,13 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="DefaultMimeType">none/none</string>
<string name="Chat">Chat</string>
<!-- External editor status codes -->
<string name="ExternalEditorNotSet">Select an editor using the ExternalEditor setting.</string>
<string name="ExternalEditorNotFound">Cannot find the external editor you specified.
<!-- External editor status codes -->
<string name="ExternalEditorNotSet">Select an editor using the ExternalEditor setting.</string>
<string name="ExternalEditorNotFound">Cannot find the external editor you specified.
Try enclosing path to the editor with double quotes.
(e.g. "/path to my/editor" "%s")</string>
<string name="ExternalEditorCommandParseError">Error parsing the external editor command.</string>
<string name="ExternalEditorFailedToRun">External editor failed to run.</string>
<string name="ExternalEditorCommandParseError">Error parsing the external editor command.</string>
<string name="ExternalEditorFailedToRun">External editor failed to run.</string>
<!-- Pathfinding -->
<string name="Pathfinding_Wiki_URL">http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer</string>
@@ -3616,4 +3835,7 @@ Try enclosing path to the editor with double quotes.
<string name="Left">Left</string>
<string name="Right">Right</string>
<!-- teleport_strings.xml's strings we need -->
<string name="completed_from">Teleport completed from</string>
</strings>