Merge remote-tracking branch 'singu/master' into curlthreading2
Conflicts: indra/llcommon/CMakeLists.txt Resolved with kdiff3 automatically.
This commit is contained in:
@@ -7,10 +7,8 @@ set(Boost_FIND_REQUIRED ON)
|
|||||||
if (STANDALONE)
|
if (STANDALONE)
|
||||||
include(FindBoost)
|
include(FindBoost)
|
||||||
|
|
||||||
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
|
set(Boost_USE_MULTITHREADED ON)
|
||||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
|
find_package(Boost 1.40.0 COMPONENTS date_time filesystem program_options regex system thread wave)
|
||||||
set(BOOST_REGEX_LIBRARY boost_regex-mt)
|
|
||||||
set(BOOST_SYSTEM_LIBRARY boost_system-mt)
|
|
||||||
else (STANDALONE)
|
else (STANDALONE)
|
||||||
use_prebuilt_binary(boost)
|
use_prebuilt_binary(boost)
|
||||||
set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
|
||||||
@@ -18,36 +16,36 @@ else (STANDALONE)
|
|||||||
if (WINDOWS)
|
if (WINDOWS)
|
||||||
set(BOOST_VERSION 1_45)
|
set(BOOST_VERSION 1_45)
|
||||||
|
|
||||||
# SNOW-788
|
# SNOW-788
|
||||||
# 00-Common.cmake alreay sets MSVC_SUFFIX to be correct for the VS we are using eg VC71, VC80, VC90 etc
|
# 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
|
# 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
|
# 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.
|
# boost libs are avaiable - RC.
|
||||||
|
|
||||||
if (MSVC71)
|
if (MSVC71)
|
||||||
set(BOOST_OPTIM_SUFFIX mt-s)
|
set(BOOST_OPTIM_SUFFIX mt-s)
|
||||||
set(BOOST_DEBUG_SUFFIX mt-sgd)
|
set(BOOST_DEBUG_SUFFIX mt-sgd)
|
||||||
else (MSVC71)
|
else (MSVC71)
|
||||||
set(BOOST_OPTIM_SUFFIX mt)
|
set(BOOST_OPTIM_SUFFIX mt)
|
||||||
set(BOOST_DEBUG_SUFFIX mt-gd)
|
set(BOOST_DEBUG_SUFFIX mt-gd)
|
||||||
endif (MSVC71)
|
endif (MSVC71)
|
||||||
|
|
||||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY
|
set(Boost_PROGRAM_OPTIONS_LIBRARY
|
||||||
optimized libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION}
|
optimized libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION}
|
||||||
debug libboost_program_options-vc${MSVC_SUFFIX}-${BOOST_DEBUG_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}
|
optimized libboost_regex-vc${MSVC_SUFFIX}-${BOOST_OPTIM_SUFFIX}-${BOOST_VERSION}
|
||||||
debug libboost_regex-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION})
|
debug libboost_regex-vc${MSVC_SUFFIX}-${BOOST_DEBUG_SUFFIX}-${BOOST_VERSION})
|
||||||
|
|
||||||
elseif (DARWIN)
|
elseif (DARWIN)
|
||||||
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem)
|
set(Boost_FILESYSTEM_LIBRARY boost_filesystem)
|
||||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options)
|
set(Boost_PROGRAM_OPTIONS_LIBRARY boost_program_options)
|
||||||
set(BOOST_REGEX_LIBRARY boost_regex)
|
set(Boost_REGEX_LIBRARY boost_regex)
|
||||||
set(BOOST_SYSTEM_LIBRARY boost_system)
|
set(Boost_SYSTEM_LIBRARY boost_system)
|
||||||
elseif (LINUX)
|
elseif (LINUX)
|
||||||
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
|
set(Boost_FILESYSTEM_LIBRARY boost_filesystem-mt)
|
||||||
set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
|
set(Boost_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
|
||||||
set(BOOST_REGEX_LIBRARY boost_regex-mt)
|
set(Boost_REGEX_LIBRARY boost_regex-mt)
|
||||||
set(BOOST_SYSTEM_LIBRARY boost_system-mt)
|
set(Boost_SYSTEM_LIBRARY boost_system-mt)
|
||||||
endif (WINDOWS)
|
endif (WINDOWS)
|
||||||
endif (STANDALONE)
|
endif (STANDALONE)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ if(INSTALL_PROPRIETARY)
|
|||||||
endif(INSTALL_PROPRIETARY)
|
endif(INSTALL_PROPRIETARY)
|
||||||
|
|
||||||
find_library(FMODEX_LIBRARY
|
find_library(FMODEX_LIBRARY
|
||||||
NAMES fmodex fmodex_vc fmodexL_vc
|
NAMES fmodex fmodexL fmodex_vc fmodexL_vc
|
||||||
PATHS
|
PATHS
|
||||||
optimized ${ARCH_PREBUILT_DIRS_RELEASE}
|
optimized ${ARCH_PREBUILT_DIRS_RELEASE}
|
||||||
debug ${ARCH_PREBUILT_DIRS_DEBUG}
|
debug ${ARCH_PREBUILT_DIRS_DEBUG}
|
||||||
@@ -26,26 +26,25 @@ if (NOT FMODEX_LIBRARY)
|
|||||||
${FMODEX_SDK_DIR}
|
${FMODEX_SDK_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
endif(FMODEX_SDK_DIR)
|
endif(FMODEX_SDK_DIR)
|
||||||
if(WINDOWS AND NOT FMODEX_LIBRARY)
|
if(WINDOWS AND NOT FMODEX_LIBRARY)
|
||||||
set(FMODEX_PROG_DIR "$ENV{PROGRAMFILES}/FMOD SoundSystem/FMOD Programmers API Windows")
|
set(FMODEX_PROG_DIR "$ENV{PROGRAMFILES}/FMOD SoundSystem/FMOD Programmers API Windows")
|
||||||
find_library(FMODEX_LIBRARY
|
find_library(FMODEX_LIBRARY
|
||||||
fmodex_vc fmodexL_vc
|
fmodex_vc fmodexL_vc
|
||||||
PATHS
|
PATHS
|
||||||
${FMODEX_PROG_DIR}/api/lib
|
${FMODEX_PROG_DIR}/api/lib
|
||||||
${FMODEX_PROG_DIR}/api
|
${FMODEX_PROG_DIR}/api
|
||||||
${FMODEX_PROG_DIR}
|
${FMODEX_PROG_DIR}
|
||||||
)
|
)
|
||||||
if(FMODEX_LIBRARY)
|
if(FMODEX_LIBRARY)
|
||||||
message(STATUS "Found fmodex in ${FMODEX_PROG_DIR}")
|
message(STATUS "Found fmodex in ${FMODEX_PROG_DIR}")
|
||||||
set(FMODEX_SDK_DIR ${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)
|
set(FMODEX_SDK_DIR ${FMODEX_PROG_DIR} CACHE PATH "Path to the FMOD Ex SDK." FORCE)
|
||||||
endif(FMODEX_LIBRARY)
|
endif(FMODEX_LIBRARY)
|
||||||
endif(WINDOWS AND NOT FMODEX_LIBRARY)
|
endif(WINDOWS AND NOT FMODEX_LIBRARY)
|
||||||
endif (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}/include/fmodex
|
||||||
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/fmodex
|
${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/fmodex
|
||||||
${FMODEX_SDK_DIR}/api/inc
|
${FMODEX_SDK_DIR}/api/inc
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ FIND_PATH(HUNSPELL_INCLUDE_DIR hunspell.hxx
|
|||||||
/usr/include
|
/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
|
FIND_LIBRARY(HUNSPELL_LIBRARY
|
||||||
NAMES ${HUNSPELL_NAMES}
|
NAMES ${HUNSPELL_NAMES}
|
||||||
PATHS /usr/lib /usr/local/lib
|
PATHS /usr/lib /usr/local/lib
|
||||||
|
|||||||
@@ -8,5 +8,5 @@ set(LLVFS_INCLUDE_DIRS
|
|||||||
|
|
||||||
set(LLVFS_LIBRARIES
|
set(LLVFS_LIBRARIES
|
||||||
llvfs
|
llvfs
|
||||||
${BOOST_REGEX_LIBRARY}
|
${Boost_REGEX_LIBRARY}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -268,7 +268,7 @@ target_link_libraries(
|
|||||||
${EXPAT_LIBRARIES}
|
${EXPAT_LIBRARIES}
|
||||||
${ZLIB_LIBRARIES}
|
${ZLIB_LIBRARIES}
|
||||||
${WINDOWS_LIBRARIES}
|
${WINDOWS_LIBRARIES}
|
||||||
${BOOST_REGEX_LIBRARY}
|
${Boost_REGEX_LIBRARY}
|
||||||
${CORESERVICES_LIBRARY}
|
${CORESERVICES_LIBRARY}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
|
|
||||||
const S32 LL_VERSION_MAJOR = 1;
|
const S32 LL_VERSION_MAJOR = 1;
|
||||||
const S32 LL_VERSION_MINOR = 7;
|
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 S32 LL_VERSION_BUILD = ${vBUILD};
|
||||||
|
|
||||||
const char * const LL_CHANNEL = "${VIEWER_CHANNEL}";
|
const char * const LL_CHANNEL = "${VIEWER_CHANNEL}";
|
||||||
|
|||||||
@@ -52,7 +52,14 @@ add_executable(SLPlugin
|
|||||||
set_target_properties(SLPlugin
|
set_target_properties(SLPlugin
|
||||||
PROPERTIES
|
PROPERTIES
|
||||||
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/slplugin_info.plist
|
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
|
target_link_libraries(SLPlugin
|
||||||
${LLPLUGIN_LIBRARIES}
|
${LLPLUGIN_LIBRARIES}
|
||||||
|
|||||||
@@ -244,14 +244,16 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
|
|||||||
|
|
||||||
BOOL LLGLSLShader::attachObject(std::string object)
|
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();
|
if((*it).first == object)
|
||||||
glAttachObjectARB(mProgramObject, LLShaderMgr::instance()->mShaderObjects[object]);
|
{
|
||||||
stop_glerror();
|
glAttachObjectARB(mProgramObject, (*it).second.mHandle);
|
||||||
return TRUE;
|
stop_glerror();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
{
|
||||||
LL_WARNS("ShaderLoading") << "Attempting to attach shader object that hasn't been compiled: " << object << LL_ENDL;
|
LL_WARNS("ShaderLoading") << "Attempting to attach shader object that hasn't been compiled: " << object << LL_ENDL;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -262,6 +264,20 @@ void LLGLSLShader::attachObject(GLhandleARB object)
|
|||||||
{
|
{
|
||||||
if (object != 0)
|
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();
|
stop_glerror();
|
||||||
glAttachObjectARB(mProgramObject, object);
|
glAttachObjectARB(mProgramObject, object);
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
|
|||||||
@@ -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)
|
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;
|
GLenum error = GL_NO_ERROR;
|
||||||
if (gDebugGL)
|
if (gDebugGL)
|
||||||
{
|
{
|
||||||
@@ -888,7 +896,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
|
|||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
// Add shader file to map
|
// Add shader file to map
|
||||||
mShaderObjects[filename] = ret;
|
mShaderObjects.insert(make_pair(filename,CachedObjectInfo(ret,try_gpu_class,type)));
|
||||||
shader_level = try_gpu_class;
|
shader_level = try_gpu_class;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -185,8 +185,16 @@ public:
|
|||||||
virtual void updateShaderUniforms(LLGLSLShader * shader) = 0; // Pure Virtual
|
virtual void updateShaderUniforms(LLGLSLShader * shader) = 0; // Pure Virtual
|
||||||
|
|
||||||
public:
|
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
|
// 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
|
//global (reserved slot) shader parameters
|
||||||
std::vector<std::string> mReservedAttribs;
|
std::vector<std::string> mReservedAttribs;
|
||||||
|
|||||||
@@ -63,8 +63,8 @@ add_library (llvfs ${llvfs_SOURCE_FILES})
|
|||||||
add_dependencies(llvfs prepare)
|
add_dependencies(llvfs prepare)
|
||||||
|
|
||||||
target_link_libraries(llvfs
|
target_link_libraries(llvfs
|
||||||
${BOOST_FILESYSTEM_LIBRARY}
|
${Boost_FILESYSTEM_LIBRARY}
|
||||||
${BOOST_SYSTEM_LIBRARY}
|
${Boost_SYSTEM_LIBRARY}
|
||||||
)
|
)
|
||||||
|
|
||||||
if (DARWIN)
|
if (DARWIN)
|
||||||
|
|||||||
@@ -56,12 +56,6 @@ void parse_string();
|
|||||||
|
|
||||||
#define ECHO do { } while (0)
|
#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
|
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|||||||
@@ -2,10 +2,6 @@
|
|||||||
#include "linden_common.h"
|
#include "linden_common.h"
|
||||||
#include "lscript_tree.h"
|
#include "lscript_tree.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int yylex(void);
|
int yylex(void);
|
||||||
int yyparse( void );
|
int yyparse( void );
|
||||||
int yyerror(const char *fmt, ...);
|
int yyerror(const char *fmt, ...);
|
||||||
@@ -19,10 +15,6 @@
|
|||||||
#pragma warning (disable : 4702) // warning C4702: unreachable code
|
#pragma warning (disable : 4702) // warning C4702: unreachable code
|
||||||
#pragma warning( disable : 4065 ) // warning: switch statement contains 'default' but no 'case' labels
|
#pragma warning( disable : 4065 ) // warning: switch statement contains 'default' but no 'case' labels
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%union
|
%union
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ include(DBusGlib)
|
|||||||
include(DirectX)
|
include(DirectX)
|
||||||
include(ELFIO)
|
include(ELFIO)
|
||||||
if(FMODEX)
|
if(FMODEX)
|
||||||
include(FMODEX)
|
include(FMODEX)
|
||||||
set(FMOD OFF)
|
set(FMOD OFF)
|
||||||
else(FMODEX)
|
else(FMODEX)
|
||||||
include(FMOD)
|
include(FMOD)
|
||||||
endif(FMODEX)
|
endif(FMODEX)
|
||||||
include(OPENAL)
|
include(OPENAL)
|
||||||
include(FindOpenGL)
|
include(FindOpenGL)
|
||||||
@@ -1562,10 +1562,10 @@ target_link_libraries(${VIEWER_BINARY_NAME}
|
|||||||
${LLCOMMON_LIBRARIES}
|
${LLCOMMON_LIBRARIES}
|
||||||
${NDOF_LIBRARY}
|
${NDOF_LIBRARY}
|
||||||
${viewer_LIBRARIES}
|
${viewer_LIBRARIES}
|
||||||
${BOOST_FILESYSTEM_LIBRARY}
|
${Boost_FILESYSTEM_LIBRARY}
|
||||||
${BOOST_PROGRAM_OPTIONS_LIBRARY}
|
${Boost_PROGRAM_OPTIONS_LIBRARY}
|
||||||
${BOOST_REGEX_LIBRARY}
|
${Boost_REGEX_LIBRARY}
|
||||||
${BOOST_SYSTEM_LIBRARY}
|
${Boost_SYSTEM_LIBRARY}
|
||||||
${DBUSGLIB_LIBRARIES}
|
${DBUSGLIB_LIBRARIES}
|
||||||
${OPENGL_LIBRARIES}
|
${OPENGL_LIBRARIES}
|
||||||
${FMODWRAPPER_LIBRARY} # must come after LLAudio
|
${FMODWRAPPER_LIBRARY} # must come after LLAudio
|
||||||
|
|||||||
@@ -19,7 +19,9 @@
|
|||||||
#include "llnotificationsutil.h"
|
#include "llnotificationsutil.h"
|
||||||
#include "llviewerobjectlist.h"
|
#include "llviewerobjectlist.h"
|
||||||
#include "llagent.h"
|
#include "llagent.h"
|
||||||
|
#include "lltrans.h"
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
|
|
||||||
U32 NACLAntiSpamRegistry::globalAmount;
|
U32 NACLAntiSpamRegistry::globalAmount;
|
||||||
U32 NACLAntiSpamRegistry::globalTime;
|
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*> NACLAntiSpamRegistry::globalEntries;
|
||||||
std::tr1::unordered_map<std::string,NACLAntiSpamQueueEntry*>::iterator NACLAntiSpamRegistry::it2;
|
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 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;
|
const int COLLISION_SOUNDS_SIZE=29;
|
||||||
|
|
||||||
@@ -45,11 +48,11 @@ void NACLAntiSpamQueueEntry::clearEntry()
|
|||||||
entryAmount=0;
|
entryAmount=0;
|
||||||
blocked=false;
|
blocked=false;
|
||||||
}
|
}
|
||||||
U32 NACLAntiSpamQueueEntry::getEntryAmount()
|
U32 NACLAntiSpamQueueEntry::getEntryAmount() const
|
||||||
{
|
{
|
||||||
return entryAmount;
|
return entryAmount;
|
||||||
}
|
}
|
||||||
U32 NACLAntiSpamQueueEntry::getEntryTime()
|
U32 NACLAntiSpamQueueEntry::getEntryTime() const
|
||||||
{
|
{
|
||||||
return entryTime;
|
return entryTime;
|
||||||
}
|
}
|
||||||
@@ -65,7 +68,7 @@ void NACLAntiSpamQueueEntry::setBlocked()
|
|||||||
{
|
{
|
||||||
blocked=true;
|
blocked=true;
|
||||||
}
|
}
|
||||||
bool NACLAntiSpamQueueEntry::getBlocked()
|
bool NACLAntiSpamQueueEntry::getBlocked() const
|
||||||
{
|
{
|
||||||
return blocked;
|
return blocked;
|
||||||
}
|
}
|
||||||
@@ -85,6 +88,14 @@ void NACLAntiSpamQueue::setTime(U32 time)
|
|||||||
{
|
{
|
||||||
queueTime=time;
|
queueTime=time;
|
||||||
}
|
}
|
||||||
|
U32 NACLAntiSpamQueue::getAmount() const
|
||||||
|
{
|
||||||
|
return queueAmount;
|
||||||
|
}
|
||||||
|
U32 NACLAntiSpamQueue::getTime() const
|
||||||
|
{
|
||||||
|
return queueTime;
|
||||||
|
}
|
||||||
void NACLAntiSpamQueue::clearEntries()
|
void NACLAntiSpamQueue::clearEntries()
|
||||||
{
|
{
|
||||||
for(it = entries.begin(); it != entries.end(); it++)
|
for(it = entries.begin(); it != entries.end(); it++)
|
||||||
@@ -110,6 +121,7 @@ void NACLAntiSpamQueue::blockEntry(LLUUID& source)
|
|||||||
entries[source.asString()]->setBlocked();
|
entries[source.asString()]->setBlocked();
|
||||||
}
|
}
|
||||||
int NACLAntiSpamQueue::checkEntry(LLUUID& name, U32 multiplier)
|
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);
|
static LLCachedControl<bool> enabled(gSavedSettings,"AntiSpamEnabled",false);
|
||||||
if(!enabled) return 0;
|
if(!enabled) return 0;
|
||||||
@@ -141,6 +153,7 @@ int NACLAntiSpamQueue::checkEntry(LLUUID& name, U32 multiplier)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
//lldebugs << "[antispam] New queue entry:" << name.asString() << llendl;
|
||||||
entries[name.asString()]=new NACLAntiSpamQueueEntry();
|
entries[name.asString()]=new NACLAntiSpamQueueEntry();
|
||||||
entries[name.asString()]->updateEntryAmount();
|
entries[name.asString()]->updateEntryAmount();
|
||||||
entries[name.asString()]->updateEntryTime();
|
entries[name.asString()]->updateEntryTime();
|
||||||
@@ -154,8 +167,8 @@ static const char* QUEUE_NAME[NACLAntiSpamRegistry::QUEUE_MAX] = {
|
|||||||
"Chat",
|
"Chat",
|
||||||
"Inventory",
|
"Inventory",
|
||||||
"Instant Message",
|
"Instant Message",
|
||||||
"Calling Card",
|
"calling card",
|
||||||
"Sound",
|
"sound",
|
||||||
"Sound Preload",
|
"Sound Preload",
|
||||||
"Script Dialog",
|
"Script Dialog",
|
||||||
"Teleport"};
|
"Teleport"};
|
||||||
@@ -171,12 +184,14 @@ NACLAntiSpamRegistry::NACLAntiSpamRegistry(U32 time, U32 amount)
|
|||||||
queues[queue] = new NACLAntiSpamQueue(time,amount);
|
queues[queue] = new NACLAntiSpamQueue(time,amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
const char* NACLAntiSpamRegistry::getQueueName(U32 queue_id)
|
const char* NACLAntiSpamRegistry::getQueueName(U32 queue_id)
|
||||||
{
|
{
|
||||||
if(queue_id >= QUEUE_MAX)
|
if(queue_id >= QUEUE_MAX)
|
||||||
return "Unknown";
|
return "Unknown";
|
||||||
return QUEUE_NAME[queue_id];
|
return QUEUE_NAME[queue_id];
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::registerQueues(U32 time, U32 amount)
|
void NACLAntiSpamRegistry::registerQueues(U32 time, U32 amount)
|
||||||
{
|
{
|
||||||
globalTime=time;
|
globalTime=time;
|
||||||
@@ -188,16 +203,16 @@ void NACLAntiSpamRegistry::registerQueues(U32 time, U32 amount)
|
|||||||
queues[queue] = new NACLAntiSpamQueue(time,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);
|
it=queues.find(name);
|
||||||
if(it == queues.end())
|
if(it == queues.end())
|
||||||
{
|
{
|
||||||
queues[name]=new NACLAntiSpamQueue(time,amount);
|
queues[name]=new NACLAntiSpamQueue(time,amount);
|
||||||
}
|
}
|
||||||
*/
|
}*/
|
||||||
}
|
//static
|
||||||
void NACLAntiSpamRegistry::setRegisteredQueueTime(U32 name, U32 time)
|
void NACLAntiSpamRegistry::setRegisteredQueueTime(U32 name, U32 time)
|
||||||
{
|
{
|
||||||
if(name >= QUEUE_MAX || queues[name] == 0)
|
if(name >= QUEUE_MAX || queues[name] == 0)
|
||||||
@@ -208,6 +223,7 @@ void NACLAntiSpamRegistry::setRegisteredQueueTime(U32 name, U32 time)
|
|||||||
|
|
||||||
queues[name]->setTime(time);
|
queues[name]->setTime(time);
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::setRegisteredQueueAmount(U32 name, U32 amount)
|
void NACLAntiSpamRegistry::setRegisteredQueueAmount(U32 name, U32 amount)
|
||||||
{
|
{
|
||||||
if(name >= QUEUE_MAX || queues[name] == 0)
|
if(name >= QUEUE_MAX || queues[name] == 0)
|
||||||
@@ -218,23 +234,28 @@ void NACLAntiSpamRegistry::setRegisteredQueueAmount(U32 name, U32 amount)
|
|||||||
|
|
||||||
queues[name]->setAmount(amount);
|
queues[name]->setAmount(amount);
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::setAllQueueTimes(U32 time)
|
void NACLAntiSpamRegistry::setAllQueueTimes(U32 time)
|
||||||
{
|
{
|
||||||
globalTime=time;
|
globalTime=time;
|
||||||
for(int queue = 0; queue < QUEUE_MAX; ++queue)
|
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)
|
void NACLAntiSpamRegistry::setAllQueueAmounts(U32 amount)
|
||||||
{
|
{
|
||||||
globalAmount=amount;
|
globalAmount=amount;
|
||||||
for(int queue = 0; queue < QUEUE_MAX; ++queue)
|
for(int queue = 0; queue < QUEUE_MAX; ++queue)
|
||||||
{
|
{
|
||||||
|
if(!queues[queue]) continue;
|
||||||
if(queue == QUEUE_SOUND || queue == QUEUE_SOUND_PRELOAD)
|
if(queue == QUEUE_SOUND || queue == QUEUE_SOUND_PRELOAD)
|
||||||
queues[queue]->setAmount(amount*5);
|
queues[queue]->setAmount(amount*5);
|
||||||
else
|
else
|
||||||
queues[queue]->setAmount(amount);
|
queues[queue]->setAmount(amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::clearRegisteredQueue(U32 name)
|
void NACLAntiSpamRegistry::clearRegisteredQueue(U32 name)
|
||||||
{
|
{
|
||||||
if(name >= QUEUE_MAX || queues[name] == 0)
|
if(name >= QUEUE_MAX || queues[name] == 0)
|
||||||
@@ -245,6 +266,7 @@ void NACLAntiSpamRegistry::clearRegisteredQueue(U32 name)
|
|||||||
|
|
||||||
queues[name]->clearEntries();
|
queues[name]->clearEntries();
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::purgeRegisteredQueue(U32 name)
|
void NACLAntiSpamRegistry::purgeRegisteredQueue(U32 name)
|
||||||
{
|
{
|
||||||
if(name >= QUEUE_MAX || queues[name] == 0)
|
if(name >= QUEUE_MAX || queues[name] == 0)
|
||||||
@@ -255,6 +277,7 @@ void NACLAntiSpamRegistry::purgeRegisteredQueue(U32 name)
|
|||||||
|
|
||||||
queues[name]->purgeEntries();
|
queues[name]->purgeEntries();
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::blockOnQueue(U32 name, LLUUID& source)
|
void NACLAntiSpamRegistry::blockOnQueue(U32 name, LLUUID& source)
|
||||||
{
|
{
|
||||||
if(bGlobalQueue)
|
if(bGlobalQueue)
|
||||||
@@ -271,6 +294,7 @@ void NACLAntiSpamRegistry::blockOnQueue(U32 name, LLUUID& source)
|
|||||||
queues[name]->blockEntry(source);
|
queues[name]->blockEntry(source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::blockGlobalEntry(LLUUID& source)
|
void NACLAntiSpamRegistry::blockGlobalEntry(LLUUID& source)
|
||||||
{
|
{
|
||||||
it2=globalEntries.find(source.asString());
|
it2=globalEntries.find(source.asString());
|
||||||
@@ -280,13 +304,13 @@ void NACLAntiSpamRegistry::blockGlobalEntry(LLUUID& source)
|
|||||||
}
|
}
|
||||||
globalEntries[source.asString()]->setBlocked();
|
globalEntries[source.asString()]->setBlocked();
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
bool NACLAntiSpamRegistry::checkQueue(U32 name, LLUUID& source, U32 multiplier)
|
bool NACLAntiSpamRegistry::checkQueue(U32 name, LLUUID& source, U32 multiplier)
|
||||||
|
//returns true if blocked
|
||||||
{
|
{
|
||||||
if(source.isNull()) return false;
|
if(source.isNull() || gAgent.getID() == source) return false;
|
||||||
if(gAgent.getID() == source) return false;
|
|
||||||
LLViewerObject *obj=gObjectList.findObject(source);
|
LLViewerObject *obj=gObjectList.findObject(source);
|
||||||
if(obj)
|
if(obj && obj->permYouOwner()) return false;
|
||||||
if(obj->permYouOwner()) return false;
|
|
||||||
|
|
||||||
int result;
|
int result;
|
||||||
if(bGlobalQueue)
|
if(bGlobalQueue)
|
||||||
@@ -302,40 +326,45 @@ bool NACLAntiSpamRegistry::checkQueue(U32 name, LLUUID& source, U32 multiplier)
|
|||||||
}
|
}
|
||||||
result=queues[name]->checkEntry(source,multiplier);
|
result=queues[name]->checkEntry(source,multiplier);
|
||||||
}
|
}
|
||||||
if(result==0)
|
if(result == 0) //Safe
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
else if(result == 2) //Previously blocked
|
||||||
else if(result==2)
|
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else //Just blocked!
|
||||||
{
|
{
|
||||||
if(gSavedSettings.getBOOL("AntiSpamNotify"))
|
if(gSavedSettings.getBOOL("AntiSpamNotify"))
|
||||||
{
|
{
|
||||||
LLSD args;
|
LLSD args;
|
||||||
args["MESSAGE"] = std::string(getQueueName(name))+": Blocked object "+source.asString();
|
args["SOURCE"] = source.asString().c_str();
|
||||||
LLNotificationsUtil::add("SystemMessageTip", args);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Global queue stoof
|
// Global queue stoof
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::setGlobalQueue(bool value)
|
void NACLAntiSpamRegistry::setGlobalQueue(bool value)
|
||||||
{
|
{
|
||||||
NACLAntiSpamRegistry::purgeAllQueues();
|
NACLAntiSpamRegistry::purgeAllQueues();
|
||||||
bGlobalQueue=value;
|
bGlobalQueue=value;
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::setGlobalAmount(U32 amount)
|
void NACLAntiSpamRegistry::setGlobalAmount(U32 amount)
|
||||||
{
|
{
|
||||||
globalAmount=amount;
|
globalAmount=amount;
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::setGlobalTime(U32 time)
|
void NACLAntiSpamRegistry::setGlobalTime(U32 time)
|
||||||
{
|
{
|
||||||
globalTime=time;
|
globalTime=time;
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::clearAllQueues()
|
void NACLAntiSpamRegistry::clearAllQueues()
|
||||||
{
|
{
|
||||||
if(bGlobalQueue)
|
if(bGlobalQueue)
|
||||||
@@ -343,9 +372,10 @@ void NACLAntiSpamRegistry::clearAllQueues()
|
|||||||
else
|
else
|
||||||
for(int queue = 0; queue < QUEUE_MAX; ++queue)
|
for(int queue = 0; queue < QUEUE_MAX; ++queue)
|
||||||
{
|
{
|
||||||
queues[queue]->clearEntries();
|
if(queues[queue]) queues[queue]->clearEntries();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::purgeAllQueues()
|
void NACLAntiSpamRegistry::purgeAllQueues()
|
||||||
{
|
{
|
||||||
if(bGlobalQueue)
|
if(bGlobalQueue)
|
||||||
@@ -353,9 +383,11 @@ void NACLAntiSpamRegistry::purgeAllQueues()
|
|||||||
else
|
else
|
||||||
for(int queue = 0; queue < QUEUE_MAX; ++queue)
|
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)
|
int NACLAntiSpamRegistry::checkGlobalEntry(LLUUID& name, U32 multiplier)
|
||||||
{
|
{
|
||||||
static LLCachedControl<bool> enabled(gSavedSettings,"AntiSpamEnabled",false);
|
static LLCachedControl<bool> enabled(gSavedSettings,"AntiSpamEnabled",false);
|
||||||
@@ -391,6 +423,7 @@ int NACLAntiSpamRegistry::checkGlobalEntry(LLUUID& name, U32 multiplier)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::clearGlobalEntries()
|
void NACLAntiSpamRegistry::clearGlobalEntries()
|
||||||
{
|
{
|
||||||
for(it2 = globalEntries.begin(); it2 != globalEntries.end(); it2++)
|
for(it2 = globalEntries.begin(); it2 != globalEntries.end(); it2++)
|
||||||
@@ -398,6 +431,7 @@ void NACLAntiSpamRegistry::clearGlobalEntries()
|
|||||||
it2->second->clearEntry();
|
it2->second->clearEntry();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
void NACLAntiSpamRegistry::purgeGlobalEntries()
|
void NACLAntiSpamRegistry::purgeGlobalEntries()
|
||||||
{
|
{
|
||||||
for(it2 = globalEntries.begin(); it2 != globalEntries.end(); it2++)
|
for(it2 = globalEntries.begin(); it2 != globalEntries.end(); it2++)
|
||||||
@@ -407,16 +441,21 @@ void NACLAntiSpamRegistry::purgeGlobalEntries()
|
|||||||
}
|
}
|
||||||
globalEntries.clear();
|
globalEntries.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Handlers
|
||||||
|
//static
|
||||||
bool NACLAntiSpamRegistry::handleNaclAntiSpamGlobalQueueChanged(const LLSD& newvalue)
|
bool NACLAntiSpamRegistry::handleNaclAntiSpamGlobalQueueChanged(const LLSD& newvalue)
|
||||||
{
|
{
|
||||||
setGlobalQueue(newvalue.asBoolean());
|
setGlobalQueue(newvalue.asBoolean());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
bool NACLAntiSpamRegistry::handleNaclAntiSpamTimeChanged(const LLSD& newvalue)
|
bool NACLAntiSpamRegistry::handleNaclAntiSpamTimeChanged(const LLSD& newvalue)
|
||||||
{
|
{
|
||||||
setAllQueueTimes(newvalue.asInteger());
|
setAllQueueTimes(newvalue.asInteger());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
//static
|
||||||
bool NACLAntiSpamRegistry::handleNaclAntiSpamAmountChanged(const LLSD& newvalue)
|
bool NACLAntiSpamRegistry::handleNaclAntiSpamAmountChanged(const LLSD& newvalue)
|
||||||
{
|
{
|
||||||
setAllQueueAmounts(newvalue.asInteger());
|
setAllQueueAmounts(newvalue.asInteger());
|
||||||
|
|||||||
@@ -25,11 +25,11 @@ class NACLAntiSpamQueueEntry
|
|||||||
protected:
|
protected:
|
||||||
NACLAntiSpamQueueEntry();
|
NACLAntiSpamQueueEntry();
|
||||||
void clearEntry();
|
void clearEntry();
|
||||||
U32 getEntryAmount();
|
U32 getEntryAmount() const;
|
||||||
U32 getEntryTime();
|
U32 getEntryTime() const;
|
||||||
void updateEntryAmount();
|
void updateEntryAmount();
|
||||||
void updateEntryTime();
|
void updateEntryTime();
|
||||||
bool getBlocked();
|
bool getBlocked() const;
|
||||||
void setBlocked();
|
void setBlocked();
|
||||||
private:
|
private:
|
||||||
U32 entryAmount;
|
U32 entryAmount;
|
||||||
@@ -39,6 +39,9 @@ private:
|
|||||||
class NACLAntiSpamQueue
|
class NACLAntiSpamQueue
|
||||||
{
|
{
|
||||||
friend class NACLAntiSpamRegistry;
|
friend class NACLAntiSpamRegistry;
|
||||||
|
public:
|
||||||
|
U32 getAmount() const;
|
||||||
|
U32 getTime() const;
|
||||||
protected:
|
protected:
|
||||||
NACLAntiSpamQueue(U32 time, U32 amount);
|
NACLAntiSpamQueue(U32 time, U32 amount);
|
||||||
void setAmount(U32 amount);
|
void setAmount(U32 amount);
|
||||||
@@ -58,7 +61,7 @@ class NACLAntiSpamRegistry
|
|||||||
public:
|
public:
|
||||||
NACLAntiSpamRegistry(U32 time=2, U32 amount=10);
|
NACLAntiSpamRegistry(U32 time=2, U32 amount=10);
|
||||||
static void registerQueues(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 setRegisteredQueueTime(U32 name, U32 time);
|
||||||
static void setRegisteredQueueAmount(U32 name,U32 amount);
|
static void setRegisteredQueueAmount(U32 name,U32 amount);
|
||||||
static void setAllQueueTimes(U32 amount);
|
static void setAllQueueTimes(U32 amount);
|
||||||
|
|||||||
@@ -9,6 +9,17 @@
|
|||||||
<string>settings_rlv.xml</string>
|
<string>settings_rlv.xml</string>
|
||||||
</array>
|
</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>
|
<key>SGShiftCrouchToggle</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
@@ -20,7 +31,6 @@
|
|||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</map>
|
</map>
|
||||||
|
|
||||||
<key>SGServerVersionChangedNotification</key>
|
<key>SGServerVersionChangedNotification</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
@@ -1032,7 +1042,7 @@
|
|||||||
<key>_NACL_AntiSpamGlobalQueue</key>
|
<key>_NACL_AntiSpamGlobalQueue</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<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>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
@@ -1043,7 +1053,7 @@
|
|||||||
<key>_NACL_AntiSpamTime</key>
|
<key>_NACL_AntiSpamTime</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<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>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
@@ -1054,7 +1064,7 @@
|
|||||||
<key>_NACL_AntiSpamAmount</key>
|
<key>_NACL_AntiSpamAmount</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<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>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
@@ -1065,7 +1075,7 @@
|
|||||||
<key>_NACL_AntiSpamSoundMulti</key>
|
<key>_NACL_AntiSpamSoundMulti</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<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>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
@@ -1076,18 +1086,18 @@
|
|||||||
<key>_NACL_AntiSpamNewlines</key>
|
<key>_NACL_AntiSpamNewlines</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<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>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
<string>U32</string>
|
<string>U32</string>
|
||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>20</integer>
|
<integer>70</integer>
|
||||||
</map>
|
</map>
|
||||||
<key>_NACL_AntiSpamSoundPreloadMulti</key>
|
<key>_NACL_AntiSpamSoundPreloadMulti</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<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>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
|
|||||||
@@ -1598,16 +1598,18 @@ void LLDrawPoolInvisible::renderDeferred( S32 pass )
|
|||||||
}
|
}
|
||||||
|
|
||||||
LLFastTimer t(FTM_RENDER_INVISIBLE);
|
LLFastTimer t(FTM_RENDER_INVISIBLE);
|
||||||
|
|
||||||
|
gOcclusionProgram.bind();
|
||||||
|
|
||||||
U32 invisi_mask = LLVertexBuffer::MAP_VERTEX;
|
U32 invisi_mask = LLVertexBuffer::MAP_VERTEX;
|
||||||
glStencilMask(0);
|
glStencilMask(0);
|
||||||
glStencilOp(GL_ZERO, GL_KEEP, GL_REPLACE);
|
|
||||||
gGL.setColorMask(false, false);
|
gGL.setColorMask(false, false);
|
||||||
pushBatches(LLRenderPass::PASS_INVISIBLE, invisi_mask, FALSE);
|
pushBatches(LLRenderPass::PASS_INVISIBLE, invisi_mask, FALSE);
|
||||||
gGL.setColorMask(true, true);
|
gGL.setColorMask(true, true);
|
||||||
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
|
|
||||||
glStencilMask(0xFFFFFFFF);
|
glStencilMask(0xFFFFFFFF);
|
||||||
|
|
||||||
|
gOcclusionProgram.unbind();
|
||||||
|
|
||||||
if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY))
|
if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY))
|
||||||
{
|
{
|
||||||
beginShiny(true);
|
beginShiny(true);
|
||||||
|
|||||||
@@ -35,7 +35,9 @@
|
|||||||
#include "llfloateractivespeakers.h"
|
#include "llfloateractivespeakers.h"
|
||||||
|
|
||||||
#include "llagent.h"
|
#include "llagent.h"
|
||||||
#include "llvoavatar.h"
|
#include "llappviewer.h"
|
||||||
|
#include "llimview.h"
|
||||||
|
#include "llsdutil.h"
|
||||||
#include "llfloateravatarinfo.h"
|
#include "llfloateravatarinfo.h"
|
||||||
#include "lluictrlfactory.h"
|
#include "lluictrlfactory.h"
|
||||||
#include "llviewercontrol.h"
|
#include "llviewercontrol.h"
|
||||||
@@ -44,12 +46,10 @@
|
|||||||
#include "lltextbox.h"
|
#include "lltextbox.h"
|
||||||
#include "llmutelist.h"
|
#include "llmutelist.h"
|
||||||
#include "llviewerobjectlist.h"
|
#include "llviewerobjectlist.h"
|
||||||
|
#include "llvoavatar.h"
|
||||||
#include "llimpanel.h" // LLVoiceChannel
|
#include "llimpanel.h" // LLVoiceChannel
|
||||||
#include "llsdutil.h"
|
|
||||||
#include "llimview.h"
|
|
||||||
#include "llviewerwindow.h"
|
#include "llviewerwindow.h"
|
||||||
#include "llworld.h"
|
#include "llworld.h"
|
||||||
#include "llappviewer.h"
|
|
||||||
|
|
||||||
// [RLVa:KB]
|
// [RLVa:KB]
|
||||||
#include "rlvhandler.h"
|
#include "rlvhandler.h"
|
||||||
@@ -90,9 +90,7 @@ LLSpeaker::LLSpeaker(const LLUUID& id, const std::string& name, const ESpeakerTy
|
|||||||
mDisplayName = name;
|
mDisplayName = name;
|
||||||
mLegacyName = name;
|
mLegacyName = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
gVoiceClient->setUserVolume(id, LLMuteList::getInstance()->getSavedResidentVolume(id));
|
gVoiceClient->setUserVolume(id, LLMuteList::getInstance()->getSavedResidentVolume(id));
|
||||||
|
|
||||||
mActivityTimer.reset(SPEAKER_TIMEOUT);
|
mActivityTimer.reset(SPEAKER_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,7 +102,7 @@ void LLSpeaker::lookupName()
|
|||||||
// [/Ansariel: Display name support]
|
// [/Ansariel: Display name support]
|
||||||
}
|
}
|
||||||
|
|
||||||
//static
|
//static
|
||||||
// [Ansariel: Display name support]
|
// [Ansariel: Display name support]
|
||||||
void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const LLAvatarName& avatar_name, void* user_data)
|
void LLSpeaker::onAvatarNameLookup(const LLUUID& id, const LLAvatarName& avatar_name, void* user_data)
|
||||||
// [/Ansariel: Display name support]
|
// [/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;
|
case 2 : speaker_ptr->mDisplayName = avatar_name.mDisplayName; break;
|
||||||
default : speaker_ptr->mDisplayName = avatar_name.getLegacyName(); break;
|
default : speaker_ptr->mDisplayName = avatar_name.getLegacyName(); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also set the legacy name. We will need it to initiate a new
|
// Also set the legacy name. We will need it to initiate a new
|
||||||
// IM session.
|
// IM session.
|
||||||
speaker_ptr->mLegacyName = LLCacheName::cleanFullName(avatar_name.getLegacyName());
|
speaker_ptr->mLegacyName = LLCacheName::cleanFullName(avatar_name.getLegacyName());
|
||||||
// [/Ansariel: Display name support]
|
// [/Ansariel: Display name support]
|
||||||
|
|
||||||
// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) | Added: RLVa-1.0.0g
|
// [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
|
// 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))
|
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
||||||
@@ -500,7 +498,7 @@ void LLPanelActiveSpeakers::refreshSpeakers()
|
|||||||
}
|
}
|
||||||
|
|
||||||
LLColor4 icon_color;
|
LLColor4 icon_color;
|
||||||
|
|
||||||
if (speakerp->mStatus == LLSpeaker::STATUS_MUTED)
|
if (speakerp->mStatus == LLSpeaker::STATUS_MUTED)
|
||||||
{
|
{
|
||||||
icon_cell->setValue(mute_icon_image);
|
icon_cell->setValue(mute_icon_image);
|
||||||
@@ -605,7 +603,7 @@ void LLPanelActiveSpeakers::refreshSpeakers()
|
|||||||
speaking_status_cell->setValue(speaking_order_sort_string);
|
speaking_status_cell->setValue(speaking_order_sort_string);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// we potentially modified the sort order by touching the list items
|
// we potentially modified the sort order by touching the list items
|
||||||
mSpeakerList->setSorted(FALSE);
|
mSpeakerList->setSorted(FALSE);
|
||||||
|
|
||||||
@@ -860,25 +858,25 @@ void LLPanelActiveSpeakers::onModeratorMuteVoice(LLUICtrl* ctrl, void* user_data
|
|||||||
|
|
||||||
if ( gIMMgr )
|
if ( gIMMgr )
|
||||||
{
|
{
|
||||||
//403 == you're not a mod
|
|
||||||
//should be disabled if you're not a moderator
|
|
||||||
LLFloaterIMPanel* floaterp;
|
LLFloaterIMPanel* floaterp;
|
||||||
|
|
||||||
floaterp = gIMMgr->findFloaterBySession(mSessionID);
|
floaterp = gIMMgr->findFloaterBySession(mSessionID);
|
||||||
|
|
||||||
if ( floaterp )
|
if ( floaterp )
|
||||||
{
|
{
|
||||||
|
//403 == you're not a mod
|
||||||
|
//should be disabled if you're not a moderator
|
||||||
if ( 403 == status )
|
if ( 403 == status )
|
||||||
{
|
{
|
||||||
floaterp->showSessionEventError(
|
floaterp->showSessionEventError(
|
||||||
"mute",
|
"mute",
|
||||||
"not_a_moderator");
|
"not_a_mod_error");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
floaterp->showSessionEventError(
|
floaterp->showSessionEventError(
|
||||||
"mute",
|
"mute",
|
||||||
"generic");
|
"generic_request_error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -925,25 +923,25 @@ void LLPanelActiveSpeakers::onModeratorMuteText(LLUICtrl* ctrl, void* user_data)
|
|||||||
|
|
||||||
if ( gIMMgr )
|
if ( gIMMgr )
|
||||||
{
|
{
|
||||||
//403 == you're not a mod
|
|
||||||
//should be disabled if you're not a moderator
|
|
||||||
LLFloaterIMPanel* floaterp;
|
LLFloaterIMPanel* floaterp;
|
||||||
|
|
||||||
floaterp = gIMMgr->findFloaterBySession(mSessionID);
|
floaterp = gIMMgr->findFloaterBySession(mSessionID);
|
||||||
|
|
||||||
if ( floaterp )
|
if ( floaterp )
|
||||||
{
|
{
|
||||||
|
//403 == you're not a mod
|
||||||
|
//should be disabled if you're not a moderator
|
||||||
if ( 403 == status )
|
if ( 403 == status )
|
||||||
{
|
{
|
||||||
floaterp->showSessionEventError(
|
floaterp->showSessionEventError(
|
||||||
"mute",
|
"mute",
|
||||||
"not_a_moderator");
|
"not_a_mod_error");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
floaterp->showSessionEventError(
|
floaterp->showSessionEventError(
|
||||||
"mute",
|
"mute",
|
||||||
"generic");
|
"generic_request_error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1194,6 +1192,9 @@ void LLSpeakerMgr::updateSpeakerList()
|
|||||||
|
|
||||||
const LLPointer<LLSpeaker> LLSpeakerMgr::findSpeaker(const LLUUID& speaker_id)
|
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);
|
speaker_map_t::iterator found_it = mSpeakers.find(speaker_id);
|
||||||
if (found_it == mSpeakers.end())
|
if (found_it == mSpeakers.end())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -74,6 +74,7 @@
|
|||||||
#include "llsurface.h"
|
#include "llsurface.h"
|
||||||
#include "llviewercontrol.h"
|
#include "llviewercontrol.h"
|
||||||
#include "lluictrlfactory.h"
|
#include "lluictrlfactory.h"
|
||||||
|
#include "lltrans.h"
|
||||||
|
|
||||||
#include "lltransfertargetfile.h"
|
#include "lltransfertargetfile.h"
|
||||||
#include "lltransfersourcefile.h"
|
#include "lltransfersourcefile.h"
|
||||||
@@ -172,6 +173,7 @@ LLFloaterGodTools::~LLFloaterGodTools()
|
|||||||
// children automatically deleted
|
// children automatically deleted
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
U32 LLFloaterGodTools::computeRegionFlags() const
|
U32 LLFloaterGodTools::computeRegionFlags() const
|
||||||
{
|
{
|
||||||
U32 flags = gAgent.getRegion()->getRegionFlags();
|
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)
|
void LLFloaterGodTools::onTabChanged(LLUICtrl* ctrl, const LLSD& param)
|
||||||
{
|
{
|
||||||
LLPanel* panel = (LLPanel*)ctrl->getChildView(param.asString(),false,false);
|
LLPanel* panel = (LLPanel*)ctrl->getChildView(param.asString(),false,false);
|
||||||
if(panel)
|
if (panel)
|
||||||
panel->setFocus(TRUE);
|
panel->setFocus(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void LLFloaterGodTools::processRegionInfo(LLMessageSystem* msg)
|
void LLFloaterGodTools::processRegionInfo(LLMessageSystem* msg)
|
||||||
{
|
{
|
||||||
|
llassert(msg);
|
||||||
|
if (!msg) return;
|
||||||
|
|
||||||
//const S32 SIM_NAME_BUF = 256;
|
//const S32 SIM_NAME_BUF = 256;
|
||||||
U32 region_flags;
|
U32 region_flags;
|
||||||
U8 sim_access;
|
U8 sim_access;
|
||||||
@@ -307,12 +311,12 @@ void LLFloaterGodTools::processRegionInfo(LLMessageSystem* msg)
|
|||||||
regionp->setBillableFactor(billable_factor);
|
regionp->setBillableFactor(billable_factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!sGodTools) return;
|
||||||
|
|
||||||
// push values to god tools, if available
|
// push values to god tools, if available
|
||||||
if (sGodTools
|
if ( gAgent.isGodlike()
|
||||||
&& sGodTools->mPanelRegionTools
|
&& sGodTools->mPanelRegionTools
|
||||||
&& sGodTools->mPanelObjectTools
|
&& sGodTools->mPanelObjectTools)
|
||||||
&& msg
|
|
||||||
&& gAgent.isGodlike())
|
|
||||||
{
|
{
|
||||||
LLPanelRegionTools* rtool = sGodTools->mPanelRegionTools;
|
LLPanelRegionTools* rtool = sGodTools->mPanelRegionTools;
|
||||||
sGodTools->mCurrentHost = host;
|
sGodTools->mCurrentHost = host;
|
||||||
@@ -371,6 +375,8 @@ void LLFloaterGodTools::sendRegionInfoRequest()
|
|||||||
|
|
||||||
void LLFloaterGodTools::sendGodUpdateRegionInfo()
|
void LLFloaterGodTools::sendGodUpdateRegionInfo()
|
||||||
{
|
{
|
||||||
|
if (!sGodTools) return;
|
||||||
|
|
||||||
LLViewerRegion *regionp = gAgent.getRegion();
|
LLViewerRegion *regionp = gAgent.getRegion();
|
||||||
if (gAgent.isGodlike()
|
if (gAgent.isGodlike()
|
||||||
&& sGodTools->mPanelRegionTools
|
&& sGodTools->mPanelRegionTools
|
||||||
@@ -777,9 +783,7 @@ void LLPanelRegionTools::setPricePerMeter(S32 price)
|
|||||||
// static
|
// static
|
||||||
void LLPanelRegionTools::onChangeAnything(LLUICtrl* ctrl, void* userdata)
|
void LLPanelRegionTools::onChangeAnything(LLUICtrl* ctrl, void* userdata)
|
||||||
{
|
{
|
||||||
if (sGodTools
|
if (sGodTools && userdata && gAgent.isGodlike())
|
||||||
&& userdata
|
|
||||||
&& gAgent.isGodlike())
|
|
||||||
{
|
{
|
||||||
LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
|
LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
|
||||||
region_tools->childEnable("Apply");
|
region_tools->childEnable("Apply");
|
||||||
@@ -803,9 +807,7 @@ void LLPanelRegionTools::onChangePrelude(LLUICtrl* ctrl, void* data)
|
|||||||
// static
|
// static
|
||||||
void LLPanelRegionTools::onChangeSimName(LLLineEditor* caller, void* userdata )
|
void LLPanelRegionTools::onChangeSimName(LLLineEditor* caller, void* userdata )
|
||||||
{
|
{
|
||||||
if (sGodTools
|
if (sGodTools && userdata && gAgent.isGodlike())
|
||||||
&& userdata
|
|
||||||
&& gAgent.isGodlike())
|
|
||||||
{
|
{
|
||||||
LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
|
LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
|
||||||
region_tools->childEnable("Apply");
|
region_tools->childEnable("Apply");
|
||||||
@@ -815,10 +817,9 @@ void LLPanelRegionTools::onChangeSimName(LLLineEditor* caller, void* userdata )
|
|||||||
//static
|
//static
|
||||||
void LLPanelRegionTools::onRefresh(void* userdata)
|
void LLPanelRegionTools::onRefresh(void* userdata)
|
||||||
{
|
{
|
||||||
|
if(!sGodTools) return;
|
||||||
LLViewerRegion *region = gAgent.getRegion();
|
LLViewerRegion *region = gAgent.getRegion();
|
||||||
if (region
|
if (region && gAgent.isGodlike())
|
||||||
&& sGodTools
|
|
||||||
&& gAgent.isGodlike())
|
|
||||||
{
|
{
|
||||||
sGodTools->sendRegionInfoRequest();
|
sGodTools->sendRegionInfoRequest();
|
||||||
}
|
}
|
||||||
@@ -827,11 +828,9 @@ void LLPanelRegionTools::onRefresh(void* userdata)
|
|||||||
// static
|
// static
|
||||||
void LLPanelRegionTools::onApplyChanges(void* userdata)
|
void LLPanelRegionTools::onApplyChanges(void* userdata)
|
||||||
{
|
{
|
||||||
|
if(!sGodTools) return;
|
||||||
LLViewerRegion *region = gAgent.getRegion();
|
LLViewerRegion *region = gAgent.getRegion();
|
||||||
if (region
|
if (region && userdata && gAgent.isGodlike())
|
||||||
&& sGodTools
|
|
||||||
&& userdata
|
|
||||||
&& gAgent.isGodlike())
|
|
||||||
{
|
{
|
||||||
LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
|
LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
|
||||||
|
|
||||||
@@ -840,19 +839,19 @@ void LLPanelRegionTools::onApplyChanges(void* userdata)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void LLPanelRegionTools::onBakeTerrain(void *userdata)
|
void LLPanelRegionTools::onBakeTerrain(void *userdata)
|
||||||
{
|
{
|
||||||
LLPanelRequestTools::sendRequest("terrain", "bake", gAgent.getRegionHost());
|
LLPanelRequestTools::sendRequest("terrain", "bake", gAgent.getRegionHost());
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void LLPanelRegionTools::onRevertTerrain(void *userdata)
|
void LLPanelRegionTools::onRevertTerrain(void *userdata)
|
||||||
{
|
{
|
||||||
LLPanelRequestTools::sendRequest("terrain", "revert", gAgent.getRegionHost());
|
LLPanelRequestTools::sendRequest("terrain", "revert", gAgent.getRegionHost());
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void LLPanelRegionTools::onSwapTerrain(void *userdata)
|
void LLPanelRegionTools::onSwapTerrain(void *userdata)
|
||||||
{
|
{
|
||||||
LLPanelRequestTools::sendRequest("terrain", "swap", gAgent.getRegionHost());
|
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);
|
S32 option = LLNotification::getSelectedOption(notification, response);
|
||||||
|
|
||||||
|
|
||||||
if (option == 0)
|
if (option == 0)
|
||||||
{
|
{
|
||||||
LLMessageSystem* msg = gMessageSystem;
|
LLMessageSystem* msg = gMessageSystem;
|
||||||
@@ -1027,7 +1025,8 @@ bool LLPanelGridTools::flushMapVisibilityCachesConfirm(const LLSD& notification,
|
|||||||
|
|
||||||
// Default constructor
|
// Default constructor
|
||||||
LLPanelObjectTools::LLPanelObjectTools(const std::string& title)
|
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;
|
mTargetAvatar = target_id;
|
||||||
if (target_id.isNull())
|
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
|
// static
|
||||||
void LLPanelObjectTools::onGetTopColliders(void* userdata)
|
void LLPanelObjectTools::onGetTopColliders(void* userdata)
|
||||||
{
|
{
|
||||||
if (sGodTools
|
if(!sGodTools) return;
|
||||||
&& gAgent.isGodlike())
|
|
||||||
|
if (gAgent.isGodlike())
|
||||||
{
|
{
|
||||||
LLFloaterTopObjects::show();
|
LLFloaterTopObjects::show();
|
||||||
LLFloaterTopObjects::setMode(STAT_REPORT_TOP_COLLIDERS);
|
LLFloaterTopObjects::setMode(STAT_REPORT_TOP_COLLIDERS);
|
||||||
@@ -1158,8 +1158,9 @@ void LLPanelObjectTools::onGetTopColliders(void* userdata)
|
|||||||
// static
|
// static
|
||||||
void LLPanelObjectTools::onGetTopScripts(void* userdata)
|
void LLPanelObjectTools::onGetTopScripts(void* userdata)
|
||||||
{
|
{
|
||||||
if (sGodTools
|
if(!sGodTools) return;
|
||||||
&& gAgent.isGodlike())
|
|
||||||
|
if (gAgent.isGodlike())
|
||||||
{
|
{
|
||||||
LLFloaterTopObjects::show();
|
LLFloaterTopObjects::show();
|
||||||
LLFloaterTopObjects::setMode(STAT_REPORT_TOP_SCRIPTS);
|
LLFloaterTopObjects::setMode(STAT_REPORT_TOP_SCRIPTS);
|
||||||
@@ -1170,8 +1171,7 @@ void LLPanelObjectTools::onGetTopScripts(void* userdata)
|
|||||||
// static
|
// static
|
||||||
void LLPanelObjectTools::onGetScriptDigest(void* userdata)
|
void LLPanelObjectTools::onGetScriptDigest(void* userdata)
|
||||||
{
|
{
|
||||||
if (sGodTools
|
if (sGodTools && gAgent.isGodlike())
|
||||||
&& gAgent.isGodlike())
|
|
||||||
{
|
{
|
||||||
// get the list of scripts and number of occurences of each
|
// get the list of scripts and number of occurences of each
|
||||||
// (useful for finding self-replicating objects)
|
// (useful for finding self-replicating objects)
|
||||||
@@ -1281,7 +1281,10 @@ void LLPanelObjectTools::onClickSetBySelection(void* data)
|
|||||||
LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
|
LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
|
||||||
|
|
||||||
panelp->mTargetAvatar = owner_id;
|
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);
|
panelp->childSetValue("target_avatar_name", name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1295,11 +1298,10 @@ void LLPanelObjectTools::callbackAvatarID(const std::vector<std::string>& names,
|
|||||||
object_tools->refresh();
|
object_tools->refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void LLPanelObjectTools::onChangeAnything(LLUICtrl* ctrl, void* userdata)
|
void LLPanelObjectTools::onChangeAnything(LLUICtrl* ctrl, void* userdata)
|
||||||
{
|
{
|
||||||
if (sGodTools
|
if (sGodTools
|
||||||
&& userdata
|
&& userdata
|
||||||
&& gAgent.isGodlike())
|
&& gAgent.isGodlike())
|
||||||
{
|
{
|
||||||
@@ -1311,15 +1313,12 @@ void LLPanelObjectTools::onChangeAnything(LLUICtrl* ctrl, void* userdata)
|
|||||||
// static
|
// static
|
||||||
void LLPanelObjectTools::onApplyChanges(void* userdata)
|
void LLPanelObjectTools::onApplyChanges(void* userdata)
|
||||||
{
|
{
|
||||||
|
if(!sGodTools) return;
|
||||||
LLViewerRegion *region = gAgent.getRegion();
|
LLViewerRegion *region = gAgent.getRegion();
|
||||||
if (region
|
if (region && userdata && gAgent.isGodlike())
|
||||||
&& sGodTools
|
|
||||||
&& userdata
|
|
||||||
&& gAgent.isGodlike())
|
|
||||||
{
|
{
|
||||||
LLPanelObjectTools* object_tools = (LLPanelObjectTools*) userdata;
|
LLPanelObjectTools* object_tools = (LLPanelObjectTools*) userdata;
|
||||||
// TODO -- implement this
|
// TODO -- implement this
|
||||||
|
|
||||||
object_tools->childDisable("Apply");
|
object_tools->childDisable("Apply");
|
||||||
sGodTools->sendGodUpdateRegionInfo();
|
sGodTools->sendGodUpdateRegionInfo();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2260,8 +2260,8 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
|
|||||||
BOOL allow_damage = !self->mCheckSafe->get();
|
BOOL allow_damage = !self->mCheckSafe->get();
|
||||||
BOOL allow_fly = self->mCheckFly->get();
|
BOOL allow_fly = self->mCheckFly->get();
|
||||||
BOOL allow_landmark = self->mCheckLandmark->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_other_scripts = self->mCheckOtherScripts->get();
|
||||||
|
BOOL allow_group_scripts = self->mCheckGroupScripts->get() || allow_other_scripts;
|
||||||
BOOL allow_publish = FALSE;
|
BOOL allow_publish = FALSE;
|
||||||
BOOL mature_publish = self->mMatureCtrl->get();
|
BOOL mature_publish = self->mMatureCtrl->get();
|
||||||
BOOL push_restriction = self->mPushRestrictionCtrl->get();
|
BOOL push_restriction = self->mPushRestrictionCtrl->get();
|
||||||
@@ -2424,7 +2424,7 @@ void LLPanelLandAccess::refresh()
|
|||||||
mListAccess->deleteAllItems();
|
mListAccess->deleteAllItems();
|
||||||
if (mListBanned)
|
if (mListBanned)
|
||||||
mListBanned->deleteAllItems();
|
mListBanned->deleteAllItems();
|
||||||
|
|
||||||
LLParcel *parcel = mParcel->getParcel();
|
LLParcel *parcel = mParcel->getParcel();
|
||||||
|
|
||||||
// Display options
|
// Display options
|
||||||
|
|||||||
@@ -157,7 +157,10 @@ BOOL LLFloaterNameDesc::postBuild()
|
|||||||
|
|
||||||
// OK button
|
// OK button
|
||||||
childSetLabelArg("ok_btn", "[UPLOADFEE]", gHippoGridManager->getConnectedGrid()->getUploadFee());
|
childSetLabelArg("ok_btn", "[UPLOADFEE]", gHippoGridManager->getConnectedGrid()->getUploadFee());
|
||||||
//childSetAction("ok_btn", onBtnOK, this);
|
if (exten == "wav")
|
||||||
|
{
|
||||||
|
childSetAction("ok_btn", onBtnOK, this);
|
||||||
|
}
|
||||||
setDefaultBtn("ok_btn");
|
setDefaultBtn("ok_btn");
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|||||||
@@ -165,6 +165,7 @@ bool estate_dispatch_initialized = false;
|
|||||||
//S32 LLFloaterRegionInfo::sRequestSerial = 0;
|
//S32 LLFloaterRegionInfo::sRequestSerial = 0;
|
||||||
LLUUID LLFloaterRegionInfo::sRequestInvoice;
|
LLUUID LLFloaterRegionInfo::sRequestInvoice;
|
||||||
|
|
||||||
|
|
||||||
LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed)
|
LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed)
|
||||||
{
|
{
|
||||||
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_region_info.xml", NULL, FALSE);
|
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_region_info.xml", NULL, FALSE);
|
||||||
@@ -176,26 +177,6 @@ BOOL LLFloaterRegionInfo::postBuild()
|
|||||||
|
|
||||||
// contruct the panels
|
// contruct the panels
|
||||||
LLPanelRegionInfo* panel;
|
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;
|
panel = new LLPanelEstateInfo;
|
||||||
mInfoPanels.push_back(panel);
|
mInfoPanels.push_back(panel);
|
||||||
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_estate.xml");
|
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_estate.xml");
|
||||||
@@ -206,6 +187,26 @@ BOOL LLFloaterRegionInfo::postBuild()
|
|||||||
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_covenant.xml");
|
LLUICtrlFactory::getInstance()->buildPanel(panel, "panel_region_covenant.xml");
|
||||||
mTab->addTabPanel(panel, panel->getLabel(), FALSE);
|
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(
|
gMessageSystem->setHandlerFunc(
|
||||||
"EstateOwnerMessage",
|
"EstateOwnerMessage",
|
||||||
&processEstateOwnerRequest);
|
&processEstateOwnerRequest);
|
||||||
@@ -331,6 +332,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
|
|||||||
msg->getSize("RegionInfo2", "ProductName") > 0)
|
msg->getSize("RegionInfo2", "ProductName") > 0)
|
||||||
{
|
{
|
||||||
msg->getString("RegionInfo2", "ProductName", sim_type);
|
msg->getString("RegionInfo2", "ProductName", sim_type);
|
||||||
|
LLTrans::findString(sim_type, sim_type); // try localizing sim product name
|
||||||
}
|
}
|
||||||
|
|
||||||
// GENERAL PANEL
|
// GENERAL PANEL
|
||||||
@@ -1234,6 +1236,7 @@ bool LLPanelRegionTerrainInfo::refreshFromRegion(LLViewerRegion* region)
|
|||||||
return LLPanelRegionInfo::refreshFromRegion(region);
|
return LLPanelRegionInfo::refreshFromRegion(region);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// virtual
|
// virtual
|
||||||
BOOL LLPanelRegionTerrainInfo::sendUpdate()
|
BOOL LLPanelRegionTerrainInfo::sendUpdate()
|
||||||
{
|
{
|
||||||
@@ -1390,6 +1393,7 @@ bool LLPanelRegionTerrainInfo::callbackBakeTerrain(const LLSD& notification, con
|
|||||||
strings.push_back("bake");
|
strings.push_back("bake");
|
||||||
LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
|
LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
|
||||||
sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
|
sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1669,26 +1673,29 @@ bool LLPanelEstateInfo::kickUserConfirm(const LLSD& notification, const LLSD& re
|
|||||||
std::string all_estates_text()
|
std::string all_estates_text()
|
||||||
{
|
{
|
||||||
LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
|
LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
|
||||||
if (!panel) return "(error)";
|
if (!panel) return "(" + LLTrans::getString("RegionInfoError") + ")";
|
||||||
|
|
||||||
|
LLStringUtil::format_map_t args;
|
||||||
std::string owner = panel->getOwnerName();
|
std::string owner = panel->getOwnerName();
|
||||||
|
|
||||||
LLViewerRegion* region = gAgent.getRegion();
|
LLViewerRegion* region = gAgent.getRegion();
|
||||||
if (gAgent.isGodlike())
|
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())
|
else if (region && region->getOwner() == gAgent.getID())
|
||||||
{
|
{
|
||||||
return "all estates you own";
|
return LLTrans::getString("RegionInfoAllEstatesYouOwn");
|
||||||
}
|
}
|
||||||
else if (region && region->isEstateManager())
|
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
|
else
|
||||||
{
|
{
|
||||||
return "(error)";
|
return "(" + LLTrans::getString("RegionInfoError") + ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2254,6 +2261,7 @@ bool LLPanelEstateInfo::callbackChangeLindenEstate(const LLSD& notification, con
|
|||||||
LLFloaterRegionInfo::nextInvoice();
|
LLFloaterRegionInfo::nextInvoice();
|
||||||
commitEstateInfoDataserver();
|
commitEstateInfoDataserver();
|
||||||
}
|
}
|
||||||
|
|
||||||
// we don't want to do this because we'll get it automatically from the sim
|
// we don't want to do this because we'll get it automatically from the sim
|
||||||
// after the spaceserver processes it
|
// after the spaceserver processes it
|
||||||
// else
|
// else
|
||||||
@@ -2723,7 +2731,6 @@ bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region)
|
|||||||
region_landtype->setText(region->getLocalizedSimProductName());
|
region_landtype->setText(region->getLocalizedSimProductName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// let the parent class handle the general data collection.
|
// let the parent class handle the general data collection.
|
||||||
bool rv = LLPanelRegionInfo::refreshFromRegion(region);
|
bool rv = LLPanelRegionInfo::refreshFromRegion(region);
|
||||||
LLMessageSystem *msg = gMessageSystem;
|
LLMessageSystem *msg = gMessageSystem;
|
||||||
@@ -2863,7 +2870,7 @@ void LLPanelEstateCovenant::loadInvItem(LLInventoryItem *itemp)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
mAssetStatus = ASSET_LOADED;
|
mAssetStatus = ASSET_LOADED;
|
||||||
setCovenantTextEditor("There is no Covenant provided for this Estate.");
|
setCovenantTextEditor(LLTrans::getString("RegionNoCovenant"));
|
||||||
sendChangeCovenantID(LLUUID::null);
|
sendChangeCovenantID(LLUUID::null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3179,9 +3186,10 @@ bool LLDispatchSetEstateAccess::operator()(
|
|||||||
totalAllowedAgents += allowed_agent_name_list->getItemCount();
|
totalAllowedAgents += allowed_agent_name_list->getItemCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string msg = llformat("Allowed residents: (%d, max %d)",
|
LLStringUtil::format_map_t args;
|
||||||
totalAllowedAgents,
|
args["[ALLOWEDAGENTS]"] = llformat ("%d", totalAllowedAgents);
|
||||||
ESTATE_MAX_ACCESS_IDS);
|
args["[MAXACCESS]"] = llformat ("%d", ESTATE_MAX_ACCESS_IDS);
|
||||||
|
std::string msg = LLTrans::getString("RegionInfoAllowedResidents", args);
|
||||||
panel->childSetValue("allow_resident_label", LLSD(msg));
|
panel->childSetValue("allow_resident_label", LLSD(msg));
|
||||||
|
|
||||||
if (allowed_agent_name_list)
|
if (allowed_agent_name_list)
|
||||||
@@ -3203,9 +3211,10 @@ bool LLDispatchSetEstateAccess::operator()(
|
|||||||
LLNameListCtrl* allowed_group_name_list;
|
LLNameListCtrl* allowed_group_name_list;
|
||||||
allowed_group_name_list = panel->getChild<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)",
|
LLStringUtil::format_map_t args;
|
||||||
num_allowed_groups,
|
args["[ALLOWEDGROUPS]"] = llformat ("%d", num_allowed_groups);
|
||||||
(S32) ESTATE_MAX_GROUP_IDS);
|
args["[MAXACCESS]"] = llformat ("%d", ESTATE_MAX_GROUP_IDS);
|
||||||
|
std::string msg = LLTrans::getString("RegionInfoAllowedGroups", args);
|
||||||
panel->childSetValue("allow_group_label", LLSD(msg));
|
panel->childSetValue("allow_group_label", LLSD(msg));
|
||||||
|
|
||||||
if (allowed_group_name_list)
|
if (allowed_group_name_list)
|
||||||
|
|||||||
@@ -64,6 +64,7 @@
|
|||||||
#include "llscrolllistctrl.h"
|
#include "llscrolllistctrl.h"
|
||||||
#include "lltextbox.h"
|
#include "lltextbox.h"
|
||||||
#include "lltracker.h"
|
#include "lltracker.h"
|
||||||
|
#include "lltrans.h"
|
||||||
#include "llurldispatcher.h"
|
#include "llurldispatcher.h"
|
||||||
#include "llviewermenu.h"
|
#include "llviewermenu.h"
|
||||||
#include "llviewerregion.h"
|
#include "llviewerregion.h"
|
||||||
@@ -1625,7 +1626,8 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
|
|||||||
}
|
}
|
||||||
else
|
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);
|
list->operateOnAll(LLCtrlListInterface::OP_DESELECT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,19 +50,20 @@
|
|||||||
#include "llchat.h"
|
#include "llchat.h"
|
||||||
#include "llconsole.h"
|
#include "llconsole.h"
|
||||||
#include "llfloater.h"
|
#include "llfloater.h"
|
||||||
#include "llfloatergroupinfo.h"
|
|
||||||
#include "llimview.h"
|
|
||||||
#include "llfloaterinventory.h"
|
|
||||||
#include "llinventory.h"
|
|
||||||
#include "llinventoryfunctions.h"
|
|
||||||
#include "llfloateractivespeakers.h"
|
#include "llfloateractivespeakers.h"
|
||||||
#include "llfloateravatarinfo.h"
|
#include "llfloateravatarinfo.h"
|
||||||
#include "llfloaterchat.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 "llkeyboard.h"
|
||||||
#include "lllineeditor.h"
|
#include "lllineeditor.h"
|
||||||
#include "llcheckboxctrl.h"
|
|
||||||
#include "llnotify.h"
|
#include "llnotify.h"
|
||||||
#include "llresmgr.h"
|
#include "llresmgr.h"
|
||||||
|
#include "lltrans.h"
|
||||||
#include "lltabcontainer.h"
|
#include "lltabcontainer.h"
|
||||||
#include "llviewertexteditor.h"
|
#include "llviewertexteditor.h"
|
||||||
#include "llviewermessage.h"
|
#include "llviewermessage.h"
|
||||||
@@ -2544,7 +2545,7 @@ void LLFloaterIMPanel::chatFromLogFile(LLLogChat::ELogLineType type, std::string
|
|||||||
// add log end message
|
// add log end message
|
||||||
if (gSavedPerAccountSettings.getBOOL("LogInstantMessages"))
|
if (gSavedPerAccountSettings.getBOOL("LogInstantMessages"))
|
||||||
{
|
{
|
||||||
message = LLFloaterChat::getInstance()->getString("IM_logging_string");
|
message = LLFloaterChat::getInstance()->getString("IM_end_log_string");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LLLogChat::LOG_LINE:
|
case LLLogChat::LOG_LINE:
|
||||||
@@ -2562,19 +2563,8 @@ void LLFloaterIMPanel::chatFromLogFile(LLLogChat::ELogLineType type, std::string
|
|||||||
void LLFloaterIMPanel::showSessionStartError(
|
void LLFloaterIMPanel::showSessionStartError(
|
||||||
const std::string& error_string)
|
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;
|
LLSD args;
|
||||||
args["REASON"] =
|
args["REASON"] = LLTrans::getString(error_string);
|
||||||
LLFloaterIM::sErrorStringsMap[error_string];
|
|
||||||
args["RECIPIENT"] = getTitle();
|
args["RECIPIENT"] = getTitle();
|
||||||
|
|
||||||
LLSD payload;
|
LLSD payload;
|
||||||
@@ -2592,13 +2582,14 @@ void LLFloaterIMPanel::showSessionEventError(
|
|||||||
const std::string& error_string)
|
const std::string& error_string)
|
||||||
{
|
{
|
||||||
LLSD args;
|
LLSD args;
|
||||||
std::string recipient = getTitle();
|
LLStringUtil::format_map_t event_args;
|
||||||
std::string reason = LLFloaterIM::sErrorStringsMap[error_string];
|
|
||||||
boost::replace_all(reason, "[RECIPIENT]", recipient);
|
event_args["RECIPIENT"] = getTitle();
|
||||||
std::string event = LLFloaterIM::sEventStringsMap[event_string];
|
|
||||||
boost::replace_all(event, "[RECIPIENT]", recipient);
|
args["REASON"] =
|
||||||
args["REASON"] = reason;
|
LLTrans::getString(error_string);
|
||||||
args["EVENT"] = event;
|
args["EVENT"] =
|
||||||
|
LLTrans::getString(event_string, event_args);
|
||||||
|
|
||||||
LLNotifications::instance().add(
|
LLNotifications::instance().add(
|
||||||
"ChatterBoxSessionEventError",
|
"ChatterBoxSessionEventError",
|
||||||
@@ -2611,7 +2602,7 @@ void LLFloaterIMPanel::showSessionForceClose(
|
|||||||
LLSD args;
|
LLSD args;
|
||||||
|
|
||||||
args["NAME"] = getTitle();
|
args["NAME"] = getTitle();
|
||||||
args["REASON"] = LLFloaterIM::sForceCloseSessionMap[reason_string];
|
args["REASON"] = LLTrans::getString(reason_string);
|
||||||
|
|
||||||
LLSD payload;
|
LLSD payload;
|
||||||
payload["session_id"] = mSessionUUID;
|
payload["session_id"] = mSessionUUID;
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
#include "llhttpclient.h"
|
#include "llhttpclient.h"
|
||||||
#include "llsdutil_math.h"
|
#include "llsdutil_math.h"
|
||||||
#include "llstring.h"
|
#include "llstring.h"
|
||||||
|
#include "lltrans.h"
|
||||||
#include "lluictrlfactory.h"
|
#include "lluictrlfactory.h"
|
||||||
|
|
||||||
#include "llagent.h"
|
#include "llagent.h"
|
||||||
@@ -81,19 +82,6 @@
|
|||||||
//
|
//
|
||||||
LLIMMgr* gIMMgr = NULL;
|
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
|
// Helper Functions
|
||||||
//
|
//
|
||||||
@@ -172,18 +160,16 @@ public:
|
|||||||
gIMMgr->clearPendingAgentListUpdates(mSessionID);
|
gIMMgr->clearPendingAgentListUpdates(mSessionID);
|
||||||
gIMMgr->clearPendingInvitation(mSessionID);
|
gIMMgr->clearPendingInvitation(mSessionID);
|
||||||
|
|
||||||
LLFloaterIMPanel* floaterp =
|
LLFloaterIMPanel* floaterp = gIMMgr->findFloaterBySession(mSessionID);
|
||||||
gIMMgr->findFloaterBySession(mSessionID);
|
|
||||||
|
|
||||||
if ( floaterp )
|
if ( floaterp )
|
||||||
{
|
{
|
||||||
if ( 404 == statusNum )
|
if ( 404 == statusNum )
|
||||||
{
|
{
|
||||||
std::string error_string;
|
std::string error_string;
|
||||||
error_string = "does not exist";
|
error_string = "session_does_not_exist_error";
|
||||||
|
|
||||||
floaterp->showSessionStartError(
|
floaterp->showSessionStartError(error_string);
|
||||||
error_string);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -250,86 +236,6 @@ LLFloaterIM::LLFloaterIM()
|
|||||||
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_im.xml");
|
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
|
// Class LLIMViewFriendObserver
|
||||||
//
|
//
|
||||||
@@ -645,10 +551,10 @@ void LLIMMgr::addMessage(
|
|||||||
{
|
{
|
||||||
// *TODO:translate (low priority, god ability)
|
// *TODO:translate (low priority, god ability)
|
||||||
std::ostringstream bonus_info;
|
std::ostringstream bonus_info;
|
||||||
bonus_info << "*** parent estate: "
|
bonus_info << LLTrans::getString("***")+ " "+ LLTrans::getString("IMParentEstate") + LLTrans::getString(":") + " "
|
||||||
<< parent_estate_id
|
<< parent_estate_id
|
||||||
<< ((parent_estate_id == 1) ? ", mainland" : "")
|
<< ((parent_estate_id == 1) ? LLTrans::getString(",") + LLTrans::getString("IMMainland") : "")
|
||||||
<< ((parent_estate_id == 5) ? ", teen" : "");
|
<< ((parent_estate_id == 5) ? LLTrans::getString(",") + LLTrans::getString ("IMTeen") : "");
|
||||||
|
|
||||||
// once we have web-services (or something) which returns
|
// once we have web-services (or something) which returns
|
||||||
// information about a region id, we can print this out
|
// 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)
|
// null session id means near me (chat history)
|
||||||
if (session_id.isNull())
|
if (session_id.isNull())
|
||||||
{
|
{
|
||||||
LLFloaterChat* floaterp = LLFloaterChat::getInstance();
|
message = LLTrans::getString(message_name);
|
||||||
|
|
||||||
message = floaterp->getString(message_name);
|
|
||||||
message.setArgs(args);
|
message.setArgs(args);
|
||||||
|
|
||||||
LLChat chat(message);
|
LLChat chat(message);
|
||||||
chat.mSourceType = CHAT_SOURCE_SYSTEM;
|
chat.mSourceType = CHAT_SOURCE_SYSTEM;
|
||||||
|
|
||||||
LLFloaterChat::getInstance()->addChatHistory(chat);
|
LLFloaterChat::getInstance()->addChatHistory(chat);
|
||||||
}
|
}
|
||||||
else // going to IM session
|
else // going to IM session
|
||||||
{
|
{
|
||||||
LLFloaterIMPanel* floaterp = findFloaterBySession(session_id);
|
message = LLTrans::getString(message_name + "-im");
|
||||||
if (floaterp)
|
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());
|
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
|
// 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)
|
BOOL LLIMMgr::isIMSessionOpen(const LLUUID& uuid)
|
||||||
{
|
{
|
||||||
LLFloaterIMPanel* floater = findFloaterBySession(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);
|
LLUUID session_id = addSession(name, IM_NOTHING_SPECIAL, other_participant_id);
|
||||||
|
|
||||||
LLFloaterIMPanel* floater = findFloaterBySession(session_id);
|
LLFloaterIMPanel* floater = findFloaterBySession(session_id);
|
||||||
if(floater)
|
if (floater)
|
||||||
{
|
{
|
||||||
LLVoiceChannelP2P* voice_channelp = (LLVoiceChannelP2P*)floater->getVoiceChannel();
|
LLVoiceChannelP2P* voice_channel = dynamic_cast<LLVoiceChannelP2P*>(floater->getVoiceChannel());
|
||||||
voice_channelp->setSessionHandle(voice_session_handle, caller_uri);
|
if (voice_channel)
|
||||||
|
{
|
||||||
|
voice_channel->setSessionHandle(voice_session_handle, caller_uri);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return session_id;
|
return session_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -951,7 +856,7 @@ void LLIMMgr::inviteToSession(
|
|||||||
payload["session_handle"] = session_handle;
|
payload["session_handle"] = session_handle;
|
||||||
payload["session_uri"] = session_uri;
|
payload["session_uri"] = session_uri;
|
||||||
payload["notify_box_type"] = notify_box_type;
|
payload["notify_box_type"] = notify_box_type;
|
||||||
|
|
||||||
LLVoiceChannel* channelp = LLVoiceChannel::getChannelByID(session_id);
|
LLVoiceChannel* channelp = LLVoiceChannel::getChannelByID(session_id);
|
||||||
if (channelp && channelp->callStarted())
|
if (channelp && channelp->callStarted())
|
||||||
{
|
{
|
||||||
@@ -962,17 +867,13 @@ void LLIMMgr::inviteToSession(
|
|||||||
|
|
||||||
if (type == IM_SESSION_P2P_INVITE || ad_hoc_invite)
|
if (type == IM_SESSION_P2P_INVITE || ad_hoc_invite)
|
||||||
{
|
{
|
||||||
// is the inviter a friend?
|
if ( // we're rejecting non-friend voice calls and this isn't a friend
|
||||||
if (LLAvatarTracker::instance().getBuddyInfo(caller_id) == NULL)
|
(gSavedSettings.getBOOL("VoiceCallsFriendsOnly") && (LLAvatarTracker::instance().getBuddyInfo(caller_id) == NULL))
|
||||||
|
)
|
||||||
{
|
{
|
||||||
// if not, and we are ignoring voice invites from non-friends
|
// silently decline the call
|
||||||
// then silently decline
|
LLNotifications::instance().forceResponse(LLNotification::Params("VoiceInviteP2P").payload(payload), 1);
|
||||||
if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly"))
|
return;
|
||||||
{
|
|
||||||
// invite not from a friend, so decline
|
|
||||||
LLNotifications::instance().forceResponse(LLNotification::Params("VoiceInviteP2P").payload(payload), 1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -980,7 +881,8 @@ void LLIMMgr::inviteToSession(
|
|||||||
{
|
{
|
||||||
if (caller_name.empty())
|
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
|
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)
|
void LLIMMgr::onInviteNameLookup(const LLUUID& id, const std::string& full_name, bool is_group, LLSD payload)
|
||||||
{
|
{
|
||||||
payload["caller_name"] = full_name;
|
payload["caller_name"] = full_name;
|
||||||
@@ -1234,7 +1136,8 @@ void LLIMMgr::noteOfflineUsers(
|
|||||||
S32 count = ids.count();
|
S32 count = ids.count();
|
||||||
if(count == 0)
|
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
|
else
|
||||||
{
|
{
|
||||||
@@ -1244,10 +1147,11 @@ void LLIMMgr::noteOfflineUsers(
|
|||||||
{
|
{
|
||||||
info = at.getBuddyInfo(ids.get(i));
|
info = at.getBuddyInfo(ids.get(i));
|
||||||
std::string full_name;
|
std::string full_name;
|
||||||
if(info && !info->isOnline()
|
if (info
|
||||||
&& gCacheName->getFullName(ids.get(i), full_name))
|
&& !info->isOnline()
|
||||||
|
&& gCacheName->getFullName(ids.get(i), full_name))
|
||||||
{
|
{
|
||||||
LLUIString offline = sOfflineMessage;
|
LLUIString offline = LLTrans::getString("offline_message");
|
||||||
offline.setArg("[NAME]", full_name);
|
offline.setArg("[NAME]", full_name);
|
||||||
floater->addHistoryLine(offline, gSavedSettings.getColor4("SystemChatColor"));
|
floater->addHistoryLine(offline, gSavedSettings.getColor4("SystemChatColor"));
|
||||||
}
|
}
|
||||||
@@ -1272,7 +1176,8 @@ void LLIMMgr::noteMutedUsers(LLFloaterIMPanel* floater,
|
|||||||
{
|
{
|
||||||
if( ml->isMuted(ids.get(i)) )
|
if( ml->isMuted(ids.get(i)) )
|
||||||
{
|
{
|
||||||
LLUIString muted = sMutedMessage;
|
LLUIString muted = LLTrans::getString("muted_message");
|
||||||
|
|
||||||
floater->addHistoryLine(muted);
|
floater->addHistoryLine(muted);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1474,10 +1379,8 @@ public:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//throw an error dialog and close the temp session's
|
//throw an error dialog and close the temp session's floater
|
||||||
//floater
|
LLFloaterIMPanel* floater = gIMMgr->findFloaterBySession(temp_session_id);
|
||||||
LLFloaterIMPanel* floater =
|
|
||||||
gIMMgr->findFloaterBySession(temp_session_id);
|
|
||||||
|
|
||||||
if ( floater )
|
if ( floater )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ private:
|
|||||||
std::list<LLUUID> mIgnoreGroupList;
|
std::list<LLUUID> mIgnoreGroupList;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
S32 getIgnoreGroupListCount() { return mIgnoreGroupList.size(); }
|
S32 getIgnoreGroupListCount() { return mIgnoreGroupList.size(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -230,11 +230,6 @@ class LLFloaterIM : public LLMultiFloater
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LLFloaterIM();
|
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
|
// Globals
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ public:
|
|||||||
public:
|
public:
|
||||||
Matcher(){}
|
Matcher(){}
|
||||||
virtual ~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.
|
// 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.
|
// Useful when muting people and things in order to clear out any similar previously queued messages.
|
||||||
|
|||||||
@@ -1105,7 +1105,7 @@ void LLGroupMoneyDetailsTabEventHandler::processReply(LLMessageSystem* msg,
|
|||||||
|
|
||||||
text.append(1, '\n');
|
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 )
|
if ( mImplementationp->mTextEditorp )
|
||||||
{
|
{
|
||||||
@@ -1227,7 +1227,7 @@ void LLGroupMoneySalesTabEventHandler::processReply(LLMessageSystem* msg,
|
|||||||
S32 transactions = msg->getNumberOfBlocksFast(_PREHASH_HistoryData);
|
S32 transactions = msg->getNumberOfBlocksFast(_PREHASH_HistoryData);
|
||||||
if (transactions == 0)
|
if (transactions == 0)
|
||||||
{
|
{
|
||||||
text.append("(none)");
|
text.append(LLTrans::getString("none_text"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1252,22 +1252,22 @@ void LLGroupMoneySalesTabEventHandler::processReply(LLMessageSystem* msg,
|
|||||||
switch(type)
|
switch(type)
|
||||||
{
|
{
|
||||||
case TRANS_OBJECT_SALE:
|
case TRANS_OBJECT_SALE:
|
||||||
verb = "bought";
|
verb = LLTrans::getString("GroupMoneyBought").c_str();
|
||||||
break;
|
break;
|
||||||
case TRANS_GIFT:
|
case TRANS_GIFT:
|
||||||
verb = "paid you";
|
verb = LLTrans::getString("GroupMoneyPaidYou").c_str();
|
||||||
break;
|
break;
|
||||||
case TRANS_PAY_OBJECT:
|
case TRANS_PAY_OBJECT:
|
||||||
verb = "paid into";
|
verb = LLTrans::getString("GroupMoneyPaidInto").c_str();
|
||||||
break;
|
break;
|
||||||
case TRANS_LAND_PASS_SALE:
|
case TRANS_LAND_PASS_SALE:
|
||||||
verb = "bought pass to";
|
verb = LLTrans::getString("GroupMoneyBoughtPassTo").c_str();
|
||||||
break;
|
break;
|
||||||
case TRANS_EVENT_FEE:
|
case TRANS_EVENT_FEE:
|
||||||
verb = "paid fee for event";
|
verb = LLTrans::getString("GroupMoneyPaidFeeForEvent").c_str();
|
||||||
break;
|
break;
|
||||||
case TRANS_EVENT_PRIZE:
|
case TRANS_EVENT_PRIZE:
|
||||||
verb = "paid prize for event";
|
verb = LLTrans::getString("GroupMoneyPaidPrizeForEvent").c_str();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
verb = "";
|
verb = "";
|
||||||
@@ -1429,15 +1429,18 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
text.append("Summary for this week, beginning on ");
|
text.append(LLTrans::getString("SummaryForTheWeek"));
|
||||||
|
|
||||||
text.append(start_date);
|
text.append(start_date);
|
||||||
|
text.append(". ");
|
||||||
|
|
||||||
if (current_interval == 0)
|
if (current_interval == 0)
|
||||||
{
|
{
|
||||||
text.append("The next stipend day is ");
|
text.append(LLTrans::getString("NextStipendDay"));
|
||||||
|
|
||||||
text.append(next_stipend_date);
|
text.append(next_stipend_date);
|
||||||
text.append("\n\n");
|
text.append(".\n\n");
|
||||||
text.append(llformat("%-24s%s%6d\n", "Balance",
|
text.append(llformat("%-24s%s%6d\n", LLTrans::getString("GroupMoneyBalance").c_str(),
|
||||||
gHippoGridManager->getConnectedGrid()->getCurrencySymbol().c_str(),
|
gHippoGridManager->getConnectedGrid()->getCurrencySymbol().c_str(),
|
||||||
balance));
|
balance));
|
||||||
text.append(1, '\n');
|
text.append(1, '\n');
|
||||||
@@ -1445,15 +1448,15 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
|
|||||||
|
|
||||||
// [DEV-29503] Hide the individual info since
|
// [DEV-29503] Hide the individual info since
|
||||||
// non_exempt_member here is a wrong choice to calculate individual shares.
|
// non_exempt_member here is a wrong choice to calculate individual shares.
|
||||||
// text.append( " Group Individual Share\n");
|
// text.append( LLTrans::getString("GroupIndividualShare"));
|
||||||
// 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", LLTrans::getString("GroupMoneyCredits").c_str(), 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", LLTrans::getString("GroupMoneyDebits").c_str(), 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(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( "%s\n", LLTrans::getString("GroupColumn").c_str()));
|
||||||
text.append(llformat( "%-24s %6d\n", "Credits", total_credits));
|
text.append(llformat( "%-24s %6d\n", LLTrans::getString("GroupMoneyCredits").c_str(), total_credits));
|
||||||
text.append(llformat( "%-24s %6d\n", "Debits", total_debits));
|
text.append(llformat( "%-24s %6d\n", LLTrans::getString("GroupMoneyDebits").c_str(), total_debits));
|
||||||
text.append(llformat( "%-24s %6d\n", "Total", total_credits + total_debits));
|
text.append(llformat( "%-24s %6d\n", LLTrans::getString("GroupMoneyTotal").c_str(), total_credits + total_debits));
|
||||||
|
|
||||||
if ( mImplementationp->mTextEditorp )
|
if ( mImplementationp->mTextEditorp )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -514,8 +514,11 @@ void LLPanelObject::getState( )
|
|||||||
mCtrlPosY->setEnabled(enable_move);
|
mCtrlPosY->setEnabled(enable_move);
|
||||||
mCtrlPosZ->setEnabled(enable_move);
|
mCtrlPosZ->setEnabled(enable_move);
|
||||||
mBtnLinkObj->setEnabled(LLSelectMgr::getInstance()->enableLinkObjects());
|
mBtnLinkObj->setEnabled(LLSelectMgr::getInstance()->enableLinkObjects());
|
||||||
mBtnUnlinkObj->setEnabled((LLSelectMgr::getInstance()->enableUnlinkObjects()
|
LLViewerObject* linkset_parent = objectp->getSubParent()? objectp->getSubParent() : objectp;
|
||||||
&& (selected_count > 1) && LLSelectMgr::getInstance()->getSelection()->getRootObjectCount()<=1));
|
mBtnUnlinkObj->setEnabled(
|
||||||
|
LLSelectMgr::getInstance()->enableUnlinkObjects()
|
||||||
|
&& (linkset_parent->numChildren() >= 1)
|
||||||
|
&& LLSelectMgr::getInstance()->getSelection()->getRootObjectCount()<=1);
|
||||||
mBtnCopyPos->setEnabled(enable_move);
|
mBtnCopyPos->setEnabled(enable_move);
|
||||||
mBtnPastePos->setEnabled(enable_move);
|
mBtnPastePos->setEnabled(enable_move);
|
||||||
mBtnPastePosClip->setEnabled(enable_move);
|
mBtnPastePosClip->setEnabled(enable_move);
|
||||||
|
|||||||
@@ -94,8 +94,8 @@ public:
|
|||||||
LLTaskInvFVBridge(LLPanelObjectInventory* panel,
|
LLTaskInvFVBridge(LLPanelObjectInventory* panel,
|
||||||
const LLUUID& uuid,
|
const LLUUID& uuid,
|
||||||
const std::string& name,
|
const std::string& name,
|
||||||
U32 flags=0);
|
U32 flags=0);
|
||||||
virtual ~LLTaskInvFVBridge( ) {}
|
virtual ~LLTaskInvFVBridge() {}
|
||||||
|
|
||||||
virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; }
|
virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; }
|
||||||
virtual std::string getLabelSuffix() const { return LLStringUtil::null; }
|
virtual std::string getLabelSuffix() const { return LLStringUtil::null; }
|
||||||
@@ -243,9 +243,9 @@ void LLTaskInvFVBridge::buyItem()
|
|||||||
if (sale_info.getSaleType() != LLSaleInfo::FS_CONTENTS)
|
if (sale_info.getSaleType() != LLSaleInfo::FS_CONTENTS)
|
||||||
{
|
{
|
||||||
U32 next_owner_mask = perm.getMaskNextOwner();
|
U32 next_owner_mask = perm.getMaskNextOwner();
|
||||||
args["MODIFYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_MODIFY) ? "PermYes" : "PermNo");
|
args["MODIFYPERM"] = LLTrans::getString((next_owner_mask & PERM_MODIFY) ? "PermYes" : "PermNo");
|
||||||
args["COPYPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_COPY) ? "PermYes" : "PermNo");
|
args["COPYPERM"] = LLTrans::getString((next_owner_mask & PERM_COPY) ? "PermYes" : "PermNo");
|
||||||
args["RESELLPERM"] = LLNotifications::instance().getGlobalString((next_owner_mask & PERM_TRANSFER) ? "PermYes" : "PermNo");
|
args["RESELLPERM"] = LLTrans::getString((next_owner_mask & PERM_TRANSFER) ? "PermYes" : "PermNo");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string alertdesc;
|
std::string alertdesc;
|
||||||
@@ -318,10 +318,18 @@ const std::string& LLTaskInvFVBridge::getName() const
|
|||||||
const std::string& LLTaskInvFVBridge::getDisplayName() const
|
const std::string& LLTaskInvFVBridge::getDisplayName() const
|
||||||
{
|
{
|
||||||
LLInventoryItem* item = findItem();
|
LLInventoryItem* item = findItem();
|
||||||
|
|
||||||
if(item)
|
if(item)
|
||||||
{
|
{
|
||||||
mDisplayName.assign(item->getName());
|
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());
|
const LLPermissions& perm(item->getPermissions());
|
||||||
BOOL copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
|
BOOL copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
|
||||||
BOOL mod = gAgent.allowOperation(PERM_MODIFY, 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())
|
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
|
else
|
||||||
{
|
{
|
||||||
@@ -723,7 +733,7 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::ostringstream info;
|
std::ostringstream info;
|
||||||
info << "Buy for " << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() << price;
|
info << LLTrans::getString("Buyfor") << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() << price;
|
||||||
label.assign(info.str());
|
label.assign(info.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1013,8 +1023,8 @@ class LLTaskSoundBridge : public LLTaskInvFVBridge
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LLTaskSoundBridge(LLPanelObjectInventory* panel,
|
LLTaskSoundBridge(LLPanelObjectInventory* panel,
|
||||||
const LLUUID& uuid,
|
const LLUUID& uuid,
|
||||||
const std::string& name) :
|
const std::string& name) :
|
||||||
LLTaskInvFVBridge(panel, uuid, name) {}
|
LLTaskInvFVBridge(panel, uuid, name) {}
|
||||||
|
|
||||||
virtual BOOL canOpenItem() const { return TRUE; }
|
virtual BOOL canOpenItem() const { return TRUE; }
|
||||||
@@ -1086,7 +1096,7 @@ void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::ostringstream info;
|
std::ostringstream info;
|
||||||
info << "Buy for " << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() << price;
|
info << LLTrans::getString("Buyfor") << gHippoGridManager->getConnectedGrid()->getCurrencySymbol() << price;
|
||||||
label.assign(info.str());
|
label.assign(info.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1121,6 +1131,7 @@ void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
items.push_back(std::string("Task Play"));
|
items.push_back(std::string("Task Play"));
|
||||||
|
|
||||||
/*menu.addSeparator();
|
/*menu.addSeparator();
|
||||||
menu.append(new LLMenuItemCallGL("Play",
|
menu.append(new LLMenuItemCallGL("Play",
|
||||||
&LLTaskSoundBridge::playSound,
|
&LLTaskSoundBridge::playSound,
|
||||||
@@ -1138,8 +1149,8 @@ class LLTaskLandmarkBridge : public LLTaskInvFVBridge
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LLTaskLandmarkBridge(LLPanelObjectInventory* panel,
|
LLTaskLandmarkBridge(LLPanelObjectInventory* panel,
|
||||||
const LLUUID& uuid,
|
const LLUUID& uuid,
|
||||||
const std::string& name) :
|
const std::string& name) :
|
||||||
LLTaskInvFVBridge(panel, uuid, name) {}
|
LLTaskInvFVBridge(panel, uuid, name) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -5484,6 +5484,8 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
|
|||||||
|
|
||||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||||
gGL.pushMatrix();
|
gGL.pushMatrix();
|
||||||
|
gGL.pushUIMatrix();
|
||||||
|
gGL.loadUIIdentity();
|
||||||
gGL.loadIdentity();
|
gGL.loadIdentity();
|
||||||
gGL.loadMatrix(OGL_TO_CFR_ROTATION); // Load Cory's favorite reference frame
|
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);
|
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.matrixMode(LLRender::MM_MODELVIEW);
|
||||||
gGL.popMatrix();
|
gGL.popMatrix();
|
||||||
|
gGL.popUIMatrix();
|
||||||
stop_glerror();
|
stop_glerror();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5898,8 +5901,8 @@ void pushWireframe(LLDrawable* drawable)
|
|||||||
|
|
||||||
if (drawable->isState(LLDrawable::RIGGED))
|
if (drawable->isState(LLDrawable::RIGGED))
|
||||||
{
|
{
|
||||||
vobj->updateRiggedVolume();
|
vobj->updateRiggedVolume();
|
||||||
volume = vobj->getRiggedVolume();
|
volume = vobj->getRiggedVolume();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -5941,6 +5944,8 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color)
|
|||||||
gDebugProgram.bind();
|
gDebugProgram.bind();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static LLCachedControl<U32> mode("OutlineMode",0);
|
||||||
|
|
||||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||||
gGL.pushMatrix();
|
gGL.pushMatrix();
|
||||||
|
|
||||||
@@ -5961,10 +5966,12 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color)
|
|||||||
|
|
||||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
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())
|
if (LLSelectMgr::sRenderHiddenSelections) // && gFloaterTools && gFloaterTools->getVisible())
|
||||||
{
|
{
|
||||||
gGL.blendFunc(LLRender::BF_SOURCE_COLOR, LLRender::BF_ONE);
|
gGL.blendFunc(LLRender::BF_SOURCE_COLOR, LLRender::BF_ONE);
|
||||||
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL);
|
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL);
|
||||||
|
|
||||||
if (shader)
|
if (shader)
|
||||||
{
|
{
|
||||||
gGL.diffuseColor4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f);
|
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);
|
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);
|
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||||
gGL.popMatrix();
|
gGL.popMatrix();
|
||||||
|
|
||||||
@@ -6053,6 +6063,9 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
|
|||||||
|
|
||||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||||
gGL.pushMatrix();
|
gGL.pushMatrix();
|
||||||
|
gGL.pushUIMatrix();
|
||||||
|
gGL.loadUIIdentity();
|
||||||
|
|
||||||
if (!is_hud_object)
|
if (!is_hud_object)
|
||||||
{
|
{
|
||||||
gGL.loadIdentity();
|
gGL.loadIdentity();
|
||||||
@@ -6169,6 +6182,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
|
|||||||
gGL.flush();
|
gGL.flush();
|
||||||
}
|
}
|
||||||
gGL.popMatrix();
|
gGL.popMatrix();
|
||||||
|
gGL.popUIMatrix();
|
||||||
|
|
||||||
if (shader)
|
if (shader)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1103,6 +1103,7 @@ LLTextureCtrl::LLTextureCtrl(
|
|||||||
LLFontGL::getFontSansSerifSmall() );
|
LLFontGL::getFontSansSerifSmall() );
|
||||||
mTentativeLabel->setHAlign( LLFontGL::HCENTER );
|
mTentativeLabel->setHAlign( LLFontGL::HCENTER );
|
||||||
mTentativeLabel->setFollowsAll();
|
mTentativeLabel->setFollowsAll();
|
||||||
|
mTentativeLabel->setMouseOpaque(FALSE);
|
||||||
addChild( mTentativeLabel );
|
addChild( mTentativeLabel );
|
||||||
|
|
||||||
LLRect border_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
|
LLRect border_rect(0, getRect().getHeight(), getRect().getWidth(), 0);
|
||||||
|
|||||||
@@ -31,8 +31,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "llviewerprecompiledheaders.h"
|
#include "llviewerprecompiledheaders.h"
|
||||||
|
|
||||||
#include "llviewermessage.h"
|
#include "llviewermessage.h"
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
|
|
||||||
#include <deque>
|
#include <deque>
|
||||||
|
|
||||||
@@ -78,7 +78,6 @@
|
|||||||
#include "llviewercontrol.h"
|
#include "llviewercontrol.h"
|
||||||
#include "lldrawpool.h"
|
#include "lldrawpool.h"
|
||||||
#include "llfirstuse.h"
|
#include "llfirstuse.h"
|
||||||
#include "llfloateractivespeakers.h"
|
|
||||||
#include "llfloateranimpreview.h"
|
#include "llfloateranimpreview.h"
|
||||||
#include "llfloaterbuycurrency.h"
|
#include "llfloaterbuycurrency.h"
|
||||||
#include "llfloaterbuyland.h"
|
#include "llfloaterbuyland.h"
|
||||||
@@ -115,6 +114,7 @@
|
|||||||
#include "llstatenums.h"
|
#include "llstatenums.h"
|
||||||
#include "llstatusbar.h"
|
#include "llstatusbar.h"
|
||||||
#include "llimview.h"
|
#include "llimview.h"
|
||||||
|
#include "llfloateractivespeakers.h"
|
||||||
#include "lltexturestats.h"
|
#include "lltexturestats.h"
|
||||||
#include "lltool.h"
|
#include "lltool.h"
|
||||||
#include "lltoolbar.h"
|
#include "lltoolbar.h"
|
||||||
@@ -127,14 +127,13 @@
|
|||||||
#include "llviewerdisplay.h"
|
#include "llviewerdisplay.h"
|
||||||
#include "llviewerfoldertype.h"
|
#include "llviewerfoldertype.h"
|
||||||
#include "llviewergenericmessage.h"
|
#include "llviewergenericmessage.h"
|
||||||
|
#include "llviewermenu.h"
|
||||||
#include "llviewerinventory.h"
|
#include "llviewerinventory.h"
|
||||||
#include "llviewerjoystick.h"
|
#include "llviewerjoystick.h"
|
||||||
#include "llviewermenu.h"
|
|
||||||
#include "llviewerobject.h"
|
#include "llviewerobject.h"
|
||||||
#include "llviewerobjectlist.h"
|
#include "llviewerobjectlist.h"
|
||||||
#include "llviewerparcelmgr.h"
|
#include "llviewerparcelmgr.h"
|
||||||
#include "llviewerpartsource.h"
|
#include "llviewerpartsource.h"
|
||||||
#include "llviewerregion.h"
|
|
||||||
#include "llviewerstats.h"
|
#include "llviewerstats.h"
|
||||||
#include "llviewertexteditor.h"
|
#include "llviewertexteditor.h"
|
||||||
#include "llviewerthrottle.h"
|
#include "llviewerthrottle.h"
|
||||||
@@ -148,6 +147,7 @@
|
|||||||
#include "llfloaterworldmap.h"
|
#include "llfloaterworldmap.h"
|
||||||
#include "llviewerdisplay.h"
|
#include "llviewerdisplay.h"
|
||||||
#include "llkeythrottle.h"
|
#include "llkeythrottle.h"
|
||||||
|
#include "llviewerregion.h"
|
||||||
// <edit>
|
// <edit>
|
||||||
#include "llviewernetwork.h"
|
#include "llviewernetwork.h"
|
||||||
// </edit>
|
// </edit>
|
||||||
@@ -336,7 +336,9 @@ void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_
|
|||||||
}
|
}
|
||||||
else
|
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());
|
LLViewerRegion *regionp = LLWorld::getInstance()->getRegion(mesgsys->getSender());
|
||||||
|
|
||||||
if (!regionp || gNoRender)
|
if(!regionp || gNoRender)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
S32 size;
|
S32 size;
|
||||||
S8 type;
|
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_1("JoinGroup", join_group_response);
|
||||||
static LLNotificationFunctorRegistration jgr_2("JoinedTooManyGroupsMember", join_group_response);
|
static LLNotificationFunctorRegistration jgr_2("JoinedTooManyGroupsMember", join_group_response);
|
||||||
static LLNotificationFunctorRegistration jgr_3("JoinGroupCanAfford", 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
|
// Use the name of the last item giver, who is probably the person
|
||||||
// spamming you.
|
// 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())
|
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
|
else
|
||||||
{
|
{
|
||||||
message << ": Items coming in too fast";
|
log_msg = LLTrans::getString("ItemsComingInTooFast", arg);
|
||||||
}
|
}
|
||||||
message << ", automatic preview disabled for "
|
|
||||||
<< OFFER_THROTTLE_TIME << " seconds.";
|
chat.mText = log_msg;
|
||||||
chat.mText = message.str();
|
|
||||||
//this is kinda important, so actually put it on screen
|
//this is kinda important, so actually put it on screen
|
||||||
LLFloaterChat::addChat(chat, FALSE, FALSE);
|
LLFloaterChat::addChat(chat, FALSE, FALSE);
|
||||||
|
|
||||||
throttle_logged=true;
|
throttle_logged=true;
|
||||||
}
|
}
|
||||||
return false;
|
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)
|
void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name)
|
||||||
{
|
{
|
||||||
uuid_vec_t::const_iterator it = items.begin();
|
uuid_vec_t::const_iterator it = items.begin();
|
||||||
@@ -1321,7 +1330,7 @@ void inventory_offer_mute_callback(const LLUUID& blocked_id,
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {}
|
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"
|
if(notification->getName() == "ObjectGiveItem"
|
||||||
|| notification->getName() == "ObjectGiveItemUnknownUser"
|
|| notification->getName() == "ObjectGiveItemUnknownUser"
|
||||||
@@ -1701,7 +1710,7 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
|
|||||||
}
|
}
|
||||||
// [/RLVa:KB]
|
// [/RLVa:KB]
|
||||||
}
|
}
|
||||||
|
|
||||||
LLSD args;
|
LLSD args;
|
||||||
args["[OBJECTNAME]"] = msg;
|
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));
|
std::string typestr = ll_safe_string(LLAssetType::lookupHumanReadable(info->mType));
|
||||||
if (!typestr.empty())
|
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
|
else
|
||||||
{
|
{
|
||||||
@@ -1730,7 +1741,6 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
|
|||||||
payload["from_id"] = info->mFromID;
|
payload["from_id"] = info->mFromID;
|
||||||
args["OBJECTFROMNAME"] = info->mFromName;
|
args["OBJECTFROMNAME"] = info->mFromName;
|
||||||
args["NAME"] = info->mFromName;
|
args["NAME"] = info->mFromName;
|
||||||
|
|
||||||
if (info->mFromGroup)
|
if (info->mFromGroup)
|
||||||
{
|
{
|
||||||
std::string group_name;
|
std::string group_name;
|
||||||
@@ -1934,7 +1944,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||||||
LLChat chat;
|
LLChat chat;
|
||||||
std::string buffer;
|
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->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, from_id);
|
||||||
msg->getBOOLFast(_PREHASH_MessageBlock, _PREHASH_FromGroup, from_group);
|
msg->getBOOLFast(_PREHASH_MessageBlock, _PREHASH_FromGroup, from_group);
|
||||||
msg->getUUIDFast(_PREHASH_MessageBlock, _PREHASH_ToAgentID, to_id);
|
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)
|
if((U32)std::abs(std::distance(iter, boost::sregex_iterator())) > SpamNewlines)
|
||||||
{
|
{
|
||||||
NACLAntiSpamRegistry::blockOnQueue((U32)NACLAntiSpamRegistry::QUEUE_IM,from_id);
|
NACLAntiSpamRegistry::blockOnQueue((U32)NACLAntiSpamRegistry::QUEUE_IM,from_id);
|
||||||
|
llinfos << "[antispam] blocked owner due to too many newlines: " << from_id << llendl;
|
||||||
if(gSavedSettings.getBOOL("AntiSpamNotify"))
|
if(gSavedSettings.getBOOL("AntiSpamNotify"))
|
||||||
{
|
{
|
||||||
LLSD args;
|
LLSD args;
|
||||||
args["MESSAGE"] = "Message: Blocked newline flood from "+from_id.asString();
|
args["SOURCE"] = from_id.asString();
|
||||||
LLNotificationsUtil::add("SystemMessageTip", args);
|
args["AMOUNT"] = boost::lexical_cast<std::string>(SpamNewlines);
|
||||||
|
LLNotificationsUtil::add("AntiSpamNewlineFlood", args);
|
||||||
}
|
}
|
||||||
return;
|
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_muted = LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat);
|
||||||
BOOL is_linden = LLMuteList::getInstance()->isLinden(name);
|
BOOL is_linden = LLMuteList::getInstance()->isLinden(name);
|
||||||
BOOL is_owned_by_me = FALSE;
|
BOOL is_owned_by_me = FALSE;
|
||||||
|
|
||||||
LLUUID computed_session_id = LLIMMgr::computeSessionID(dialog,from_id);
|
LLUUID computed_session_id = LLIMMgr::computeSessionID(dialog,from_id);
|
||||||
|
|
||||||
chat.mMuted = is_muted && !is_linden;
|
chat.mMuted = is_muted && !is_linden;
|
||||||
@@ -2438,7 +2450,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||||||
case IM_MESSAGEBOX:
|
case IM_MESSAGEBOX:
|
||||||
{
|
{
|
||||||
// This is a block, modeless dialog.
|
// This is a block, modeless dialog.
|
||||||
// *TODO:translate
|
// *TODO: Translate
|
||||||
args["MESSAGE"] = message;
|
args["MESSAGE"] = message;
|
||||||
LLNotificationsUtil::add("SystemMessage", args);
|
LLNotificationsUtil::add("SystemMessage", args);
|
||||||
}
|
}
|
||||||
@@ -2598,7 +2610,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||||||
return;
|
return;
|
||||||
// NaCl End
|
// NaCl End
|
||||||
LLOfferInfo* info = new LLOfferInfo;
|
LLOfferInfo* info = new LLOfferInfo;
|
||||||
|
|
||||||
if (IM_INVENTORY_OFFERED == dialog)
|
if (IM_INVENTORY_OFFERED == dialog)
|
||||||
{
|
{
|
||||||
struct offer_agent_bucket_t
|
struct offer_agent_bucket_t
|
||||||
@@ -2642,19 +2653,12 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||||||
info->mTransactionID = session_id;
|
info->mTransactionID = session_id;
|
||||||
info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType));
|
info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType));
|
||||||
|
|
||||||
if (dialog == IM_TASK_INVENTORY_OFFERED)
|
info->mFromObject = (dialog == IM_TASK_INVENTORY_OFFERED);
|
||||||
{
|
|
||||||
info->mFromObject = TRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
info->mFromObject = FALSE;
|
|
||||||
}
|
|
||||||
info->mFromName = name;
|
info->mFromName = name;
|
||||||
info->mDesc = message;
|
info->mDesc = message;
|
||||||
info->mHost = msg->getSender();
|
info->mHost = msg->getSender();
|
||||||
//if (((is_busy && !is_owned_by_me) || is_muted))
|
//if (((is_busy && !is_owned_by_me) || is_muted))
|
||||||
if ( is_muted )
|
if (is_muted)
|
||||||
{
|
{
|
||||||
// Same as closing window
|
// Same as closing window
|
||||||
info->forceResponse(IOR_DECLINE);
|
info->forceResponse(IOR_DECLINE);
|
||||||
@@ -2810,8 +2814,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||||||
chat.mFromName = name;
|
chat.mFromName = name;
|
||||||
|
|
||||||
// Build a link to open the object IM info window.
|
// 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;
|
LLSD query_string;
|
||||||
query_string["owner"] = from_id;
|
query_string["owner"] = from_id;
|
||||||
query_string["slurl"] = location.c_str();
|
query_string["slurl"] = location.c_str();
|
||||||
@@ -2819,7 +2823,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||||||
if (from_group)
|
if (from_group)
|
||||||
{
|
{
|
||||||
query_string["groupowned"] = "true";
|
query_string["groupowned"] = "true";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (session_id.notNull())
|
if (session_id.notNull())
|
||||||
{
|
{
|
||||||
@@ -2932,7 +2936,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||||||
// [/RLVa:KB]
|
// [/RLVa:KB]
|
||||||
|
|
||||||
LLSD args;
|
LLSD args;
|
||||||
// *TODO:translate -> [FIRST] [LAST] (maybe)
|
// *TODO: Translate -> [FIRST] [LAST] (maybe)
|
||||||
args["NAME"] = name;
|
args["NAME"] = name;
|
||||||
args["MESSAGE"] = message;
|
args["MESSAGE"] = message;
|
||||||
LLSD payload;
|
LLSD payload;
|
||||||
@@ -3085,7 +3089,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
args["[MESSAGE]"] = message;
|
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)
|
void busy_message (LLMessageSystem* msg, LLUUID from_id)
|
||||||
{
|
{
|
||||||
if (gAgent.getBusy())
|
if (gAgent.getBusy())
|
||||||
@@ -3226,7 +3229,7 @@ void process_offer_callingcard(LLMessageSystem* msg, void**)
|
|||||||
LLNameValue* nvlast = source->getNVPair("LastName");
|
LLNameValue* nvlast = source->getNVPair("LastName");
|
||||||
if (nvfirst && nvlast)
|
if (nvfirst && nvlast)
|
||||||
{
|
{
|
||||||
args["NAME"] = LLCacheName::buildFullName(
|
source_name = LLCacheName::buildFullName(
|
||||||
nvfirst->getString(), nvlast->getString());
|
nvfirst->getString(), nvlast->getString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3241,6 +3244,7 @@ void process_offer_callingcard(LLMessageSystem* msg, void**)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
args["NAME"] = source_name;
|
||||||
LLNotificationsUtil::add("OfferCallingCard", args, payload);
|
LLNotificationsUtil::add("OfferCallingCard", args, payload);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3355,7 +3359,7 @@ class AuthHandler : public HippoRestHandlerRaw
|
|||||||
|
|
||||||
void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
|
void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
|
||||||
{
|
{
|
||||||
LLChat chat;
|
LLChat chat;
|
||||||
std::string mesg;
|
std::string mesg;
|
||||||
std::string from_name;
|
std::string from_name;
|
||||||
U8 source_temp;
|
U8 source_temp;
|
||||||
@@ -3376,19 +3380,15 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
|
|||||||
msg->getUUID("ChatData", "SourceID", from_id);
|
msg->getUUID("ChatData", "SourceID", from_id);
|
||||||
chat.mFromID = from_id;
|
chat.mFromID = from_id;
|
||||||
|
|
||||||
|
|
||||||
chatter = gObjectList.findObject(from_id);
|
chatter = gObjectList.findObject(from_id);
|
||||||
|
if(chatter && chatter->isAvatar())
|
||||||
if(chatter)
|
|
||||||
{
|
{
|
||||||
if(chatter->isAvatar())
|
((LLVOAvatar*)chatter)->mIdleTimer.reset();
|
||||||
{
|
|
||||||
((LLVOAvatar*)chatter)->mIdleTimer.reset();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Object owner for objects
|
||||||
msg->getUUID("ChatData", "OwnerID", owner_id);
|
msg->getUUID("ChatData", "OwnerID", owner_id);
|
||||||
|
|
||||||
msg->getU8Fast(_PREHASH_ChatData, _PREHASH_SourceType, source_temp);
|
msg->getU8Fast(_PREHASH_ChatData, _PREHASH_SourceType, source_temp);
|
||||||
chat.mSourceType = (EChatSourceType)source_temp;
|
chat.mSourceType = (EChatSourceType)source_temp;
|
||||||
|
|
||||||
@@ -3450,7 +3450,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
|
|||||||
LLSD args;
|
LLSD args;
|
||||||
args["NAME"] = from_name;
|
args["NAME"] = from_name;
|
||||||
chat.mPosAgent = chatter->getPositionAgent();
|
chat.mPosAgent = chatter->getPositionAgent();
|
||||||
|
|
||||||
// Make swirly things only for talking objects. (not script debug messages, though)
|
// Make swirly things only for talking objects. (not script debug messages, though)
|
||||||
// if (chat.mSourceType == CHAT_SOURCE_OBJECT
|
// if (chat.mSourceType == CHAT_SOURCE_OBJECT
|
||||||
// && chat.mChatType != CHAT_TYPE_DEBUG_MSG
|
// && chat.mChatType != CHAT_TYPE_DEBUG_MSG
|
||||||
@@ -3907,7 +3907,7 @@ void process_teleport_start(LLMessageSystem *msg, void**)
|
|||||||
|
|
||||||
//if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL)
|
//if (teleport_flags & TELEPORT_FLAGS_DISABLE_CANCEL)
|
||||||
// [RLVa:KB] - Checked: 2009-07-07 (RLVa-1.0.0d) | Added: RLVa-0.2.0b
|
// [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]
|
// [/RLVa:KB]
|
||||||
{
|
{
|
||||||
gViewerWindow->setProgressCancelButtonVisible(FALSE);
|
gViewerWindow->setProgressCancelButtonVisible(FALSE);
|
||||||
@@ -3927,6 +3927,7 @@ void process_teleport_start(LLMessageSystem *msg, void**)
|
|||||||
make_ui_sound("UISndTeleportOut");
|
make_ui_sound("UISndTeleportOut");
|
||||||
|
|
||||||
LL_INFOS("Messaging") << "Teleport initiated by remote TeleportStart message with TeleportFlags: " << teleport_flags << LL_ENDL;
|
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
|
// Don't call LLFirstUse::useTeleport here because this could be
|
||||||
// due to being killed, which would send you home, not to a Telehub
|
// 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
|
// Make sure we're standing
|
||||||
gAgent.standUp();
|
gAgent.standUp();
|
||||||
|
|
||||||
// now, use the circuit info to tell simulator about us!
|
// now, use the circuit info to tell simulator about us!
|
||||||
LL_INFOS("Messaging") << "process_teleport_finish() Enabling "
|
LL_INFOS("Messaging") << "process_teleport_finish() Enabling "
|
||||||
<< sim_host << " with code " << msg->mOurCircuitCode << LL_ENDL;
|
<< sim_host << " with code " << msg->mOurCircuitCode << LL_ENDL;
|
||||||
@@ -4294,14 +4295,15 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
|
|||||||
gAgent.sendAgentSetAppearance();
|
gAgent.sendAgentSetAppearance();
|
||||||
|
|
||||||
// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a)
|
// [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]
|
// [/RLVa:KB]
|
||||||
// if (avatarp)
|
// if (isAgentAvatarValid())
|
||||||
{
|
{
|
||||||
// Chat the "back" SLURL. (DEV-4907)
|
// 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;
|
chat.mSourceType = CHAT_SOURCE_SYSTEM;
|
||||||
LLFloaterChat::addChatHistory(chat);
|
LLFloaterChat::addChatHistory(chat);
|
||||||
|
|
||||||
// Set the new position
|
// Set the new position
|
||||||
gAgentAvatarp->setPositionAgent(agent_pos);
|
gAgentAvatarp->setPositionAgent(agent_pos);
|
||||||
@@ -4314,7 +4316,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// This is likely just the initial logging in phase.
|
// This is initial log-in or a region crossing
|
||||||
gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
|
gAgent.setTeleportState( LLAgent::TELEPORT_NONE );
|
||||||
|
|
||||||
if(LLStartUp::getStartupState() < STATE_STARTED)
|
if(LLStartUp::getStartupState() < STATE_STARTED)
|
||||||
@@ -4529,6 +4531,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
|
|||||||
// </edit>
|
// </edit>
|
||||||
|
|
||||||
MASK key_mask = gKeyboard->currentMask(TRUE);
|
MASK key_mask = gKeyboard->currentMask(TRUE);
|
||||||
|
|
||||||
if (key_mask & MASK_ALT || key_mask & MASK_CONTROL)
|
if (key_mask & MASK_ALT || key_mask & MASK_CONTROL)
|
||||||
{
|
{
|
||||||
control_flags &= ~( AGENT_CONTROL_LBUTTON_DOWN |
|
control_flags &= ~( AGENT_CONTROL_LBUTTON_DOWN |
|
||||||
@@ -4557,7 +4560,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
|
|||||||
control_flag_change != 0 ||
|
control_flag_change != 0 ||
|
||||||
flag_change != 0)
|
flag_change != 0)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT)
|
if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT)
|
||||||
{
|
{
|
||||||
//LL_INFOS("Messaging") << "head rot " << head_rotation << LL_ENDL;
|
//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;
|
LL_INFOS("Messaging") << "dcf = " << control_flag_change << LL_ENDL;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
duplicate_count = 0;
|
duplicate_count = 0;
|
||||||
}
|
}
|
||||||
@@ -4918,7 +4921,7 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
|
|||||||
if(owner_id != gAgent.getID() || !gSavedSettings.getBOOL("EnableGestureSoundsSelf"))
|
if(owner_id != gAgent.getID() || !gSavedSettings.getBOOL("EnableGestureSoundsSelf"))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <edit>
|
// <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);
|
||||||
gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global, object_id);
|
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);
|
mesgsys->getUUIDFast(_PREHASH_Sender, _PREHASH_ID, uuid);
|
||||||
|
|
||||||
LLVOAvatar* avatarp = gObjectList.findAvatar(uuid);
|
LLVOAvatar* avatarp = gObjectList.findAvatar(uuid);
|
||||||
if( avatarp )
|
if (avatarp)
|
||||||
{
|
{
|
||||||
avatarp->processAvatarAppearance( mesgsys );
|
avatarp->processAvatarAppearance( mesgsys );
|
||||||
}
|
}
|
||||||
@@ -5649,7 +5652,6 @@ void process_time_dilation(LLMessageSystem *msg, void **user_data)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void process_money_balance_reply( LLMessageSystem* msg, void** )
|
void process_money_balance_reply( LLMessageSystem* msg, void** )
|
||||||
{
|
{
|
||||||
S32 balance = 0;
|
S32 balance = 0;
|
||||||
@@ -5926,24 +5928,33 @@ void process_alert_core(const std::string& message, BOOL modal)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// *TODO:translate
|
std::string new_msg =LLNotifications::instance().getGlobalString(text);
|
||||||
args["MESSAGE"] = text;
|
args["MESSAGE"] = new_msg;
|
||||||
LLNotificationsUtil::add("SystemMessage", args);
|
LLNotificationsUtil::add("SystemMessage", args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (modal)
|
else if (modal)
|
||||||
{
|
{
|
||||||
// *TODO:translate
|
|
||||||
LLSD args;
|
LLSD args;
|
||||||
args["ERROR_MESSAGE"] = message;
|
std::string new_msg =LLNotifications::instance().getGlobalString(message);
|
||||||
|
args["ERROR_MESSAGE"] = new_msg;
|
||||||
LLNotificationsUtil::add("ErrorMessage", args);
|
LLNotificationsUtil::add("ErrorMessage", args);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// *TODO:translate
|
// Hack fix for EXP-623 (blame fix on RN :)) to avoid a sim deploy
|
||||||
LLSD args;
|
const std::string AUTOPILOT_CANCELED_MSG("Autopilot canceled");
|
||||||
args["MESSAGE"] = message;
|
if (message.find(AUTOPILOT_CANCELED_MSG) == std::string::npos )
|
||||||
LLNotificationsUtil::add("SystemMessageTip", args);
|
{
|
||||||
|
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:
|
public:
|
||||||
OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {}
|
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"
|
if (notification->getName() == "ScriptQuestionCaution"
|
||||||
|| notification->getName() == "ScriptQuestion")
|
|| notification->getName() == "ScriptQuestion")
|
||||||
@@ -6416,7 +6427,7 @@ void container_inventory_arrived(LLViewerObject* object,
|
|||||||
// create a new inventory category to put this in
|
// create a new inventory category to put this in
|
||||||
LLUUID cat_id;
|
LLUUID cat_id;
|
||||||
cat_id = gInventory.createNewCategory(gInventory.getRootFolderID(),
|
cat_id = gInventory.createNewCategory(gInventory.getRootFolderID(),
|
||||||
LLFolderType::FT_NONE,
|
LLFolderType::FT_NONE,
|
||||||
LLTrans::getString("AcquiredItems"));
|
LLTrans::getString("AcquiredItems"));
|
||||||
|
|
||||||
LLInventoryObject::object_list_t::const_iterator it = inventory->begin();
|
LLInventoryObject::object_list_t::const_iterator it = inventory->begin();
|
||||||
@@ -6524,6 +6535,9 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
|
|||||||
std::string big_reason;
|
std::string big_reason;
|
||||||
LLSD args;
|
LLSD args;
|
||||||
|
|
||||||
|
// Let the interested parties know that teleport failed.
|
||||||
|
LLViewerParcelMgr::getInstance()->onTeleportFailed();
|
||||||
|
|
||||||
// if we have additional alert data
|
// if we have additional alert data
|
||||||
if (msg->has(_PREHASH_AlertInfo) && msg->getSizeFast(_PREHASH_AlertInfo, _PREHASH_Message) > 0)
|
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);
|
LLNotificationsUtil::add("CouldNotTeleportReason", args);
|
||||||
|
|
||||||
// Let the interested parties know that teleport failed.
|
|
||||||
LLViewerParcelMgr::getInstance()->onTeleportFailed();
|
|
||||||
|
|
||||||
if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
|
if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
|
||||||
{
|
{
|
||||||
gAgent.setTeleportState( 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_Position, pos);
|
||||||
msg->getVector3Fast(_PREHASH_Info, _PREHASH_LookAt, look_at);
|
msg->getVector3Fast(_PREHASH_Info, _PREHASH_LookAt, look_at);
|
||||||
msg->getU32Fast(_PREHASH_Info, _PREHASH_TeleportFlags, teleport_flags);
|
msg->getU32Fast(_PREHASH_Info, _PREHASH_TeleportFlags, teleport_flags);
|
||||||
|
|
||||||
if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
|
if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
|
||||||
{
|
{
|
||||||
if( gAgent.getTeleportState() == LLAgent::TELEPORT_LOCAL )
|
if( gAgent.getTeleportState() == LLAgent::TELEPORT_LOCAL )
|
||||||
@@ -6782,6 +6793,7 @@ void handle_lure(const uuid_vec_t& ids)
|
|||||||
if (ids.empty()) return;
|
if (ids.empty()) return;
|
||||||
|
|
||||||
if (!gAgent.getRegion()) return;
|
if (!gAgent.getRegion()) return;
|
||||||
|
|
||||||
LLSD edit_args;
|
LLSD edit_args;
|
||||||
// [RLVa:KB] - Version: 1.23.4 | Checked: 2009-07-04 (RLVa-1.0.0a)
|
// [RLVa:KB] - Version: 1.23.4 | Checked: 2009-07-04 (RLVa-1.0.0a)
|
||||||
edit_args["REGION"] =
|
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)
|
bool callback_script_dialog(const LLSD& notification, const LLSD& response)
|
||||||
{
|
{
|
||||||
LLNotificationForm form(notification["form"]);
|
LLNotificationForm form(notification["form"]);
|
||||||
|
|
||||||
std::string button = LLNotification::getSelectedOptionName(response);
|
std::string button = LLNotification::getSelectedOptionName(response);
|
||||||
S32 button_idx = LLNotification::getSelectedOption(notification, response);
|
S32 button_idx = LLNotification::getSelectedOption(notification, response);
|
||||||
// Didn't click "Ignore"
|
// Didn't click "Ignore"
|
||||||
@@ -6954,7 +6967,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
|
|||||||
return;
|
return;
|
||||||
// NaCl End
|
// 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;
|
LLUUID owner_id;
|
||||||
if (gMessageSystem->getNumberOfBlocks("OwnerData") > 0)
|
if (gMessageSystem->getNumberOfBlocks("OwnerData") > 0)
|
||||||
{
|
{
|
||||||
@@ -6974,12 +6987,12 @@ void process_script_dialog(LLMessageSystem* msg, void**)
|
|||||||
std::string message;
|
std::string message;
|
||||||
std::string first_name;
|
std::string first_name;
|
||||||
std::string last_name;
|
std::string last_name;
|
||||||
std::string title;
|
std::string object_name;
|
||||||
|
|
||||||
S32 chat_channel;
|
S32 chat_channel;
|
||||||
msg->getString("Data", "FirstName", first_name);
|
msg->getString("Data", "FirstName", first_name);
|
||||||
msg->getString("Data", "LastName", last_name);
|
msg->getString("Data", "LastName", last_name);
|
||||||
msg->getString("Data", "ObjectName", title);
|
msg->getString("Data", "ObjectName", object_name);
|
||||||
msg->getString("Data", "Message", message);
|
msg->getString("Data", "Message", message);
|
||||||
msg->getS32("Data", "ChatChannel", chat_channel);
|
msg->getS32("Data", "ChatChannel", chat_channel);
|
||||||
|
|
||||||
@@ -7017,7 +7030,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (i = 1; i < button_count; i++)
|
for (i = 1; i < button_count; i++)
|
||||||
{
|
{
|
||||||
std::string tdesc;
|
std::string tdesc;
|
||||||
msg->getString("Buttons", "ButtonLabel", tdesc, i);
|
msg->getString("Buttons", "ButtonLabel", tdesc, i);
|
||||||
@@ -7026,7 +7039,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
|
|||||||
}
|
}
|
||||||
|
|
||||||
LLSD args;
|
LLSD args;
|
||||||
args["TITLE"] = title;
|
args["TITLE"] = object_name;
|
||||||
args["MESSAGE"] = message;
|
args["MESSAGE"] = message;
|
||||||
// <edit>
|
// <edit>
|
||||||
args["CHANNEL"] = chat_channel;
|
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;
|
std::string owner_name;
|
||||||
if (is_group)
|
if (is_group)
|
||||||
{
|
{
|
||||||
owner_name = full_name + " (group)";
|
owner_name = full_name + LLTrans::getString("Group");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -7220,7 +7233,7 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
|
|||||||
return;
|
return;
|
||||||
// NaCl End
|
// NaCl End
|
||||||
if (!gSavedSettings.getBOOL("ScriptsCanShowUI")) return;
|
if (!gSavedSettings.getBOOL("ScriptsCanShowUI")) return;
|
||||||
|
|
||||||
std::string object_name;
|
std::string object_name;
|
||||||
std::string sim_name;
|
std::string sim_name;
|
||||||
LLVector3 pos;
|
LLVector3 pos;
|
||||||
@@ -7292,11 +7305,11 @@ void process_covenant_reply(LLMessageSystem* msg, void**)
|
|||||||
if (estate_owner_id.isNull())
|
if (estate_owner_id.isNull())
|
||||||
{
|
{
|
||||||
// mainland
|
// mainland
|
||||||
covenant_text = "There is no Covenant provided for this Estate.";
|
covenant_text = LLTrans::getString("RegionNoCovenant");
|
||||||
}
|
}
|
||||||
else
|
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);
|
LLPanelEstateCovenant::updateCovenantText(covenant_text, covenant_id);
|
||||||
LLPanelLandCovenant::updateCovenantText(covenant_text);
|
LLPanelLandCovenant::updateCovenantText(covenant_text);
|
||||||
@@ -7432,3 +7445,4 @@ void LLOfferInfo::forceResponse(InventoryOfferResponse response)
|
|||||||
params.functor(boost::bind(&LLOfferInfo::inventory_offer_callback, this, _1, _2));
|
params.functor(boost::bind(&LLOfferInfo::inventory_offer_callback, this, _1, _2));
|
||||||
LLNotifications::instance().forceResponse(params, response);
|
LLNotifications::instance().forceResponse(params, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -576,10 +576,10 @@ void LLViewerShaderMgr::setShaders()
|
|||||||
|
|
||||||
//Flag base shader objects for deletion
|
//Flag base shader objects for deletion
|
||||||
//Don't worry-- they won't be deleted until no programs refrence them.
|
//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)
|
for(; it!=mShaderObjects.end();++it)
|
||||||
if(it->second)
|
if(it->second.mHandle)
|
||||||
glDeleteObjectARB(it->second);
|
glDeleteObjectARB(it->second.mHandle);
|
||||||
mShaderObjects.clear();
|
mShaderObjects.clear();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -2099,7 +2099,9 @@ LLViewerObject* LLVOAvatar::lineSegmentIntersectRiggedAttachments(const LLVector
|
|||||||
LLVector3* normal,
|
LLVector3* normal,
|
||||||
LLVector3* bi_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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1605,9 +1605,13 @@ S32 LLVOVolume::setTEColor(const U8 te, const LLColor4& color)
|
|||||||
}
|
}
|
||||||
else if (color != tep->getColor())
|
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);
|
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);
|
retval = LLPrimitive::setTEColor(te, color);
|
||||||
if (mDrawable.notNull() && retval)
|
if (mDrawable.notNull() && retval)
|
||||||
@@ -2827,10 +2831,11 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
|
|||||||
|
|
||||||
if (mDrawable->isState(LLDrawable::RIGGED))
|
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();
|
updateRiggedVolume();
|
||||||
genBBoxes(FALSE);
|
//genBBoxes(FALSE);
|
||||||
volume = mRiggedVolume;
|
volume = mRiggedVolume;
|
||||||
transform = false;
|
transform = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -177,8 +177,7 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
LLSD args;
|
LLSD args;
|
||||||
// *TODO:translate
|
args["TYPE"] =LLTrans::getString(LLAssetType::lookupHumanReadable(data->mAssetType));
|
||||||
args["TYPE"] = LLAssetType::lookupHumanReadable(data->mAssetType);
|
|
||||||
if (isNewWearable)
|
if (isNewWearable)
|
||||||
{
|
{
|
||||||
LLNotificationsUtil::add("InvalidWearable");
|
LLNotificationsUtil::add("InvalidWearable");
|
||||||
@@ -230,7 +229,7 @@ LLWearable* LLWearableList::createNewWearable( LLWearableType::EType type )
|
|||||||
LLWearable *wearable = generateNewWearable();
|
LLWearable *wearable = generateNewWearable();
|
||||||
wearable->setType( type );
|
wearable->setType( type );
|
||||||
|
|
||||||
std::string name = LLWearableType::getTypeDefaultNewName(wearable->getType());
|
std::string name = LLTrans::getString( LLWearableType::getTypeDefaultNewName(wearable->getType()) );
|
||||||
wearable->setName( name );
|
wearable->setName( name );
|
||||||
|
|
||||||
LLPermissions perm;
|
LLPermissions perm;
|
||||||
|
|||||||
@@ -154,6 +154,10 @@
|
|||||||
</panel>
|
</panel>
|
||||||
<panel border="true" bottom="-363" follows="left|top|right|bottom" height="347"
|
<panel border="true" bottom="-363" follows="left|top|right|bottom" height="347"
|
||||||
label="Objects" left="1" mouse_opaque="false" name="objects" width="398">
|
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"
|
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||||
bottom="-20" drop_shadow_visible="true" follows="left|top"
|
bottom="-20" drop_shadow_visible="true" follows="left|top"
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
|
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
|
||||||
|
|||||||
@@ -7,49 +7,4 @@
|
|||||||
<tab_container border="false" bottom="-422" enabled="true" follows="left|top|right|bottom"
|
<tab_container border="false" bottom="-422" enabled="true" follows="left|top|right|bottom"
|
||||||
height="406" left="1" mouse_opaque="false" name="Preview Tabs"
|
height="406" left="1" mouse_opaque="false" name="Preview Tabs"
|
||||||
tab_position="bottom" width="417" />
|
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>
|
</multi_floater>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<check_box bottom="-37" follows="top" height="20" left_delta="80" name="rp_mode">RP Mode</check_box>
|
<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="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"/>
|
<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"/>
|
<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"/>
|
<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>
|
</panel>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
<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"
|
bottom="-110" drop_shadow_visible="true" enabled="true" follows="left|top"
|
||||||
font="SansSerifSmall" h_pad="0" halign="center" height="14" left="4"
|
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
|
Multiple
|
||||||
</text>
|
</text>
|
||||||
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||||
|
|||||||
@@ -3346,6 +3346,87 @@ You are no longer frozen.
|
|||||||
</form>
|
</form>
|
||||||
</notification>
|
</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
|
<notification
|
||||||
icon="alertmodal.tga"
|
icon="alertmodal.tga"
|
||||||
name="OfferTeleport"
|
name="OfferTeleport"
|
||||||
@@ -5488,7 +5569,7 @@ Topic: [SUBJECT], Message: [MESSAGE]
|
|||||||
icon="notifytip.tga"
|
icon="notifytip.tga"
|
||||||
name="AddSelfFriend"
|
name="AddSelfFriend"
|
||||||
type="notifytip">
|
type="notifytip">
|
||||||
You cannot add yourself as a friend.
|
Although you're very nice, you cannot add yourself as a friend.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
@@ -5499,12 +5580,12 @@ Uploading in-world and web site snapshots...
|
|||||||
(Takes about 5 minutes.)
|
(Takes about 5 minutes.)
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
icon="notify.tga"
|
icon="notify.tga"
|
||||||
name="UploadPayment"
|
name="UploadPayment"
|
||||||
type="notify">
|
type="notify">
|
||||||
You paid [CURRENCY][AMOUNT] to upload.
|
You paid [CURRENCY][AMOUNT] to upload.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
icon="notifytip.tga"
|
icon="notifytip.tga"
|
||||||
@@ -5705,7 +5786,7 @@ Copy failed because you lack copy permission
|
|||||||
icon="notifytip.tga"
|
icon="notifytip.tga"
|
||||||
name="InventoryAccepted"
|
name="InventoryAccepted"
|
||||||
type="notifytip">
|
type="notifytip">
|
||||||
[NAME] accepted your inventory offer.
|
[NAME] received your inventory offer.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<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"
|
icon="notify.tga"
|
||||||
name="NoPlugin"
|
name="NoPlugin"
|
||||||
type="notify">
|
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>
|
||||||
<notification
|
<notification
|
||||||
icon="alertmodal.tga"
|
icon="alertmodal.tga"
|
||||||
name="MediaPluginFailed"
|
name="MediaPluginFailed"
|
||||||
type="alertmodal">
|
type="alertmodal">
|
||||||
The following Media Plugin has failed:
|
The following Media Plugin has failed:
|
||||||
[PLUGIN]
|
[PLUGIN]
|
||||||
|
|
||||||
Please re-install the plugin or contact the vendor if you continue to experience problems.
|
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"
|
yestext="OK"
|
||||||
/>
|
/>
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
icon="notify.tga"
|
icon="notify.tga"
|
||||||
name="SeeAvatars"
|
name="SeeAvatars"
|
||||||
@@ -6128,7 +6210,7 @@ Could not teleport closer to destination.
|
|||||||
icon="notify.tga"
|
icon="notify.tga"
|
||||||
name="TPCancelled"
|
name="TPCancelled"
|
||||||
type="notify">
|
type="notify">
|
||||||
Teleport cancelled.
|
Teleport cancelled.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
@@ -6503,7 +6585,7 @@ Failed to find [TYPE] named [DESC] in database.
|
|||||||
icon="notify.tga"
|
icon="notify.tga"
|
||||||
name="InvalidWearable"
|
name="InvalidWearable"
|
||||||
type="notify">
|
type="notify">
|
||||||
The item you are trying to wear uses a feature that your viewer can't read. Please consider using the latest [APP_NAME].
|
The item you are trying to wear uses a feature that your Viewer can't read. Please consider using the latest [APP_NAME].
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<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.
|
You locally updated a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] seconds.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<global name="UnsupportedCPU">
|
|
||||||
- Your CPU speed does not meet the minimum requirements.
|
|
||||||
</global>
|
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
icon="alertmodal.tga"
|
icon="alertmodal.tga"
|
||||||
name="PathfindingLinksets_ChangeToFlexiblePath"
|
name="PathfindingLinksets_ChangeToFlexiblePath"
|
||||||
@@ -7152,123 +7230,6 @@ You locally updated a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME]
|
|||||||
yestext="OK"/>
|
yestext="OK"/>
|
||||||
</notification>
|
</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
|
<notification
|
||||||
icon="notify.tga"
|
icon="notify.tga"
|
||||||
name="FirstAO"
|
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.
|
For instructions, make a new template in the AO. Use the toolbar to toggle the AO on/off.
|
||||||
</notification>
|
</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
|
<notification
|
||||||
icon="notify.tga"
|
icon="notify.tga"
|
||||||
name="FirstPhysicsWearable"
|
name="FirstPhysicsWearable"
|
||||||
@@ -7405,5 +7359,60 @@ Only textures will upload as temporary on Agni and Aditi.
|
|||||||
canceltext="Cancel"/>
|
canceltext="Cancel"/>
|
||||||
</notification>
|
</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 "Infohub".
|
||||||
|
</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>
|
</notifications>
|
||||||
|
|||||||
@@ -335,12 +335,12 @@
|
|||||||
<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="Delete..." label_selected="Delete..." left_delta="74"
|
label="Delete..." label_selected="Delete..." left_delta="74"
|
||||||
mouse_opaque="true" name="Delete..." width="70" />
|
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"
|
label="Import..." label_selected="Import..." left_delta="74"
|
||||||
mouse_opaque="true" name="Import..." width="70" />
|
mouse_opaque="true" name="Import..." 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="Export..." label_selected="Export..." left_delta="74"
|
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"
|
<tab_container bottom="-411" follows="left|top" height="363" left="4" mouse_opaque="false"
|
||||||
name="picks tab" tab_position="left" width="412" />
|
name="picks tab" tab_position="left" width="412" />
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||||
|
|||||||
@@ -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"/>
|
<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_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_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_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 multiplicatior for sound preload antispam:" label_width="330" tool_tip="Higher is less sensitive" name="antispamsoundpreloadmulti" 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"/>
|
<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="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"/>
|
<check_box control_name="_NACL_Antispam" height="16" label="Disable -all- dialogs (resets on login)" name="antispam_checkbox" left="3"/>
|
||||||
|
|||||||
@@ -151,6 +151,45 @@
|
|||||||
<string name="AssetErrorPriceMismatch">Viewer and server do not agree on price</string>
|
<string name="AssetErrorPriceMismatch">Viewer and server do not agree on price</string>
|
||||||
<string name="AssetErrorUnknownStatus">Unknown status</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 -->
|
<!-- llvoavatar. Displayed in the avatar's chat bubble -->
|
||||||
<string name="AvatarEditingAppearance">(Editing Appearance)</string>
|
<string name="AvatarEditingAppearance">(Editing Appearance)</string>
|
||||||
<string name="AvatarAway">Away</string>
|
<string name="AvatarAway">Away</string>
|
||||||
@@ -234,12 +273,29 @@
|
|||||||
<!-- world map -->
|
<!-- world map -->
|
||||||
<string name="texture_loading">Loading...</string>
|
<string name="texture_loading">Loading...</string>
|
||||||
<string name="worldmap_offline">Offline</string>
|
<string name="worldmap_offline">Offline</string>
|
||||||
|
<string name="worldmap_results_none_found">None found.</string>
|
||||||
|
|
||||||
<!-- animations uploading status codes -->
|
<!-- animations uploading status codes -->
|
||||||
<string name="Ok">OK</string>
|
<string name="Ok">OK</string>
|
||||||
<!-- Chat -->
|
<!-- Chat -->
|
||||||
<string name="whisper">whispers:</string>
|
<string name="whisper">whispers:</string>
|
||||||
<string name="shout">shouts:</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 -->
|
<!-- Sim Access labels -->
|
||||||
<string name="SIM_ACCESS_PG">PG</string>
|
<string name="SIM_ACCESS_PG">PG</string>
|
||||||
@@ -1204,7 +1260,7 @@ Returns the mean region frames per second
|
|||||||
</string>
|
</string>
|
||||||
<string name="LSLTipText_llParticleSystem">
|
<string name="LSLTipText_llParticleSystem">
|
||||||
llParticleSystem(list rules)
|
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 ]
|
List format is [ rule1, data1, rule2, data2 . . . rulen, datan ]
|
||||||
</string>
|
</string>
|
||||||
<string name="LSLTipText_llGroundRepel">
|
<string name="LSLTipText_llGroundRepel">
|
||||||
@@ -1241,7 +1297,7 @@ Removes the enabled bits in 'flags'
|
|||||||
</string>
|
</string>
|
||||||
<string name="LSLTipText_llSitTarget">
|
<string name="LSLTipText_llSitTarget">
|
||||||
llSitTarget(vector offset, rotation rot)
|
llSitTarget(vector offset, rotation rot)
|
||||||
Sets the sit location for the prim. If offset == <0,0,0> then the sit target is removed.
|
Sets the sit location for the prim. If offset == <0,0,0> then the sit target is removed.
|
||||||
</string>
|
</string>
|
||||||
<string name="LSLTipText_llAvatarOnSitTarget">
|
<string name="LSLTipText_llAvatarOnSitTarget">
|
||||||
key llAvatarOnSitTarget()
|
key llAvatarOnSitTarget()
|
||||||
@@ -1720,7 +1776,8 @@ Returns the media params for a particular face on an object, given the desired l
|
|||||||
</string>
|
</string>
|
||||||
<string name="LSLTipText_llClearPrimMedia">
|
<string name="LSLTipText_llClearPrimMedia">
|
||||||
integer llClearPrimMedia(integer face)
|
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">
|
<string name="LSLTipText_llSetLinkPrimitiveParamsFast">
|
||||||
llSetLinkPrimitiveParamsFast(integer linknumber, list rules)
|
llSetLinkPrimitiveParamsFast(integer linknumber, list rules)
|
||||||
Set primitive parameters for linknumber based on rules with no built-in script sleep.
|
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="WornOnAttachmentPoint" value=" (worn on [ATTACHMENT_POINT])" />
|
||||||
<string name="LockedOnAttachmentPoint" value=" (locked to [ATTACHMENT_POINT])" />
|
<string name="LockedOnAttachmentPoint" value=" (locked to [ATTACHMENT_POINT])" />
|
||||||
<string name="ActiveGesture" value="[GESLABEL] (active)"/>
|
<string name="ActiveGesture" value="[GESLABEL] (active)"/>
|
||||||
|
<!-- Inventory permissions -->
|
||||||
|
<string name="PermYes">Yes</string>
|
||||||
|
<string name="PermNo">No</string>
|
||||||
|
|
||||||
<!-- Gestures labels -->
|
<!-- Gestures labels -->
|
||||||
<!-- use value="" because they have preceding spaces -->
|
<!-- use value="" because they have preceding spaces -->
|
||||||
<string name="Chat Message" value=" Chat : " />
|
<string name="Chat Message" value=" Chat : " />
|
||||||
<string name="Sound" value=" Sound : " />
|
<string name="Sound" value=" Sound : " />
|
||||||
<string name="Wait" value=" --- Wait : " />
|
<string name="Wait" value=" --- Wait : " />
|
||||||
<string name="AnimFlagStop" value=" Stop Animation : " />
|
<string name="AnimFlagStop" value=" Stop Animation : " />
|
||||||
<string name="AnimFlagStart" value=" Start 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 -->
|
<!-- inventory FVBridge -->
|
||||||
<!-- This is used in llpanelinventory.cpp when constructing a context menu for an item for Sale -->
|
<!-- This is used in llpanelinventory.cpp when constructing a context menu for an item for Sale -->
|
||||||
<string name="Buy">Buy</string>
|
<string name="Buy">Buy</string>
|
||||||
|
<string name="Buyfor" value="Buy for "/><!-- Grid currency is appended automatically -->
|
||||||
|
|
||||||
<string name="Stone">Stone</string>
|
<string name="Stone">Stone</string>
|
||||||
<string name="Metal">Metal</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="SaveComplete">Save complete.</string>
|
||||||
<string name="ObjectOutOfRange">Script (object out of range)</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="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 -->
|
<!-- Environment settings -->
|
||||||
<string name="Local">Local</string>
|
<string name="Local">Local</string>
|
||||||
<string name="LocalSettings">Local Settings</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="InvOfferGaveYou">gave you</string>
|
||||||
<string name="InvOfferDecline">You decline [DESC] from [NAME].</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 -->
|
<!-- Viewer menu -->
|
||||||
<string name="AcquiredItems">Acquired Items</string>
|
<string name="AcquiredItems">Acquired Items</string>
|
||||||
<string name="Cancel">Cancel</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="Wild">Wild</string>
|
||||||
<string name="Wrinkles">Wrinkles</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 -->
|
<!-- IM system messages -->
|
||||||
<string name="IM_announce_incoming">has begun an IM session with you.</string>
|
<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_autoresponded_to">Autoresponse sent to</string>
|
||||||
<string name="IM_autoresponse_sent_item">was sent auto-response item</string>
|
<string name="IM_autoresponse_sent_item">was sent auto-response item</string>
|
||||||
<string name="Unnamed">(Unnamed)</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="PowerUser1">You are bestowed with powers beyond mortal comprehension.</string>
|
||||||
<string name="PowerUser2">Use your newfound abilities wisely.</string>
|
<string name="PowerUser2">Use your newfound abilities wisely.</string>
|
||||||
<string name="Unlocked:">Unlocked:</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="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>
|
<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_everyone">Everyone</string>
|
||||||
<string name="group_role_officers">Officers</string>
|
<string name="group_role_officers">Officers</string>
|
||||||
<string name="group_role_owners">Owners</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="DefaultMimeType">none/none</string>
|
||||||
<string name="Chat">Chat</string>
|
<string name="Chat">Chat</string>
|
||||||
|
|
||||||
<!-- External editor status codes -->
|
<!-- External editor status codes -->
|
||||||
<string name="ExternalEditorNotSet">Select an editor using the ExternalEditor setting.</string>
|
<string name="ExternalEditorNotSet">Select an editor using the ExternalEditor setting.</string>
|
||||||
<string name="ExternalEditorNotFound">Cannot find the external editor you specified.
|
<string name="ExternalEditorNotFound">Cannot find the external editor you specified.
|
||||||
Try enclosing path to the editor with double quotes.
|
Try enclosing path to the editor with double quotes.
|
||||||
(e.g. "/path to my/editor" "%s")</string>
|
(e.g. "/path to my/editor" "%s")</string>
|
||||||
<string name="ExternalEditorCommandParseError">Error parsing the external editor command.</string>
|
<string name="ExternalEditorCommandParseError">Error parsing the external editor command.</string>
|
||||||
<string name="ExternalEditorFailedToRun">External editor failed to run.</string>
|
<string name="ExternalEditorFailedToRun">External editor failed to run.</string>
|
||||||
|
|
||||||
<!-- Pathfinding -->
|
<!-- Pathfinding -->
|
||||||
<string name="Pathfinding_Wiki_URL">http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer</string>
|
<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="Left">Left</string>
|
||||||
<string name="Right">Right</string>
|
<string name="Right">Right</string>
|
||||||
|
|
||||||
|
<!-- teleport_strings.xml's strings we need -->
|
||||||
|
<string name="completed_from">Teleport completed from</string>
|
||||||
|
|
||||||
</strings>
|
</strings>
|
||||||
|
|||||||
Reference in New Issue
Block a user