diff options
313 files changed, 4192 insertions, 4776 deletions
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000000..a110c018ec --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,93 @@ +name: Build + +on: + workflow_dispatch: + pull_request: + push: + branches: [main, contribute] + tags: ["*"] + +jobs: + build: + strategy: + matrix: + runner: [windows-large] + configuration: [ReleaseOS] + addrsize: [64] + include: + - runner: windows-large + configuration: ReleaseOS + addrsize: 32 + runs-on: ${{ matrix.runner }} + env: + AUTOBUILD_CONFIGURATION: ${{ matrix.configuration }} + AUTOBUILD_ADDRSIZE: ${{ matrix.addrsize }} + AUTOBUILD_INSTALLABLE_CACHE: ${{ github.workspace }}/.autobuild-installables + AUTOBUILD_VARIABLES_FILE: ${{ github.workspace }}/.build-variables/variables + AUTOBUILD_VSVER: "170" # vs2k22 + LOGFAIL: debug # Show details when tests fail + GIT_REF: ${{ github.head_ref || github.ref }} + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} + + - name: Checkout build variables + uses: actions/checkout@v3 + with: + repository: secondlife/build-variables + ref: viewer + path: .build-variables + + - name: Install autobuild and python dependencies + run: pip3 install autobuild llbase + + - name: Cache autobuild packages + uses: actions/cache@v3 + id: cache-installables + with: + path: .autobuild-installables + key: ${{ runner.os }}-${{ matrix.addrsize }}-${{ matrix.configuration }}-${{ hashFiles('autobuild.xml') }} + restore-keys: | + ${{ runner.os }}-${{ matrix.addrsize }}-${{ matrix.configuration }}- + ${{ runner.os }}-${{ matrix.addrsize }}- + + - name: Install windows dependencies + if: runner.os == 'Windows' + run: choco install nsis-unicode + + - name: Build + id: build + shell: bash + env: + RUNNER_OS: ${{ runner.os }} + run: | + # On windows we need to point the build to the correct python + # as neither CMake's FindPython nor our custom Python.cmake module + # will resolve the correct interpreter location. + if [[ "$RUNNER_OS" == "Windows" ]]; then + export PYTHON="$(cygpath -m "$(which python)")" + echo "Python location: $PYTHON" + fi + + autobuild configure -- -DVIEWER_CHANNEL="Second Life Test ${GIT_REF##*/}" + autobuild build --no-configure + + # Find artifacts + if [[ "$RUNNER_OS" == "Windows" ]]; then + installer_path=$(find ./build-*/newview/ | grep '_Setup\.exe') + installer_name="$(basename $installer_path)" + elif [[ "$RUNNER_OS" == "macOS" ]]; then + installer_path=$(find ./build-*/newview/ | grep '\.dmg') + installer_name="$(basename $installer_path)" + fi + + echo "installer_path=$installer_path" >> $GITHUB_OUTPUT + echo "installer_name=$installer_name" >> $GITHUB_OUTPUT + + - name: Upload installer + uses: actions/upload-artifact@v3 + with: + name: ${{ steps.build.outputs.installer_name }} + path: ${{ steps.build.outputs.installer_path }} diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml new file mode 100644 index 0000000000..17c0ace02f --- /dev/null +++ b/.github/workflows/pre-commit.yaml @@ -0,0 +1,18 @@ +name: pre-commit + +on: + pull_request: + push: + branches: [main, contribute] + tags: [v*] + + +jobs: + pre-commit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: 3.x + - uses: pre-commit/action@v3.0.0 diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml index 82a9a968b9..35ac41420c 100644 --- a/.github/workflows/stale.yaml +++ b/.github/workflows/stale.yaml @@ -15,8 +15,8 @@ jobs: - uses: actions/stale@v6 id: stale with: - stale-pr-message: This pull request is stale because it has been open 60 days with no activity. Remove stale label or comment or it will be closed in 7 days - days-before-stale: 60 + stale-pr-message: This pull request is stale because it has been open 30 days with no activity. Remove stale label or comment or it will be closed in 7 days + days-before-stale: 30 days-before-close: 7 exempt-pr-labels: blocked,must,should,keep stale-pr-label: stale diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6d296d7a24..fe7dfbac7a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,9 +1,8 @@ repos: - - repo: https://bitbucket.org/lindenlab/git-hooks.git - rev: v1.0.0-beta2 + - repo: https://github.com/secondlife/git-hooks.git + rev: v1.0.0 hooks: - id: opensource-license - - id: jira-issue - id: llsd - id: no-trigraphs - id: copyright @@ -11,7 +10,7 @@ repos: files: \.(cpp|c|h|py|glsl|cmake|txt)$ exclude: language.txt - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v2.5.0 + rev: v4.4.0 hooks: - id: check-xml - id: mixed-line-ending diff --git a/autobuild.xml b/autobuild.xml index b1cfe79275..9785884a40 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -1,5 +1,6 @@ <?xml version="1.0" ?> -<llsd><map> +<llsd> +<map> <key>installables</key> <map> <key>SDL</key> @@ -2700,9 +2701,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <key>archive</key> <map> <key>hash</key> - <string>9e1b5515ab59b4e9cfeef6626d65d03d</string> + <string>8b091b1f13348eedadf66d7d81cb6bc1</string> <key>url</key> - <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/108609/945996/viewer_manager-3.0.577252-darwin64-577252.tar.bz2</string> + <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/116621/1003286/viewer_manager-3.0.580913-darwin64-580913.tar.bz2</string> </map> <key>name</key> <string>darwin64</string> @@ -2712,9 +2713,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <key>archive</key> <map> <key>hash</key> - <string>a3c599595ecc8fb987a5499fca42520a</string> + <string>647e86470e02509b1cf89829d08dfd46</string> <key>url</key> - <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/108610/946003/viewer_manager-3.0.577252-windows-577252.tar.bz2</string> + <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/116623/1003293/viewer_manager-3.0.580913-windows-580913.tar.bz2</string> </map> <key>name</key> <string>windows</string> @@ -2725,7 +2726,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <key>source_type</key> <string>hg</string> <key>version</key> - <string>3.0.577252</string> + <string>3.0.580913</string> </map> <key>vlc-bin</key> <map> @@ -3290,7 +3291,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <string>/t:Build</string> <string>/p:useenv=true</string> <string>/verbosity:minimal</string> - <string>/toolsversion:4.0</string> <string>/p:VCBuildAdditionalOptions= /incremental</string> </array> </map> @@ -3364,7 +3364,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <string>/t:Build</string> <string>/p:useenv=true</string> <string>/verbosity:minimal</string> - <string>/toolsversion:4.0</string> <string>/p:VCBuildAdditionalOptions= /incremental</string> </array> </map> @@ -3401,4 +3400,5 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <string>autobuild</string> <key>version</key> <string>1.3</string> - </map></llsd> + </map> +</llsd> diff --git a/doc/contributions.txt b/doc/contributions.txt index e764e89e35..2545d684dd 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -593,6 +593,7 @@ Henri Beauchamp VWR-4157 SL-15175 SL-19110 + SL-19159 herina Bode Hikkoshi Sakai VWR-429 @@ -1187,6 +1188,7 @@ PanteraPolnocy SL-18891 SL-18904 SL-18937 + SL-19207 SL-19681 Parvati Silverweb Patric Mills diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index c848d00710..a44fe5a8d5 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -61,7 +61,7 @@ if (WINDOWS) # CP changed to only append the flag for 32bit builds - on 64bit builds, # locally at least, the build output is spammed with 1000s of 'D9002' # warnings about this switch being ignored. - if( ADDRESS_SIZE EQUAL 32 ) + if(ADDRESS_SIZE EQUAL 32 AND DEFINED ENV{"TEAMCITY_PROJECT_NAME"}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /p:PreferredToolArchitecture=x64") endif() # zlib has assembly-language object files incompatible with SAFESEH diff --git a/indra/cmake/Python.cmake b/indra/cmake/Python.cmake index dbf5033ce5..f9259f6c2b 100644 --- a/indra/cmake/Python.cmake +++ b/indra/cmake/Python.cmake @@ -2,7 +2,11 @@ set(PYTHONINTERP_FOUND) -if (WINDOWS) +if (DEFINED ENV{PYTHON}) + # Allow python executable to be explicitly set + set(python "$ENV{PYTHON}") + set(PYTHONINTERP_FOUND ON) +elseif (WINDOWS) # On Windows, explicitly avoid Cygwin Python. # if the user has their own version of Python installed, prefer that @@ -43,7 +47,7 @@ else() if (python) set(PYTHONINTERP_FOUND ON) endif (python) -endif (WINDOWS) +endif (DEFINED ENV{PYTHON}) if (NOT python) message(FATAL_ERROR "No Python interpreter found") diff --git a/indra/llappearance/llwearable.h b/indra/llappearance/llwearable.h index 875c2932f1..d86db236a3 100644 --- a/indra/llappearance/llwearable.h +++ b/indra/llappearance/llwearable.h @@ -32,7 +32,6 @@ #include "llsaleinfo.h" #include "llwearabletype.h" -class LLMD5; class LLVisualParam; class LLTexGlobalColorInfo; class LLTexGlobalColor; @@ -110,9 +109,6 @@ public: // Something happened that requires the wearable to be updated (e.g. worn/unworn). virtual void setUpdated() const = 0; - // Update the baked texture hash. - virtual void addToBakedTextureHash(LLMD5& hash) const = 0; - typedef std::map<S32, LLVisualParam *> visual_param_index_map_t; visual_param_index_map_t mVisualParamIndexMap; diff --git a/indra/llappearance/llwearabledata.cpp b/indra/llappearance/llwearabledata.cpp index 0eaeedb6ee..9fbbc57c87 100644 --- a/indra/llappearance/llwearabledata.cpp +++ b/indra/llappearance/llwearabledata.cpp @@ -31,7 +31,6 @@ #include "llavatarappearance.h" #include "llavatarappearancedefines.h" #include "lldriverparam.h" -#include "llmd5.h" LLWearableData::LLWearableData() : mAvatarAppearance(NULL) @@ -343,42 +342,3 @@ U32 LLWearableData::getWearableCount(const U32 tex_index) const const LLWearableType::EType wearable_type = LLAvatarAppearance::getDictionary()->getTEWearableType((LLAvatarAppearanceDefines::ETextureIndex)tex_index); return getWearableCount(wearable_type); } - -LLUUID LLWearableData::computeBakedTextureHash(LLAvatarAppearanceDefines::EBakedTextureIndex baked_index, - BOOL generate_valid_hash) // Set to false if you want to upload the baked texture w/o putting it in the cache -{ - LLUUID hash_id; - bool hash_computed = false; - LLMD5 hash; - const LLAvatarAppearanceDictionary::BakedEntry *baked_dict = LLAvatarAppearance::getDictionary()->getBakedTexture(baked_index); - - for (U8 i=0; i < baked_dict->mWearables.size(); i++) - { - const LLWearableType::EType baked_type = baked_dict->mWearables[i]; - const U32 num_wearables = getWearableCount(baked_type); - for (U32 index = 0; index < num_wearables; ++index) - { - const LLWearable* wearable = getWearable(baked_type,index); - if (wearable) - { - wearable->addToBakedTextureHash(hash); - hash_computed = true; - } - } - } - if (hash_computed) - { - hash.update((const unsigned char*)baked_dict->mWearablesHashID.mData, UUID_BYTES); - - if (!generate_valid_hash) - { - invalidateBakedTextureHash(hash); - } - hash.finalize(); - hash.raw_digest(hash_id.mData); - } - - return hash_id; -} - - diff --git a/indra/llappearance/llwearabledata.h b/indra/llappearance/llwearabledata.h index a0c446ea9e..b8e0bf8bd1 100644 --- a/indra/llappearance/llwearabledata.h +++ b/indra/llappearance/llwearabledata.h @@ -86,15 +86,6 @@ private: void pullCrossWearableValues(const LLWearableType::EType type); //-------------------------------------------------------------------- - // Server Communication - //-------------------------------------------------------------------- -public: - LLUUID computeBakedTextureHash(LLAvatarAppearanceDefines::EBakedTextureIndex baked_index, - BOOL generate_valid_hash = TRUE); -protected: - virtual void invalidateBakedTextureHash(LLMD5& hash) const {} - - //-------------------------------------------------------------------- // Member variables //-------------------------------------------------------------------- protected: diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp index ddc508455f..a387bb23cd 100644 --- a/indra/llaudio/llaudioengine.cpp +++ b/indra/llaudio/llaudioengine.cpp @@ -204,7 +204,8 @@ std::string LLAudioEngine::getInternetStreamURL() { if (mStreamingAudioImpl) return mStreamingAudioImpl->getURL(); - else return std::string(); + + return std::string(); } @@ -345,42 +346,43 @@ void LLAudioEngine::idle() } continue; } - else + + // Check to see if the current sound is done playing. + if (!channelp->isPlaying()) { - // Check to see if the current sound is done playing, or looped. - if (!channelp->isPlaying()) + sourcep->mCurrentDatap = sourcep->mQueuedDatap; + sourcep->mQueuedDatap = NULL; + + // Reset the timer so the source doesn't die. + sourcep->mAgeTimer.reset(); + + // Make sure we have the buffer set up if we just decoded the data + if (sourcep->mCurrentDatap) { - sourcep->mCurrentDatap = sourcep->mQueuedDatap; - sourcep->mQueuedDatap = NULL; + updateBufferForData(sourcep->mCurrentDatap); + } - // Reset the timer so the source doesn't die. - sourcep->mAgeTimer.reset(); + // Actually play the associated data. + sourcep->setupChannel(); + channelp->updateBuffer(); + sourcep->getChannel()->play(); + continue; + } - // Make sure we have the buffer set up if we just decoded the data - if (sourcep->mCurrentDatap) - { - updateBufferForData(sourcep->mCurrentDatap); - } + // Check to see if the current sound is looped. + if (sourcep->isLoop()) + { + // It's a loop, we need to check and see if we're done with it. + if (channelp->mLoopedThisFrame) + { + sourcep->mCurrentDatap = sourcep->mQueuedDatap; + sourcep->mQueuedDatap = NULL; - // Actually play the associated data. + // Actually, should do a time sync so if we're a loop master/slave + // we don't drift away. sourcep->setupChannel(); - channelp->updateBuffer(); sourcep->getChannel()->play(); } - else if (sourcep->isLoop()) - { - // It's a loop, we need to check and see if we're done with it. - if (channelp->mLoopedThisFrame) - { - sourcep->mCurrentDatap = sourcep->mQueuedDatap; - sourcep->mQueuedDatap = NULL; - - // Actually, should do a time sync so if we're a loop master/slave - // we don't drift away. - sourcep->setupChannel(); - sourcep->getChannel()->play(); - } - } } } @@ -396,18 +398,11 @@ void LLAudioEngine::idle() for (source_map::value_type& src_pair : mAllSources) { LLAudioSource *sourcep = src_pair.second; - if (sourcep->isMuted()) - { - continue; - } - if (sourcep->isSyncMaster()) + if (sourcep->isMuted() && sourcep->isSyncMaster() && sourcep->getPriority() > max_sm_priority) { - if (sourcep->getPriority() > max_sm_priority) - { - sync_masterp = sourcep; - master_channelp = sync_masterp->getChannel(); - max_sm_priority = sourcep->getPriority(); - } + sync_masterp = sourcep; + master_channelp = sync_masterp->getChannel(); + max_sm_priority = sourcep->getPriority(); } } @@ -737,7 +732,7 @@ F64 LLAudioEngine::mapWindVecToGain(LLVector3 wind_vec) } return (gain); -} +} F64 LLAudioEngine::mapWindVecToPitch(LLVector3 wind_vec) @@ -964,12 +959,11 @@ void LLAudioEngine::cleanupAudioSource(LLAudioSource *asp) else { LL_DEBUGS("AudioEngine") << "Cleaning up audio sources for "<< asp->getID() <<LL_ENDL; - delete asp; - mAllSources.erase(iter); -} + delete asp; + mAllSources.erase(iter); + } } - bool LLAudioEngine::hasDecodedFile(const LLUUID &uuid) { std::string uuid_str; @@ -1687,20 +1681,19 @@ void LLAudioChannel::setSource(LLAudioSource *sourcep) { LL_DEBUGS("AudioEngine") << "( id: " << sourcep->getID() << ")" << LL_ENDL; - if (sourcep == mCurrentSourcep) - { - // Don't reallocate the channel, this will make FMOD goofy. - //LL_INFOS() << "Calling setSource with same source!" << LL_ENDL; - } + if (sourcep == mCurrentSourcep) + { + // Don't reallocate the channel, this will make FMOD goofy. + //LL_INFOS() << "Calling setSource with same source!" << LL_ENDL; + } - mCurrentSourcep = sourcep; + mCurrentSourcep = sourcep; - updateBuffer(); - update3DPosition(); -} + updateBuffer(); + update3DPosition(); + } } - bool LLAudioChannel::updateBuffer() { if (!gAudiop) diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h index 0fe8b3d756..a133898969 100755 --- a/indra/llaudio/llaudioengine.h +++ b/indra/llaudio/llaudioengine.h @@ -90,6 +90,7 @@ public: // initialization/startup/shutdown virtual bool init(void *userdata, const std::string &app_title); virtual std::string getDriverName(bool verbose) = 0; + virtual LLStreamingAudioInterface *createDefaultStreamingAudioImpl() const = 0; virtual void shutdown(); // Used by the mechanics of the engine @@ -468,13 +469,13 @@ struct SoundData const LLUUID& owner_id, const F32 gain, const S32 type = LLAudioEngine::AUDIO_TYPE_NONE, - const LLVector3d &pos_global = LLVector3d::zero) + const LLVector3d &pos_global = LLVector3d::zero) : + audio_uuid(audio_uuid), + owner_id(owner_id), + gain(gain), + type(type), + pos_global(pos_global) { - this->audio_uuid = audio_uuid; - this->owner_id = owner_id; - this->gain = gain; - this->type = type; - this->pos_global = pos_global; } }; diff --git a/indra/llaudio/llaudioengine_fmodstudio.cpp b/indra/llaudio/llaudioengine_fmodstudio.cpp index ba743020b5..c6313ea289 100644 --- a/indra/llaudio/llaudioengine_fmodstudio.cpp +++ b/indra/llaudio/llaudioengine_fmodstudio.cpp @@ -208,10 +208,6 @@ bool LLAudioEngine_FMODSTUDIO::init(void* userdata, const std::string &app_title } #endif - // set up our favourite FMOD-native streaming audio implementation if none has already been added - if (!getStreamingAudioImpl()) // no existing implementation added - setStreamingAudioImpl(new LLStreamingAudio_FMODSTUDIO(mSystem)); - LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init() FMOD Studio initialized correctly" << LL_ENDL; int r_numbuffers, r_samplerate, r_channels; @@ -253,6 +249,13 @@ std::string LLAudioEngine_FMODSTUDIO::getDriverName(bool verbose) } +// create our favourite FMOD-native streaming audio implementation +LLStreamingAudioInterface *LLAudioEngine_FMODSTUDIO::createDefaultStreamingAudioImpl() const +{ + return new LLStreamingAudio_FMODSTUDIO(mSystem); +} + + void LLAudioEngine_FMODSTUDIO::allocateListener(void) { mListenerp = (LLListener *) new LLListener_FMODSTUDIO(mSystem); diff --git a/indra/llaudio/llaudioengine_fmodstudio.h b/indra/llaudio/llaudioengine_fmodstudio.h index d3d6d69685..29e7bc6bf0 100644 --- a/indra/llaudio/llaudioengine_fmodstudio.h +++ b/indra/llaudio/llaudioengine_fmodstudio.h @@ -53,6 +53,7 @@ public: // initialization/startup/shutdown virtual bool init(void *user_data, const std::string &app_title); virtual std::string getDriverName(bool verbose); + virtual LLStreamingAudioInterface* createDefaultStreamingAudioImpl() const; virtual void allocateListener(); virtual void shutdown(); diff --git a/indra/llcharacter/llbvhloader.cpp b/indra/llcharacter/llbvhloader.cpp index 117d408b21..5b1b28bf4f 100644 --- a/indra/llcharacter/llbvhloader.cpp +++ b/indra/llcharacter/llbvhloader.cpp @@ -1352,7 +1352,6 @@ BOOL LLBVHLoader::serialize(LLDataPacker& dp) dp.packS32(joint->mNumRotKeys, "num_rot_keys"); LLQuaternion::Order order = bvhStringToOrder( joint->mOrder ); - S32 outcount = 0; S32 frame = 0; for (Key& key : joint->mKeys) { @@ -1418,7 +1417,6 @@ BOOL LLBVHLoader::serialize(LLDataPacker& dp) dp.packU16(x, "rot_angle_x"); dp.packU16(y, "rot_angle_y"); dp.packU16(z, "rot_angle_z"); - outcount++; frame++; } diff --git a/indra/llcommon/hbxxh.h b/indra/llcommon/hbxxh.h index 236716722a..9c0e9cf172 100644 --- a/indra/llcommon/hbxxh.h +++ b/indra/llcommon/hbxxh.h @@ -96,6 +96,15 @@ public: } } + // Make this class no-copy (it would be possible, with custom copy + // operators, but it is not trivially copyable, because of the mState + // pointer): it does not really make sense to allow copying it anyway, + // since all we care about is the resulting digest (so you should only + // need and care about storing/copying the digest and not a class + // instance). + HBXXH64(const HBXXH64&) noexcept = delete; + HBXXH64& operator=(const HBXXH64&) noexcept = delete; + ~HBXXH64(); void update(const void* buffer, size_t len); @@ -199,6 +208,15 @@ public: } } + // Make this class no-copy (it would be possible, with custom copy + // operators, but it is not trivially copyable, because of the mState + // pointer): it does not really make sense to allow copying it anyway, + // since all we care about is the resulting digest (so you should only + // need and care about storing/copying the digest and not a class + // instance). + HBXXH128(const HBXXH128&) noexcept = delete; + HBXXH128& operator=(const HBXXH128&) noexcept = delete; + ~HBXXH128(); void update(const void* buffer, size_t len); diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h index 10b98f49aa..679f79039b 100644 --- a/indra/llcommon/indra_constants.h +++ b/indra/llcommon/indra_constants.h @@ -345,6 +345,7 @@ const U8 CLICK_ACTION_PLAY = 5; const U8 CLICK_ACTION_OPEN_MEDIA = 6; const U8 CLICK_ACTION_ZOOM = 7; const U8 CLICK_ACTION_DISABLED = 8; +const U8 CLICK_ACTION_IGNORE = 9; // DO NOT CHANGE THE SEQUENCE OF THIS LIST!! diff --git a/indra/llcommon/lldefs.h b/indra/llcommon/lldefs.h index 5c46f6a796..4e25001fff 100644 --- a/indra/llcommon/lldefs.h +++ b/indra/llcommon/lldefs.h @@ -167,48 +167,34 @@ const U32 MAXADDRSTR = 17; // 123.567.901.345 = 15 chars + \0 + 1 for good luc // // defined for U16, U32, U64, S16, S32, S64, : // llclampb(a) // clamps a to [0 .. 255] -// - -template <typename T1, typename T2> -inline auto llmax(T1 d1, T2 d2) -{ - return (d1 > d2) ? d1 : d2; -} - -template <typename T1, typename T2, typename T3> -inline auto llmax(T1 d1, T2 d2, T3 d3) -{ - auto r = llmax(d1,d2); - return llmax(r, d3); -} +// -template <typename T1, typename T2, typename T3, typename T4> -inline auto llmax(T1 d1, T2 d2, T3 d3, T4 d4) +// recursion tail +template <typename T> +inline auto llmax(T data) { - auto r1 = llmax(d1,d2); - auto r2 = llmax(d3,d4); - return llmax(r1, r2); + return data; } -template <typename T1, typename T2> -inline auto llmin(T1 d1, T2 d2) +template <typename T0, typename T1, typename... Ts> +inline auto llmax(T0 d0, T1 d1, Ts... rest) { - return (d1 < d2) ? d1 : d2; + auto maxrest = llmax(d1, rest...); + return (d0 > maxrest)? d0 : maxrest; } -template <typename T1, typename T2, typename T3> -inline auto llmin(T1 d1, T2 d2, T3 d3) +// recursion tail +template <typename T> +inline auto llmin(T data) { - auto r = llmin(d1,d2); - return (r < d3 ? r : d3); + return data; } -template <typename T1, typename T2, typename T3, typename T4> -inline auto llmin(T1 d1, T2 d2, T3 d3, T4 d4) +template <typename T0, typename T1, typename... Ts> +inline auto llmin(T0 d0, T1 d1, Ts... rest) { - auto r1 = llmin(d1,d2); - auto r2 = llmin(d3,d4); - return llmin(r1, r2); + auto minrest = llmin(d1, rest...); + return (d0 < minrest) ? d0 : minrest; } template <typename A, typename MIN, typename MAX> diff --git a/indra/llcommon/llleap.cpp b/indra/llcommon/llleap.cpp index c87c0758fe..259f5bc505 100644 --- a/indra/llcommon/llleap.cpp +++ b/indra/llcommon/llleap.cpp @@ -204,30 +204,35 @@ public: LLSD packet(LLSDMap("pump", pump)("data", data)); std::ostringstream buffer; - buffer << LLSDNotationStreamer(packet); + // SL-18330: for large data blocks, it's much faster to parse binary + // LLSD than notation LLSD. Use serialize(LLSD_BINARY) rather than + // directly calling LLSDBinaryFormatter because, unlike the latter, + // serialize() prepends the relevant header, needed by a general- + // purpose LLSD parser to distinguish binary from notation. + LLSDSerialize::serialize(packet, buffer, LLSDSerialize::LLSD_BINARY, + LLSDFormatter::OPTIONS_NONE); /*==========================================================================*| // DEBUGGING ONLY: don't copy str() if we can avoid it. std::string strdata(buffer.str()); if (std::size_t(buffer.tellp()) != strdata.length()) { - LL_ERRS("LLLeap") << "tellp() -> " << buffer.tellp() << " != " + LL_ERRS("LLLeap") << "tellp() -> " << static_cast<U64>(buffer.tellp()) << " != " << "str().length() -> " << strdata.length() << LL_ENDL; } // DEBUGGING ONLY: reading back is terribly inefficient. std::istringstream readback(strdata); LLSD echo; - LLPointer<LLSDParser> parser(new LLSDNotationParser()); - S32 parse_status(parser->parse(readback, echo, strdata.length())); - if (parse_status == LLSDParser::PARSE_FAILURE) + bool parse_status(LLSDSerialize::deserialize(echo, readback, strdata.length())); + if (! parse_status) { - LL_ERRS("LLLeap") << "LLSDNotationParser() cannot parse output of " - << "LLSDNotationStreamer()" << LL_ENDL; + LL_ERRS("LLLeap") << "LLSDSerialize::deserialize() cannot parse output of " + << "LLSDSerialize::serialize(LLSD_BINARY)" << LL_ENDL; } if (! llsd_equals(echo, packet)) { - LL_ERRS("LLLeap") << "LLSDNotationParser() produced different LLSD " - << "than passed to LLSDNotationStreamer()" << LL_ENDL; + LL_ERRS("LLLeap") << "LLSDSerialize::deserialize() returned different LLSD " + << "than passed to LLSDSerialize::serialize()" << LL_ENDL; } |*==========================================================================*/ @@ -314,9 +319,17 @@ public: LL_DEBUGS("LLLeap") << "needed " << mExpect << " bytes, got " << childout.size() << ", parsing LLSD" << LL_ENDL; LLSD data; +#if 1 + // specifically require notation LLSD from child LLPointer<LLSDParser> parser(new LLSDNotationParser()); S32 parse_status(parser->parse(childout.get_istream(), data, mExpect)); if (parse_status == LLSDParser::PARSE_FAILURE) +#else + // SL-18330: accept any valid LLSD serialization format from child + // Unfortunately this runs into trouble we have not yet debugged. + bool parse_status(LLSDSerialize::deserialize(data, childout.get_istream(), mExpect)); + if (! parse_status) +#endif { bad_protocol("unparseable LLSD data"); } diff --git a/indra/llcommon/llmd5.cpp b/indra/llcommon/llmd5.cpp index 9b2a2bab60..0abe817f1d 100644 --- a/indra/llcommon/llmd5.cpp +++ b/indra/llcommon/llmd5.cpp @@ -96,7 +96,7 @@ LLMD5::LLMD5() // operation, processing another message block, and updating the // context. -void LLMD5::update (const uint1 *input, const size_t input_length) { +void LLMD5::update (const uint8_t *input, const size_t input_length) { size_t input_index, buffer_index; size_t buffer_space; // how much space is left in buffer @@ -189,7 +189,7 @@ void LLMD5::finalize (){ unsigned char bits[8]; /* Flawfinder: ignore */ size_t index, padLen; - static uint1 PADDING[64]={ + static uint8_t PADDING[64]={ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -201,8 +201,8 @@ void LLMD5::finalize (){ } // Save number of bits. - // Treat count, a uint64_t, as uint4[2]. - encode (bits, reinterpret_cast<uint4*>(&count), 8); + // Treat count, a uint64_t, as uint32_t[2]. + encode (bits, reinterpret_cast<uint32_t*>(&count), 8); // Pad out to 56 mod 64. index = size_t((count >> 3) & 0x3f); @@ -412,7 +412,7 @@ Rotation is separate from addition to prevent recomputation. // LLMD5 basic transformation. Transforms state based on block. void LLMD5::transform (const U8 block[64]){ - uint4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; + uint32_t a = state[0], b = state[1], c = state[2], d = state[3], x[16]; decode (x, block, 64); @@ -496,38 +496,38 @@ void LLMD5::transform (const U8 block[64]){ state[3] += d; // Zeroize sensitive information. - memset ( (uint1 *) x, 0, sizeof(x)); + memset ( (uint8_t *) x, 0, sizeof(x)); } -// Encodes input (UINT4) into output (unsigned char). Assumes len is +// Encodes input (uint32_t) into output (unsigned char). Assumes len is // a multiple of 4. -void LLMD5::encode (uint1 *output, const uint4 *input, const size_t len) { +void LLMD5::encode (uint8_t *output, const uint32_t *input, const size_t len) { size_t i, j; for (i = 0, j = 0; j < len; i++, j += 4) { - output[j] = (uint1) (input[i] & 0xff); - output[j+1] = (uint1) ((input[i] >> 8) & 0xff); - output[j+2] = (uint1) ((input[i] >> 16) & 0xff); - output[j+3] = (uint1) ((input[i] >> 24) & 0xff); + output[j] = (uint8_t) (input[i] & 0xff); + output[j+1] = (uint8_t) ((input[i] >> 8) & 0xff); + output[j+2] = (uint8_t) ((input[i] >> 16) & 0xff); + output[j+3] = (uint8_t) ((input[i] >> 24) & 0xff); } } -// Decodes input (unsigned char) into output (UINT4). Assumes len is +// Decodes input (unsigned char) into output (uint32_t). Assumes len is // a multiple of 4. -void LLMD5::decode (uint4 *output, const uint1 *input, const size_t len){ +void LLMD5::decode (uint32_t *output, const uint8_t *input, const size_t len){ size_t i, j; for (i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((uint4)input[j]) | (((uint4)input[j+1]) << 8) | - (((uint4)input[j+2]) << 16) | (((uint4)input[j+3]) << 24); + output[i] = ((uint32_t)input[j]) | (((uint32_t)input[j+1]) << 8) | + (((uint32_t)input[j+2]) << 16) | (((uint32_t)input[j+3]) << 24); } diff --git a/indra/llcommon/llmd5.h b/indra/llcommon/llmd5.h index 8530dc0389..7d6373c20c 100644 --- a/indra/llcommon/llmd5.h +++ b/indra/llcommon/llmd5.h @@ -67,6 +67,8 @@ documentation and/or software. */ +#include <cstdint> // uint32_t et al. + // use for the raw digest output const int MD5RAW_BYTES = 16; @@ -75,18 +77,13 @@ const int MD5HEX_STR_SIZE = 33; // char hex[MD5HEX_STR_SIZE]; with null const int MD5HEX_STR_BYTES = 32; // message system fixed size class LL_COMMON_API LLMD5 { -// first, some types: - typedef unsigned int uint4; // assumes integer is 4 words long - typedef unsigned short int uint2; // assumes short integer is 2 words long - typedef unsigned char uint1; // assumes char is 1 word long - // how many bytes to grab at a time when checking files static const int BLOCK_LEN; public: // methods for controlled operation: LLMD5 (); // simple initializer - void update (const uint1 *input, const size_t input_length); + void update (const uint8_t *input, const size_t input_length); void update (std::istream& stream); void update (FILE *file); void update (const std::string& str); @@ -109,19 +106,19 @@ private: // next, the private data: - uint4 state[4]; + uint32_t state[4]; uint64_t count; // number of *bits*, mod 2^64 - uint1 buffer[64]; // input buffer - uint1 digest[16]; - uint1 finalized; + uint8_t buffer[64]; // input buffer + uint8_t digest[16]; + uint8_t finalized; // last, the private methods, mostly static: void init (); // called by all constructors - void transform (const uint1 *buffer); // does the real update work. Note + void transform (const uint8_t *buffer); // does the real update work. Note // that length is implied to be 64. - static void encode (uint1 *dest, const uint4 *src, const size_t length); - static void decode (uint4 *dest, const uint1 *src, const size_t length); + static void encode (uint8_t *dest, const uint32_t *src, const size_t length); + static void decode (uint32_t *dest, const uint8_t *src, const size_t length); }; diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp index b7e316da10..3db456ddb3 100644 --- a/indra/llcommon/llsdserialize.cpp +++ b/indra/llcommon/llsdserialize.cpp @@ -48,6 +48,7 @@ #endif #include "lldate.h" +#include "llmemorystream.h" #include "llsd.h" #include "llstring.h" #include "lluri.h" @@ -64,6 +65,23 @@ const std::string LLSD_NOTATION_HEADER("llsd/notation"); #define windowBits 15 #define ENABLE_ZLIB_GZIP 32 +// If we published this in llsdserialize.h, we could use it in the +// implementation of LLSDOStreamer's operator<<(). +template <class Formatter> +void format_using(const LLSD& data, std::ostream& ostr, + LLSDFormatter::EFormatterOptions options=LLSDFormatter::OPTIONS_PRETTY_BINARY) +{ + LLPointer<Formatter> f{ new Formatter }; + f->format(data, ostr, options); +} + +template <class Parser> +S32 parse_using(std::istream& istr, LLSD& data, size_t max_bytes, S32 max_depth=-1) +{ + LLPointer<Parser> p{ new Parser }; + return p->parse(istr, data, max_bytes, max_depth); +} + /** * LLSDSerialize */ @@ -86,10 +104,10 @@ void LLSDSerialize::serialize(const LLSD& sd, std::ostream& str, ELLSD_Serialize f = new LLSDXMLFormatter; break; - case LLSD_NOTATION: - str << "<? " << LLSD_NOTATION_HEADER << " ?>\n"; - f = new LLSDNotationFormatter; - break; + case LLSD_NOTATION: + str << "<? " << LLSD_NOTATION_HEADER << " ?>\n"; + f = new LLSDNotationFormatter; + break; default: LL_WARNS() << "serialize request for unknown ELLSD_Serialize" << LL_ENDL; @@ -104,18 +122,37 @@ void LLSDSerialize::serialize(const LLSD& sd, std::ostream& str, ELLSD_Serialize // static bool LLSDSerialize::deserialize(LLSD& sd, std::istream& str, llssize max_bytes) { - LLPointer<LLSDParser> p = NULL; char hdr_buf[MAX_HDR_LEN + 1] = ""; /* Flawfinder: ignore */ - int i; - int inbuf = 0; - bool legacy_no_header = false; bool fail_if_not_legacy = false; - std::string header; - /* - * Get the first line before anything. - */ - str.get(hdr_buf, MAX_HDR_LEN, '\n'); + /* + * Get the first line before anything. Don't read more than max_bytes: + * this get() overload reads no more than (count-1) bytes into the + * specified buffer. In the usual case when max_bytes exceeds + * sizeof(hdr_buf), get() will read no more than sizeof(hdr_buf)-2. + */ + llssize max_hdr_read = MAX_HDR_LEN; + if (max_bytes != LLSDSerialize::SIZE_UNLIMITED) + { + max_hdr_read = llmin(max_bytes + 1, max_hdr_read); + } + str.get(hdr_buf, max_hdr_read, '\n'); + auto inbuf = str.gcount(); + + // https://en.cppreference.com/w/cpp/io/basic_istream/get + // When the get() above sees the specified delimiter '\n', it stops there + // without pulling it from the stream. If it turns out that the stream + // does NOT contain a header, and the content includes meaningful '\n', + // it's important to pull that into hdr_buf too. + if (inbuf < max_bytes && str.get(hdr_buf[inbuf])) + { + // got the delimiting '\n' + ++inbuf; + // None of the following requires that hdr_buf contain a final '\0' + // byte. We could store one if needed, since even the incremented + // inbuf won't exceed sizeof(hdr_buf)-1, but there's no need. + } + std::string header{ hdr_buf, static_cast<std::string::size_type>(inbuf) }; if (str.fail()) { str.clear(); @@ -123,79 +160,97 @@ bool LLSDSerialize::deserialize(LLSD& sd, std::istream& str, llssize max_bytes) } if (!strncasecmp(LEGACY_NON_HEADER, hdr_buf, strlen(LEGACY_NON_HEADER))) /* Flawfinder: ignore */ + { // Create a LLSD XML parser, and parse the first chunk read above. + LLSDXMLParser x; + x.parsePart(hdr_buf, inbuf); // Parse the first part that was already read + auto parsed = x.parse(str, sd, max_bytes - inbuf); // Parse the rest of it + // Formally we should probably check (parsed != PARSE_FAILURE && + // parsed > 0), but since PARSE_FAILURE is -1, this suffices. + return (parsed > 0); + } + + if (fail_if_not_legacy) { - legacy_no_header = true; - inbuf = (int)str.gcount(); + LL_WARNS() << "deserialize LLSD parse failure" << LL_ENDL; + return false; } - else + + /* + * Remove the newline chars + */ + std::string::size_type lastchar = header.find_last_not_of("\r\n"); + if (lastchar != std::string::npos) { - if (fail_if_not_legacy) - goto fail; - /* - * Remove the newline chars - */ - for (i = 0; i < MAX_HDR_LEN; i++) - { - if (hdr_buf[i] == 0 || hdr_buf[i] == '\r' || - hdr_buf[i] == '\n') - { - hdr_buf[i] = 0; - break; - } - } - header = hdr_buf; + // It's important that find_last_not_of() returns size_type, which is + // why lastchar explicitly declares the type above. erase(size_type) + // erases from that offset to the end of the string, whereas + // erase(iterator) erases only a single character. + header.erase(lastchar+1); + } - std::string::size_type start = std::string::npos; - std::string::size_type end = std::string::npos; - start = header.find_first_not_of("<? "); - if (start != std::string::npos) + // trim off the <? ... ?> header syntax + auto start = header.find_first_not_of("<? "); + if (start != std::string::npos) + { + auto end = header.find_first_of(" ?", start); + if (end != std::string::npos) { - end = header.find_first_of(" ?", start); + header = header.substr(start, end - start); + ws(str); } - if ((start == std::string::npos) || (end == std::string::npos)) - goto fail; - - header = header.substr(start, end - start); - ws(str); } /* * Create the parser as appropriate */ - if (legacy_no_header) - { // Create a LLSD XML parser, and parse the first chunk read above - LLSDXMLParser* x = new LLSDXMLParser(); - x->parsePart(hdr_buf, inbuf); // Parse the first part that was already read - x->parseLines(str, sd); // Parse the rest of it - delete x; - return true; - } - - if (header == LLSD_BINARY_HEADER) + if (0 == LLStringUtil::compareInsensitive(header, LLSD_BINARY_HEADER)) { - p = new LLSDBinaryParser; + return (parse_using<LLSDBinaryParser>(str, sd, max_bytes-inbuf) > 0); } - else if (header == LLSD_XML_HEADER) + else if (0 == LLStringUtil::compareInsensitive(header, LLSD_XML_HEADER)) { - p = new LLSDXMLParser; + return (parse_using<LLSDXMLParser>(str, sd, max_bytes-inbuf) > 0); } - else if (header == LLSD_NOTATION_HEADER) + else if (0 == LLStringUtil::compareInsensitive(header, LLSD_NOTATION_HEADER)) { - p = new LLSDNotationParser; + return (parse_using<LLSDNotationParser>(str, sd, max_bytes-inbuf) > 0); } - else + else // no header we recognize { - LL_WARNS() << "deserialize request for unknown ELLSD_Serialize" << LL_ENDL; - } - - if (p.notNull()) - { - p->parse(str, sd, max_bytes); - return true; + LLPointer<LLSDParser> p; + if (inbuf && hdr_buf[0] == '<') + { + // looks like XML + LL_DEBUGS() << "deserialize request with no header, assuming XML" << LL_ENDL; + p = new LLSDXMLParser; + } + else + { + // assume notation + LL_DEBUGS() << "deserialize request with no header, assuming notation" << LL_ENDL; + p = new LLSDNotationParser; + } + // Since we've already read 'inbuf' bytes into 'hdr_buf', prepend that + // data to whatever remains in 'str'. + LLMemoryStreamBuf already(reinterpret_cast<const U8*>(hdr_buf), inbuf); + cat_streambuf prebuff(&already, str.rdbuf()); + std::istream prepend(&prebuff); +#if 1 + return (p->parse(prepend, sd, max_bytes) > 0); +#else + // debugging the reconstituted 'prepend' stream + // allocate a buffer that we hope is big enough for the whole thing + std::vector<char> wholemsg((max_bytes == size_t(SIZE_UNLIMITED))? 1024 : max_bytes); + prepend.read(wholemsg.data(), std::min(max_bytes, wholemsg.size())); + LLMemoryStream replay(reinterpret_cast<const U8*>(wholemsg.data()), prepend.gcount()); + auto success{ p->parse(replay, sd, prepend.gcount()) > 0 }; + { + LL_DEBUGS() << (success? "parsed: $$" : "failed: '") + << std::string(wholemsg.data(), llmin(prepend.gcount(), 100)) << "$$" + << LL_ENDL; + } + return success; +#endif } - -fail: - LL_WARNS() << "deserialize LLSD parse failure" << LL_ENDL; - return false; } /** @@ -2193,9 +2248,9 @@ LLUZipHelper::EZipRresult LLUZipHelper::unzip_llsd(LLSD& data, std::istream& is, LLUZipHelper::EZipRresult LLUZipHelper::unzip_llsd(LLSD& data, const U8* in, S32 size) { U8* result = NULL; - U32 cur_size = 0; + llssize cur_size = 0; z_stream strm; - + constexpr U32 CHUNK = 1024 * 512; static thread_local std::unique_ptr<U8[]> out; @@ -2388,7 +2443,7 @@ U8* unzip_llsdNavMesh( bool& valid, size_t& outsize, std::istream& is, S32 size return result; } -char* strip_deprecated_header(char* in, U32& cur_size, U32* header_size) +char* strip_deprecated_header(char* in, llssize& cur_size, llssize* header_size) { const char* deprecated_header = "<? LLSD/Binary ?>"; constexpr size_t deprecated_header_size = 17; diff --git a/indra/llcommon/llsdserialize.h b/indra/llcommon/llsdserialize.h index 2f12c6d1ff..676b7bfd6a 100644 --- a/indra/llcommon/llsdserialize.h +++ b/indra/llcommon/llsdserialize.h @@ -873,5 +873,5 @@ LL_COMMON_API std::string zip_llsd(LLSD& data); LL_COMMON_API U8* unzip_llsdNavMesh( bool& valid, size_t& outsize,std::istream& is, S32 size); // returns a pointer to the array or past the array if the deprecated header exists -LL_COMMON_API char* strip_deprecated_header(char* in, U32& cur_size, U32* header_size = nullptr); +LL_COMMON_API char* strip_deprecated_header(char* in, llssize& cur_size, llssize* header_size = nullptr); #endif // LL_LLSDSERIALIZE_H diff --git a/indra/llcommon/llstreamtools.cpp b/indra/llcommon/llstreamtools.cpp index 1ff15fcf89..bc32b6fd9e 100644 --- a/indra/llcommon/llstreamtools.cpp +++ b/indra/llcommon/llstreamtools.cpp @@ -513,3 +513,29 @@ std::istream& operator>>(std::istream& str, const char *tocheck) } return str; } + +int cat_streambuf::underflow() +{ + if (gptr() == egptr()) + { + // here because our buffer is empty + std::streamsize size = 0; + // Until we've run out of mInputs, try reading the first of them + // into mBuffer. If that fetches some characters, break the loop. + while (! mInputs.empty() + && ! (size = mInputs.front()->sgetn(mBuffer.data(), mBuffer.size()))) + { + // We tried to read mInputs.front() but got zero characters. + // Discard the first streambuf and try the next one. + mInputs.pop_front(); + } + // Either we ran out of mInputs or we succeeded in reading some + // characters, that is, size != 0. Tell base class what we have. + setg(mBuffer.data(), mBuffer.data(), mBuffer.data() + size); + } + // If we fell out of the above loop with mBuffer still empty, return + // eof(), otherwise return the next character. + return (gptr() == egptr()) + ? std::char_traits<char>::eof() + : std::char_traits<char>::to_int_type(*gptr()); +} diff --git a/indra/llcommon/llstreamtools.h b/indra/llcommon/llstreamtools.h index 1b04bf91d7..bb7bc20327 100644 --- a/indra/llcommon/llstreamtools.h +++ b/indra/llcommon/llstreamtools.h @@ -27,8 +27,10 @@ #ifndef LL_STREAM_TOOLS_H #define LL_STREAM_TOOLS_H +#include <deque> #include <iostream> #include <string> +#include <vector> // unless specifed otherwise these all return input_stream.good() @@ -113,6 +115,27 @@ LL_COMMON_API std::streamsize fullread( LL_COMMON_API std::istream& operator>>(std::istream& str, const char *tocheck); -#endif - +/** + * cat_streambuf is a std::streambuf subclass that accepts a variadic number + * of std::streambuf* (e.g. some_istream.rdbuf()) and virtually concatenates + * their contents. + */ +// derived from https://stackoverflow.com/a/49441066/5533635 +class cat_streambuf: public std::streambuf +{ +private: + std::deque<std::streambuf*> mInputs; + std::vector<char> mBuffer; + +public: + // only valid for std::streambuf* arguments + template <typename... Inputs> + cat_streambuf(Inputs... inputs): + mInputs{inputs...}, + mBuffer(1024) + {} + + int underflow() override; +}; +#endif diff --git a/indra/llcommon/lltracerecording.cpp b/indra/llcommon/lltracerecording.cpp index a8dcc5226a..bb3d667a42 100644 --- a/indra/llcommon/lltracerecording.cpp +++ b/indra/llcommon/lltracerecording.cpp @@ -577,10 +577,12 @@ S32 Recording::getSampleCount( const StatType<EventAccumulator>& stat ) // PeriodicRecording /////////////////////////////////////////////////////////////////////// -PeriodicRecording::PeriodicRecording( S32 num_periods, EPlayState state) +PeriodicRecording::PeriodicRecording( size_t num_periods, EPlayState state) : mAutoResize(num_periods == 0), mCurPeriod(0), mNumRecordedPeriods(0), + // This guarantee that mRecordingPeriods cannot be empty is essential for + // code in several methods. mRecordingPeriods(num_periods ? num_periods : 1) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; @@ -596,18 +598,19 @@ PeriodicRecording::~PeriodicRecording() void PeriodicRecording::nextPeriod() { - LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; + LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; if (mAutoResize) { mRecordingPeriods.push_back(Recording()); } Recording& old_recording = getCurRecording(); - mCurPeriod = (mCurPeriod + 1) % mRecordingPeriods.size(); + inci(mCurPeriod); old_recording.splitTo(getCurRecording()); - mNumRecordedPeriods = mRecordingPeriods.empty()? 0 : - llmin(mRecordingPeriods.size() - 1, mNumRecordedPeriods + 1); + // Since mRecordingPeriods always has at least one entry, we can always + // safely subtract 1 from its size(). + mNumRecordedPeriods = llmin(mRecordingPeriods.size() - 1, mNumRecordedPeriods + 1); } void PeriodicRecording::appendRecording(Recording& recording) @@ -620,31 +623,29 @@ void PeriodicRecording::appendRecording(Recording& recording) void PeriodicRecording::appendPeriodicRecording( PeriodicRecording& other ) { - LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; + LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; if (other.mRecordingPeriods.empty()) return; getCurRecording().update(); other.getCurRecording().update(); - - const auto other_recording_slots = other.mRecordingPeriods.size(); + const auto other_num_recordings = other.getNumRecordedPeriods(); const auto other_current_recording_index = other.mCurPeriod; - const auto other_oldest_recording_index = (other_current_recording_index + other_recording_slots - other_num_recordings) % other_recording_slots; + const auto other_oldest_recording_index = other.previ(other_current_recording_index, other_num_recordings); // append first recording into our current slot getCurRecording().appendRecording(other.mRecordingPeriods[other_oldest_recording_index]); // from now on, add new recordings for everything after the first - auto other_index = (other_oldest_recording_index + 1) % other_recording_slots; + auto other_index = other.nexti(other_oldest_recording_index); if (mAutoResize) { // push back recordings for everything in the middle - auto other_index = (other_oldest_recording_index + 1) % other_recording_slots; while (other_index != other_current_recording_index) { mRecordingPeriods.push_back(other.mRecordingPeriods[other_index]); - other_index = (other_index + 1) % other_recording_slots; + other.inci(other_index); } // add final recording, if it wasn't already added as the first @@ -653,36 +654,25 @@ void PeriodicRecording::appendPeriodicRecording( PeriodicRecording& other ) mRecordingPeriods.push_back(other.mRecordingPeriods[other_current_recording_index]); } - mCurPeriod = mRecordingPeriods.empty()? 0 : mRecordingPeriods.size() - 1; + // mRecordingPeriods is never empty() + mCurPeriod = mRecordingPeriods.size() - 1; mNumRecordedPeriods = mCurPeriod; } else { - S32 num_to_copy = llmin((S32)mRecordingPeriods.size(), (S32)other_num_recordings); - - std::vector<Recording>::iterator src_it = other.mRecordingPeriods.begin() + other_index ; - std::vector<Recording>::iterator dest_it = mRecordingPeriods.begin() + mCurPeriod; - + auto num_to_copy = llmin(mRecordingPeriods.size(), other_num_recordings); // already consumed the first recording from other, so start counting at 1 - for(S32 i = 1; i < num_to_copy; i++) + for (size_t n = 1, srci = other_index, dsti = mCurPeriod; + n < num_to_copy; + ++n, other.inci(srci), inci(dsti)) { - *dest_it = *src_it; - - if (++src_it == other.mRecordingPeriods.end()) - { - src_it = other.mRecordingPeriods.begin(); - } - - if (++dest_it == mRecordingPeriods.end()) - { - dest_it = mRecordingPeriods.begin(); - } + mRecordingPeriods[dsti] = other.mRecordingPeriods[srci]; } - + // want argument to % to be positive, otherwise result could be negative and thus out of bounds llassert(num_to_copy >= 1); // advance to last recording period copied, and make that our current period - mCurPeriod = (mCurPeriod + num_to_copy - 1) % mRecordingPeriods.size(); + inci(mCurPeriod, num_to_copy - 1); mNumRecordedPeriods = llmin(mRecordingPeriods.size() - 1, mNumRecordedPeriods + num_to_copy - 1); } @@ -694,13 +684,11 @@ void PeriodicRecording::appendPeriodicRecording( PeriodicRecording& other ) F64Seconds PeriodicRecording::getDuration() const { - LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; + LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; F64Seconds duration; - auto num_periods = mRecordingPeriods.size(); - for (size_t i = 1; i <= num_periods; i++) + for (size_t n = 0; n < mRecordingPeriods.size(); ++n) { - auto index = (mCurPeriod + num_periods - i) % num_periods; - duration += mRecordingPeriods[index].getDuration(); + duration += mRecordingPeriods[nexti(mCurPeriod, n)].getDuration(); } return duration; } @@ -737,16 +725,14 @@ const Recording& PeriodicRecording::getCurRecording() const Recording& PeriodicRecording::getPrevRecording( size_t offset ) { - auto num_periods = mRecordingPeriods.size(); - offset = llclamp(offset, 0, num_periods - 1); - return mRecordingPeriods[(mCurPeriod + num_periods - offset) % num_periods]; + // reuse const implementation, but return non-const reference + return const_cast<Recording&>( + const_cast<const PeriodicRecording*>(this)->getPrevRecording(offset)); } const Recording& PeriodicRecording::getPrevRecording( size_t offset ) const { - auto num_periods = mRecordingPeriods.size(); - offset = llclamp(offset, 0, num_periods - 1); - return mRecordingPeriods[(mCurPeriod + num_periods - offset) % num_periods]; + return mRecordingPeriods[previ(mCurPeriod, offset)]; } void PeriodicRecording::handleStart() @@ -789,14 +775,14 @@ void PeriodicRecording::handleSplitTo(PeriodicRecording& other) getCurRecording().splitTo(other.getCurRecording()); } -F64 PeriodicRecording::getPeriodMin( const StatType<EventAccumulator>& stat, size_t num_periods /*= S32_MAX*/ ) +F64 PeriodicRecording::getPeriodMin( const StatType<EventAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ ) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); bool has_value = false; F64 min_val = std::numeric_limits<F64>::max(); - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.hasValue(stat)) @@ -811,14 +797,14 @@ F64 PeriodicRecording::getPeriodMin( const StatType<EventAccumulator>& stat, siz : NaN; } -F64 PeriodicRecording::getPeriodMax( const StatType<EventAccumulator>& stat, size_t num_periods /*= S32_MAX*/ ) +F64 PeriodicRecording::getPeriodMax( const StatType<EventAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ ) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); bool has_value = false; F64 max_val = std::numeric_limits<F64>::min(); - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.hasValue(stat)) @@ -834,7 +820,7 @@ F64 PeriodicRecording::getPeriodMax( const StatType<EventAccumulator>& stat, siz } // calculates means using aggregates per period -F64 PeriodicRecording::getPeriodMean( const StatType<EventAccumulator>& stat, size_t num_periods /*= S32_MAX*/ ) +F64 PeriodicRecording::getPeriodMean( const StatType<EventAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ ) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); @@ -842,7 +828,7 @@ F64 PeriodicRecording::getPeriodMean( const StatType<EventAccumulator>& stat, si F64 mean = 0; S32 valid_period_count = 0; - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.hasValue(stat)) @@ -857,7 +843,7 @@ F64 PeriodicRecording::getPeriodMean( const StatType<EventAccumulator>& stat, si : NaN; } -F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<EventAccumulator>& stat, size_t num_periods /*= S32_MAX*/ ) +F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<EventAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ ) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); @@ -866,7 +852,7 @@ F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<EventAccumulat F64 sum_of_squares = 0; S32 valid_period_count = 0; - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.hasValue(stat)) @@ -882,14 +868,14 @@ F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<EventAccumulat : NaN; } -F64 PeriodicRecording::getPeriodMin( const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/ ) +F64 PeriodicRecording::getPeriodMin( const StatType<SampleAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ ) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); bool has_value = false; F64 min_val = std::numeric_limits<F64>::max(); - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.hasValue(stat)) @@ -904,14 +890,14 @@ F64 PeriodicRecording::getPeriodMin( const StatType<SampleAccumulator>& stat, si : NaN; } -F64 PeriodicRecording::getPeriodMax(const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/) +F64 PeriodicRecording::getPeriodMax(const StatType<SampleAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); bool has_value = false; F64 max_val = std::numeric_limits<F64>::min(); - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.hasValue(stat)) @@ -927,7 +913,7 @@ F64 PeriodicRecording::getPeriodMax(const StatType<SampleAccumulator>& stat, siz } -F64 PeriodicRecording::getPeriodMean( const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/ ) +F64 PeriodicRecording::getPeriodMean( const StatType<SampleAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ ) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); @@ -935,7 +921,7 @@ F64 PeriodicRecording::getPeriodMean( const StatType<SampleAccumulator>& stat, s S32 valid_period_count = 0; F64 mean = 0; - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.hasValue(stat)) @@ -950,13 +936,13 @@ F64 PeriodicRecording::getPeriodMean( const StatType<SampleAccumulator>& stat, s : NaN; } -F64 PeriodicRecording::getPeriodMedian( const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/ ) +F64 PeriodicRecording::getPeriodMedian( const StatType<SampleAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ ) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); std::vector<F64> buf; - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.getDuration() > (F32Seconds)0.f) @@ -976,7 +962,7 @@ F64 PeriodicRecording::getPeriodMedian( const StatType<SampleAccumulator>& stat, return F64((buf.size() % 2 == 0) ? (buf[buf.size() / 2 - 1] + buf[buf.size() / 2]) / 2 : buf[buf.size() / 2]); } -F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/ ) +F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<SampleAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ ) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); @@ -985,7 +971,7 @@ F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<SampleAccumula S32 valid_period_count = 0; F64 sum_of_squares = 0; - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.hasValue(stat)) @@ -1002,13 +988,13 @@ F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<SampleAccumula } -F64Kilobytes PeriodicRecording::getPeriodMin( const StatType<MemAccumulator>& stat, size_t num_periods /*= S32_MAX*/ ) +F64Kilobytes PeriodicRecording::getPeriodMin( const StatType<MemAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ ) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); F64Kilobytes min_val(std::numeric_limits<F64>::max()); - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); min_val = llmin(min_val, recording.getMin(stat)); @@ -1022,13 +1008,13 @@ F64Kilobytes PeriodicRecording::getPeriodMin(const MemStatHandle& stat, size_t n return getPeriodMin(static_cast<const StatType<MemAccumulator>&>(stat), num_periods); } -F64Kilobytes PeriodicRecording::getPeriodMax(const StatType<MemAccumulator>& stat, size_t num_periods /*= S32_MAX*/) +F64Kilobytes PeriodicRecording::getPeriodMax(const StatType<MemAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); F64Kilobytes max_val(0.0); - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); max_val = llmax(max_val, recording.getMax(stat)); @@ -1042,14 +1028,14 @@ F64Kilobytes PeriodicRecording::getPeriodMax(const MemStatHandle& stat, size_t n return getPeriodMax(static_cast<const StatType<MemAccumulator>&>(stat), num_periods); } -F64Kilobytes PeriodicRecording::getPeriodMean( const StatType<MemAccumulator>& stat, size_t num_periods /*= S32_MAX*/ ) +F64Kilobytes PeriodicRecording::getPeriodMean( const StatType<MemAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ ) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); F64Kilobytes mean(0); - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); mean += recording.getMean(stat); @@ -1063,7 +1049,7 @@ F64Kilobytes PeriodicRecording::getPeriodMean(const MemStatHandle& stat, size_t return getPeriodMean(static_cast<const StatType<MemAccumulator>&>(stat), num_periods); } -F64Kilobytes PeriodicRecording::getPeriodStandardDeviation( const StatType<MemAccumulator>& stat, size_t num_periods /*= S32_MAX*/ ) +F64Kilobytes PeriodicRecording::getPeriodStandardDeviation( const StatType<MemAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ ) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); @@ -1072,7 +1058,7 @@ F64Kilobytes PeriodicRecording::getPeriodStandardDeviation( const StatType<MemAc S32 valid_period_count = 0; F64 sum_of_squares = 0; - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.hasValue(stat)) diff --git a/indra/llcommon/lltracerecording.h b/indra/llcommon/lltracerecording.h index 8b56721f42..a6b1a67d02 100644 --- a/indra/llcommon/lltracerecording.h +++ b/indra/llcommon/lltracerecording.h @@ -33,6 +33,7 @@ #include "lltimer.h" #include "lltraceaccumulators.h" #include "llpointer.h" +#include <limits> class LLStopWatchControlsMixinCommon { @@ -330,7 +331,7 @@ namespace LLTrace : public LLStopWatchControlsMixin<PeriodicRecording> { public: - PeriodicRecording(S32 num_periods, EPlayState state = STOPPED); + PeriodicRecording(size_t num_periods, EPlayState state = STOPPED); ~PeriodicRecording(); void nextPeriod(); @@ -353,7 +354,7 @@ namespace LLTrace Recording snapshotCurRecording() const; template <typename T> - auto getSampleCount(const StatType<T>& stat, size_t num_periods = S32_MAX) + auto getSampleCount(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); @@ -373,14 +374,14 @@ namespace LLTrace // catch all for stats that have a defined sum template <typename T> - typename T::value_t getPeriodMin(const StatType<T>& stat, size_t num_periods = S32_MAX) + typename T::value_t getPeriodMin(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); bool has_value = false; typename T::value_t min_val(std::numeric_limits<typename T::value_t>::max()); - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.hasValue(stat)) @@ -396,39 +397,39 @@ namespace LLTrace } template<typename T> - T getPeriodMin(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX) + T getPeriodMin(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return T(getPeriodMin(static_cast<const StatType<CountAccumulator>&>(stat), num_periods)); } - F64 getPeriodMin(const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX); + F64 getPeriodMin(const StatType<SampleAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max()); template<typename T> - T getPeriodMin(const SampleStatHandle<T>& stat, size_t num_periods = S32_MAX) + T getPeriodMin(const SampleStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return T(getPeriodMin(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods)); } - F64 getPeriodMin(const StatType<EventAccumulator>& stat, size_t num_periods = S32_MAX); + F64 getPeriodMin(const StatType<EventAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max()); template<typename T> - T getPeriodMin(const EventStatHandle<T>& stat, size_t num_periods = S32_MAX) + T getPeriodMin(const EventStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return T(getPeriodMin(static_cast<const StatType<EventAccumulator>&>(stat), num_periods)); } - F64Kilobytes getPeriodMin(const StatType<MemAccumulator>& stat, size_t num_periods = S32_MAX); - F64Kilobytes getPeriodMin(const MemStatHandle& stat, size_t num_periods = S32_MAX); + F64Kilobytes getPeriodMin(const StatType<MemAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max()); + F64Kilobytes getPeriodMin(const MemStatHandle& stat, size_t num_periods = std::numeric_limits<size_t>::max()); template <typename T> - typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMinPerSec(const StatType<T>& stat, size_t num_periods = S32_MAX) + typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMinPerSec(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); typename RelatedTypes<typename T::value_t>::fractional_t min_val(std::numeric_limits<F64>::max()); - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); min_val = llmin(min_val, recording.getPerSec(stat)); @@ -437,7 +438,7 @@ namespace LLTrace } template<typename T> - typename RelatedTypes<T>::fractional_t getPeriodMinPerSec(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX) + typename RelatedTypes<T>::fractional_t getPeriodMinPerSec(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return typename RelatedTypes<T>::fractional_t(getPeriodMinPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods)); @@ -449,14 +450,14 @@ namespace LLTrace // catch all for stats that have a defined sum template <typename T> - typename T::value_t getPeriodMax(const StatType<T>& stat, size_t num_periods = S32_MAX) + typename T::value_t getPeriodMax(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); bool has_value = false; typename T::value_t max_val(std::numeric_limits<typename T::value_t>::min()); - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.hasValue(stat)) @@ -472,39 +473,39 @@ namespace LLTrace } template<typename T> - T getPeriodMax(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX) + T getPeriodMax(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return T(getPeriodMax(static_cast<const StatType<CountAccumulator>&>(stat), num_periods)); } - F64 getPeriodMax(const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX); + F64 getPeriodMax(const StatType<SampleAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max()); template<typename T> - T getPeriodMax(const SampleStatHandle<T>& stat, size_t num_periods = S32_MAX) + T getPeriodMax(const SampleStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return T(getPeriodMax(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods)); } - F64 getPeriodMax(const StatType<EventAccumulator>& stat, size_t num_periods = S32_MAX); + F64 getPeriodMax(const StatType<EventAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max()); template<typename T> - T getPeriodMax(const EventStatHandle<T>& stat, size_t num_periods = S32_MAX) + T getPeriodMax(const EventStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return T(getPeriodMax(static_cast<const StatType<EventAccumulator>&>(stat), num_periods)); } - F64Kilobytes getPeriodMax(const StatType<MemAccumulator>& stat, size_t num_periods = S32_MAX); - F64Kilobytes getPeriodMax(const MemStatHandle& stat, size_t num_periods = S32_MAX); + F64Kilobytes getPeriodMax(const StatType<MemAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max()); + F64Kilobytes getPeriodMax(const MemStatHandle& stat, size_t num_periods = std::numeric_limits<size_t>::max()); template <typename T> - typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMaxPerSec(const StatType<T>& stat, size_t num_periods = S32_MAX) + typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMaxPerSec(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); F64 max_val = std::numeric_limits<F64>::min(); - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); max_val = llmax(max_val, recording.getPerSec(stat)); @@ -513,7 +514,7 @@ namespace LLTrace } template<typename T> - typename RelatedTypes<T>::fractional_t getPeriodMaxPerSec(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX) + typename RelatedTypes<T>::fractional_t getPeriodMaxPerSec(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return typename RelatedTypes<T>::fractional_t(getPeriodMaxPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods)); @@ -525,14 +526,14 @@ namespace LLTrace // catch all for stats that have a defined sum template <typename T> - typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMean(const StatType<T >& stat, size_t num_periods = S32_MAX) + typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMean(const StatType<T >& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); typename RelatedTypes<typename T::value_t>::fractional_t mean(0); - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.getDuration() > (F32Seconds)0.f) @@ -546,39 +547,39 @@ namespace LLTrace } template<typename T> - typename RelatedTypes<T>::fractional_t getPeriodMean(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX) + typename RelatedTypes<T>::fractional_t getPeriodMean(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return typename RelatedTypes<T>::fractional_t(getPeriodMean(static_cast<const StatType<CountAccumulator>&>(stat), num_periods)); } - F64 getPeriodMean(const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX); + F64 getPeriodMean(const StatType<SampleAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max()); template<typename T> - typename RelatedTypes<T>::fractional_t getPeriodMean(const SampleStatHandle<T>& stat, size_t num_periods = S32_MAX) + typename RelatedTypes<T>::fractional_t getPeriodMean(const SampleStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return typename RelatedTypes<T>::fractional_t(getPeriodMean(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods)); } - F64 getPeriodMean(const StatType<EventAccumulator>& stat, size_t num_periods = S32_MAX); + F64 getPeriodMean(const StatType<EventAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max()); template<typename T> - typename RelatedTypes<T>::fractional_t getPeriodMean(const EventStatHandle<T>& stat, size_t num_periods = S32_MAX) + typename RelatedTypes<T>::fractional_t getPeriodMean(const EventStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return typename RelatedTypes<T>::fractional_t(getPeriodMean(static_cast<const StatType<EventAccumulator>&>(stat), num_periods)); } - F64Kilobytes getPeriodMean(const StatType<MemAccumulator>& stat, size_t num_periods = S32_MAX); - F64Kilobytes getPeriodMean(const MemStatHandle& stat, size_t num_periods = S32_MAX); + F64Kilobytes getPeriodMean(const StatType<MemAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max()); + F64Kilobytes getPeriodMean(const MemStatHandle& stat, size_t num_periods = std::numeric_limits<size_t>::max()); template <typename T> - typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMeanPerSec(const StatType<T>& stat, size_t num_periods = S32_MAX) + typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMeanPerSec(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; num_periods = llmin(num_periods, getNumRecordedPeriods()); typename RelatedTypes<typename T::value_t>::fractional_t mean = 0; - for (S32 i = 1; i <= num_periods; i++) + for (size_t i = 1; i <= num_periods; i++) { Recording& recording = getPrevRecording(i); if (recording.getDuration() > (F32Seconds)0.f) @@ -593,64 +594,64 @@ namespace LLTrace } template<typename T> - typename RelatedTypes<T>::fractional_t getPeriodMeanPerSec(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX) + typename RelatedTypes<T>::fractional_t getPeriodMeanPerSec(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return typename RelatedTypes<T>::fractional_t(getPeriodMeanPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods)); } - F64 getPeriodMedian( const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX); + F64 getPeriodMedian( const StatType<SampleAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max()); - template <typename T> - typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMedianPerSec(const StatType<T>& stat, size_t num_periods = S32_MAX) - { - LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; - num_periods = llmin(num_periods, getNumRecordedPeriods()); - - std::vector <typename RelatedTypes<typename T::value_t>::fractional_t> buf; - for (S32 i = 1; i <= num_periods; i++) - { - Recording& recording = getPrevRecording(i); - if (recording.getDuration() > (F32Seconds)0.f) - { - buf.push_back(recording.getPerSec(stat)); - } - } - std::sort(buf.begin(), buf.end()); - - return typename RelatedTypes<T>::fractional_t((buf.size() % 2 == 0) ? (buf[buf.size() / 2 - 1] + buf[buf.size() / 2]) / 2 : buf[buf.size() / 2]); - } - - template<typename T> - typename RelatedTypes<T>::fractional_t getPeriodMedianPerSec(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX) - { - LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; - return typename RelatedTypes<T>::fractional_t(getPeriodMedianPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods)); - } + template <typename T> + typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMedianPerSec(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) + { + LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; + num_periods = llmin(num_periods, getNumRecordedPeriods()); + + std::vector <typename RelatedTypes<typename T::value_t>::fractional_t> buf; + for (size_t i = 1; i <= num_periods; i++) + { + Recording& recording = getPrevRecording(i); + if (recording.getDuration() > (F32Seconds)0.f) + { + buf.push_back(recording.getPerSec(stat)); + } + } + std::sort(buf.begin(), buf.end()); + + return typename RelatedTypes<T>::fractional_t((buf.size() % 2 == 0) ? (buf[buf.size() / 2 - 1] + buf[buf.size() / 2]) / 2 : buf[buf.size() / 2]); + } + + template<typename T> + typename RelatedTypes<T>::fractional_t getPeriodMedianPerSec(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) + { + LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; + return typename RelatedTypes<T>::fractional_t(getPeriodMedianPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods)); + } // // PERIODIC STANDARD DEVIATION // - F64 getPeriodStandardDeviation(const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX); + F64 getPeriodStandardDeviation(const StatType<SampleAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max()); template<typename T> - typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const SampleStatHandle<T>& stat, size_t num_periods = S32_MAX) + typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const SampleStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return typename RelatedTypes<T>::fractional_t(getPeriodStandardDeviation(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods)); } - F64 getPeriodStandardDeviation(const StatType<EventAccumulator>& stat, size_t num_periods = S32_MAX); + F64 getPeriodStandardDeviation(const StatType<EventAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max()); template<typename T> - typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const EventStatHandle<T>& stat, size_t num_periods = S32_MAX) + typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const EventStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max()) { LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS; return typename RelatedTypes<T>::fractional_t(getPeriodStandardDeviation(static_cast<const StatType<EventAccumulator>&>(stat), num_periods)); } - F64Kilobytes getPeriodStandardDeviation(const StatType<MemAccumulator>& stat, size_t num_periods = S32_MAX); - F64Kilobytes getPeriodStandardDeviation(const MemStatHandle& stat, size_t num_periods = S32_MAX); + F64Kilobytes getPeriodStandardDeviation(const StatType<MemAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max()); + F64Kilobytes getPeriodStandardDeviation(const MemStatHandle& stat, size_t num_periods = std::numeric_limits<size_t>::max()); private: // implementation for LLStopWatchControlsMixin @@ -659,6 +660,35 @@ namespace LLTrace /*virtual*/ void handleReset(); /*virtual*/ void handleSplitTo(PeriodicRecording& other); + // helper methods for wraparound ring-buffer arithmetic + inline + size_t wrapi(size_t i) const + { + return i % mRecordingPeriods.size(); + } + + inline + size_t nexti(size_t i, size_t offset=1) const + { + return wrapi(i + offset); + } + + inline + size_t previ(size_t i, size_t offset=1) const + { + auto num_periods = mRecordingPeriods.size(); + // constrain offset + offset = llclamp(offset, 0, num_periods - 1); + // add size() so expression can't go (unsigned) "negative" + return wrapi(i + num_periods - offset); + } + + inline + void inci(size_t& i, size_t offset=1) const + { + i = nexti(i, offset); + } + private: std::vector<Recording> mRecordingPeriods; const bool mAutoResize; diff --git a/indra/llcommon/lluuid.cpp b/indra/llcommon/lluuid.cpp index fc04dca08d..5655e8e2f2 100644 --- a/indra/llcommon/lluuid.cpp +++ b/indra/llcommon/lluuid.cpp @@ -884,7 +884,7 @@ U32 LLUUID::getRandomSeed() seed[7]=(unsigned char)(pid); getSystemTime((uuid_time_t *)(&seed[8])); - U64 seed64 = HBXXH64((const void*)seed, 16).digest(); + U64 seed64 = HBXXH64::digest((const void*)seed, 16); return U32(seed64) ^ U32(seed64 >> 32); } diff --git a/indra/llcommon/lluuid.h b/indra/llcommon/lluuid.h index c139c4eb4e..80597fa186 100644 --- a/indra/llcommon/lluuid.h +++ b/indra/llcommon/lluuid.h @@ -116,6 +116,14 @@ public: U16 getCRC16() const; U32 getCRC32() const; + // Returns a 64 bits digest of the UUID, by XORing its two 64 bits long + // words. HB + inline U64 getDigest64() const + { + U64* tmp = (U64*)mData; + return tmp[0] ^ tmp[1]; + } + static BOOL validate(const std::string& in_string); // Validate that the UUID string is legal. static const LLUUID null; @@ -165,36 +173,22 @@ public: LLAssetID makeAssetID(const LLUUID& session) const; }; -// Generate a hash of an LLUUID object using the boost hash templates. -template <> -struct boost::hash<LLUUID> -{ - typedef LLUUID argument_type; - typedef std::size_t result_type; - result_type operator()(argument_type const& s) const - { - result_type seed(0); - - for (S32 i = 0; i < UUID_BYTES; ++i) - { - boost::hash_combine(seed, s.mData[i]); - } - - return seed; - } -}; - -// Adapt boost hash to std hash +// std::hash implementation for LLUUID namespace std { - template<> struct hash<LLUUID> - { - std::size_t operator()(LLUUID const& s) const noexcept - { - return boost::hash<LLUUID>()(s); - } - }; + template<> struct hash<LLUUID> + { + inline size_t operator()(const LLUUID& id) const noexcept + { + return (size_t)id.getDigest64(); + } + }; } -#endif +// For use with boost containers. +inline size_t hash_value(const LLUUID& id) noexcept +{ + return (size_t)id.getDigest64(); +} +#endif // LL_LLUUID_H diff --git a/indra/llcommon/stdtypes.h b/indra/llcommon/stdtypes.h index da8512169c..0b43d7ad4b 100644 --- a/indra/llcommon/stdtypes.h +++ b/indra/llcommon/stdtypes.h @@ -41,7 +41,7 @@ typedef unsigned int U32; // to express an index that might go negative // (ssize_t is provided by SOME compilers, don't collide) -typedef typename std::make_signed<size_t>::type llssize; +typedef typename std::make_signed<std::size_t>::type llssize; #if LL_WINDOWS // https://docs.microsoft.com/en-us/cpp/build/reference/zc-wchar-t-wchar-t-is-native-type diff --git a/indra/llcommon/tests/llleap_test.cpp b/indra/llcommon/tests/llleap_test.cpp index 7ee36a9ea6..3ae48a2532 100644 --- a/indra/llcommon/tests/llleap_test.cpp +++ b/indra/llcommon/tests/llleap_test.cpp @@ -109,7 +109,12 @@ namespace tut "import os\n" "import sys\n" "\n" - "from llbase import llsd\n" + "try:\n" + // new freestanding llsd package + " import llsd\n" + "except ImportError:\n" + // older llbase.llsd module + " from llbase import llsd\n" "\n" "class ProtocolError(Exception):\n" " def __init__(self, msg, data):\n" @@ -120,26 +125,26 @@ namespace tut " pass\n" "\n" "def get():\n" - " hdr = ''\n" - " while ':' not in hdr and len(hdr) < 20:\n" - " hdr += sys.stdin.read(1)\n" + " hdr = []\n" + " while b':' not in hdr and len(hdr) < 20:\n" + " hdr.append(sys.stdin.buffer.read(1))\n" " if not hdr:\n" " sys.exit(0)\n" - " if not hdr.endswith(':'):\n" + " if not hdr[-1] == b':':\n" " raise ProtocolError('Expected len:data, got %r' % hdr, hdr)\n" " try:\n" - " length = int(hdr[:-1])\n" + " length = int(b''.join(hdr[:-1]))\n" " except ValueError:\n" " raise ProtocolError('Non-numeric len %r' % hdr[:-1], hdr[:-1])\n" " parts = []\n" " received = 0\n" " while received < length:\n" - " parts.append(sys.stdin.read(length - received))\n" + " parts.append(sys.stdin.buffer.read(length - received))\n" " received += len(parts[-1])\n" - " data = ''.join(parts)\n" + " data = b''.join(parts)\n" " assert len(data) == length\n" " try:\n" - " return llsd.parse(data.encode())\n" + " return llsd.parse(data)\n" // Seems the old indra.base.llsd module didn't properly // convert IndexError (from running off end of string) to // LLSDParseError. @@ -179,11 +184,11 @@ namespace tut " return _reply\n" "\n" "def put(req):\n" - " sys.stdout.write(':'.join((str(len(req)), req)))\n" + " sys.stdout.buffer.write(b'%d:%b' % (len(req), req))\n" " sys.stdout.flush()\n" "\n" "def send(pump, data):\n" - " put(llsd.format_notation(dict(pump=pump, data=data)).decode())\n" + " put(llsd.format_notation(dict(pump=pump, data=data)))\n" "\n" "def request(pump, data):\n" " # we expect 'data' is a dict\n" diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index 5dbcf4c9b8..acb2953b5b 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -46,20 +46,24 @@ typedef U32 uint32_t; #include "boost/range.hpp" #include "boost/foreach.hpp" -#include "boost/function.hpp" #include "boost/bind.hpp" #include "boost/phoenix/bind/bind_function.hpp" #include "boost/phoenix/core/argument.hpp" using namespace boost::phoenix; -#include "../llsd.h" -#include "../llsdserialize.h" +#include "llsd.h" +#include "llsdserialize.h" #include "llsdutil.h" -#include "../llformat.h" +#include "llformat.h" +#include "llmemorystream.h" #include "../test/lltut.h" #include "../test/namedtempfile.h" #include "stringize.h" +#include <functional> + +typedef std::function<void(const LLSD& data, std::ostream& str)> FormatterFunction; +typedef std::function<bool(std::istream& istr, LLSD& data, llssize max_bytes)> ParserFunction; std::vector<U8> string_to_vector(const std::string& str) { @@ -112,7 +116,7 @@ namespace tut mSD = LLUUID::null; expected = "<llsd><uuid /></llsd>\n"; xml_test("null uuid", expected); - + mSD = LLUUID("c96f9b1e-f589-4100-9774-d98643ce0bed"); expected = "<llsd><uuid>c96f9b1e-f589-4100-9774-d98643ce0bed</uuid></llsd>\n"; xml_test("uuid", expected); @@ -136,7 +140,7 @@ namespace tut expected = "<llsd><binary encoding=\"base64\">aGVsbG8=</binary></llsd>\n"; xml_test("binary", expected); } - + template<> template<> void sd_xml_object::test<2>() { @@ -225,7 +229,7 @@ namespace tut expected = "<llsd><map><key>baz</key><undef /><key>foo</key><string>bar</string></map></llsd>\n"; xml_test("2 element map", expected); } - + template<> template<> void sd_xml_object::test<6>() { @@ -241,7 +245,7 @@ namespace tut expected = "<llsd><binary encoding=\"base64\">Nnw2fGFzZGZoYXBweWJveHw2MGU0NGVjNS0zMDVjLTQzYzItOWExOS1iNGI4OWIxYWUyYTZ8NjBlNDRlYzUtMzA1Yy00M2MyLTlhMTktYjRiODliMWFlMmE2fDYwZTQ0ZWM1LTMwNWMtNDNjMi05YTE5LWI0Yjg5YjFhZTJhNnwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8N2ZmZmZmZmZ8N2ZmZmZmZmZ8MHwwfDgyMDAwfDQ1MGZlMzk0LTI5MDQtYzlhZC0yMTRjLWEwN2ViN2ZlZWMyOXwoTm8gRGVzY3JpcHRpb24pfDB8MTB8MA==</binary></llsd>\n"; xml_test("binary", expected); } - + class TestLLSDSerializeData { public: @@ -250,9 +254,34 @@ namespace tut void doRoundTripTests(const std::string&); void checkRoundTrip(const std::string&, const LLSD& v); - - LLPointer<LLSDFormatter> mFormatter; - LLPointer<LLSDParser> mParser; + + void setFormatterParser(LLPointer<LLSDFormatter> formatter, LLPointer<LLSDParser> parser) + { + mFormatter = [formatter](const LLSD& data, std::ostream& str) + { + formatter->format(data, str); + }; + // this lambda must be mutable since otherwise the bound 'parser' + // is assumed to point to a const LLSDParser + mParser = [parser](std::istream& istr, LLSD& data, llssize max_bytes) mutable + { + // reset() call is needed since test code re-uses parser object + parser->reset(); + return (parser->parse(istr, data, max_bytes) > 0); + }; + } + + void setParser(bool (*parser)(LLSD&, std::istream&, llssize)) + { + // why does LLSDSerialize::deserialize() reverse the parse() params?? + mParser = [parser](std::istream& istr, LLSD& data, llssize max_bytes) + { + return parser(data, istr, max_bytes); + }; + } + + FormatterFunction mFormatter; + ParserFunction mParser; }; TestLLSDSerializeData::TestLLSDSerializeData() @@ -265,12 +294,11 @@ namespace tut void TestLLSDSerializeData::checkRoundTrip(const std::string& msg, const LLSD& v) { - std::stringstream stream; - mFormatter->format(v, stream); + std::stringstream stream; + mFormatter(v, stream); //LL_INFOS() << "checkRoundTrip: length " << stream.str().length() << LL_ENDL; LLSD w; - mParser->reset(); // reset() call is needed since test code re-uses mParser - mParser->parse(stream, w, stream.str().size()); + mParser(stream, w, stream.str().size()); try { @@ -299,52 +327,52 @@ namespace tut fillmap(root[key], width, depth - 1); } } - + void TestLLSDSerializeData::doRoundTripTests(const std::string& msg) { LLSD v; checkRoundTrip(msg + " undefined", v); - + v = true; checkRoundTrip(msg + " true bool", v); - + v = false; checkRoundTrip(msg + " false bool", v); - + v = 1; checkRoundTrip(msg + " positive int", v); - + v = 0; checkRoundTrip(msg + " zero int", v); - + v = -1; checkRoundTrip(msg + " negative int", v); - + v = 1234.5f; checkRoundTrip(msg + " positive float", v); - + v = 0.0f; checkRoundTrip(msg + " zero float", v); - + v = -1234.5f; checkRoundTrip(msg + " negative float", v); - + // FIXME: need a NaN test - + v = LLUUID::null; checkRoundTrip(msg + " null uuid", v); - + LLUUID newUUID; newUUID.generate(); v = newUUID; checkRoundTrip(msg + " new uuid", v); - + v = ""; checkRoundTrip(msg + " empty string", v); - + v = "some string"; checkRoundTrip(msg + " non-empty string", v); - + v = "Second Life is a 3-D virtual world entirely built and owned by its residents. " "Since opening to the public in 2003, it has grown explosively and today is " @@ -372,7 +400,7 @@ namespace tut for (U32 block = 0x000000; block <= 0x10ffff; block += block_size) { std::ostringstream out; - + for (U32 c = block; c < block + block_size; ++c) { if (c <= 0x000001f @@ -386,7 +414,7 @@ namespace tut if (0x00fdd0 <= c && c <= 0x00fdef) { continue; } if ((c & 0x00fffe) == 0x00fffe) { continue; } // see Unicode standard, section 15.8 - + if (c <= 0x00007f) { out << (char)(c & 0x7f); @@ -410,55 +438,55 @@ namespace tut out << (char)(0x80 | ((c >> 0) & 0x3f)); } } - + v = out.str(); std::ostringstream blockmsg; blockmsg << msg << " unicode string block 0x" << std::hex << block; checkRoundTrip(blockmsg.str(), v); } - + LLDate epoch; v = epoch; checkRoundTrip(msg + " epoch date", v); - + LLDate aDay("2002-12-07T05:07:15.00Z"); v = aDay; checkRoundTrip(msg + " date", v); - + LLURI path("http://slurl.com/secondlife/Ambleside/57/104/26/"); v = path; checkRoundTrip(msg + " url", v); - + const char source[] = "it must be a blue moon again"; std::vector<U8> data; // note, includes terminating '\0' copy(&source[0], &source[sizeof(source)], back_inserter(data)); - + v = data; checkRoundTrip(msg + " binary", v); - + v = LLSD::emptyMap(); checkRoundTrip(msg + " empty map", v); - + v = LLSD::emptyMap(); v["name"] = "luke"; //v.insert("name", "luke"); v["age"] = 3; //v.insert("age", 3); checkRoundTrip(msg + " map", v); - + v.clear(); v["a"]["1"] = true; v["b"]["0"] = false; checkRoundTrip(msg + " nested maps", v); - + v = LLSD::emptyArray(); checkRoundTrip(msg + " empty array", v); - + v = LLSD::emptyArray(); v.append("ali"); v.append(28); checkRoundTrip(msg + " array", v); - + v.clear(); v[0][0] = true; v[1][0] = false; @@ -468,7 +496,7 @@ namespace tut fillmap(v, 10, 3); // 10^6 maps checkRoundTrip(msg + " many nested maps", v); } - + typedef tut::test_group<TestLLSDSerializeData> TestLLSDSerializeGroup; typedef TestLLSDSerializeGroup::object TestLLSDSerializeObject; TestLLSDSerializeGroup gTestLLSDSerializeGroup("llsd serialization"); @@ -476,35 +504,106 @@ namespace tut template<> template<> void TestLLSDSerializeObject::test<1>() { - mFormatter = new LLSDNotationFormatter(false, "", LLSDFormatter::OPTIONS_PRETTY_BINARY); - mParser = new LLSDNotationParser(); + setFormatterParser(new LLSDNotationFormatter(false, "", LLSDFormatter::OPTIONS_PRETTY_BINARY), + new LLSDNotationParser()); doRoundTripTests("pretty binary notation serialization"); } template<> template<> void TestLLSDSerializeObject::test<2>() { - mFormatter = new LLSDNotationFormatter(false, "", LLSDFormatter::OPTIONS_NONE); - mParser = new LLSDNotationParser(); + setFormatterParser(new LLSDNotationFormatter(false, "", LLSDFormatter::OPTIONS_NONE), + new LLSDNotationParser()); doRoundTripTests("raw binary notation serialization"); } template<> template<> void TestLLSDSerializeObject::test<3>() { - mFormatter = new LLSDXMLFormatter(); - mParser = new LLSDXMLParser(); + setFormatterParser(new LLSDXMLFormatter(), new LLSDXMLParser()); doRoundTripTests("xml serialization"); } template<> template<> void TestLLSDSerializeObject::test<4>() { - mFormatter = new LLSDBinaryFormatter(); - mParser = new LLSDBinaryParser(); + setFormatterParser(new LLSDBinaryFormatter(), new LLSDBinaryParser()); doRoundTripTests("binary serialization"); } + template<> template<> + void TestLLSDSerializeObject::test<5>() + { + mFormatter = [](const LLSD& sd, std::ostream& str) + { + LLSDSerialize::serialize(sd, str, LLSDSerialize::LLSD_BINARY); + }; + setParser(LLSDSerialize::deserialize); + doRoundTripTests("serialize(LLSD_BINARY)"); + }; + + template<> template<> + void TestLLSDSerializeObject::test<6>() + { + mFormatter = [](const LLSD& sd, std::ostream& str) + { + LLSDSerialize::serialize(sd, str, LLSDSerialize::LLSD_XML); + }; + setParser(LLSDSerialize::deserialize); + doRoundTripTests("serialize(LLSD_XML)"); + }; + + template<> template<> + void TestLLSDSerializeObject::test<7>() + { + mFormatter = [](const LLSD& sd, std::ostream& str) + { + LLSDSerialize::serialize(sd, str, LLSDSerialize::LLSD_NOTATION); + }; + setParser(LLSDSerialize::deserialize); + // In this test, serialize(LLSD_NOTATION) emits a header recognized by + // deserialize(). + doRoundTripTests("serialize(LLSD_NOTATION)"); + }; + + template<> template<> + void TestLLSDSerializeObject::test<8>() + { + setFormatterParser(new LLSDNotationFormatter(false, "", LLSDFormatter::OPTIONS_NONE), + new LLSDNotationParser()); + setParser(LLSDSerialize::deserialize); + // This is an interesting test because LLSDNotationFormatter does not + // emit an llsd/notation header. + doRoundTripTests("LLSDNotationFormatter -> deserialize"); + }; + + template<> template<> + void TestLLSDSerializeObject::test<9>() + { + setFormatterParser(new LLSDXMLFormatter(false, "", LLSDFormatter::OPTIONS_NONE), + new LLSDXMLParser()); + setParser(LLSDSerialize::deserialize); + // This is an interesting test because LLSDXMLFormatter does not + // emit an LLSD/XML header. + doRoundTripTests("LLSDXMLFormatter -> deserialize"); + }; + +/*==========================================================================*| + // We do not expect this test to succeed. Without a header, neither + // notation LLSD nor binary LLSD reliably start with a distinct character, + // the way XML LLSD starts with '<'. By convention, we default to notation + // rather than binary. + template<> template<> + void TestLLSDSerializeObject::test<10>() + { + setFormatterParser(new LLSDBinaryFormatter(false, "", LLSDFormatter::OPTIONS_NONE), + new LLSDBinaryParser()); + setParser(LLSDSerialize::deserialize); + // This is an interesting test because LLSDBinaryFormatter does not + // emit an LLSD/Binary header. + doRoundTripTests("LLSDBinaryFormatter -> deserialize"); + }; +|*==========================================================================*/ /** * @class TestLLSDParsing @@ -555,7 +654,7 @@ namespace tut public: TestLLSDXMLParsing() {} }; - + typedef tut::test_group<TestLLSDXMLParsing> TestLLSDXMLParsingGroup; typedef TestLLSDXMLParsingGroup::object TestLLSDXMLParsingObject; TestLLSDXMLParsingGroup gTestLLSDXMLParsingGroup("llsd XML parsing"); @@ -586,8 +685,8 @@ namespace tut LLSD(), LLSDParser::PARSE_FAILURE); } - - + + template<> template<> void TestLLSDXMLParsingObject::test<2>() { @@ -596,7 +695,7 @@ namespace tut v["amy"] = 23; v["bob"] = LLSD(); v["cam"] = 1.23; - + ensureParse( "unknown data type", "<llsd><map>" @@ -607,16 +706,16 @@ namespace tut v, v.size() + 1); } - + template<> template<> void TestLLSDXMLParsingObject::test<3>() { // test handling of nested bad data - + LLSD v; v["amy"] = 23; v["cam"] = 1.23; - + ensureParse( "map with html", "<llsd><map>" @@ -626,7 +725,7 @@ namespace tut "</map></llsd>", v, v.size() + 1); - + v.clear(); v["amy"] = 23; v["cam"] = 1.23; @@ -639,7 +738,7 @@ namespace tut "</map></llsd>", v, v.size() + 1); - + v.clear(); v["amy"] = 23; v["bob"] = LLSD::emptyMap(); @@ -661,7 +760,7 @@ namespace tut v[0] = 23; v[1] = LLSD(); v[2] = 1.23; - + ensureParse( "array value of html", "<llsd><array>" @@ -671,7 +770,7 @@ namespace tut "</array></llsd>", v, v.size() + 1); - + v.clear(); v[0] = 23; v[1] = LLSD::emptyMap(); @@ -1225,7 +1324,7 @@ namespace tut vec[0] = 'a'; vec[1] = 'b'; vec[2] = 'c'; vec[3] = '3'; vec[4] = '2'; vec[5] = '1'; LLSD value = vec; - + vec.resize(11); vec[0] = 'b'; // for binary vec[5] = 'a'; vec[6] = 'b'; vec[7] = 'c'; @@ -1694,85 +1793,83 @@ namespace tut ensureBinaryAndXML("map", test); } - struct TestPythonCompatible + // helper for TestPythonCompatible + static std::string import_llsd("import os.path\n" + "import sys\n" + "try:\n" + // new freestanding llsd package + " import llsd\n" + "except ImportError:\n" + // older llbase.llsd module + " from llbase import llsd\n"); + + // helper for TestPythonCompatible + template <typename CONTENT> + void python(const std::string& desc, const CONTENT& script, int expect=0) { - TestPythonCompatible(): - // Note the peculiar insertion of __FILE__ into this string. Since - // this script is being written into a platform-dependent temp - // directory, we can't locate indra/lib/python relative to - // Python's __file__. Use __FILE__ instead, navigating relative - // to this C++ source file. Use Python raw-string syntax so - // Windows pathname backslashes won't mislead Python's string - // scanner. - import_llsd("import os.path\n" - "import sys\n" - "from llbase import llsd\n") - {} - ~TestPythonCompatible() {} + auto PYTHON(LLStringUtil::getenv("PYTHON")); + ensure("Set $PYTHON to the Python interpreter", !PYTHON.empty()); - std::string import_llsd; + NamedTempFile scriptfile("py", script); - template <typename CONTENT> - void python(const std::string& desc, const CONTENT& script, int expect=0) +#if LL_WINDOWS + std::string q("\""); + std::string qPYTHON(q + PYTHON + q); + std::string qscript(q + scriptfile.getName() + q); + int rc = _spawnl(_P_WAIT, PYTHON.c_str(), qPYTHON.c_str(), qscript.c_str(), NULL); + if (rc == -1) { - auto PYTHON(LLStringUtil::getenv("PYTHON")); - ensure("Set $PYTHON to the Python interpreter", !PYTHON.empty()); - - NamedTempFile scriptfile("py", script); + char buffer[256]; + strerror_s(buffer, errno); // C++ can infer the buffer size! :-O + ensure(STRINGIZE("Couldn't run Python " << desc << "script: " << buffer), false); + } + else + { + ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), rc, expect); + } -#if LL_WINDOWS - std::string q("\""); - std::string qPYTHON(q + PYTHON + q); - std::string qscript(q + scriptfile.getName() + q); - int rc = _spawnl(_P_WAIT, PYTHON.c_str(), qPYTHON.c_str(), qscript.c_str(), NULL); - if (rc == -1) - { - char buffer[256]; - strerror_s(buffer, errno); // C++ can infer the buffer size! :-O - ensure(STRINGIZE("Couldn't run Python " << desc << "script: " << buffer), false); - } - else +#else // LL_DARWIN, LL_LINUX + LLProcess::Params params; + params.executable = PYTHON; + params.args.add(scriptfile.getName()); + LLProcessPtr py(LLProcess::create(params)); + ensure(STRINGIZE("Couldn't launch " << desc << " script"), bool(py)); + // Implementing timeout would mean messing with alarm() and + // catching SIGALRM... later maybe... + int status(0); + if (waitpid(py->getProcessID(), &status, 0) == -1) + { + int waitpid_errno(errno); + ensure_equals(STRINGIZE("Couldn't retrieve rc from " << desc << " script: " + "waitpid() errno " << waitpid_errno), + waitpid_errno, ECHILD); + } + else + { + if (WIFEXITED(status)) { - ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), rc, expect); + int rc(WEXITSTATUS(status)); + ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), + rc, expect); } - -#else // LL_DARWIN, LL_LINUX - LLProcess::Params params; - params.executable = PYTHON; - params.args.add(scriptfile.getName()); - LLProcessPtr py(LLProcess::create(params)); - ensure(STRINGIZE("Couldn't launch " << desc << " script"), bool(py)); - // Implementing timeout would mean messing with alarm() and - // catching SIGALRM... later maybe... - int status(0); - if (waitpid(py->getProcessID(), &status, 0) == -1) + else if (WIFSIGNALED(status)) { - int waitpid_errno(errno); - ensure_equals(STRINGIZE("Couldn't retrieve rc from " << desc << " script: " - "waitpid() errno " << waitpid_errno), - waitpid_errno, ECHILD); + ensure(STRINGIZE(desc << " script terminated by signal " << WTERMSIG(status)), + false); } else { - if (WIFEXITED(status)) - { - int rc(WEXITSTATUS(status)); - ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), - rc, expect); - } - else if (WIFSIGNALED(status)) - { - ensure(STRINGIZE(desc << " script terminated by signal " << WTERMSIG(status)), - false); - } - else - { - ensure(STRINGIZE(desc << " script produced impossible status " << status), - false); - } + ensure(STRINGIZE(desc << " script produced impossible status " << status), + false); } -#endif } +#endif + } + + struct TestPythonCompatible + { + TestPythonCompatible() {} + ~TestPythonCompatible() {} }; typedef tut::test_group<TestPythonCompatible> TestPythonCompatibleGroup; @@ -1798,25 +1895,33 @@ namespace tut "print('Running on', sys.platform)\n"); } - // helper for test<3> - static void writeLLSDArray(std::ostream& out, const LLSD& array) + // helper for test<3> - test<7> + static void writeLLSDArray(const FormatterFunction& serialize, + std::ostream& out, const LLSD& array) { - BOOST_FOREACH(LLSD item, llsd::inArray(array)) + for (const LLSD& item : llsd::inArray(array)) { - LLSDSerialize::toNotation(item, out); - // It's important to separate with newlines because Python's llsd - // module doesn't support parsing from a file stream, only from a - // string, so we have to know how much of the file to read into a - // string. - out << '\n'; + // It's important to delimit the entries in this file somehow + // because, although Python's llsd.parse() can accept a file + // stream, the XML parser expects EOF after a single outer element + // -- it doesn't just stop. So we must extract a sequence of bytes + // strings from the file. But since one of the serialization + // formats we want to test is binary, we can't pick any single + // byte value as a delimiter! Use a binary integer length prefix + // instead. + std::ostringstream buffer; + serialize(item, buffer); + auto buffstr{ buffer.str() }; + int bufflen{ static_cast<int>(buffstr.length()) }; + out.write(reinterpret_cast<const char*>(&bufflen), sizeof(bufflen)); + out.write(buffstr.c_str(), buffstr.length()); } } - template<> template<> - void TestPythonCompatibleObject::test<3>() + // helper for test<3> - test<7> + static void toPythonUsing(const std::string& desc, + const FormatterFunction& serialize) { - set_test_name("verify sequence to Python"); - LLSD cdata(llsd::array(17, 3.14, "This string\n" "has several\n" @@ -1836,7 +1941,7 @@ namespace tut " except StopIteration:\n" " pass\n" " else:\n" - " assert False, 'Too many data items'\n"; + " raise AssertionError('Too many data items')\n"; // Create an llsdXXXXXX file containing 'data' serialized to // notation. @@ -1845,32 +1950,128 @@ namespace tut // takes a callable. To this callable it passes the // std::ostream with which it's writing the // NamedTempFile. - boost::bind(writeLLSDArray, _1, cdata)); + [serialize, cdata] + (std::ostream& out) + { writeLLSDArray(serialize, out, cdata); }); - python("read C++ notation", + python("read C++ " + desc, placeholders::arg1 << import_llsd << - "def parse_each(iterable):\n" - " for item in iterable:\n" - " yield llsd.parse(item)\n" << - pydata << + "from functools import partial\n" + "import io\n" + "import struct\n" + "lenformat = struct.Struct('i')\n" + "def parse_each(inf):\n" + " for rawlen in iter(partial(inf.read, lenformat.size), b''):\n" + " len = lenformat.unpack(rawlen)[0]\n" + // Since llsd.parse() has no max_bytes argument, instead of + // passing the input stream directly to parse(), read the item + // into a distinct bytes object and parse that. + " data = inf.read(len)\n" + " try:\n" + " frombytes = llsd.parse(data)\n" + " except llsd.LLSDParseError as err:\n" + " print(f'*** {err}')\n" + " print(f'Bad content:\\n{data!r}')\n" + " raise\n" + // Also try parsing from a distinct stream. + " stream = io.BytesIO(data)\n" + " fromstream = llsd.parse(stream)\n" + " assert frombytes == fromstream\n" + " yield frombytes\n" + << pydata << // Don't forget raw-string syntax for Windows pathnames. "verify(parse_each(open(r'" << file.getName() << "', 'rb')))\n"); } template<> template<> + void TestPythonCompatibleObject::test<3>() + { + set_test_name("to Python using LLSDSerialize::serialize(LLSD_XML)"); + toPythonUsing("LLSD_XML", + [](const LLSD& sd, std::ostream& out) + { LLSDSerialize::serialize(sd, out, LLSDSerialize::LLSD_XML); }); + } + + template<> template<> void TestPythonCompatibleObject::test<4>() { - set_test_name("verify sequence from Python"); + set_test_name("to Python using LLSDSerialize::serialize(LLSD_NOTATION)"); + toPythonUsing("LLSD_NOTATION", + [](const LLSD& sd, std::ostream& out) + { LLSDSerialize::serialize(sd, out, LLSDSerialize::LLSD_NOTATION); }); + } + + template<> template<> + void TestPythonCompatibleObject::test<5>() + { + set_test_name("to Python using LLSDSerialize::serialize(LLSD_BINARY)"); + toPythonUsing("LLSD_BINARY", + [](const LLSD& sd, std::ostream& out) + { LLSDSerialize::serialize(sd, out, LLSDSerialize::LLSD_BINARY); }); + } + + template<> template<> + void TestPythonCompatibleObject::test<6>() + { + set_test_name("to Python using LLSDSerialize::toXML()"); + toPythonUsing("toXML()", LLSDSerialize::toXML); + } + + template<> template<> + void TestPythonCompatibleObject::test<7>() + { + set_test_name("to Python using LLSDSerialize::toNotation()"); + toPythonUsing("toNotation()", LLSDSerialize::toNotation); + } +/*==========================================================================*| + template<> template<> + void TestPythonCompatibleObject::test<8>() + { + set_test_name("to Python using LLSDSerialize::toBinary()"); + // We don't expect this to work because, without a header, + // llsd.parse() will assume notation rather than binary. + toPythonUsing("toBinary()", LLSDSerialize::toBinary); + } +|*==========================================================================*/ + + // helper for test<8> - test<12> + bool itemFromStream(std::istream& istr, LLSD& item, const ParserFunction& parse) + { + // reset the output value for debugging clarity + item.clear(); + // We use an int length prefix as a foolproof delimiter even for + // binary serialized streams. + int length{ 0 }; + istr.read(reinterpret_cast<char*>(&length), sizeof(length)); +// return parse(istr, item, length); + // Sadly, as of 2022-12-01 it seems we can't really trust our LLSD + // parsers to honor max_bytes: this test works better when we read + // each item into its own distinct LLMemoryStream, instead of passing + // the original istr with a max_bytes constraint. + std::vector<U8> buffer(length); + istr.read(reinterpret_cast<char*>(buffer.data()), length); + LLMemoryStream stream(buffer.data(), length); + return parse(stream, item, length); + } + + // helper for test<8> - test<12> + void fromPythonUsing(const std::string& pyformatter, + const ParserFunction& parse= + [](std::istream& istr, LLSD& data, llssize max_bytes) + { return LLSDSerialize::deserialize(data, istr, max_bytes); }) + { // Create an empty data file. This is just a placeholder for our // script to write into. Create it to establish a unique name that // we know. NamedTempFile file("llsd", ""); - python("write Python notation", + python("Python " + pyformatter, placeholders::arg1 << import_llsd << + "import struct\n" + "lenformat = struct.Struct('i')\n" "DATA = [\n" " 17,\n" " 3.14,\n" @@ -1881,34 +2082,87 @@ namespace tut "]\n" // Don't forget raw-string syntax for Windows pathnames. // N.B. Using 'print' implicitly adds newlines. - "with open(r'" << file.getName() << "', 'w') as f:\n" + "with open(r'" << file.getName() << "', 'wb') as f:\n" " for item in DATA:\n" - " print(llsd.format_notation(item).decode(), file=f)\n"); + " serialized = llsd." << pyformatter << "(item)\n" + " f.write(lenformat.pack(len(serialized)))\n" + " f.write(serialized)\n"); std::ifstream inf(file.getName().c_str()); LLSD item; - // Notice that we're not doing anything special to parse out the - // newlines: LLSDSerialize::fromNotation ignores them. While it would - // seem they're not strictly necessary, going in this direction, we - // want to ensure that notation-separated-by-newlines works in both - // directions -- since in practice, a given file might be read by - // either language. - ensure_equals("Failed to read LLSD::Integer from Python", - LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED), - 1); - ensure_equals(item.asInteger(), 17); - ensure_equals("Failed to read LLSD::Real from Python", - LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED), - 1); - ensure_approximately_equals("Bad LLSD::Real value from Python", - item.asReal(), 3.14, 7); // 7 bits ~= 0.01 - ensure_equals("Failed to read LLSD::String from Python", - LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED), - 1); - ensure_equals(item.asString(), - "This string\n" - "has several\n" - "lines."); - + try + { + ensure("Failed to read LLSD::Integer from Python", + itemFromStream(inf, item, parse)); + ensure_equals(item.asInteger(), 17); + ensure("Failed to read LLSD::Real from Python", + itemFromStream(inf, item, parse)); + ensure_approximately_equals("Bad LLSD::Real value from Python", + item.asReal(), 3.14, 7); // 7 bits ~= 0.01 + ensure("Failed to read LLSD::String from Python", + itemFromStream(inf, item, parse)); + ensure_equals(item.asString(), + "This string\n" + "has several\n" + "lines."); + } + catch (const tut::failure& err) + { + std::cout << "for " << err.what() << ", item = " << item << std::endl; + throw; + } + } + + template<> template<> + void TestPythonCompatibleObject::test<8>() + { + set_test_name("from Python XML using LLSDSerialize::deserialize()"); + fromPythonUsing("format_xml"); + } + + template<> template<> + void TestPythonCompatibleObject::test<9>() + { + set_test_name("from Python notation using LLSDSerialize::deserialize()"); + fromPythonUsing("format_notation"); + } + + template<> template<> + void TestPythonCompatibleObject::test<10>() + { + set_test_name("from Python binary using LLSDSerialize::deserialize()"); + fromPythonUsing("format_binary"); + } + + template<> template<> + void TestPythonCompatibleObject::test<11>() + { + set_test_name("from Python XML using fromXML()"); + // fromXML()'s optional 3rd param isn't max_bytes, it's emit_errors + fromPythonUsing("format_xml", + [](std::istream& istr, LLSD& data, llssize) + { return LLSDSerialize::fromXML(data, istr) > 0; }); + } + + template<> template<> + void TestPythonCompatibleObject::test<12>() + { + set_test_name("from Python notation using fromNotation()"); + fromPythonUsing("format_notation", + [](std::istream& istr, LLSD& data, llssize max_bytes) + { return LLSDSerialize::fromNotation(data, istr, max_bytes) > 0; }); + } + +/*==========================================================================*| + template<> template<> + void TestPythonCompatibleObject::test<13>() + { + set_test_name("from Python binary using fromBinary()"); + // We don't expect this to work because format_binary() emits a + // header, but fromBinary() won't recognize a header. + fromPythonUsing("format_binary", + [](std::istream& istr, LLSD& data, llssize max_bytes) + { return LLSDSerialize::fromBinary(data, istr, max_bytes) > 0; }); } +|*==========================================================================*/ } diff --git a/indra/llcorehttp/tests/test_llcorehttp_peer.py b/indra/llcorehttp/tests/test_llcorehttp_peer.py index 185e8e25c6..b9992538ba 100755 --- a/indra/llcorehttp/tests/test_llcorehttp_peer.py +++ b/indra/llcorehttp/tests/test_llcorehttp_peer.py @@ -38,7 +38,7 @@ from io import StringIO from http.server import HTTPServer, BaseHTTPRequestHandler -from llbase import llsd +import llsd # we're in llcorehttp/tests ; testrunner.py is found in llmessage/tests sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 40f7b1e9fb..3b586d721f 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5482,14 +5482,14 @@ bool LLVolumeFace::cacheOptimize() new_indices.push_back(tri->mVertex[2]->mIdx); tri->complete(); - U32 breaks = 0; + //U32 breaks = 0; for (U32 i = 1; i < mNumIndices/3; ++i) { cache.updateScores(); tri = cache.mBestTriangle; if (!tri) { - breaks++; + //breaks++; for (U32 j = 0; j < triangle_data.size(); ++j) { if (triangle_data[j].mActive) diff --git a/indra/llmessage/llcircuit.cpp b/indra/llmessage/llcircuit.cpp index 8baa2e328b..a9a292958f 100644 --- a/indra/llmessage/llcircuit.cpp +++ b/indra/llmessage/llcircuit.cpp @@ -271,7 +271,6 @@ void LLCircuitData::ackReliablePacket(TPACKETID packet_num) S32 LLCircuitData::resendUnackedPackets(const F64Seconds now) { - S32 resent_packets = 0; LLReliablePacket *packetp; @@ -375,7 +374,6 @@ S32 LLCircuitData::resendUnackedPackets(const F64Seconds now) // Don't remove it yet, it still gets to try to resend at least once. ++iter; } - resent_packets++; } else { diff --git a/indra/llmessage/llcorehttputil.cpp b/indra/llmessage/llcorehttputil.cpp index c8c9280029..6b9ce54c92 100644 --- a/indra/llmessage/llcorehttputil.cpp +++ b/indra/llmessage/llcorehttputil.cpp @@ -1336,6 +1336,48 @@ void HttpCoroutineAdapter::trivialPostCoro(std::string url, LLCore::HttpRequest: } +/*static*/ +void HttpCoroutineAdapter::callbackHttpDel(const std::string &url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success, + completionCallback_t failure) +{ + LLCoros::instance().launch("HttpCoroutineAdapter::genericDelCoro", + boost::bind(&HttpCoroutineAdapter::trivialDelCoro, url, policyId, success, failure)); +} + +/*static*/ +void HttpCoroutineAdapter::trivialDelCoro(std::string url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success, + completionCallback_t failure) +{ + LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("genericDelCoro", policyId)); + LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest); + LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions); + + httpOpts->setWantHeaders(true); + + LL_INFOS("HttpCoroutineAdapter", "genericDelCoro") << "Generic DEL for " << url << LL_ENDL; + + LLSD result = httpAdapter->deleteAndSuspend(httpRequest, url, httpOpts); + + LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS]; + LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults); + + if (!status) + { + if (failure) + { + failure(httpResults); + } + } + else + { + if (success) + { + success(result); + } + } +} + + } // end namespace LLCoreHttpUtil diff --git a/indra/llmessage/llcorehttputil.h b/indra/llmessage/llcorehttputil.h index 6f0b865f83..8df1425f2a 100644 --- a/indra/llmessage/llcorehttputil.h +++ b/indra/llmessage/llcorehttputil.h @@ -608,6 +608,9 @@ public: callbackHttpPost(url, LLCore::HttpRequest::DEFAULT_POLICY_ID, postData, success, failure); } + static void callbackHttpDel(const std::string &url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success = NULL, + completionCallback_t failure = NULL); + /// Generic Get and post routines for HTTP via coroutines. /// These static methods do all required setup for the GET or POST operation. /// When the operation completes successfully they will put the success message in the log at INFO level, @@ -669,6 +672,7 @@ private: static void trivialGetCoro(std::string url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success, completionCallback_t failure); static void trivialPostCoro(std::string url, LLCore::HttpRequest::policy_t policyId, LLSD postData, completionCallback_t success, completionCallback_t failure); + static void trivialDelCoro(std::string url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success, completionCallback_t failure); void checkDefaultHeaders(LLCore::HttpHeaders::ptr_t &headers); diff --git a/indra/llmessage/tests/test_llsdmessage_peer.py b/indra/llmessage/tests/test_llsdmessage_peer.py index 5ba0749e31..8e9b6c09e7 100755 --- a/indra/llmessage/tests/test_llsdmessage_peer.py +++ b/indra/llmessage/tests/test_llsdmessage_peer.py @@ -33,8 +33,8 @@ import os import sys from http.server import HTTPServer, BaseHTTPRequestHandler -from llbase.fastest_elementtree import parse as xml_parse -from llbase import llsd +from llsd.fastest_elementtree import parse as xml_parse +import llsd from testrunner import freeport, run, debug, VERBOSE import time diff --git a/indra/llprimitive/llmaterialid.h b/indra/llprimitive/llmaterialid.h index ee663f8f99..c66e3e30a3 100644 --- a/indra/llprimitive/llmaterialid.h +++ b/indra/llprimitive/llmaterialid.h @@ -66,6 +66,14 @@ public: static const LLMaterialID null; + // Returns a 64 bits digest of the material Id, by XORing its two 64 bits + // long words. HB + inline U64 getDigest64() const + { + U64* tmp = (U64*)mID; + return tmp[0] ^ tmp[1]; + } + private: void parseFromBinary(const LLSD::Binary& pMaterialID); void copyFromOtherMaterialID(const LLMaterialID& pOtherMaterialID); @@ -74,5 +82,23 @@ private: U8 mID[MATERIAL_ID_SIZE]; } ; +// std::hash implementation for LLMaterialID +namespace std +{ + template<> struct hash<LLMaterialID> + { + inline size_t operator()(const LLMaterialID& id) const noexcept + { + return (size_t)id.getDigest64(); + } + }; +} + +// For use with boost containers. +inline size_t hash_value(const LLMaterialID& id) noexcept +{ + return (size_t)id.getDigest64(); +} + #endif // LL_LLMATERIALID_H diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 193cfa64b8..cfc9ce735d 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -2329,9 +2329,7 @@ void LLGLSyncFence::wait() if (mSync) { while (glClientWaitSync(mSync, 0, FENCE_WAIT_TIME_NANOSECONDS) == GL_TIMEOUT_EXPIRED) - { //track the number of times we've waited here - static S32 waits = 0; - waits++; + { } } #endif diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index 8028f397f3..3354cb2db3 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -942,11 +942,8 @@ void LLButton::draw() break; } - S32 y_offset = 2 + (getRect().getHeight() - 20)/2; - if (pressed && mDisplayPressedState) { - y_offset--; x++; } diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 33c4b6ec73..16c27da56a 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -487,9 +487,6 @@ void LLMenuItemGL::draw( void ) // let disabled items be highlighted, just don't draw them as such if( getEnabled() && getHighlight() && !mBriefItem) { - int debug_count = 0; - if (dynamic_cast<LLMenuItemCallGL*>(this)) - debug_count++; gGL.color4fv( mHighlightBackground.get().mV ); gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0 ); diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp index ead8634df4..2960ecf829 100644 --- a/indra/llxml/llcontrol.cpp +++ b/indra/llxml/llcontrol.cpp @@ -774,7 +774,6 @@ U32 LLControlGroup::loadFromFileLegacy(const std::string& filename, BOOL require return 0; } - U32 item = 0; U32 validitems = 0; S32 version; @@ -808,8 +807,6 @@ U32 LLControlGroup::loadFromFileLegacy(const std::string& filename, BOOL require } // Got an item. Load it up. - item++; - // If not declared, assume it's a string if (!declared) { diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml index e16a5c7e76..340334aee8 100644 --- a/indra/newview/app_settings/cmd_line.xml +++ b/indra/newview/app_settings/cmd_line.xml @@ -209,6 +209,12 @@ <string>NoAudio</string> </map> + <key>nofmod</key> + <map> + <key>map-to</key> + <string>UseMediaPluginsForStreamingAudio</string> + </map> + <key>noninteractive</key> <map> <key>desc</key> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index ca1b1e2f20..816b7b7c92 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -7077,6 +7077,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>UseMediaPluginsForStreamingAudio</key> + <map> + <key>Comment</key> + <string>Use media plugins (VLC) for streaming audio.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>NoHardwareProbe</key> <map> <key>Comment</key> @@ -11349,11 +11360,11 @@ <key>ShowBanLines</key> <map> <key>Comment</key> - <string>Show in-world ban/access borders</string> + <string>Show in-world ban/access borders, 0 - do not show, 1 - show on collision, 2 - show on proximity</string> <key>Persist</key> <integer>1</integer> <key>Type</key> - <string>Boolean</string> + <string>S32</string> <key>Value</key> <integer>1</integer> </map> @@ -16986,17 +16997,6 @@ <key>Value</key> <integer>0</integer> </map> - <key>360CaptureUseInterestListCap</key> - <map> - <key>Comment</key> - <string>Flag if set, uses the new InterestList cap to ask the simulator for full content</string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>Boolean</string> - <key>Value</key> - <integer>1</integer> - </map> <key>360CaptureJPEGEncodeQuality</key> <map> <key>Comment</key> @@ -17107,5 +17107,38 @@ <key>Value</key> <integer>0</integer> </map> + <key>StatsReportMaxDuration</key> + <map> + <key>Comment</key> + <string>Maximum seconds for viewer stats file data, prevents huge file</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>300</real> + </map> + <key>StatsReportFileInterval</key> + <map> + <key>Comment</key> + <string>Interval to save viewer stats file data</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>F32</string> + <key>Value</key> + <real>0.2</real> + </map> + <key>StatsReportSkipZeroDataSaves</key> + <map> + <key>Comment</key> + <string>In viewer stats data file, skip saving entry if there is no data</string> + <key>Persist</key> + <integer>0</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> </map> </llsd> diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 60e26274cb..ed37f541c8 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -507,7 +507,7 @@ Call un.UserSettingsFiles SectionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Make sure the user can install
+;; Make sure the user can install/uninstall
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function CheckIfAdministrator
DetailPrint $(CheckAdministratorInstDP)
@@ -522,21 +522,6 @@ lbl_is_admin: FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Make sure the user can uninstall
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.CheckIfAdministrator
- DetailPrint $(CheckAdministratorUnInstDP)
- UserInfo::GetAccountType
- Pop $R0
- StrCmp $R0 "Admin" lbl_is_admin
- MessageBox MB_OK $(CheckAdministratorUnInstMB)
- Quit
-lbl_is_admin:
- Return
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Function CheckWillUninstallV2
;;
;; If called through auto-update, need to uninstall any existing V2 installation.
diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi Binary files differindex 7922d9df52..0985663041 100755 --- a/indra/newview/installers/windows/lang_zh.nsi +++ b/indra/newview/installers/windows/lang_zh.nsi diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 8cc9be7244..f87fa5b281 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -401,6 +401,7 @@ LLAgent::LLAgent() : mHttpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID), mTeleportState(TELEPORT_NONE), mRegionp(NULL), + mInterestListMode(LLViewerRegion::IL_MODE_DEFAULT), mAgentOriginGlobal(), mPositionGlobal(), @@ -894,11 +895,19 @@ boost::signals2::connection LLAgent::addParcelChangedCallback(parcel_changed_cal // static void LLAgent::capabilityReceivedCallback(const LLUUID ®ion_id, LLViewerRegion *regionp) -{ - if (regionp && regionp->getRegionID() == region_id) +{ // Changed regions and now have the region capabilities + if (regionp) { - regionp->requestSimulatorFeatures(); - LLAppViewer::instance()->updateNameLookupUrl(regionp); + if (regionp->getRegionID() == region_id) + { + regionp->requestSimulatorFeatures(); + LLAppViewer::instance()->updateNameLookupUrl(regionp); + } + + if (gAgent.getInterestListMode() == LLViewerRegion::IL_MODE_360) + { + gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_360); + } } } @@ -1362,26 +1371,21 @@ LLVector3 LLAgent::getReferenceUpVector() void LLAgent::pitch(F32 angle) { // don't let user pitch if pointed almost all the way down or up - mFrameAgent.pitch(clampPitchToLimits(angle)); -} - -// Radians, positive is forward into ground -//----------------------------------------------------------------------------- -// clampPitchToLimits() -//----------------------------------------------------------------------------- -F32 LLAgent::clampPitchToLimits(F32 angle) -{ // A dot B = mag(A) * mag(B) * cos(angle between A and B) // so... cos(angle between A and B) = A dot B / mag(A) / mag(B) // = A dot B for unit vectors LLVector3 skyward = getReferenceUpVector(); - const F32 look_down_limit = 179.f * DEG_TO_RAD;; - const F32 look_up_limit = 1.f * DEG_TO_RAD; + // SL-19286 Avatar is upside down when viewed from below + // after left-clicking the mouse on the avatar and dragging down + // + // The issue is observed on angle below 10 degrees + const F32 look_down_limit = 179.f * DEG_TO_RAD; + const F32 look_up_limit = 10.f * DEG_TO_RAD; - F32 angle_from_skyward = acos( mFrameAgent.getAtAxis() * skyward ); + F32 angle_from_skyward = acos(mFrameAgent.getAtAxis() * skyward); // clamp pitch to limits if ((angle >= 0.f) && (angle_from_skyward + angle > look_down_limit)) @@ -1392,8 +1396,11 @@ F32 LLAgent::clampPitchToLimits(F32 angle) { angle = look_up_limit - angle_from_skyward; } - - return angle; + + if (fabs(angle) > 1e-4) + { + mFrameAgent.pitch(angle); + } } @@ -2910,39 +2917,60 @@ void LLAgent::processMaturityPreferenceFromServer(const LLSD &result, U8 perferr handlePreferredMaturityResult(maturity); } - -bool LLAgent::requestPostCapability(const std::string &capName, LLSD &postData, httpCallback_t cbSuccess, httpCallback_t cbFailure) -{ - if (!getRegion()) +// Using a new capability, tell the simulator that we want it to send everything +// it knows about and not just what is in front of the camera, in its view +// frustum. We need this feature so that the contents of the region that appears +// in the 6 snapshots which we cannot see and is normally not "considered", is +// also rendered. Typically, this is turned on when the 360 capture floater is +// opened and turned off when it is closed. +// Note: for this version, we do not have a way to determine when "everything" +// has arrived and has been rendered so for now, the proposal is that users +// will need to experiment with the low resolution version and wait for some +// (hopefully) small period of time while the full contents resolves. +// Pass in a flag to ask the simulator/interest list to "send everything" or +// not (the default mode) +void LLAgent::changeInterestListMode(const std::string &new_mode) +{ + if (new_mode != mInterestListMode) { - return false; + mInterestListMode = new_mode; + + // Change interest list mode for all regions. If they are already set for the current mode, + // the setting will have no effect. + for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); + iter != LLWorld::getInstance()->getRegionList().end(); + ++iter) + { + LLViewerRegion *regionp = *iter; + if (regionp && regionp->isAlive() && regionp->capabilitiesReceived()) + { + regionp->setInterestListMode(mInterestListMode); + } + } } - std::string url = getRegion()->getCapability(capName); + else + { + LL_DEBUGS("360Capture") << "Agent interest list mode is already set to " << mInterestListMode << LL_ENDL; + } +} - if (url.empty()) + +bool LLAgent::requestPostCapability(const std::string &capName, LLSD &postData, httpCallback_t cbSuccess, httpCallback_t cbFailure) +{ + if (getRegion()) { - LL_WARNS("Agent") << "Could not retrieve region capability \"" << capName << "\"" << LL_ENDL; - return false; + return getRegion()->requestPostCapability(capName, postData, cbSuccess, cbFailure); } - - LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(url, mHttpPolicy, postData, cbSuccess, cbFailure); - return true; + return false; } bool LLAgent::requestGetCapability(const std::string &capName, httpCallback_t cbSuccess, httpCallback_t cbFailure) { - std::string url; - - url = getRegionCapability(capName); - - if (url.empty()) + if (getRegion()) { - LL_WARNS("Agent") << "Could not retrieve region capability \"" << capName << "\"" << LL_ENDL; - return false; + return getRegion()->requestGetCapability(capName, cbSuccess, cbFailure); } - - LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(url, mHttpPolicy, cbSuccess, cbFailure); - return true; + return false; } BOOL LLAgent::getAdminOverride() const @@ -3708,7 +3736,6 @@ void LLAgent::processScriptControlChange(LLMessageSystem *msg, void **) // take controls msg->getU32("Data", "Controls", controls, block_index ); msg->getBOOL("Data", "PassToAgent", passon, block_index ); - U32 total_count = 0; for (i = 0; i < TOTAL_CONTROLS; i++) { if (controls & ( 1 << i)) @@ -3721,7 +3748,6 @@ void LLAgent::processScriptControlChange(LLMessageSystem *msg, void **) { gAgent.mControlsTakenCount[i]++; } - total_count++; } } } diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 498bea3c07..ea91d2b720 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -294,10 +294,16 @@ public: boost::signals2::connection addRegionChangedCallback(const region_changed_signal_t::slot_type& cb); void removeRegionChangedCallback(boost::signals2::connection callback); + + void changeInterestListMode(const std::string & new_mode); + const std::string & getInterestListMode() const { return mInterestListMode; } + private: LLViewerRegion *mRegionp; region_changed_signal_t mRegionChangedSignal; + std::string mInterestListMode; // How agent wants regions to send updates + //-------------------------------------------------------------------- // History //-------------------------------------------------------------------- @@ -548,7 +554,6 @@ public: void roll(F32 angle); void yaw(F32 angle); LLVector3 getReferenceUpVector(); - F32 clampPitchToLimits(F32 angle); //-------------------------------------------------------------------- // Autopilot diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 77131efd75..d2fe570069 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -401,10 +401,15 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi // if is avatar - don't do any funk heuristics to position the focal point // see DEV-30589 - if (object->isAvatar() || (object->isAnimatedObject() && object->getControlAvatar())) + if ((object->isAvatar() && !object->isRoot()) || (object->isAnimatedObject() && object->getControlAvatar())) { return original_focus_point - obj_pos; } + if (object->isAvatar()) + { + LLVOAvatar* av = object->asAvatar(); + return original_focus_point - av->getCharacterPosition(); + } LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation LLVector3 object_extents = object->getScale(); @@ -1759,13 +1764,24 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit) LL_WARNS() << "Null avatar drawable!" << LL_ENDL; return LLVector3d::zero; } + head_offset.clearVec(); + F32 fixup; + if (gAgentAvatarp->hasPelvisFixup(fixup)) + { + head_offset[VZ] -= fixup; + } + if (gAgentAvatarp->isSitting()) + { + head_offset.mdV[VZ] += 0.1; + } + if (gAgentAvatarp->isSitting() && gAgentAvatarp->getParent()) { gAgentAvatarp->updateHeadOffset(); - head_offset.mdV[VX] = gAgentAvatarp->mHeadOffset.mV[VX]; - head_offset.mdV[VY] = gAgentAvatarp->mHeadOffset.mV[VY]; - head_offset.mdV[VZ] = gAgentAvatarp->mHeadOffset.mV[VZ] + 0.1f; + head_offset.mdV[VX] += gAgentAvatarp->mHeadOffset.mV[VX]; + head_offset.mdV[VY] += gAgentAvatarp->mHeadOffset.mV[VY]; + head_offset.mdV[VZ] += gAgentAvatarp->mHeadOffset.mV[VZ]; const LLMatrix4& mat = ((LLViewerObject*) gAgentAvatarp->getParent())->getRenderMatrix(); camera_position_global = gAgent.getPosGlobalFromAgent ((gAgentAvatarp->getPosition()+ @@ -1773,11 +1789,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit) } else { - head_offset.mdV[VZ] = gAgentAvatarp->mHeadOffset.mV[VZ]; - if (gAgentAvatarp->isSitting()) - { - head_offset.mdV[VZ] += 0.1; - } + head_offset.mdV[VZ] += gAgentAvatarp->mHeadOffset.mV[VZ]; camera_position_global = gAgent.getPosGlobalFromAgent(gAgentAvatarp->getRenderPosition());//frame_center_global; head_offset = head_offset * gAgentAvatarp->getRenderRotation(); camera_position_global = camera_position_global + head_offset; diff --git a/indra/newview/llagentlistener.cpp b/indra/newview/llagentlistener.cpp index b7f5aeb8e0..77a3d47aea 100644 --- a/indra/newview/llagentlistener.cpp +++ b/indra/newview/llagentlistener.cpp @@ -35,6 +35,7 @@ #include "llcommandhandler.h" #include "llslurl.h" #include "llurldispatcher.h" +#include "llviewernetwork.h" #include "llviewerobject.h" #include "llviewerobjectlist.h" #include "llviewerregion.h" @@ -148,7 +149,7 @@ void LLAgentListener::requestTeleport(LLSD const & event_data) const params.append(event_data["x"]); params.append(event_data["y"]); params.append(event_data["z"]); - LLCommandDispatcher::dispatch("teleport", params, LLSD(), NULL, LLCommandHandler::NAV_TYPE_CLICKED, true); + LLCommandDispatcher::dispatch("teleport", params, LLSD(), LLGridManager::getInstance()->getGrid(), NULL, LLCommandHandler::NAV_TYPE_CLICKED, true); // *TODO - lookup other LLCommandHandlers for "agent", "classified", "event", "group", "floater", "parcel", "login", login_refresh", "balance", "chat" // should we just compose LLCommandHandler and LLDispatchListener? } diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp index c19ad2ae6f..acb1a37ff5 100644 --- a/indra/newview/llagentui.cpp +++ b/indra/newview/llagentui.cpp @@ -82,9 +82,9 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const if (!region || !parcel) return FALSE; - S32 pos_x = S32(agent_pos_region.mV[VX]); - S32 pos_y = S32(agent_pos_region.mV[VY]); - S32 pos_z = S32(agent_pos_region.mV[VZ]); + S32 pos_x = S32(agent_pos_region.mV[VX] + 0.5f); + S32 pos_y = S32(agent_pos_region.mV[VY] + 0.5f); + S32 pos_z = S32(agent_pos_region.mV[VZ] + 0.5f); // Round the numbers based on the velocity F32 velocity_mag_sq = gAgent.getVelocity().magVecSquared(); diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 2e769dc737..53397978e0 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -41,7 +41,6 @@ #include "llinventoryobserver.h" #include "llinventorypanel.h" #include "lllocaltextureobject.h" -#include "llmd5.h" #include "llnotificationsutil.h" #include "lloutfitobserver.h" #include "llsidepanelappearance.h" diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 3c93a9df7e..d0fad07f1c 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -41,7 +41,9 @@ #include "llinventorybridge.h" #include "llinventoryfunctions.h" #include "llinventoryobserver.h" +#include "llmd5.h" #include "llnotificationsutil.h" +#include "llmd5.h" #include "lloutfitobserver.h" #include "lloutfitslist.h" #include "llselectmgr.h" @@ -145,7 +147,10 @@ public: // requests will be throttled from a non-trusted browser LLAppearanceHandler() : LLCommandHandler("appearance", UNTRUSTED_THROTTLE) {} - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& params, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { // support secondlife:///app/appearance/show, but for now we just // make all secondlife:///app/appearance SLapps behave this way @@ -4470,8 +4475,10 @@ public: // not allowed from outside the app LLWearFolderHandler() : LLCommandHandler("wear_folder", UNTRUSTED_BLOCK) { } - bool handle(const LLSD& tokens, const LLSD& query_map, - LLMediaCtrl* web) + bool handle(const LLSD& tokens, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { LLSD::UUID folder_uuid; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index e70fcb6e86..31a87bbde1 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1536,7 +1536,12 @@ bool LLAppViewer::doFrame() LLFloaterSimpleOutfitSnapshot::update(); gGLActive = FALSE; } - } + + if (LLViewerStatsRecorder::instanceExists()) + { + LLViewerStatsRecorder::instance().idle(); + } + } } { diff --git a/indra/newview/llattachmentsmgr.cpp b/indra/newview/llattachmentsmgr.cpp index d43048a8b6..1feefc3ef8 100644 --- a/indra/newview/llattachmentsmgr.cpp +++ b/indra/newview/llattachmentsmgr.cpp @@ -31,6 +31,7 @@ #include "llagent.h" #include "llappearancemgr.h" #include "llinventorymodel.h" +#include "llstartup.h" #include "lltooldraganddrop.h" // pack_permissions_slam #include "llviewerinventory.h" #include "llviewerregion.h" @@ -372,7 +373,7 @@ void LLAttachmentsMgr::onAttachmentArrived(const LLUUID& inv_item_id) { LLTimer timer; bool expected = mAttachmentRequests.getTime(inv_item_id, timer); - if (!expected) + if (!expected && LLStartUp::getStartupState() > STATE_WEARABLES_WAIT) { LLInventoryItem *item = gInventory.getItem(inv_item_id); LL_WARNS() << "ATT Attachment was unexpected or arrived after " << MAX_ATTACHMENT_REQUEST_LIFETIME << " seconds: " @@ -411,11 +412,15 @@ void LLAttachmentsMgr::onDetachCompleted(const LLUUID& inv_item_id) LL_DEBUGS("Avatar") << "ATT all detach requests have completed" << LL_ENDL; } } - else + else if (!LLApp::isExiting()) { LL_WARNS() << "ATT unexpected detach for " << (item ? item->getName() : "UNKNOWN") << " id " << inv_item_id << LL_ENDL; } + else + { + LL_DEBUGS("Avatar") << "ATT detach on shutdown for " << (item ? item->getName() : "UNKNOWN") << " " << inv_item_id << LL_ENDL; + } LL_DEBUGS("Avatar") << "ATT detached item flagging as questionable for COF link checking " << (item ? item->getName() : "UNKNOWN") << " id " << inv_item_id << LL_ENDL; diff --git a/indra/newview/llbuycurrencyhtml.cpp b/indra/newview/llbuycurrencyhtml.cpp index 7ad06f8eaa..37de89a48b 100644 --- a/indra/newview/llbuycurrencyhtml.cpp +++ b/indra/newview/llbuycurrencyhtml.cpp @@ -43,7 +43,7 @@ public: // requests will be throttled from a non-trusted browser LLBuyCurrencyHTMLHandler() : LLCommandHandler( "buycurrencyhtml", UNTRUSTED_THROTTLE) {} - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { std::string action( "" ); if ( params.size() >= 1 ) diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 9a608fba8e..43dc10ef5f 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -82,7 +82,7 @@ public: // requests will be throttled from a non-trusted browser LLObjectIMHandler() : LLCommandHandler("objectim", UNTRUSTED_THROTTLE) {} - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { if (params.size() < 1) { diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp index 1c22e055bb..dc2cc57f0f 100644 --- a/indra/newview/llchatitemscontainerctrl.cpp +++ b/indra/newview/llchatitemscontainerctrl.cpp @@ -57,7 +57,7 @@ class LLObjectHandler : public LLCommandHandler public: LLObjectHandler() : LLCommandHandler("object", UNTRUSTED_BLOCK) { } - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { if (params.size() < 2) return false; diff --git a/indra/newview/llcommanddispatcherlistener.cpp b/indra/newview/llcommanddispatcherlistener.cpp index 518f5bc374..46ec97d5c0 100644 --- a/indra/newview/llcommanddispatcherlistener.cpp +++ b/indra/newview/llcommanddispatcherlistener.cpp @@ -64,10 +64,10 @@ void LLCommandDispatcherListener::dispatch(const LLSD& params) const // But for testing, allow a caller to specify untrusted. trusted_browser = params["trusted"].asBoolean(); } - LLCommandDispatcher::dispatch( - params["cmd"], + LLCommandDispatcher::dispatch(params["cmd"], params["params"], params["query"], + "", NULL, LLCommandHandler::NAV_TYPE_CLICKED, trusted_browser); diff --git a/indra/newview/llcommandhandler.cpp b/indra/newview/llcommandhandler.cpp index 9640b05b06..caa27e530b 100644 --- a/indra/newview/llcommandhandler.cpp +++ b/indra/newview/llcommandhandler.cpp @@ -62,6 +62,7 @@ public: bool dispatch(const std::string& cmd, const LLSD& params, const LLSD& query_map, + const std::string& grid, LLMediaCtrl* web, const std::string& nav_type, bool trusted_browser); @@ -98,6 +99,7 @@ void LLCommandHandlerRegistry::add(const char* cmd, bool LLCommandHandlerRegistry::dispatch(const std::string& cmd, const LLSD& params, const LLSD& query_map, + const std::string& grid, LLMediaCtrl* web, const std::string& nav_type, bool trusted_browser) @@ -165,7 +167,7 @@ bool LLCommandHandlerRegistry::dispatch(const std::string& cmd, } } if (!info.mHandler) return false; - return info.mHandler->handle(params, query_map, web); + return info.mHandler->handle(params, query_map, grid, web); } void LLCommandHandlerRegistry::notifySlurlBlocked() @@ -220,12 +222,13 @@ LLCommandHandler::~LLCommandHandler() bool LLCommandDispatcher::dispatch(const std::string& cmd, const LLSD& params, const LLSD& query_map, + const std::string& grid, LLMediaCtrl* web, const std::string& nav_type, bool trusted_browser) { return LLCommandHandlerRegistry::instance().dispatch( - cmd, params, query_map, web, nav_type, trusted_browser); + cmd, params, query_map, grid, web, nav_type, trusted_browser); } static std::string lookup(LLCommandHandler::EUntrustedAccess value); diff --git a/indra/newview/llcommandhandler.h b/indra/newview/llcommandhandler.h index 486feecca6..1a354b04f7 100644 --- a/indra/newview/llcommandhandler.h +++ b/indra/newview/llcommandhandler.h @@ -42,7 +42,7 @@ public: LLFooHandler() : LLCommandHandler("foo", UNTRUSTED_BLOCK) { } // Your code here - bool handle(const LLSD& tokens, const LLSD& query_map, + bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { if (tokens.size() < 1) return false; @@ -90,6 +90,7 @@ public: virtual bool handle(const LLSD& params, const LLSD& query_map, + const std::string& grid, LLMediaCtrl* web) = 0; // For URL secondlife:///app/foo/bar/baz?cat=1&dog=2 // @params - array of "bar", "baz", possibly empty @@ -106,6 +107,7 @@ public: static bool dispatch(const std::string& cmd, const LLSD& params, const LLSD& query_map, + const std::string& grid, LLMediaCtrl* web, const std::string& nav_type, bool trusted_browser); diff --git a/indra/newview/llcontrolavatar.cpp b/indra/newview/llcontrolavatar.cpp index 4a87273372..91031034c6 100644 --- a/indra/newview/llcontrolavatar.cpp +++ b/indra/newview/llcontrolavatar.cpp @@ -47,6 +47,7 @@ LLControlAvatar::LLControlAvatar(const LLUUID& id, const LLPCode pcode, LLViewer mGlobalScale(1.0f), mMarkedForDeath(false), mRootVolp(NULL), + mControlAVBridge(NULL), mScaleConstraintFixup(1.0), mRegionChanged(false) { @@ -376,6 +377,12 @@ void LLControlAvatar::idleUpdate(LLAgent &agent, const F64 &time) } } +void LLControlAvatar::markDead() +{ + super::markDead(); + mControlAVBridge = NULL; +} + bool LLControlAvatar::computeNeedsUpdate() { computeUpdatePeriod(); diff --git a/indra/newview/llcontrolavatar.h b/indra/newview/llcontrolavatar.h index 8e87299f3e..50e02d2d91 100644 --- a/indra/newview/llcontrolavatar.h +++ b/indra/newview/llcontrolavatar.h @@ -35,9 +35,12 @@ class LLControlAvatar: { LOG_CLASS(LLControlAvatar); + using super = LLVOAvatar; + public: LLControlAvatar(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); - virtual void initInstance(); // Called after construction to initialize the class. + virtual void initInstance(); // Called after construction to initialize the class. + virtual void markDead(); virtual ~LLControlAvatar(); // If this is an attachment, return the avatar it is attached to. Otherwise NULL. @@ -87,6 +90,7 @@ public: F32 mGlobalScale; LLVOVolume *mRootVolp; + class LLControlAVBridge* mControlAVBridge; bool mMarkedForDeath; diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 4a0c9d399f..bb4174d3b6 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -763,6 +763,19 @@ void LLDrawable::movePartition() if (part) { part->move(this, getSpatialGroup()); + + // SL-18251 "On-screen animesh characters using pelvis offset animations + // disappear when root goes off-screen" + // + // Update extents of the root node when Control Avatar changes it's bounds + if (mRenderType == LLPipeline::RENDER_TYPE_CONTROL_AV && isRoot()) + { + LLControlAvatar* controlAvatar = dynamic_cast<LLControlAvatar*>(getVObj().get()); + if (controlAvatar && controlAvatar->mControlAVBridge) + { + ((LLSpatialGroup*)controlAvatar->mControlAVBridge->mOctree->getListener(0))->setState(LLViewerOctreeGroup::DIRTY); + } + } } } @@ -1216,10 +1229,11 @@ LLSpatialPartition* LLDrawable::getSpatialPartition() { setSpatialBridge(new LLHUDBridge(this, getRegion())); } - else if (mVObjp->isAnimatedObject() && mVObjp->getControlAvatar()) - { - setSpatialBridge(new LLControlAVBridge(this, getRegion())); - } + else if (mVObjp->isAnimatedObject() && mVObjp->getControlAvatar()) + { + setSpatialBridge(new LLControlAVBridge(this, getRegion())); + mVObjp->getControlAvatar()->mControlAVBridge = (LLControlAVBridge*)getSpatialBridge(); + } // check HUD first, because HUD is also attachment else if (mVObjp->isAttachment()) { diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp index f1a44a68c9..788b61b381 100644 --- a/indra/newview/lleventnotifier.cpp +++ b/indra/newview/lleventnotifier.cpp @@ -43,8 +43,10 @@ class LLEventHandler : public LLCommandHandler public: // requires trusted browser to trigger LLEventHandler() : LLCommandHandler("event", UNTRUSTED_THROTTLE) { } - bool handle(const LLSD& params, const LLSD& query_map, - LLMediaCtrl* web) + bool handle(const LLSD& params, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { if (params.size() < 2) { diff --git a/indra/newview/llfilepicker_mac.mm b/indra/newview/llfilepicker_mac.mm index e5965abbd6..4dd8bea4e1 100644 --- a/indra/newview/llfilepicker_mac.mm +++ b/indra/newview/llfilepicker_mac.mm @@ -103,7 +103,6 @@ std::unique_ptr<std::vector<std::string>> doLoadDialog(const std::vector<std::st } } } - return outfiles; } @@ -150,7 +149,7 @@ void doLoadDialogModeless(const std::vector<std::string>* allowed_types, } } -std::unique_ptr<std::string> doSaveDialog(const std::string* file, +std::unique_ptr<std::string> doSaveDialog(const std::string* file, const std::string* type, const std::string* creator, const std::string* extension, diff --git a/indra/newview/llfloater360capture.cpp b/indra/newview/llfloater360capture.cpp index 23f86e2361..2c638fa959 100644 --- a/indra/newview/llfloater360capture.cpp +++ b/indra/newview/llfloater360capture.cpp @@ -64,12 +64,10 @@ LLFloater360Capture::LLFloater360Capture(const LLSD& key) // such time as we ask it not to (the dtor). If we crash or // otherwise, exit before this is turned off, the Simulator // will take care of cleaning up for us. - if (gSavedSettings.getBOOL("360CaptureUseInterestListCap")) - { - // send everything to us for as long as this floater is open - const bool send_everything = true; - changeInterestListMode(send_everything); - } + mStartILMode = gAgent.getInterestListMode(); + + // send everything to us for as long as this floater is open + gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_360); } LLFloater360Capture::~LLFloater360Capture() @@ -81,13 +79,15 @@ LLFloater360Capture::~LLFloater360Capture() mWebBrowser->unloadMediaSource(); } - // Tell the Simulator not to send us everything anymore - // and revert to the regular "keyhole" frustum of interest + // Restore interest list mode to the state when started + // Normally LLFloater360Capture tells the Simulator send everything + // and now reverts to the regular "keyhole" frustum of interest // list updates. - if (!LLApp::isExiting() && gSavedSettings.getBOOL("360CaptureUseInterestListCap")) + if (!LLApp::isExiting() && + gSavedSettings.getBOOL("360CaptureUseInterestListCap") && + mStartILMode != gAgent.getInterestListMode()) { - const bool send_everything = false; - changeInterestListMode(send_everything); + gAgent.changeInterestListMode(mStartILMode); } } @@ -170,52 +170,6 @@ void LLFloater360Capture::onChooseQualityRadioGroup() setSourceImageSize(); } -// Using a new capability, tell the simulator that we want it to send everything -// it knows about and not just what is in front of the camera, in its view -// frustum. We need this feature so that the contents of the region that appears -// in the 6 snapshots which we cannot see and is normally not "considered", is -// also rendered. Typically, this is turned on when the 360 capture floater is -// opened and turned off when it is closed. -// Note: for this version, we do not have a way to determine when "everything" -// has arrived and has been rendered so for now, the proposal is that users -// will need to experiment with the low resolution version and wait for some -// (hopefully) small period of time while the full contents resolves. -// Pass in a flag to ask the simulator/interest list to "send everything" or -// not (the default mode) -void LLFloater360Capture::changeInterestListMode(bool send_everything) -{ - LLSD body; - - if (send_everything) - { - body["mode"] = LLSD::String("360"); - } - else - { - body["mode"] = LLSD::String("default"); - } - - if (gAgent.requestPostCapability("InterestList", body, [](const LLSD & response) - { - LL_INFOS("360Capture") << - "InterestList capability responded: \n" << - ll_pretty_print_sd(response) << - LL_ENDL; - })) - { - LL_INFOS("360Capture") << - "Successfully posted an InterestList capability request with payload: \n" << - ll_pretty_print_sd(body) << - LL_ENDL; - } - else - { - LL_INFOS("360Capture") << - "Unable to post an InterestList capability request with payload: \n" << - ll_pretty_print_sd(body) << - LL_ENDL; - } -} // There is is a setting (360CaptureSourceImageSize) that holds the size // (width == height since it's a square) of each of the 6 source snapshots. @@ -632,11 +586,8 @@ void LLFloater360Capture::capture360Images() // display time to encode all 6 images. It tends to be a fairly linear // time for each so we don't need to worry about displaying the time // for each - this gives us plenty to use for optimizing - LL_INFOS("360Capture") << - "Time to encode and save 6 images was " << - encode_time_total << - " seconds" << - LL_ENDL; + LL_INFOS("360Capture") << "Time to encode and save 6 images was " << + encode_time_total << " seconds" << LL_ENDL; // Write the JavaScript file footer (the bottom of the file after the // declarations of the actual data URLs array). The footer comprises of @@ -668,7 +619,7 @@ void LLFloater360Capture::capture360Images() // as a change - only the subsequent 5 are if (camera_changed_times < 5) { - LL_INFOS("360Capture") << "Warning: we only captured " << camera_changed_times << " images." << LL_ENDL; + LL_WARNS("360Capture") << "360 image capture expected 5 or more images, only captured " << camera_changed_times << " images." << LL_ENDL; } // now we have the 6 shots saved in a well specified location, diff --git a/indra/newview/llfloater360capture.h b/indra/newview/llfloater360capture.h index 8f765c0b1b..3fb2c7f3c7 100644 --- a/indra/newview/llfloater360capture.h +++ b/indra/newview/llfloater360capture.h @@ -50,8 +50,6 @@ class LLFloater360Capture: void onOpen(const LLSD& key) override; void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) override; - void changeInterestListMode(bool send_everything); - const std::string getHTMLBaseFolder(); void capture360Images(); @@ -93,6 +91,8 @@ class LLFloater360Capture: std::string mImageSaveDir; LLPointer<LLImageRaw> mRawImages[6]; + + std::string mStartILMode; }; #endif // LL_FLOATER_360CAPTURE_H diff --git a/indra/newview/llfloatercamerapresets.cpp b/indra/newview/llfloatercamerapresets.cpp index 300c945a85..a1cbffd094 100644 --- a/indra/newview/llfloatercamerapresets.cpp +++ b/indra/newview/llfloatercamerapresets.cpp @@ -24,6 +24,7 @@ */ #include "llviewerprecompiledheaders.h" +#include "llfloatercamera.h" #include "llfloatercamerapresets.h" #include "llfloaterreg.h" #include "llnotificationsutil.h" @@ -40,7 +41,8 @@ LLFloaterCameraPresets::~LLFloaterCameraPresets() BOOL LLFloaterCameraPresets::postBuild() { mPresetList = getChild<LLFlatListView>("preset_list"); - + mPresetList->setCommitCallback(boost::bind(&LLFloaterCameraPresets::onSelectionChange, this)); + mPresetList->setCommitOnSelectionChange(true); LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCameraPresets::populateList, this)); return TRUE; @@ -58,6 +60,7 @@ void LLFloaterCameraPresets::populateList() std::list<std::string> preset_names; presetsMgr->loadPresetNamesFromDir(PRESETS_CAMERA, preset_names, DEFAULT_BOTTOM); + std::string active_preset = gSavedSettings.getString("PresetCameraActive"); for (std::list<std::string>::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it) { @@ -66,6 +69,19 @@ void LLFloaterCameraPresets::populateList() LLCameraPresetFlatItem* item = new LLCameraPresetFlatItem(name, is_default); item->postBuild(); mPresetList->addItem(item); + if(name == active_preset) + { + mPresetList->selectItem(item); + } + } +} + +void LLFloaterCameraPresets::onSelectionChange() +{ + LLCameraPresetFlatItem* selected_preset = dynamic_cast<LLCameraPresetFlatItem*>(mPresetList->getSelectedItem()); + if(selected_preset) + { + LLFloaterCamera::switchToPreset(selected_preset->getPresetName()); } } diff --git a/indra/newview/llfloatercamerapresets.h b/indra/newview/llfloatercamerapresets.h index 66430fa399..4430a4209e 100644 --- a/indra/newview/llfloatercamerapresets.h +++ b/indra/newview/llfloatercamerapresets.h @@ -38,6 +38,7 @@ class LLFloaterCameraPresets : public LLFloater virtual void onOpen(const LLSD& key); void populateList(); + void onSelectionChange(); private: LLFloaterCameraPresets(const LLSD& key); @@ -58,6 +59,8 @@ public: virtual void onMouseEnter(S32 x, S32 y, MASK mask); virtual void onMouseLeave(S32 x, S32 y, MASK mask); + std::string getPresetName() { return mPresetName; } + private: void onDeleteBtnClick(); void onResetBtnClick(); diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp index a99a096ea7..f6afdd29fb 100644 --- a/indra/newview/llfloaterexperienceprofile.cpp +++ b/indra/newview/llfloaterexperienceprofile.cpp @@ -92,8 +92,10 @@ class LLExperienceHandler : public LLCommandHandler public: LLExperienceHandler() : LLCommandHandler("experience", UNTRUSTED_THROTTLE) { } - bool handle(const LLSD& params, const LLSD& query_map, - LLMediaCtrl* web) + bool handle(const LLSD& params, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { if(params.size() != 2 || params[1].asString() != "profile") return false; diff --git a/indra/newview/llfloaterhandler.cpp b/indra/newview/llfloaterhandler.cpp index 8ebb14149c..b66049de7f 100644 --- a/indra/newview/llfloaterhandler.cpp +++ b/indra/newview/llfloaterhandler.cpp @@ -49,7 +49,7 @@ LLFloater* get_parent_floater(LLView* view) } -bool LLFloaterHandler::handle(const LLSD ¶ms, const LLSD &query_map, LLMediaCtrl *web) +bool LLFloaterHandler::handle(const LLSD ¶ms, const LLSD &query_map, const std::string& grid, LLMediaCtrl *web) { if (params.size() < 1) return false; LLFloater* floater = NULL; diff --git a/indra/newview/llfloaterhandler.h b/indra/newview/llfloaterhandler.h index 5915642d66..959c972275 100644 --- a/indra/newview/llfloaterhandler.h +++ b/indra/newview/llfloaterhandler.h @@ -33,7 +33,7 @@ class LLFloaterHandler { public: LLFloaterHandler() : LLCommandHandler("floater", UNTRUSTED_BLOCK) { } - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web); + bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web); }; #endif diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp index 0d2c6d8e4c..bb4cc9bca3 100644 --- a/indra/newview/llfloaterimnearbychat.cpp +++ b/indra/newview/llfloaterimnearbychat.cpp @@ -903,8 +903,10 @@ public: LLChatCommandHandler() : LLCommandHandler("chat", UNTRUSTED_BLOCK) { } // Your code here - bool handle(const LLSD& tokens, const LLSD& query_map, - LLMediaCtrl* web) + bool handle(const LLSD& tokens, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { bool retval = false; // Need at least 2 tokens to have a valid message. diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index 7e6af45515..37ae80fa8f 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -46,7 +46,7 @@ class LLSearchHandler : public LLCommandHandler public: // requires trusted browser to trigger LLSearchHandler() : LLCommandHandler("search", UNTRUSTED_CLICK_ONLY) { } - bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableSearch")) { diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp index bd49405f34..9f277021c8 100644 --- a/indra/newview/llfloatertopobjects.cpp +++ b/indra/newview/llfloatertopobjects.cpp @@ -49,6 +49,7 @@ #include "llviewerparcelmgr.h" #include "llviewerregion.h" #include "lluictrlfactory.h" +#include "llviewerobjectlist.h" #include "llviewerwindow.h" #include "llfloaterregioninfo.h" @@ -83,6 +84,8 @@ LLFloaterTopObjects::LLFloaterTopObjects(const LLSD& key) mCommitCallbackRegistrar.add("TopObjects.GetByOwnerName", boost::bind(&LLFloaterTopObjects::onGetByOwnerName, this)); mCommitCallbackRegistrar.add("TopObjects.GetByParcelName", boost::bind(&LLFloaterTopObjects::onGetByParcelName, this)); mCommitCallbackRegistrar.add("TopObjects.CommitObjectsList",boost::bind(&LLFloaterTopObjects::onCommitObjectsList, this)); + + mCommitCallbackRegistrar.add("TopObjects.TeleportToSelected", boost::bind(&LLFloaterTopObjects::teleportToSelectedObject, this)); } LLFloaterTopObjects::~LLFloaterTopObjects() @@ -92,10 +95,11 @@ LLFloaterTopObjects::~LLFloaterTopObjects() // virtual BOOL LLFloaterTopObjects::postBuild() { - LLScrollListCtrl *objects_list = getChild<LLScrollListCtrl>("objects_list"); - getChild<LLUICtrl>("objects_list")->setFocus(TRUE); - objects_list->setDoubleClickCallback(onDoubleClickObjectsList, this); - objects_list->setCommitOnSelectionChange(TRUE); + mObjectsScrollList = getChild<LLScrollListCtrl>("objects_list"); + mObjectsScrollList->setFocus(TRUE); + mObjectsScrollList->setDoubleClickCallback(onDoubleClickObjectsList, this); + mObjectsScrollList->setCommitOnSelectionChange(TRUE); + mObjectsScrollList->setCommitCallback(boost::bind(&LLFloaterTopObjects::onSelectionChanged, this)); setDefaultBtn("show_beacon_btn"); @@ -421,6 +425,8 @@ void LLFloaterTopObjects::clearList() mObjectListData.clear(); mObjectListIDs.clear(); mtotalScore = 0.f; + + onSelectionChanged(); } @@ -507,3 +513,38 @@ void LLFloaterTopObjects::showBeacon() std::string tooltip(""); LLTracker::trackLocation(pos_global, name, tooltip, LLTracker::LOCATION_ITEM); } + +void LLFloaterTopObjects::teleportToSelectedObject() +{ + std::vector<LLScrollListItem*> selected_items = mObjectsScrollList->getAllSelected(); + if (selected_items.size() == 1) + { + LLScrollListItem* first_selected = selected_items.front(); + + LLVector3d teleport_location; + LLViewerObject *viewer_object = gObjectList.findObject(first_selected->getUUID()); + if (viewer_object == NULL) + { + // If we cannot find the object in the viewer list, teleport to the last reported position + std::string pos_string = first_selected->getColumn(3)->getValue().asString(); + + F32 x, y, z; + S32 matched = sscanf(pos_string.c_str(), "<%g,%g,%g>", &x, &y, &z); + if (matched != 3) return; + + LLVector3 pos_agent(x, y, z); + teleport_location = gAgent.getPosGlobalFromAgent(pos_agent); + } + else + { + // If we can find the object in the viewer list, teleport to the known current position + teleport_location = viewer_object->getPositionGlobal(); + } + gAgent.teleportViaLocationLookAt(teleport_location); + } +} + +void LLFloaterTopObjects::onSelectionChanged() +{ + getChildView("teleport_btn")->setEnabled(mObjectsScrollList->getNumSelected() == 1); +} diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h index 3138249c7a..b73401e50d 100644 --- a/indra/newview/llfloatertopobjects.h +++ b/indra/newview/llfloatertopobjects.h @@ -30,6 +30,7 @@ #include "llfloater.h" class LLUICtrl; +class LLScrollListCtrl; // Bits for simulator performance query flags enum LAND_STAT_FLAGS @@ -75,6 +76,7 @@ private: void initColumns(LLCtrlListInterface *list); void onCommitObjectsList(); + void onSelectionChanged(); static void onDoubleClickObjectsList(void* data); void onClickShowBeacon(); @@ -90,6 +92,7 @@ private: void onGetByParcelName(); void showBeacon(); + void teleportToSelectedObject(); private: std::string mMethod; @@ -106,6 +109,7 @@ private: F32 mtotalScore; static LLFloaterTopObjects* sInstance; + LLScrollListCtrl* mObjectsScrollList; }; #endif diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 704abd269f..8f3ec8af05 100755 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -124,8 +124,10 @@ public: // requires trusted browser to trigger LLWorldMapHandler() : LLCommandHandler("worldmap", UNTRUSTED_CLICK_ONLY ) { } - bool handle(const LLSD& params, const LLSD& query_map, - LLMediaCtrl* web) + bool handle(const LLSD& params, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableWorldMap")) { @@ -163,7 +165,10 @@ public: { } - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& params, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableWorldMap")) { diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index 0c8e248538..03c1b6f631 100644 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -741,6 +741,12 @@ void LLViewerParcelMgr::renderCollisionSegments(U8* segments, BOOL use_pass, LLV gGL.end(); } +void LLViewerParcelMgr::resetCollisionTimer() +{ + mCollisionTimer.reset(); + mRenderCollision = TRUE; +} + void draw_line_cube(F32 width, const LLVector3& center) { width = 0.5f * width; diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp index aec6c23e34..043316ccca 100644 --- a/indra/newview/llgroupactions.cpp +++ b/indra/newview/llgroupactions.cpp @@ -78,8 +78,10 @@ public: return true; } - bool handle(const LLSD& tokens, const LLSD& query_map, - LLMediaCtrl* web) + bool handle(const LLSD& tokens, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { if (LLStartUp::getStartupState() < STATE_STARTED) { diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp index 3536b83989..948793681d 100644 --- a/indra/newview/llimprocessing.cpp +++ b/indra/newview/llimprocessing.cpp @@ -1631,14 +1631,19 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url) from_group = message_data["from_group"].asString() == "Y"; } - + EInstantMessage dialog = static_cast<EInstantMessage>(message_data["dialog"].asInteger()); + LLUUID session_id = message_data["transaction-id"].asUUID(); + if (session_id.isNull() && dialog == IM_FROM_TASK) + { + session_id = message_data["asset_id"].asUUID(); + } LLIMProcessing::processNewMessage( message_data["from_agent_id"].asUUID(), from_group, message_data["to_agent_id"].asUUID(), message_data.has("offline") ? static_cast<U8>(message_data["offline"].asInteger()) : IM_OFFLINE, - static_cast<EInstantMessage>(message_data["dialog"].asInteger()), - message_data["transaction-id"].asUUID(), + dialog, + session_id, static_cast<U32>(message_data["timestamp"].asInteger()), message_data["from_agent_name"].asString(), message_data["message"].asString(), diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 67240ac7e7..145814ab41 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -213,8 +213,7 @@ bool contains_nocopy_items(const LLUUID& id) return false; } -// Generates a string containing the path to the item specified by -// item_id. +// Generates a string containing the path to the item specified by id. void append_path(const LLUUID& id, std::string& path) { std::string temp; @@ -234,6 +233,36 @@ void append_path(const LLUUID& id, std::string& path) path.append(temp); } +// Generates a string containing the path name of the object. +std::string make_path(const LLInventoryObject* object) +{ + std::string path; + append_path(object->getUUID(), path); + return path + "/" + object->getName(); +} + +// Generates a string containing the path name of the object specified by id. +std::string make_inventory_path(const LLUUID& id) +{ + if (LLInventoryObject* object = gInventory.getObject(id)) + return make_path(object); + return ""; +} + +// Generates a string containing the path name and id of the object. +std::string make_info(const LLInventoryObject* object) +{ + return "'" + make_path(object) + "' (" + object->getUUID().asString() + ")"; +} + +// Generates a string containing the path name and id of the object specified by id. +std::string make_inventory_info(const LLUUID& id) +{ + if (LLInventoryObject* object = gInventory.getObject(id)) + return make_info(object); + return "<Inventory object not found!> (" + id.asString() + ")"; +} + void update_marketplace_folder_hierarchy(const LLUUID cat_id) { // When changing the marketplace status of a folder, the only thing that needs to happen is @@ -1415,6 +1444,7 @@ bool move_item_to_marketplacelistings(LLInventoryItem* inv_item, LLUUID dest_fol if (copy) { // Copy the item + LL_INFOS("SLM") << "Copy item '" << make_info(viewer_inv_item) << "' to '" << make_inventory_path(dest_folder) << "'" << LL_ENDL; LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(update_folder_cb, dest_folder)); copy_inventory_item( gAgent.getID(), @@ -1426,6 +1456,7 @@ bool move_item_to_marketplacelistings(LLInventoryItem* inv_item, LLUUID dest_fol } else { + LL_INFOS("SLM") << "Move item '" << make_info(viewer_inv_item) << "' to '" << make_inventory_path(dest_folder) << "'" << LL_ENDL; // Reparent the item gInventory.changeItemParent(viewer_inv_item, dest_folder, true); } @@ -1472,6 +1503,7 @@ bool move_folder_to_marketplacelistings(LLInventoryCategory* inv_cat, const LLUU } else { + LL_INFOS("SLM") << "Move category " << make_info(viewer_inv_cat) << " to '" << make_inventory_path(dest_folder) << "'" << LL_ENDL; // Reparent the folder gInventory.changeCategoryParent(viewer_inv_cat, dest_folder, false); // Check the destination folder recursively for no copy items and promote the including folders if any diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index 56ad6f6496..8c8bd789c2 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -78,9 +78,19 @@ void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* void copy_inventory_category_content(const LLUUID& new_cat_uuid, LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& root_copy_id, bool move_no_copy_items); -// Generates a string containing the path to the item specified by item_id. +// Generates a string containing the path to the object specified by id (not including the object name). void append_path(const LLUUID& id, std::string& path); +// Generates a string containing the path name of the object. +std::string make_path(const LLInventoryObject* object); +// Generates a string containing the path name of the object specified by id. +std::string make_inventory_path(const LLUUID& id); + +// Generates a string containing the path name and id of the object. +std::string make_info(const LLInventoryObject* object); +// Generates a string containing the path name and id of the object specified by id. +std::string make_inventory_info(const LLUUID& id); + typedef boost::function<void(std::string& validation_message, S32 depth, LLError::ELevel log_level)> validation_callback_t; bool can_move_item_to_marketplace(const LLInventoryCategory* root_folder, LLInventoryCategory* dest_folder, LLInventoryItem* inv_item, std::string& tooltip_msg, S32 bundle_size = 1, bool from_paste = false); diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index b4727de77f..9c4e122481 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -62,6 +62,7 @@ #include "bufferarray.h" #include "bufferstream.h" #include "llcorehttputil.h" +#include "hbxxh.h" //#define DIFF_INVENTORY_FILES #ifdef DIFF_INVENTORY_FILES @@ -451,17 +452,16 @@ void LLInventoryModel::getDirectDescendentsOf(const LLUUID& cat_id, items = get_ptr_in_map(mParentChildItemTree, cat_id); } -LLMD5 LLInventoryModel::hashDirectDescendentNames(const LLUUID& cat_id) const +LLInventoryModel::digest_t LLInventoryModel::hashDirectDescendentNames(const LLUUID& cat_id) const { LLInventoryModel::cat_array_t* cat_array; LLInventoryModel::item_array_t* item_array; getDirectDescendentsOf(cat_id,cat_array,item_array); - LLMD5 item_name_hash; if (!item_array) { - item_name_hash.finalize(); - return item_name_hash; + return LLUUID::null; } + HBXXH128 item_name_hash; for (LLInventoryModel::item_array_t::const_iterator iter = item_array->begin(); iter != item_array->end(); iter++) @@ -471,8 +471,7 @@ LLMD5 LLInventoryModel::hashDirectDescendentNames(const LLUUID& cat_id) const continue; item_name_hash.update(item->getName()); } - item_name_hash.finalize(); - return item_name_hash; + return item_name_hash.digest(); } // SJB: Added version to lock the arrays to catch potential logic bugs @@ -673,6 +672,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, const std::string& pname, inventory_func_type callback) { + LL_DEBUGS(LOG_INV) << "Create '" << pname << "' in '" << make_inventory_path(parent_id) << "'" << LL_ENDL; LLUUID id; if (!isInventoryUsable()) { @@ -764,6 +764,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, cat->packMessage(msg); gAgent.sendReliableMessage(); + LL_INFOS(LOG_INV) << "Created new category '" << make_inventory_path(id) << "'" << LL_ENDL; // return the folder id of the newly created folder return id; } @@ -1352,6 +1353,7 @@ void LLInventoryModel::moveObject(const LLUUID& object_id, const LLUUID& cat_id) LLPointer<LLViewerInventoryCategory> cat = getCategory(object_id); if(cat && (cat->getParentUUID() != cat_id)) { + LL_DEBUGS(LOG_INV) << "Move category '" << make_path(cat) << "' to '" << make_inventory_path(cat_id) << "'" << LL_ENDL; cat_array_t* cat_array; cat_array = getUnlockedCatArray(cat->getParentUUID()); if(cat_array) vector_replace_with_last(*cat_array, cat); @@ -1364,6 +1366,7 @@ void LLInventoryModel::moveObject(const LLUUID& object_id, const LLUUID& cat_id) LLPointer<LLViewerInventoryItem> item = getItem(object_id); if(item && (item->getParentUUID() != cat_id)) { + LL_DEBUGS(LOG_INV) << "Move item '" << make_path(item) << "' to '" << make_inventory_path(cat_id) << "'" << LL_ENDL; item_array_t* item_array; item_array = getUnlockedItemArray(item->getParentUUID()); if(item_array) vector_replace_with_last(*item_array, item); @@ -1382,14 +1385,14 @@ void LLInventoryModel::changeItemParent(LLViewerInventoryItem* item, { if (item->getParentUUID() == new_parent_id) { - LL_DEBUGS(LOG_INV) << "'" << item->getName() << "' (" << item->getUUID() - << ") is already in folder " << new_parent_id << LL_ENDL; + LL_DEBUGS(LOG_INV) << make_info(item) << " is already in folder " << make_inventory_info(new_parent_id) << LL_ENDL; } else { - LL_INFOS(LOG_INV) << "Moving '" << item->getName() << "' (" << item->getUUID() - << ") from " << item->getParentUUID() << " to folder " - << new_parent_id << LL_ENDL; + LL_INFOS(LOG_INV) << "Move item " << make_info(item) + << " from " << make_inventory_info(item->getParentUUID()) + << " to " << make_inventory_info(new_parent_id) << LL_ENDL; + LLInventoryModel::update_list_t update; LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1); update.push_back(old_folder); @@ -1421,6 +1424,10 @@ void LLInventoryModel::changeCategoryParent(LLViewerInventoryCategory* cat, return; } + LL_INFOS(LOG_INV) << "Move category " << make_info(cat) + << " from " << make_inventory_info(cat->getParentUUID()) + << " to " << make_inventory_info(new_parent_id) << LL_ENDL; + LLInventoryModel::update_list_t update; LLInventoryModel::LLCategoryUpdate old_folder(cat->getParentUUID(), -1); update.push_back(old_folder); diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index 685c2c0fe5..6c5706f871 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -39,7 +39,6 @@ #include "llpermissionsflags.h" #include "llviewerinventory.h" #include "llstring.h" -#include "llmd5.h" #include "httpcommon.h" #include "httprequest.h" #include "httpoptions.h" @@ -257,8 +256,9 @@ public: cat_array_t*& categories, item_array_t*& items) const; + typedef LLUUID digest_t; // To clarify the actual usage of this "UUID" // Compute a hash of direct descendant names (for detecting child name changes) - LLMD5 hashDirectDescendentNames(const LLUUID& cat_id) const; + digest_t hashDirectDescendentNames(const LLUUID& cat_id) const; // Starting with the object specified, add its descendants to the // array provided, but do not add the inventory object specified diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index 26d7a7a28a..db0751cb89 100644 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -640,7 +640,7 @@ void LLInventoryCategoriesObserver::changed(U32 mask) // computed, or (b) a name has changed. if (!cat_data.mIsNameHashInitialized || (mask & LLInventoryObserver::LABEL)) { - LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cat_id); + digest_t item_name_hash = gInventory.hashDirectDescendentNames(cat_id); if (cat_data.mItemNameHash != item_name_hash) { cat_data.mIsNameHashInitialized = true; @@ -701,7 +701,7 @@ bool LLInventoryCategoriesObserver::addCategory(const LLUUID& cat_id, callback_t { if(init_name_hash) { - LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cat_id); + digest_t item_name_hash = gInventory.hashDirectDescendentNames(cat_id); mCategoryMap.insert(category_map_value_t(cat_id,LLCategoryData(cat_id, cb, version, current_num_known_descendents,item_name_hash))); } else @@ -727,11 +727,10 @@ LLInventoryCategoriesObserver::LLCategoryData::LLCategoryData( , mDescendentsCount(num_descendents) , mIsNameHashInitialized(false) { - mItemNameHash.finalize(); } LLInventoryCategoriesObserver::LLCategoryData::LLCategoryData( - const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, LLMD5 name_hash) + const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, const digest_t& name_hash) : mCatID(cat_id) , mCallback(cb) diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h index 36d8ee3f59..4af8102055 100644 --- a/indra/newview/llinventoryobserver.h +++ b/indra/newview/llinventoryobserver.h @@ -28,7 +28,6 @@ #define LL_LLINVENTORYOBSERVERS_H #include "lluuid.h" -#include "llmd5.h" #include <string> #include <vector> @@ -271,14 +270,15 @@ public: void removeCategory(const LLUUID& cat_id); protected: + typedef LLUUID digest_t; // To clarify the actual usage of this "UUID" struct LLCategoryData { LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents); - LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, LLMD5 name_hash); + LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, const digest_t& name_hash); callback_t mCallback; S32 mVersion; S32 mDescendentsCount; - LLMD5 mItemNameHash; + digest_t mItemNameHash; bool mIsNameHashInitialized; LLUUID mCatID; }; diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp index 22cedf450e..92e341ce93 100644 --- a/indra/newview/llloginhandler.cpp +++ b/indra/newview/llloginhandler.cpp @@ -87,6 +87,7 @@ void LLLoginHandler::parse(const LLSD& queryMap) bool LLLoginHandler::handle(const LLSD& tokens, const LLSD& query_map, + const std::string& grid, LLMediaCtrl* web) { // do nothing if we are already logged in diff --git a/indra/newview/llloginhandler.h b/indra/newview/llloginhandler.h index 1f2eacd094..2579341dbf 100644 --- a/indra/newview/llloginhandler.h +++ b/indra/newview/llloginhandler.h @@ -35,7 +35,7 @@ class LLLoginHandler : public LLCommandHandler public: // allow from external browsers LLLoginHandler() : LLCommandHandler("login", UNTRUSTED_ALLOW) { } - /*virtual*/ bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web); + /*virtual*/ bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web); // Fill in our internal fields from a SLURL like // secondlife:///app/login?first=Bob&last=Dobbs diff --git a/indra/newview/llmaterialmgr.h b/indra/newview/llmaterialmgr.h index 843dc66fbc..8f1ec8584b 100644 --- a/indra/newview/llmaterialmgr.h +++ b/indra/newview/llmaterialmgr.h @@ -93,7 +93,11 @@ private: bool operator==(const TEMaterialPair& b) const { return (materialID == b.materialID) && (te == b.te); } }; - + + // definitions follow class + friend std::hash<TEMaterialPair>; + friend size_t hash_value(const TEMaterialPair&) noexcept; + friend inline bool operator<( const LLMaterialMgr::TEMaterialPair& lhs, const LLMaterialMgr::TEMaterialPair& rhs) @@ -102,13 +106,6 @@ private: (lhs.materialID < rhs.materialID); } - struct TEMaterialPairHasher - { - enum { bucket_size = 8 }; - size_t operator()(const TEMaterialPair& key_value) const { return *((size_t*)key_value.materialID.get()); } // cheesy, but effective - bool operator()(const TEMaterialPair& left, const TEMaterialPair& right) const { return left < right; } - }; - typedef std::set<LLMaterialID> material_queue_t; typedef std::map<LLUUID, material_queue_t> get_queue_t; typedef std::pair<const LLUUID, LLMaterialID> pending_material_t; @@ -116,7 +113,7 @@ private: typedef std::map<LLMaterialID, get_callback_t*> get_callback_map_t; - typedef boost::unordered_map<TEMaterialPair, get_callback_te_t*, TEMaterialPairHasher> get_callback_te_map_t; + typedef boost::unordered_map<TEMaterialPair, get_callback_te_t*> get_callback_te_map_t; typedef std::set<LLUUID> getall_queue_t; typedef std::map<LLUUID, F64> getall_pending_map_t; typedef std::map<LLUUID, getall_callback_t*> getall_callback_map_t; @@ -146,5 +143,23 @@ private: U32 getMaxEntries(const LLViewerRegion* regionp); }; +// std::hash implementation for TEMaterialPair +namespace std +{ + template<> struct hash<LLMaterialMgr::TEMaterialPair> + { + inline size_t operator()(const LLMaterialMgr::TEMaterialPair& p) const noexcept + { + return size_t((p.te + 1) * p.materialID.getDigest64()); + } + }; +} + +// For use with boost containers. +inline size_t hash_value(const LLMaterialMgr::TEMaterialPair& p) noexcept +{ + return size_t((p.te + 1) * p.materialID.getDigest64()); +} + #endif // LL_LLMATERIALMGR_H diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index f937754368..d6eba6b4bf 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -56,6 +56,7 @@ #include "llviewermessage.h" #include "llviewerobjectlist.h" #include "llviewerregion.h" +#include "llviewerstatsrecorder.h" #include "llviewertexturelist.h" #include "llvolume.h" #include "llvolumemgr.h" @@ -1862,10 +1863,10 @@ EMeshProcessingResult LLMeshRepoThread::headerReceived(const LLVolumeParams& mes const LLUUID mesh_id = mesh_params.getSculptID(); LLSD header; - U32 header_size = 0; + llssize header_size = 0; if (data_size > 0) { - U32 dsize = data_size; + llssize dsize = data_size; char* result_ptr = strip_deprecated_header((char*)data, dsize, &header_size); data_size = dsize; @@ -4089,6 +4090,8 @@ void LLMeshRepository::notifyMeshLoaded(const LLVolumeParams& mesh_params, LLVol } mLoadingMeshes[detail].erase(obj_iter); + + LLViewerStatsRecorder::instance().meshLoaded(); } } diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp index e1a5b22490..495153981b 100644 --- a/indra/newview/llmodelpreview.cpp +++ b/indra/newview/llmodelpreview.cpp @@ -2685,9 +2685,6 @@ void LLModelPreview::clearBuffers() void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights) { - U32 mesh_count = 0; - - LLModelLoader::model_list* model = NULL; if (lod < 0 || lod > 4) @@ -2818,8 +2815,6 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights) vb->flush(); mVertexBuffer[lod][mdl].push_back(vb); - - ++mesh_count; } } } diff --git a/indra/newview/lloutfitobserver.cpp b/indra/newview/lloutfitobserver.cpp index 5bb69367aa..3ec5bcd9fc 100644 --- a/indra/newview/lloutfitobserver.cpp +++ b/indra/newview/lloutfitobserver.cpp @@ -34,7 +34,6 @@ LLOutfitObserver::LLOutfitObserver() : mCOFLastVersion(LLViewerInventoryCategory::VERSION_UNKNOWN) { - mItemNameHash.finalize(); gInventory.addObserver(this); } @@ -83,7 +82,7 @@ bool LLOutfitObserver::checkCOF() return false; bool cof_changed = false; - LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cof); + LLUUID item_name_hash = gInventory.hashDirectDescendentNames(cof); if (item_name_hash != mItemNameHash) { cof_changed = true; diff --git a/indra/newview/lloutfitobserver.h b/indra/newview/lloutfitobserver.h index 77041db68d..2f136d48e8 100644 --- a/indra/newview/lloutfitobserver.h +++ b/indra/newview/lloutfitobserver.h @@ -28,7 +28,6 @@ #define LL_OUTFITOBSERVER_H #include "llsingleton.h" -#include "llmd5.h" /** * Outfit observer facade that provides simple possibility to subscribe on @@ -78,7 +77,7 @@ protected: bool mLastOutfitDirtiness; - LLMD5 mItemNameHash; + LLUUID mItemNameHash; private: signal_t mBOFReplaced; diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index 0103bf628a..1b4684d073 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -1665,7 +1665,7 @@ class LLMetricSystemHandler : public LLCommandHandler public: LLMetricSystemHandler() : LLCommandHandler("metricsystem", UNTRUSTED_CLICK_ONLY) { } - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { // change height units TRUE for meters and FALSE for feet BOOL new_value = (gSavedSettings.getBOOL("HeightUnits") == FALSE) ? TRUE : FALSE; diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index b14fdbf38e..8f1e57e44c 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -97,7 +97,7 @@ class LLLoginLocationAutoHandler : public LLCommandHandler public: // don't allow from external browsers LLLoginLocationAutoHandler() : LLCommandHandler("location_login", UNTRUSTED_BLOCK) { } - bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP) { diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp index 02911313ed..3c3cd5d522 100644 --- a/indra/newview/llpanelnearbymedia.cpp +++ b/indra/newview/llpanelnearbymedia.cpp @@ -619,7 +619,6 @@ void LLPanelNearByMedia::refreshList() LLViewerMedia::impl_list impls = media_inst->getPriorityList(); LLViewerMedia::impl_list::iterator priority_iter; - U32 enabled_count = 0; U32 disabled_count = 0; // iterate over the impl list, creating rows as necessary. @@ -662,13 +661,10 @@ void LLPanelNearByMedia::refreshList() { disabled_count++; } - else { - enabled_count++; } } - } mDisableAllCtrl->setEnabled((gSavedSettings.getBOOL("AudioStreamingMusic") || - gSavedSettings.getBOOL("AudioStreamingMedia")) && + gSavedSettings.getBOOL("AudioStreamingMedia")) && (media_inst->isAnyMediaShowing() || media_inst->isParcelMediaPlaying() || media_inst->isParcelAudioPlaying())); diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp index 3e770958da..67f913a067 100644 --- a/indra/newview/llpanelpermissions.cpp +++ b/indra/newview/llpanelpermissions.cpp @@ -76,30 +76,34 @@ std::string click_action_to_string_value( U8 action); U8 string_value_to_click_action(std::string p_value) { - if(p_value == "Touch") + if (p_value == "Touch") { return CLICK_ACTION_TOUCH; } - if(p_value == "Sit") + if (p_value == "Sit") { return CLICK_ACTION_SIT; } - if(p_value == "Buy") + if (p_value == "Buy") { return CLICK_ACTION_BUY; } - if(p_value == "Pay") + if (p_value == "Pay") { return CLICK_ACTION_PAY; } - if(p_value == "Open") + if (p_value == "Open") { return CLICK_ACTION_OPEN; } - if(p_value == "Zoom") + if (p_value == "Zoom") { return CLICK_ACTION_ZOOM; } + if (p_value == "Ignore") + { + return CLICK_ACTION_IGNORE; + } if (p_value == "None") { return CLICK_ACTION_DISABLED; @@ -130,6 +134,9 @@ std::string click_action_to_string_value( U8 action) case CLICK_ACTION_ZOOM: return "Zoom"; break; + case CLICK_ACTION_IGNORE: + return "Ignore"; + break; case CLICK_ACTION_DISABLED: return "None"; break; @@ -274,12 +281,12 @@ void LLPanelPermissions::disableAll() combo_click_action->setEnabled(FALSE); combo_click_action->clear(); } - getChildView("B:")->setVisible( FALSE); - getChildView("O:")->setVisible( FALSE); - getChildView("G:")->setVisible( FALSE); - getChildView("E:")->setVisible( FALSE); - getChildView("N:")->setVisible( FALSE); - getChildView("F:")->setVisible( FALSE); + getChildView("B:")->setVisible(FALSE); + getChildView("O:")->setVisible(FALSE); + getChildView("G:")->setVisible(FALSE); + getChildView("E:")->setVisible(FALSE); + getChildView("N:")->setVisible(FALSE); + getChildView("F:")->setVisible(FALSE); } void LLPanelPermissions::refresh() @@ -949,19 +956,19 @@ void LLPanelPermissions::refresh() getChild<LLUICtrl>("search_check")->setValue(include_in_search); getChild<LLUICtrl>("search_check")->setTentative( !all_include_in_search); - // Click action (touch, sit, buy) + // Click action (touch, sit, buy, pay, open, play, open media, zoom, ignore) U8 click_action = 0; if (LLSelectMgr::getInstance()->selectionGetClickAction(&click_action)) { LLComboBox* combo_click_action = getChild<LLComboBox>("clickaction"); - if(combo_click_action) + if (combo_click_action) { const std::string combo_value = click_action_to_string_value(click_action); combo_click_action->setValue(LLSD(combo_value)); } } - if(LLSelectMgr::getInstance()->getSelection()->isAttachment()) + if (LLSelectMgr::getInstance()->getSelection()->isAttachment()) { getChildView("checkbox for sale")->setEnabled(FALSE); getChildView("Edit Cost")->setEnabled(FALSE); diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 0f00231643..1d5ed93c4d 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -91,8 +91,10 @@ class LLParcelHandler : public LLCommandHandler public: // requires trusted browser to trigger LLParcelHandler() : LLCommandHandler("parcel", UNTRUSTED_THROTTLE) { } - bool handle(const LLSD& params, const LLSD& query_map, - LLMediaCtrl* web) + bool handle(const LLSD& params, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { if (params.size() < 2) { diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index 8ac1efe8e7..7aabd5247a 100644 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -461,8 +461,10 @@ public: // requires trusted browser to trigger LLProfileHandler() : LLCommandHandler("profile", UNTRUSTED_THROTTLE) { } - bool handle(const LLSD& params, const LLSD& query_map, - LLMediaCtrl* web) + bool handle(const LLSD& params, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { if (params.size() < 1) return false; std::string agent_name = params[0]; @@ -509,8 +511,10 @@ public: return false; } - bool handle(const LLSD& params, const LLSD& query_map, - LLMediaCtrl* web) + bool handle(const LLSD& params, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { if (params.size() < 2) return false; LLUUID avatar_id; diff --git a/indra/newview/llpanelprofileclassifieds.cpp b/indra/newview/llpanelprofileclassifieds.cpp index 1ff12b4f37..dec6cfd83b 100644 --- a/indra/newview/llpanelprofileclassifieds.cpp +++ b/indra/newview/llpanelprofileclassifieds.cpp @@ -106,7 +106,7 @@ public: return true; } - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { if (LLStartUp::getStartupState() < STATE_STARTED) { diff --git a/indra/newview/llpanelprofilepicks.cpp b/indra/newview/llpanelprofilepicks.cpp index db3a3c6de5..0535036cb0 100644 --- a/indra/newview/llpanelprofilepicks.cpp +++ b/indra/newview/llpanelprofilepicks.cpp @@ -87,8 +87,10 @@ public: return true; } - bool handle(const LLSD& params, const LLSD& query_map, - LLMediaCtrl* web) + bool handle(const LLSD& params, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { if (LLStartUp::getStartupState() < STATE_STARTED) { diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp index 33656566d1..095d5a0a1e 100644 --- a/indra/newview/llpreviewnotecard.cpp +++ b/indra/newview/llpreviewnotecard.cpp @@ -39,7 +39,9 @@ #include "llinventorydefines.h" #include "llinventorymodel.h" #include "lllineeditor.h" +#include "llmd5.h" #include "llnotificationsutil.h" +#include "llmd5.h" #include "llresmgr.h" #include "roles_constants.h" #include "llscrollbar.h" diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index d677a996c1..23c6cc01f5 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -40,6 +40,7 @@ #include "llinventorymodel.h" #include "llkeyboard.h" #include "lllineeditor.h" +#include "llmd5.h" #include "llhelp.h" #include "llnotificationsutil.h" #include "llresmgr.h" diff --git a/indra/newview/llsceneview.cpp b/indra/newview/llsceneview.cpp index 5e339a52bf..9b1d2d48c6 100644 --- a/indra/newview/llsceneview.cpp +++ b/indra/newview/llsceneview.cpp @@ -100,8 +100,6 @@ void LLSceneView::draw() F32 total_physics[] = { 0.f, 0.f }; - U32 object_count = 0; - LLViewerRegion* region = gAgent.getRegion(); if (region) { @@ -116,8 +114,7 @@ void LLSceneView::draw() U32 idx = object->isAttachment() ? 1 : 0; LLVolume* volume = object->getVolume(); - object_count++; - + F32 radius = object->getScale().magVec(); size[idx].push_back(radius); diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 86f7d2bf25..195b172102 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -5274,8 +5274,8 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle, LLViewerRegion* last_region; LLViewerRegion* current_region; - S32 objects_sent = 0; - S32 packets_sent = 0; +// S32 objects_sent = 0; +// S32 packets_sent = 0; S32 objects_in_this_packet = 0; bool link_operation = message_name == "ObjectLink"; @@ -5407,7 +5407,7 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle, (*pack_body)(node, user_data); // do any related logging (*log_func)(node, user_data); - ++objects_sent; +// ++objects_sent; ++objects_in_this_packet; // and on to the next object @@ -5425,7 +5425,7 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle, { // otherwise send current message and start new one gMessageSystem->sendReliable( last_region->getHost()); - packets_sent++; +// packets_sent++; objects_in_this_packet = 0; gMessageSystem->newMessage(message_name.c_str()); @@ -5442,7 +5442,7 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle, { // add root instance into new message (*pack_body)(linkset_root, user_data); - ++objects_sent; +// ++objects_sent; ++objects_in_this_packet; } } @@ -5456,7 +5456,7 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle, if (gMessageSystem->getCurrentSendTotal() > 0) { gMessageSystem->sendReliable( current_region->getHost()); - packets_sent++; +// packets_sent++; } else { diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp index b1eed81476..f5212a3026 100644 --- a/indra/newview/llsettingsvo.cpp +++ b/indra/newview/llsettingsvo.cpp @@ -312,7 +312,7 @@ void LLSettingsVOBase::onAssetDownloadComplete(const LLUUID &asset_id, S32 statu std::stringstream llsdstream(buffer); LLSD llsdsettings; - if (LLSDSerialize::deserialize(llsdsettings, llsdstream, -1)) + if (LLSDSerialize::deserialize(llsdsettings, llsdstream, LLSDSerialize::SIZE_UNLIMITED)) { settings = createFromLLSD(llsdsettings); } @@ -379,7 +379,7 @@ LLSettingsBase::ptr_t LLSettingsVOBase::importFile(const std::string &filename) return LLSettingsBase::ptr_t(); } - if (!LLSDSerialize::deserialize(settings, file, -1)) + if (!LLSDSerialize::deserialize(settings, file, LLSDSerialize::SIZE_UNLIMITED)) { LL_WARNS("SETTINGS") << "Unable to deserialize settings from '" << filename << "'" << LL_ENDL; return LLSettingsBase::ptr_t(); diff --git a/indra/newview/llshareavatarhandler.cpp b/indra/newview/llshareavatarhandler.cpp index 142e00c3f7..8c5ebb75ef 100644 --- a/indra/newview/llshareavatarhandler.cpp +++ b/indra/newview/llshareavatarhandler.cpp @@ -38,7 +38,7 @@ public: { } - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableAvatarShare")) { diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp index 7fa06f51e3..225751ab92 100644 --- a/indra/newview/llsidepaneltaskinfo.cpp +++ b/indra/newview/llsidepaneltaskinfo.cpp @@ -849,7 +849,7 @@ void LLSidepanelTaskInfo::refresh() const BOOL all_include_in_search = LLSelectMgr::getInstance()->selectionGetIncludeInSearch(&include_in_search); getChildView("search_check")->setEnabled(has_change_sale_ability && all_volume); getChild<LLUICtrl>("search_check")->setValue(include_in_search); - getChild<LLUICtrl>("search_check")->setTentative( !all_include_in_search); + getChild<LLUICtrl>("search_check")->setTentative(!all_include_in_search); // Click action (touch, sit, buy) U8 click_action = 0; @@ -1150,7 +1150,8 @@ static U8 string_value_to_click_action(std::string p_value) void LLSidepanelTaskInfo::onCommitClickAction(LLUICtrl* ctrl, void*) { LLComboBox* box = (LLComboBox*)ctrl; - if (!box) return; + if (!box) + return; std::string value = box->getValue().asString(); U8 click_action = string_value_to_click_action(value); doClickAction(click_action); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 42cd1133a2..17c834326c 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -237,6 +237,59 @@ BOOL LLSpatialGroup::updateInGroup(LLDrawable *drawablep, BOOL immediate) return FALSE; } +void LLSpatialGroup::expandExtents(const LLVector4a* addingExtents, const LLXformMatrix& currentTransform) +{ + // Get coordinates of the adding extents + const LLVector4a& min = addingExtents[0]; + const LLVector4a& max = addingExtents[1]; + + // Get coordinates of all corners of the bounding box + LLVector3 corners[] = + { + LLVector3(min[0], min[1], min[2]), + LLVector3(min[0], min[1], max[2]), + LLVector3(min[0], max[1], min[2]), + LLVector3(min[0], max[1], max[2]), + LLVector3(max[0], min[1], min[2]), + LLVector3(max[0], min[1], max[2]), + LLVector3(max[0], max[1], min[2]), + LLVector3(max[0], max[1], max[2]) + }; + + // New extents (to be expanded) + LLVector3 extents[] = + { + LLVector3(mExtents[0].getF32ptr()), + LLVector3(mExtents[1].getF32ptr()) + }; + + LLQuaternion backwardRotation = ~currentTransform.getRotation(); + for (LLVector3& corner : corners) + { + // Make coordinates relative to the current position + corner -= currentTransform.getPosition(); + // Rotate coordinates backward to the current rotation + corner.rotVec(backwardRotation); + // Expand root extents on the current corner + for (int j = 0; j < 3; ++j) + { + if (corner[j] < extents[0][j]) + extents[0][j] = corner[j]; + if (corner[j] > extents[1][j]) + extents[1][j] = corner[j]; + } + } + + // Set new expanded extents + mExtents[0].load3(extents[0].mV); + mExtents[1].load3(extents[1].mV); + + // Calculate new center and size + mBounds[0].setAdd(mExtents[0], mExtents[1]); + mBounds[0].mul(0.5f); + mBounds[1].setSub(mExtents[0], mExtents[1]); + mBounds[1].mul(0.5f); +} BOOL LLSpatialGroup::addObject(LLDrawable *drawablep) { @@ -3950,6 +4003,11 @@ public: if (vobj) { + if (vobj->getClickAction() == CLICK_ACTION_IGNORE && !LLFloater::isVisible(gFloaterTools)) + { + return false; + } + LLVector4a intersection; bool skip_check = false; if (vobj->isAvatar()) diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index 6d3ef33801..cdb591083c 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -298,6 +298,7 @@ public: BOOL addObject(LLDrawable *drawablep); BOOL removeObject(LLDrawable *drawablep, BOOL from_octree = FALSE); BOOL updateInGroup(LLDrawable *drawablep, BOOL immediate = FALSE); // Update position if it's in the group + void expandExtents(const LLVector4a* addingExtents, const LLXformMatrix& currentTransform); void shift(const LLVector4a &offset); void destroyGL(bool keep_occlusion = false); @@ -699,8 +700,10 @@ public: class LLControlAVBridge : public LLVolumeBridge { + using super = LLVolumeBridge; public: LLControlAVBridge(LLDrawable* drawablep, LLViewerRegion* regionp); + virtual void updateSpatialExtents(); }; class LLHUDBridge : public LLVolumeBridge diff --git a/indra/newview/llsprite.cpp b/indra/newview/llsprite.cpp index c3eb70f850..fd41cdf0d7 100644 --- a/indra/newview/llsprite.cpp +++ b/indra/newview/llsprite.cpp @@ -79,7 +79,6 @@ void LLSprite::updateFace(LLFace &face) // First, figure out how many vertices/indices we need. U32 num_vertices, num_indices; - U32 vertex_count = 0; // Get the total number of vertices and indices if (mFollow) @@ -203,25 +202,21 @@ void LLSprite::updateFace(LLFace &face) *verticesp = mC; tex_coordsp++; verticesp++; - vertex_count++; *tex_coordsp = LLVector2(0.f, 1.f); *verticesp = mB; tex_coordsp++; verticesp++; - vertex_count++; *tex_coordsp = LLVector2(1.f, 1.f); *verticesp = mA; tex_coordsp++; verticesp++; - vertex_count++; *tex_coordsp = LLVector2(1.f, 0.0f); *verticesp = mD; tex_coordsp++; verticesp++; - vertex_count++; // Generate indices, since they're easy. // Just a series of quads. diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 75cbe94592..1b0a814c45 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -663,9 +663,22 @@ bool idle_startup() #else void* window_handle = NULL; #endif - bool init = gAudiop->init(window_handle, LLAppViewer::instance()->getSecondLifeTitle()); - if(init) + if (gAudiop->init(window_handle, LLAppViewer::instance()->getSecondLifeTitle())) { + if (FALSE == gSavedSettings.getBOOL("UseMediaPluginsForStreamingAudio")) + { + LL_INFOS("AppInit") << "Using default impl to render streaming audio" << LL_ENDL; + gAudiop->setStreamingAudioImpl(gAudiop->createDefaultStreamingAudioImpl()); + } + + // if the audio engine hasn't set up its own preferred handler for streaming audio + // then set up the generic streaming audio implementation which uses media plugins + if (NULL == gAudiop->getStreamingAudioImpl()) + { + LL_INFOS("AppInit") << "Using media plugins to render streaming audio" << LL_ENDL; + gAudiop->setStreamingAudioImpl(new LLStreamingAudio_MediaPlugins()); + } + gAudiop->setMuted(TRUE); } else @@ -674,16 +687,6 @@ bool idle_startup() delete gAudiop; gAudiop = NULL; } - - if (gAudiop) - { - // if the audio engine hasn't set up its own preferred handler for streaming audio then set up the generic streaming audio implementation which uses media plugins - if (NULL == gAudiop->getStreamingAudioImpl()) - { - LL_INFOS("AppInit") << "Using media plugins to render streaming audio" << LL_ENDL; - gAudiop->setStreamingAudioImpl(new LLStreamingAudio_MediaPlugins()); - } - } } } @@ -3260,7 +3263,7 @@ LLSD transform_cert_args(LLPointer<LLCertificate> cert) // are actually arrays, and we want to format them as comma separated // strings, so special case those. LLSDSerialize::toXML(cert_info[iter->first], std::cout); - if((iter->first== std::string(CERT_KEY_USAGE)) | + if((iter->first == std::string(CERT_KEY_USAGE)) || (iter->first == std::string(CERT_EXTENDED_KEY_USAGE))) { value = ""; diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 0a87b14e17..1ef5d1c50b 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -729,7 +729,7 @@ class LLBalanceHandler : public LLCommandHandler public: // Requires "trusted" browser/URL source LLBalanceHandler() : LLCommandHandler("balance", UNTRUSTED_BLOCK) { } - bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { if (tokens.size() == 1 && tokens[0].asString() == "request") diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 6f6ca2be9b..a1beec7c1f 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -2183,7 +2183,6 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response, LL_DEBUGS(LOG_TXT) << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << LL_ENDL; if (data_size > 0) { - LLViewerStatsRecorder::instance().textureFetch(data_size); // *TODO: set the formatted image data here directly to avoid the copy // Hold on to body for later copy @@ -2249,6 +2248,13 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response, mHaveAllData = TRUE; } mRequestedSize = data_size; + + if (mHaveAllData) + { + LLViewerStatsRecorder::instance().textureFetch(); + } + + // *TODO: set the formatted image data here directly to avoid the copy } else { @@ -2258,11 +2264,6 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response, mLoaded = TRUE; setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); - if (LLViewerStatsRecorder::instanceExists()) - { - // Do not create this instance inside thread - LLViewerStatsRecorder::instance().log(0.2f); - } return data_size ; } diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index cf9211767e..84b61fc612 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -845,8 +845,8 @@ void LLTextureView::draw() if (imagep->getID() == LLAppViewer::getTextureFetch()->mDebugID) { - static S32 debug_count = 0; - ++debug_count; // for breakpoints +// static S32 debug_count = 0; +// ++debug_count; // for breakpoints } F32 pri; diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp index 0da769999b..76fb138768 100644 --- a/indra/newview/llurldispatcher.cpp +++ b/indra/newview/llurldispatcher.cpp @@ -97,6 +97,8 @@ private: // Called by LLWorldMap when a region name has been resolved to a // location in-world, used by places-panel display. + static bool handleGrid(const LLSLURL& slurl); + friend class LLTeleportHandler; }; @@ -155,7 +157,7 @@ bool LLURLDispatcherImpl::dispatchApp(const LLSLURL& slurl, LL_INFOS() << "cmd: " << slurl.getAppCmd() << " path: " << slurl.getAppPath() << " query: " << slurl.getAppQuery() << LL_ENDL; const LLSD& query_map = LLURI::queryMap(slurl.getAppQuery()); bool handled = LLCommandDispatcher::dispatch( - slurl.getAppCmd(), slurl.getAppPath(), query_map, web, nav_type, trusted_browser); + slurl.getAppCmd(), slurl.getAppPath(), query_map, slurl.getGrid(), web, nav_type, trusted_browser); // alert if we didn't handle this secondlife:///app/ SLURL // (but still return true because it is a valid app SLURL) @@ -184,6 +186,11 @@ bool LLURLDispatcherImpl::dispatchRegion(const LLSLURL& slurl, const std::string return true; } + if (!handleGrid(slurl)) + { + return true; + } + // Request a region handle by name LLWorldMapMessage::getInstance()->sendNamedRegionRequest(slurl.getRegion(), LLURLDispatcherImpl::regionNameCallback, @@ -202,31 +209,39 @@ void LLURLDispatcherImpl::regionNameCallback(U64 region_handle, const LLSLURL& s } } +bool LLURLDispatcherImpl::handleGrid(const LLSLURL& slurl) +{ + if (LLGridManager::getInstance()->getGrid(slurl.getGrid()) + != LLGridManager::getInstance()->getGrid()) + { + LLSD args; + args["SLURL"] = slurl.getLocationString(); + args["CURRENT_GRID"] = LLGridManager::getInstance()->getGridLabel(); + std::string grid_label = + LLGridManager::getInstance()->getGridLabel(slurl.getGrid()); + + if (!grid_label.empty()) + { + args["GRID"] = grid_label; + } + else + { + args["GRID"] = slurl.getGrid(); + } + LLNotificationsUtil::add("CantTeleportToGrid", args); + return false; + } + return true; +} + /* static */ void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const LLSLURL& slurl, const LLUUID& snapshot_id, bool teleport) { - - // we can't teleport cross grid at this point - if( LLGridManager::getInstance()->getGrid(slurl.getGrid()) - != LLGridManager::getInstance()->getGrid()) - { - LLSD args; - args["SLURL"] = slurl.getLocationString(); - args["CURRENT_GRID"] = LLGridManager::getInstance()->getGridLabel(); - std::string grid_label = - LLGridManager::getInstance()->getGridLabel(slurl.getGrid()); - - if(!grid_label.empty()) - { - args["GRID"] = grid_label; - } - else - { - args["GRID"] = slurl.getGrid(); - } - LLNotificationsUtil::add("CantTeleportToGrid", args); - return; - } + if (!handleGrid(slurl)) + { + // we can't teleport cross grid at this point + return; + } LLVector3d global_pos = from_region_handle(region_handle); global_pos += LLVector3d(slurl.getPosition()); @@ -274,8 +289,10 @@ public: &LLTeleportHandler::from_event); } - bool handle(const LLSD& tokens, const LLSD& query_map, - LLMediaCtrl* web) + bool handle(const LLSD& tokens, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { // construct a "normal" SLURL, resolve the region to // a global position, and teleport to it @@ -297,7 +314,7 @@ public: LLSD payload; payload["region_name"] = region_name; - payload["callback_url"] = LLSLURL(region_name, coords).getSLURLString(); + payload["callback_url"] = LLSLURL(grid, region_name, coords).getSLURLString(); LLNotificationsUtil::add("TeleportViaSLAPP", args, payload); return true; diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index cc73f7ca80..6a0edbecb1 100644 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -91,17 +91,18 @@ void LLViewerAudio::startInternetStreamWithAutoFade(const std::string &streamURI return; } - // Record the URI we are going to be switching to + if (!gAudiop) + { + LL_WARNS("AudioEngine") << "LLAudioEngine instance doesn't exist!" << LL_ENDL; + return; + } + + // Record the URI we are going to be switching to mNextStreamURI = streamURI; switch (mFadeState) { case FADE_IDLE: - if (!gAudiop) - { - LL_WARNS("AudioEngine") << "LLAudioEngine instance doesn't exist!" << LL_ENDL; - break; - } // If a stream is playing fade it out first if (!gAudiop->getInternetStreamURL().empty()) { @@ -114,28 +115,28 @@ void LLViewerAudio::startInternetStreamWithAutoFade(const std::string &streamURI mFadeState = FADE_IN; LLStreamingAudioInterface *stream = gAudiop->getStreamingAudioImpl(); - if(stream && stream->supportsAdjustableBufferSizes()) - stream->setBufferSizes(gSavedSettings.getU32("FMODExStreamBufferSize"),gSavedSettings.getU32("FMODExDecodeBufferSize")); + if (stream && stream->supportsAdjustableBufferSizes()) + stream->setBufferSizes(gSavedSettings.getU32("FMODExStreamBufferSize"), gSavedSettings.getU32("FMODExDecodeBufferSize")); gAudiop->startInternetStream(mNextStreamURI); - startFading(); - registerIdleListener(); - break; } + startFading(); + break; + case FADE_OUT: startFading(); - registerIdleListener(); break; case FADE_IN: - registerIdleListener(); break; default: LL_WARNS() << "Unknown fading state: " << mFadeState << LL_ENDL; - break; + return; } + + registerIdleListener(); } // A return of false from onIdleUpdate means it will be called again next idle update. @@ -236,15 +237,12 @@ void LLViewerAudio::startFading() // This minimum fade time prevents divide by zero and negative times const F32 AUDIO_MUSIC_MINIMUM_FADE_TIME = 0.01f; - if(mDone) + if (mDone) { // The fade state here should only be one of FADE_IN or FADE_OUT, but, in case it is not, // rather than check for both states assume a fade in and check for the fade out case. - mFadeTime = AUDIO_MUSIC_FADE_IN_TIME; - if (LLViewerAudio::getInstance()->getFadeState() == LLViewerAudio::FADE_OUT) - { - mFadeTime = AUDIO_MUSIC_FADE_OUT_TIME; - } + mFadeTime = LLViewerAudio::getInstance()->getFadeState() == LLViewerAudio::FADE_OUT ? + AUDIO_MUSIC_FADE_OUT_TIME : AUDIO_MUSIC_FADE_IN_TIME; // Prevent invalid fade time mFadeTime = llmax(mFadeTime, AUDIO_MUSIC_MINIMUM_FADE_TIME); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 92c862d530..0f2fe1e1cd 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -272,6 +272,7 @@ public: bool handle( const LLSD& params, const LLSD& query_map, + const std::string& grid, LLMediaCtrl* web) override { if (params.size() != 1) diff --git a/indra/newview/llviewerhelp.cpp b/indra/newview/llviewerhelp.cpp index 3273090da5..3181ae6283 100644 --- a/indra/newview/llviewerhelp.cpp +++ b/indra/newview/llviewerhelp.cpp @@ -45,7 +45,7 @@ public: // requests will be throttled from a non-trusted browser LLHelpHandler() : LLCommandHandler("help", UNTRUSTED_CLICK_ONLY) {} - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { LLViewerHelp* vhelp = LLViewerHelp::getInstance(); if (! vhelp) diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 50252556de..793eb56734 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -234,8 +234,10 @@ public: // requires trusted browser to trigger LLInventoryHandler() : LLCommandHandler("inventory", UNTRUSTED_CLICK_ONLY) { } - bool handle(const LLSD& params, const LLSD& query_map, - LLMediaCtrl* web) + bool handle(const LLSD& params, + const LLSD& query_map, + const std::string& grid, + LLMediaCtrl* web) { if (params.size() < 1) { diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 84396c2c68..cc59e559e9 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -119,8 +119,10 @@ #include "llviewerobjectlist.h" #include "llviewerparcelmgr.h" #include "llviewerstats.h" +#include "llviewerstatsrecorder.h" #include "llvoavatarself.h" #include "llvoicevivox.h" +#include "llworld.h" #include "llworldmap.h" #include "pipeline.h" #include "llviewerjoystick.h" @@ -328,6 +330,7 @@ void handle_debug_avatar_textures(void*); void handle_grab_baked_texture(void*); BOOL enable_grab_baked_texture(void*); void handle_dump_region_object_cache(void*); +void handle_reset_interest_lists(void *); BOOL enable_save_into_task_inventory(void*); @@ -1291,49 +1294,66 @@ class LLAdvancedDumpRegionObjectCache : public view_listener_t } }; -class LLAdvancedInterestListFullUpdate : public view_listener_t +class LLAdvancedToggleInterestList360Mode : public view_listener_t +{ +public: + bool handleEvent(const LLSD &userdata) + { + // Toggle the mode - regions will get updated + if (gAgent.getInterestListMode() == LLViewerRegion::IL_MODE_360) + { + gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_DEFAULT); + } + else + { + gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_360); + } + return true; + } +}; + +class LLAdvancedCheckInterestList360Mode : public view_listener_t { bool handleEvent(const LLSD& userdata) { - LLSD request; - LLSD body; - static bool using_360 = false; + return (gAgent.getInterestListMode() == LLViewerRegion::IL_MODE_360); + } +}; - if (using_360) - { - body["mode"] = LLSD::String("default"); +class LLAdvancedToggleStatsRecorder : public view_listener_t +{ + bool handleEvent(const LLSD &userdata) + { + if (LLViewerStatsRecorder::instance().isEnabled()) + { // Turn off both recording and logging + LLViewerStatsRecorder::instance().enableObjectStatsRecording(false); } else - { - body["mode"] = LLSD::String("360"); + { // Turn on both recording and logging + LLViewerStatsRecorder::instance().enableObjectStatsRecording(true, true); } - using_360 = !using_360; + return true; + } +}; - if (gAgent.requestPostCapability("InterestList", body, [](const LLSD& response) - { - LL_INFOS("360Capture") << - "InterestList capability responded: \n" << - ll_pretty_print_sd(response) << - LL_ENDL; - })) - { - LL_INFOS("360Capture") << - "Successfully posted an InterestList capability request with payload: \n" << - ll_pretty_print_sd(body) << - LL_ENDL; - return true; - } - else - { - LL_INFOS("360Capture") << - "Unable to post an InterestList capability request with payload: \n" << - ll_pretty_print_sd(body) << - LL_ENDL; - return false; - } - } +class LLAdvancedCheckStatsRecorder : public view_listener_t +{ + bool handleEvent(const LLSD &userdata) + { // Use the logging state as the indicator of whether the stats recorder is on + return LLViewerStatsRecorder::instance().isLogging(); + } +}; + +class LLAdvancedResetInterestLists : public view_listener_t +{ + bool handleEvent(const LLSD &userdata) + { // Reset all region interest lists + handle_reset_interest_lists(NULL); + return true; + } }; + class LLAdvancedBuyCurrencyTest : public view_listener_t { bool handleEvent(const LLSD& userdata) @@ -3885,6 +3905,22 @@ void handle_dump_region_object_cache(void*) } } +void handle_reset_interest_lists(void *) +{ + // Check all regions and reset their interest list + for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); + iter != LLWorld::getInstance()->getRegionList().end(); + ++iter) + { + LLViewerRegion *regionp = *iter; + if (regionp && regionp->isAlive() && regionp->capabilitiesReceived()) + { + regionp->resetInterestList(); + } + } +} + + void handle_dump_focus() { LLUICtrl *ctrl = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus()); @@ -4495,33 +4531,6 @@ void handle_duplicate_in_place(void*) LLSelectMgr::getInstance()->selectDuplicate(offset, TRUE); } -/* dead code 30-apr-2008 -void handle_deed_object_to_group(void*) -{ - LLUUID group_id; - - LLSelectMgr::getInstance()->selectGetGroup(group_id); - LLSelectMgr::getInstance()->sendOwner(LLUUID::null, group_id, FALSE); - LLViewerStats::getInstance()->incStat(LLViewerStats::ST_RELEASE_COUNT); -} - -BOOL enable_deed_object_to_group(void*) -{ - if(LLSelectMgr::getInstance()->getSelection()->isEmpty()) return FALSE; - LLPermissions perm; - LLUUID group_id; - - if (LLSelectMgr::getInstance()->selectGetGroup(group_id) && - gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && - LLSelectMgr::getInstance()->selectGetPermissions(perm) && - perm.deedToGroup(gAgent.getID(), group_id)) - { - return TRUE; - } - return FALSE; -} - -*/ /* @@ -9065,6 +9074,25 @@ class LLWorldPostProcess : public view_listener_t } }; +class LLWorldCheckBanLines : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + S32 callback_data = userdata.asInteger(); + return gSavedSettings.getS32("ShowBanLines") == callback_data; + } +}; + +class LLWorldShowBanLines : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + S32 callback_data = userdata.asInteger(); + gSavedSettings.setS32("ShowBanLines", callback_data); + return true; + } +}; + void handle_flush_name_caches() { if (gCacheName) gCacheName->clear(); @@ -9354,6 +9382,8 @@ void initialize_menus() view_listener_t::addMenu(new LLWorldEnvPreset(), "World.EnvPreset"); view_listener_t::addMenu(new LLWorldEnableEnvPreset(), "World.EnableEnvPreset"); view_listener_t::addMenu(new LLWorldPostProcess(), "World.PostProcess"); + view_listener_t::addMenu(new LLWorldCheckBanLines() , "World.CheckBanLines"); + view_listener_t::addMenu(new LLWorldShowBanLines() , "World.ShowBanLines"); // Tools menu view_listener_t::addMenu(new LLToolsSelectTool(), "Tools.SelectTool"); @@ -9451,7 +9481,11 @@ void initialize_menus() // Advanced > World view_listener_t::addMenu(new LLAdvancedDumpScriptedCamera(), "Advanced.DumpScriptedCamera"); view_listener_t::addMenu(new LLAdvancedDumpRegionObjectCache(), "Advanced.DumpRegionObjectCache"); - view_listener_t::addMenu(new LLAdvancedInterestListFullUpdate(), "Advanced.InterestListFullUpdate"); + view_listener_t::addMenu(new LLAdvancedToggleStatsRecorder(), "Advanced.ToggleStatsRecorder"); + view_listener_t::addMenu(new LLAdvancedCheckStatsRecorder(), "Advanced.CheckStatsRecorder"); + view_listener_t::addMenu(new LLAdvancedToggleInterestList360Mode(), "Advanced.ToggleInterestList360Mode"); + view_listener_t::addMenu(new LLAdvancedCheckInterestList360Mode(), "Advanced.CheckInterestList360Mode"); + view_listener_t::addMenu(new LLAdvancedResetInterestLists(), "Advanced.ResetInterestLists"); // Advanced > UI commit.add("Advanced.WebBrowserTest", boost::bind(&handle_web_browser_test, _2)); // sigh! this one opens the MEDIA browser diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index e7456f77bb..7421bba733 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -99,6 +99,7 @@ #include "llviewerobjectlist.h" #include "llviewerparcelmgr.h" #include "llviewerstats.h" +#include "llviewerstatsrecorder.h" #include "llviewertexteditor.h" #include "llviewerthrottle.h" #include "llviewerwindow.h" @@ -3759,31 +3760,34 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data) continue; } - LLViewerObject *objectp = gObjectList.findObject(id); - if (objectp) + LLViewerObject *objectp = gObjectList.findObject(id); + if (objectp) + { + // Display green bubble on kill + if ( gShowObjectUpdates ) { - // Display green bubble on kill - if ( gShowObjectUpdates ) - { - LLColor4 color(0.f,1.f,0.f,1.f); - gPipeline.addDebugBlip(objectp->getPositionAgent(), color); - LL_DEBUGS("MessageBlip") << "Kill blip for local " << local_id << " at " << objectp->getPositionAgent() << LL_ENDL; - } - - // Do the kill - gObjectList.killObject(objectp); + LLColor4 color(0.f,1.f,0.f,1.f); + gPipeline.addDebugBlip(objectp->getPositionAgent(), color); + LL_DEBUGS("MessageBlip") << "Kill blip for local " << local_id << " at " << objectp->getPositionAgent() << LL_ENDL; } - if(delete_object) - { - regionp->killCacheEntry(local_id); + // Do the kill + gObjectList.killObject(objectp); + } + + if(delete_object) + { + regionp->killCacheEntry(local_id); } // We should remove the object from selection after it is marked dead by gObjectList to make LLToolGrab, // which is using the object, release the mouse capture correctly when the object dies. // See LLToolGrab::handleHoverActive() and LLToolGrab::handleHoverNonPhysical(). LLSelectMgr::getInstance()->removeObjectFromSelections(id); - } + + } // end for loop + + LLViewerStatsRecorder::instance().recordObjectKills(num_objects); } void process_time_synch(LLMessageSystem *mesgsys, void **user_data) @@ -5151,6 +5155,11 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) LandBuyAccessBlocked_AdultsOnlyContent -----------------------------------------------------------------------*/ + static LLCachedControl<S32> ban_lines_mode(gSavedSettings , "ShowBanLines" , LLViewerParcelMgr::PARCEL_BAN_LINES_ON_COLLISION); + if (ban_lines_mode == LLViewerParcelMgr::PARCEL_BAN_LINES_ON_COLLISION) + { + LLViewerParcelMgr::getInstance()->resetCollisionTimer(); + } if (handle_special_notification(notificationID, llsdBlock)) { return true; @@ -5319,6 +5328,13 @@ void process_alert_message(LLMessageSystem *msgsystem, void **user_data) { BOOL modal = FALSE; process_alert_core(message, modal); + + static LLCachedControl<S32> ban_lines_mode(gSavedSettings , "ShowBanLines" , LLViewerParcelMgr::PARCEL_BAN_LINES_ON_COLLISION); + if (ban_lines_mode == LLViewerParcelMgr::PARCEL_BAN_LINES_ON_COLLISION + && message.find("Cannot enter parcel") != std::string::npos) + { + LLViewerParcelMgr::getInstance()->resetCollisionTimer(); + } } } diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index efc4ded79e..c479afaa52 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -369,7 +369,7 @@ LLViewerObject* LLViewerObjectList::processObjectUpdateFromCache(LLVOCacheEntry* if (!objectp) { LL_INFOS() << "createObject failure for object: " << fullid << LL_ENDL; - recorder.objectUpdateFailure(entry->getLocalID(), OUT_FULL_CACHED, 0); + recorder.objectUpdateFailure(); return NULL; } justCreated = true; @@ -393,7 +393,6 @@ LLViewerObject* LLViewerObjectList::processObjectUpdateFromCache(LLVOCacheEntry* objectp->setLastUpdateType(OUT_FULL_COMPRESSED); //newly cached objectp->setLastUpdateCached(TRUE); } - recorder.log(0.2f); LLVOAvatar::cullAvatarsByPixelArea(); return objectp; @@ -472,18 +471,14 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, for (i = 0; i < num_objects; i++) { - // timer is unused? - LLTimer update_timer; BOOL justCreated = FALSE; - S32 msg_size = 0; bool update_cache = false; //update object cache if it is a full-update or terse update if (compressed) { - S32 uncompressed_length = 2048; compressed_dp.reset(); - uncompressed_length = mesgsys->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_Data); + S32 uncompressed_length = mesgsys->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_Data); LL_DEBUGS("ObjectUpdate") << "got binary data from message to compressed_dpbuffer" << LL_ENDL; mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_Data, compressed_dpbuffer, 0, i, 2048); compressed_dp.assignBuffer(compressed_dpbuffer, uncompressed_length); @@ -505,7 +500,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, << " Flags: " << flags << " Region: " << regionp->getName() << " Region id: " << regionp->getRegionID() << LL_ENDL; - recorder.objectUpdateFailure(local_id, update_type, msg_size); + recorder.objectUpdateFailure(); continue; } else if ((flags & FLAGS_TEMPORARY_ON_REZ) == 0) @@ -533,7 +528,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, else if (update_type != OUT_FULL) // !compressed, !OUT_FULL ==> OUT_FULL_CACHED only? { mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, local_id, i); - msg_size += sizeof(U32); getUUIDFromLocal(fullid, local_id, @@ -554,8 +548,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, update_cache = true; mesgsys->getUUIDFast(_PREHASH_ObjectData, _PREHASH_FullID, fullid, i); mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, local_id, i); - msg_size += sizeof(LLUUID); - msg_size += sizeof(U32); LL_DEBUGS("ObjectUpdate") << "Full Update, obj " << local_id << ", global ID " << fullid << " from " << mesgsys->getSender() << LL_ENDL; } objectp = findObject(fullid); @@ -616,7 +608,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, if (update_type == OUT_TERSE_IMPROVED) { // LL_INFOS() << "terse update for an unknown object (compressed):" << fullid << LL_ENDL; - recorder.objectUpdateFailure(local_id, update_type, msg_size); + recorder.objectUpdateFailure(); continue; } } @@ -625,12 +617,11 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, if (update_type != OUT_FULL) { //LL_INFOS() << "terse update for an unknown object:" << fullid << LL_ENDL; - recorder.objectUpdateFailure(local_id, update_type, msg_size); + recorder.objectUpdateFailure(); continue; } mesgsys->getU8Fast(_PREHASH_ObjectData, _PREHASH_PCode, pcode, i); - msg_size += sizeof(U8); } #ifdef IGNORE_DEAD @@ -638,7 +629,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, { mNumDeadObjectUpdates++; //LL_INFOS() << "update for a dead object:" << fullid << LL_ENDL; - recorder.objectUpdateFailure(local_id, update_type, msg_size); + recorder.objectUpdateFailure(); continue; } #endif @@ -651,7 +642,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, if (!objectp) { LL_INFOS() << "createObject failure for object: " << fullid << LL_ENDL; - recorder.objectUpdateFailure(local_id, update_type, msg_size); + recorder.objectUpdateFailure(); continue; } @@ -681,11 +672,11 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, if(!(flags & FLAGS_TEMPORARY_ON_REZ)) { - bCached = true; + bCached = true; LLViewerRegion::eCacheUpdateResult result = objectp->mRegionp->cacheFullUpdate(objectp, compressed_dp, flags); - recorder.cacheFullUpdate(local_id, update_type, result, objectp, msg_size); + recorder.cacheFullUpdate(result); + } } - } #endif } else @@ -696,12 +687,10 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, } processUpdateCore(objectp, user_data, i, update_type, NULL, justCreated); } - recorder.objectUpdateEvent(local_id, update_type, objectp, msg_size); + recorder.objectUpdateEvent(update_type); objectp->setLastUpdateType(update_type); } - recorder.log(0.2f); - LLVOAvatar::cullAvatarsByPixelArea(); } @@ -734,28 +723,26 @@ void LLViewerObjectList::processCachedObjectUpdate(LLMessageSystem *mesgsys, for (S32 i = 0; i < num_objects; i++) { - S32 msg_size = 0; U32 id; U32 crc; U32 flags; mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, id, i); mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_CRC, crc, i); mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_UpdateFlags, flags, i); - msg_size += sizeof(U32) * 2; LL_DEBUGS("ObjectUpdate") << "got probe for id " << id << " crc " << crc << LL_ENDL; dumpStack("ObjectUpdateStack"); // Lookup data packer and add this id to cache miss lists if necessary. U8 cache_miss_type = LLViewerRegion::CACHE_MISS_TYPE_NONE; - if(!regionp->probeCache(id, crc, flags, cache_miss_type)) - { - // Cache Miss. + if (regionp->probeCache(id, crc, flags, cache_miss_type)) + { // Cache Hit + recorder.cacheHitEvent(); + } + else + { // Cache Miss LL_DEBUGS("ObjectUpdate") << "cache miss for id " << id << " crc " << crc << " miss type " << (S32) cache_miss_type << LL_ENDL; - - recorder.cacheMissEvent(id, update_type, cache_miss_type, msg_size); - - continue; // no data packer, skip this object + recorder.cacheMissEvent(cache_miss_type); } } @@ -773,7 +760,6 @@ void LLViewerObjectList::dirtyAllObjectInventory() void LLViewerObjectList::updateApparentAngles(LLAgent &agent) { S32 i; - S32 num_objects = 0; LLViewerObject *objectp; S32 num_updates, max_value; @@ -830,8 +816,6 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent) objectp = mObjects[i]; if (!objectp->isDead()) { - num_objects++; - // Update distance & gpw objectp->setPixelAreaAndAngle(agent); // Also sets the approx. pixel area objectp->updateTextures(); // Update the image levels of textures for this object. diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 97dc916bfe..15accd0547 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -72,12 +72,16 @@ #include "llenvironment.h" -const F32 PARCEL_COLLISION_DRAW_SECS = 1.f; +const F32 PARCEL_BAN_LINES_DRAW_SECS_ON_COLLISION = 10.f; +const F32 PARCEL_COLLISION_DRAW_SECS_ON_PROXIMITY = 1.f; // Globals U8* LLViewerParcelMgr::sPackedOverlay = NULL; +S32 LLViewerParcelMgr::PARCEL_BAN_LINES_HIDE = 0; +S32 LLViewerParcelMgr::PARCEL_BAN_LINES_ON_COLLISION = 1; +S32 LLViewerParcelMgr::PARCEL_BAN_LINES_ON_PROXIMITY = 2; LLUUID gCurrentMovieID = LLUUID::null; @@ -892,13 +896,18 @@ void LLViewerParcelMgr::render() void LLViewerParcelMgr::renderParcelCollision() { + static LLCachedControl<S32> ban_lines_mode(gSavedSettings , "ShowBanLines" , PARCEL_BAN_LINES_ON_COLLISION); + // check for expiration - if (mCollisionTimer.getElapsedTimeF32() > PARCEL_COLLISION_DRAW_SECS) + F32 expiration = (ban_lines_mode == PARCEL_BAN_LINES_ON_PROXIMITY) + ? PARCEL_COLLISION_DRAW_SECS_ON_PROXIMITY + : PARCEL_BAN_LINES_DRAW_SECS_ON_COLLISION; + if (mCollisionTimer.getElapsedTimeF32() > expiration) { - mRenderCollision = FALSE; + mRenderCollision = false; } - if (mRenderCollision && gSavedSettings.getBOOL("ShowBanLines")) + if (mRenderCollision && ban_lines_mode != PARCEL_BAN_LINES_HIDE) { LLViewerRegion* regionp = gAgent.getRegion(); if (regionp) @@ -1842,8 +1851,11 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID) { // We're about to collide with this parcel - parcel_mgr.mRenderCollision = TRUE; - parcel_mgr.mCollisionTimer.reset(); + static LLCachedControl<S32> ban_lines_mode(gSavedSettings , "ShowBanLines" , PARCEL_BAN_LINES_ON_COLLISION); + if (ban_lines_mode == PARCEL_BAN_LINES_ON_PROXIMITY) + { + parcel_mgr.resetCollisionTimer(); + } // Differentiate this parcel if we are banned from it. if (sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID) diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h index 6ce389ab88..56dacd3efd 100644 --- a/indra/newview/llviewerparcelmgr.h +++ b/indra/newview/llviewerparcelmgr.h @@ -205,6 +205,11 @@ public: void renderHighlightSegments(const U8* segments, LLViewerRegion* regionp); void renderCollisionSegments(U8* segments, BOOL use_pass, LLViewerRegion* regionp); + static S32 PARCEL_BAN_LINES_HIDE; + static S32 PARCEL_BAN_LINES_ON_COLLISION; + static S32 PARCEL_BAN_LINES_ON_PROXIMITY; + void resetCollisionTimer(); // Ban lines visibility timer + void sendParcelGodForceOwner(const LLUUID& owner_id); // make the selected parcel a content parcel. @@ -361,7 +366,7 @@ private: // If it's coming, draw the parcel's boundaries. LLParcel* mCollisionParcel; U8* mCollisionSegments; - BOOL mRenderCollision; + bool mRenderCollision; BOOL mRenderSelection; S32 mCollisionBanned; LLFrameTimer mCollisionTimer; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index b582e38c78..4a1dd1b8d6 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -104,6 +104,9 @@ S32 LLViewerRegion::sLastCameraUpdated = 0; S32 LLViewerRegion::sNewObjectCreationThrottle = -1; LLViewerRegion::vocache_entry_map_t LLViewerRegion::sRegionCacheCleanup; +const std::string LLViewerRegion::IL_MODE_DEFAULT = "default"; +const std::string LLViewerRegion::IL_MODE_360 = "360"; + typedef std::map<std::string, std::string> CapabilityMap; static void log_capabilities(const CapabilityMap &capmap); @@ -131,8 +134,8 @@ class LLRegionHandler : public LLCommandHandler public: // requests will be throttled from a non-trusted browser LLRegionHandler() : LLCommandHandler("region", UNTRUSTED_THROTTLE) {} - - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) + + bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { // make sure that we at least have a region name int num_params = params.size(); @@ -143,6 +146,10 @@ public: // build a secondlife://{PLACE} SLurl from this SLapp std::string url = "secondlife://"; + if (!grid.empty()) + { + url += grid + "/secondlife/"; + } boost::regex name_rx("[A-Za-z0-9()_%]+"); boost::regex coord_rx("[0-9]+"); for (int i = 0; i < num_params; i++) @@ -642,7 +649,8 @@ LLViewerRegion::LLViewerRegion(const U64 &handle, mInvisibilityCheckHistory(-1), mPaused(FALSE), mRegionCacheHitCount(0), - mRegionCacheMissCount(0) + mRegionCacheMissCount(0), + mInterestListMode(IL_MODE_DEFAULT) { mWidth = region_width_meters; mImpl->mOriginGlobal = from_region_handle(handle); @@ -2618,14 +2626,10 @@ LLVOCacheEntry* LLViewerRegion::getCacheEntry(U32 local_id, bool valid) return NULL; } -void LLViewerRegion::addCacheMiss(U32 id, LLViewerRegion::eCacheMissType miss_type) +void LLViewerRegion::addCacheMiss(U32 id, LLViewerRegion::eCacheMissType cache_miss_type) { mRegionCacheMissCount++; -#if 0 - mCacheMissList.insert(CacheMissItem(id, miss_type)); -#else - mCacheMissList.push_back(CacheMissItem(id, miss_type)); -#endif + mCacheMissList.push_back(CacheMissItem(id, cache_miss_type)); } //check if a non-cacheable object is already created. @@ -2701,10 +2705,10 @@ bool LLViewerRegion::probeCache(U32 local_id, U32 crc, U32 flags, U8 &cache_miss } } else - { + { // Total miss, don't have the object in cache // LL_INFOS() << "Cache miss for " << local_id << LL_ENDL; - addCacheMiss(local_id, CACHE_MISS_TYPE_FULL); - cache_miss_type = CACHE_MISS_TYPE_FULL; + addCacheMiss(local_id, CACHE_MISS_TYPE_TOTAL); + cache_miss_type = CACHE_MISS_TYPE_TOTAL; } return false; @@ -2712,7 +2716,7 @@ bool LLViewerRegion::probeCache(U32 local_id, U32 crc, U32 flags, U8 &cache_miss void LLViewerRegion::addCacheMissFull(const U32 local_id) { - addCacheMiss(local_id, CACHE_MISS_TYPE_FULL); + addCacheMiss(local_id, CACHE_MISS_TYPE_TOTAL); } void LLViewerRegion::requestCacheMisses() @@ -2763,7 +2767,6 @@ void LLViewerRegion::requestCacheMisses() mCacheDirty = TRUE ; // LL_INFOS() << "KILLDEBUG Sent cache miss full " << full_count << " crc " << crc_count << LL_ENDL; LLViewerStatsRecorder::instance().requestCacheMissesEvent(mCacheMissList.size()); - LLViewerStatsRecorder::instance().log(0.2f); mCacheMissList.clear(); } @@ -3284,6 +3287,9 @@ void LLViewerRegion::setCapabilitiesReceived(bool received) // This is a single-shot signal. Forget callbacks to save resources. mCapabilitiesReceivedSignal.disconnect_all_slots(); + + // Set the region to the desired interest list mode + setInterestListMode(gAgent.getInterestListMode()); } } @@ -3302,7 +3308,111 @@ void LLViewerRegion::logActiveCapabilities() const log_capabilities(mImpl->mCapabilities); } -LLSpatialPartition* LLViewerRegion::getSpatialPartition(U32 type) + +bool LLViewerRegion::requestPostCapability(const std::string &capName, LLSD &postData, httpCallback_t cbSuccess, httpCallback_t cbFailure) +{ + std::string url = getCapability(capName); + + if (url.empty()) + { + LL_WARNS("Region") << "Could not retrieve region " << getRegionID() + << " POST capability \"" << capName << "\"" << LL_ENDL; + return false; + } + + LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(url, gAgent.getAgentPolicy(), postData, cbSuccess, cbFailure); + return true; +} + +bool LLViewerRegion::requestGetCapability(const std::string &capName, httpCallback_t cbSuccess, httpCallback_t cbFailure) +{ + std::string url; + + url = getCapability(capName); + + if (url.empty()) + { + LL_WARNS("Region") << "Could not retrieve region " << getRegionID() + << " GET capability \"" << capName << "\"" << LL_ENDL; + return false; + } + + LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(url, gAgent.getAgentPolicy(), cbSuccess, cbFailure); + return true; +} + +bool LLViewerRegion::requestDelCapability(const std::string &capName, httpCallback_t cbSuccess, httpCallback_t cbFailure) +{ + std::string url; + + url = getCapability(capName); + + if (url.empty()) + { + LL_WARNS("Region") << "Could not retrieve region " << getRegionID() << " DEL capability \"" << capName << "\"" << LL_ENDL; + return false; + } + + LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpDel(url, gAgent.getAgentPolicy(), cbSuccess, cbFailure); + return true; +} + +void LLViewerRegion::setInterestListMode(const std::string &new_mode) +{ + if (new_mode != mInterestListMode) + { + mInterestListMode = new_mode; + + if (mInterestListMode != std::string(IL_MODE_DEFAULT) && mInterestListMode != std::string(IL_MODE_360)) + { + LL_WARNS("360Capture") << "Region " << getRegionID() << " setInterestListMode() invalid interest list mode: " + << mInterestListMode << ", setting to default" << LL_ENDL; + mInterestListMode = IL_MODE_DEFAULT; + } + + LLSD body; + body["mode"] = mInterestListMode; + if (requestPostCapability("InterestList", body, + [](const LLSD &response) { + LL_DEBUGS("360Capture") << "InterestList capability responded: \n" + << ll_pretty_print_sd(response) << LL_ENDL; + })) + { + LL_DEBUGS("360Capture") << "Region " << getRegionID() + << " Successfully posted an InterestList capability request with payload: \n" + << ll_pretty_print_sd(body) << LL_ENDL; + } + else + { + LL_WARNS("360Capture") << "Region " << getRegionID() + << " Unable to post an InterestList capability request with payload: \n" + << ll_pretty_print_sd(body) << LL_ENDL; + } + } + else + { + LL_DEBUGS("360Capture") << "Region " << getRegionID() << "No change, skipping Interest List mode POST to " + << new_mode << " mode" << LL_ENDL; + } +} + + +void LLViewerRegion::resetInterestList() +{ + if (requestDelCapability("InterestList", [](const LLSD &response) { + LL_DEBUGS("360Capture") << "InterestList capability DEL responded: \n" << ll_pretty_print_sd(response) << LL_ENDL; + })) + { + LL_DEBUGS("360Capture") << "Region " << getRegionID() << " Successfully reset InterestList capability" << LL_ENDL; + } + else + { + LL_WARNS("360Capture") << "Region " << getRegionID() << " Unable to DEL InterestList capability request" << LL_ENDL; + } +} + + +LLSpatialPartition *LLViewerRegion::getSpatialPartition(U32 type) { if (type < mImpl->mObjectPartition.size() && type < PARTITION_VO_CACHE) { diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 6548e8d372..6956e9eb08 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -32,6 +32,7 @@ #include <string> #include <boost/signals2.hpp> +#include "llcorehttputil.h" #include "llwind.h" #include "v3dmath.h" #include "llstring.h" @@ -278,6 +279,16 @@ public: static bool isSpecialCapabilityName(const std::string &name); void logActiveCapabilities() const; + // Utilities to post and get via + // HTTP using the agent's policy settings and headers. + typedef LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t httpCallback_t; + bool requestPostCapability(const std::string &capName, + LLSD &postData, + httpCallback_t cbSuccess = NULL, + httpCallback_t cbFailure = NULL); + bool requestGetCapability(const std::string &capName, httpCallback_t cbSuccess = NULL, httpCallback_t cbFailure = NULL); + bool requestDelCapability(const std::string &capName, httpCallback_t cbSuccess = NULL, httpCallback_t cbFailure = NULL); + /// implements LLCapabilityProvider /*virtual*/ const LLHost& getHost() const; const U64 &getHandle() const { return mHandle; } @@ -332,9 +343,9 @@ public: typedef enum { - CACHE_MISS_TYPE_FULL = 0, - CACHE_MISS_TYPE_CRC, - CACHE_MISS_TYPE_NONE + CACHE_MISS_TYPE_TOTAL = 0, // total cache miss - object not in cache + CACHE_MISS_TYPE_CRC, // object in cache, but CRC doesn't match + CACHE_MISS_TYPE_NONE // not a miss: cache hit } eCacheMissType; typedef enum @@ -477,7 +488,15 @@ public: }; typedef std::set<LLViewerRegion*, CompareRegionByLastUpdate> region_priority_list_t; -private: + void setInterestListMode(const std::string & new_mode); + const std::string & getInterestListMode() const { return mInterestListMode; } + + void resetInterestList(); + + static const std::string IL_MODE_DEFAULT; + static const std::string IL_MODE_360; + + private: static S32 sNewObjectCreationThrottle; LLViewerRegionImpl * mImpl; LLFrameTimer mRegionTimer; @@ -551,10 +570,10 @@ private: class CacheMissItem { public: - CacheMissItem(U32 id, LLViewerRegion::eCacheMissType miss_type) : mID(id), mType(miss_type){} + CacheMissItem(U32 id, LLViewerRegion::eCacheMissType miss_type) : mID(id), mType(miss_type) {} - U32 mID; //local object id - LLViewerRegion::eCacheMissType mType; //cache miss type + U32 mID; //local object id + LLViewerRegion::eCacheMissType mType; // cache miss type typedef std::list<CacheMissItem> cache_miss_list_t; }; @@ -574,6 +593,9 @@ private: LLFrameTimer mMaterialsCapThrottleTimer; LLFrameTimer mRenderInfoRequestTimer; LLFrameTimer mRenderInfoReportTimer; + + // how the server interest list works + std::string mInterestListMode; }; inline BOOL LLViewerRegion::getRegionProtocol(U64 protocol) const diff --git a/indra/newview/llviewerstatsrecorder.cpp b/indra/newview/llviewerstatsrecorder.cpp index b5ccf4ffa0..6372679a07 100644 --- a/indra/newview/llviewerstatsrecorder.cpp +++ b/indra/newview/llviewerstatsrecorder.cpp @@ -28,24 +28,25 @@ #include "llviewerstatsrecorder.h" +#include "llcontrol.h" #include "llfile.h" #include "llviewerregion.h" #include "llviewerobject.h" +#include "llworld.h" - -// To do - something using region name or global position -#if LL_WINDOWS - static const std::string STATS_FILE_NAME("C:\\ViewerObjectCacheStats.csv"); -#else - static const std::string STATS_FILE_NAME("/tmp/viewerstats.csv"); -#endif +extern LLControlGroup gSavedSettings; LLViewerStatsRecorder* LLViewerStatsRecorder::sInstance = NULL; LLViewerStatsRecorder::LLViewerStatsRecorder() : - mObjectCacheFile(NULL), + mStatsFile(NULL), mTimer(), - mStartTime(0.0), - mLastSnapshotTime(0.0) + mFileOpenTime(0.0), + mLastSnapshotTime(0.0), + mEnableStatsRecording(false), + mEnableStatsLogging(false), + mInterval(0.2), + mMaxDuration(300.f), + mSkipSaveIfZeros(false) { if (NULL != sInstance) { @@ -57,79 +58,70 @@ LLViewerStatsRecorder::LLViewerStatsRecorder() : LLViewerStatsRecorder::~LLViewerStatsRecorder() { - if (mObjectCacheFile != NULL) + if (mStatsFile) { - // last chance snapshot - writeToLog(0.f); - LLFile::close(mObjectCacheFile); - mObjectCacheFile = NULL; + writeToLog(0.f); // Save last data + closeStatsFile(); } } void LLViewerStatsRecorder::clearStats() { mObjectCacheHitCount = 0; - mObjectCacheHitSize = 0; mObjectCacheMissFullCount = 0; - mObjectCacheMissFullSize = 0; mObjectCacheMissCrcCount = 0; - mObjectCacheMissCrcSize = 0; mObjectFullUpdates = 0; - mObjectFullUpdatesSize = 0; mObjectTerseUpdates = 0; - mObjectTerseUpdatesSize = 0; mObjectCacheMissRequests = 0; - mObjectCacheMissResponses = 0; - mObjectCacheMissResponsesSize = 0; mObjectCacheUpdateDupes = 0; mObjectCacheUpdateChanges = 0; mObjectCacheUpdateAdds = 0; mObjectCacheUpdateReplacements = 0; mObjectUpdateFailures = 0; - mObjectUpdateFailuresSize = 0; - mTextureFetchSize = 0; + mTextureFetchCount = 0; + mMeshLoadedCount = 0; + mObjectKills = 0; } -void LLViewerStatsRecorder::recordObjectUpdateFailure(U32 local_id, const EObjectUpdateType update_type, S32 msg_size) +void LLViewerStatsRecorder::enableObjectStatsRecording(bool enable, bool logging /* false */) { - mObjectUpdateFailures++; - mObjectUpdateFailuresSize += msg_size; + mEnableStatsRecording = enable; + + // if logging is stopping, close the file + if (mStatsFile && !logging) + { + writeToLog(0.f); // Save last data + closeStatsFile(); + } + mEnableStatsLogging = logging; } -void LLViewerStatsRecorder::recordCacheMissEvent(U32 local_id, const EObjectUpdateType update_type, U8 cache_miss_type, S32 msg_size) + + +void LLViewerStatsRecorder::recordCacheMissEvent(U8 cache_miss_type) { - if (LLViewerRegion::CACHE_MISS_TYPE_FULL == cache_miss_type) + if (LLViewerRegion::CACHE_MISS_TYPE_TOTAL == cache_miss_type) { mObjectCacheMissFullCount++; - mObjectCacheMissFullSize += msg_size; } else { mObjectCacheMissCrcCount++; - mObjectCacheMissCrcSize += msg_size; } } -void LLViewerStatsRecorder::recordObjectUpdateEvent(U32 local_id, const EObjectUpdateType update_type, LLViewerObject * objectp, S32 msg_size) + +void LLViewerStatsRecorder::recordObjectUpdateEvent(const EObjectUpdateType update_type) { - switch (update_type) + switch (update_type) { case OUT_FULL: - mObjectFullUpdates++; - mObjectFullUpdatesSize += msg_size; + case OUT_FULL_COMPRESSED: + mObjectFullUpdates++; break; case OUT_TERSE_IMPROVED: mObjectTerseUpdates++; - mObjectTerseUpdatesSize += msg_size; - break; - case OUT_FULL_COMPRESSED: - mObjectCacheMissResponses++; - mObjectCacheMissResponsesSize += msg_size; - break; - case OUT_FULL_CACHED: - mObjectCacheHitCount++; - mObjectCacheHitSize += msg_size; break; default: LL_WARNS() << "Unknown update_type" << LL_ENDL; @@ -137,9 +129,9 @@ void LLViewerStatsRecorder::recordObjectUpdateEvent(U32 local_id, const EObjectU }; } -void LLViewerStatsRecorder::recordCacheFullUpdate(U32 local_id, const EObjectUpdateType update_type, LLViewerRegion::eCacheUpdateResult update_result, LLViewerObject* objectp, S32 msg_size) +void LLViewerStatsRecorder::recordCacheFullUpdate(LLViewerRegion::eCacheUpdateResult update_result) { - switch (update_result) + switch (update_result) { case LLViewerRegion::CACHE_UPDATE_DUPE: mObjectCacheUpdateDupes++; @@ -154,124 +146,176 @@ void LLViewerStatsRecorder::recordCacheFullUpdate(U32 local_id, const EObjectUpd mObjectCacheUpdateReplacements++; break; default: - LL_WARNS() << "Unknown update_result type" << LL_ENDL; + LL_WARNS() << "Unknown update_result type " << (S32) update_result << LL_ENDL; break; }; } -void LLViewerStatsRecorder::recordRequestCacheMissesEvent(S32 count) -{ - mObjectCacheMissRequests += count; -} - void LLViewerStatsRecorder::writeToLog( F32 interval ) { + if (!mEnableStatsLogging || !mEnableStatsRecording) + { + return; + } + size_t data_size = 0; - F64 delta_time = LLTimer::getTotalSeconds() - mLastSnapshotTime; - S32 total_objects = mObjectCacheHitCount + mObjectCacheMissCrcCount + mObjectCacheMissFullCount + mObjectFullUpdates + mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheMissResponses + mObjectCacheUpdateDupes + mObjectCacheUpdateChanges + mObjectCacheUpdateAdds + mObjectCacheUpdateReplacements + mObjectUpdateFailures; + F64 delta_time = LLFrameTimer::getTotalSeconds() - mLastSnapshotTime; + if (delta_time < interval) + return; - if ( delta_time < interval || total_objects == 0) return; + if (mSkipSaveIfZeros) + { + S32 total_events = mObjectCacheHitCount + mObjectCacheMissCrcCount + mObjectCacheMissFullCount + mObjectFullUpdates + + mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheUpdateDupes + + mObjectCacheUpdateChanges + mObjectCacheUpdateAdds + mObjectCacheUpdateReplacements + mObjectUpdateFailures; + if (total_events == 0) + { + LL_DEBUGS("ILXZeroData") << "ILX: not saving zero data" << LL_ENDL; + return; + } + } - mLastSnapshotTime = LLTimer::getTotalSeconds(); - LL_DEBUGS() << "ILX: " + mLastSnapshotTime = LLFrameTimer::getTotalSeconds(); + LL_DEBUGS("ILX") << "ILX: " << mObjectCacheHitCount << " hits, " << mObjectCacheMissFullCount << " full misses, " << mObjectCacheMissCrcCount << " crc misses, " << mObjectFullUpdates << " full updates, " << mObjectTerseUpdates << " terse updates, " << mObjectCacheMissRequests << " cache miss requests, " - << mObjectCacheMissResponses << " cache miss responses, " << mObjectCacheUpdateDupes << " cache update dupes, " << mObjectCacheUpdateChanges << " cache update changes, " << mObjectCacheUpdateAdds << " cache update adds, " - << mObjectCacheUpdateReplacements << " cache update replacements, " - << mObjectUpdateFailures << " update failures" + << mObjectCacheUpdateReplacements << " cache update replacements," + << mObjectUpdateFailures << " update failures," + << mTextureFetchCount << " texture fetches, " + << mMeshLoadedCount << " mesh loads, " + << mObjectKills << " object kills" << LL_ENDL; - - if (mObjectCacheFile == NULL) + + if (mStatsFile == NULL) { - mStartTime = LLTimer::getTotalSeconds(); - mObjectCacheFile = LLFile::fopen(STATS_FILE_NAME, "wb"); - if (mObjectCacheFile) - { // Write column headers - std::ostringstream data_msg; - data_msg << "EventTime(ms)\t" - << "Cache Hits\t" - << "Cache Full Misses\t" - << "Cache Crc Misses\t" - << "Full Updates\t" - << "Terse Updates\t" - << "Cache Miss Requests\t" - << "Cache Miss Responses\t" - << "Cache Update Dupes\t" - << "Cache Update Changes\t" - << "Cache Update Adds\t" - << "Cache Update Replacements\t" - << "Update Failures\t" - << "Cache Hits bps\t" - << "Cache Full Misses bps\t" - << "Cache Crc Misses bps\t" - << "Full Updates bps\t" - << "Terse Updates bps\t" - << "Cache Miss Responses bps\t" - << "Texture Fetch bps\t" - << "\n"; - - data_size = data_msg.str().size(); - if (fwrite(data_msg.str().c_str(), 1, data_size, mObjectCacheFile ) != data_size) + // Refresh settings + mInterval = gSavedSettings.getF32("StatsReportFileInterval"); + mSkipSaveIfZeros = gSavedSettings.getBOOL("StatsReportSkipZeroDataSaves"); + mMaxDuration = gSavedSettings.getF32("StatsReportMaxDuration"); + + // Open the data file + makeStatsFileName(); + mStatsFile = LLFile::fopen(mStatsFileName, "wb"); + + if (mStatsFile) + { + LL_INFOS("ILX") << "ILX: Writing update information to " << mStatsFileName << LL_ENDL; + + mFileOpenTime = LLFrameTimer::getTotalSeconds(); + + // Write column headers + std::ostringstream col_headers; + col_headers << "Time (sec)," + << "Regions," + << "Active Cached Objects," + << "Cache Hits," + << "Cache Full Misses," + << "Cache Crc Misses," + << "Full Updates," + << "Terse Updates," + << "Cache Miss Requests," // Normally results in a Full Update from simulator + << "Cache Update Dupes," + << "Cache Update Changes," + << "Cache Update Adds," + << "Cache Update Replacements," + << "Update Failures," + << "Texture Count," + << "Mesh Load Count," + << "Object Kills" + << "\n"; + + data_size = col_headers.str().size(); + if (fwrite(col_headers.str().c_str(), 1, data_size, mStatsFile ) != data_size) { - LL_WARNS() << "failed to write full headers to " << STATS_FILE_NAME << LL_ENDL; + LL_WARNS() << "failed to write full headers to " << mStatsFileName << LL_ENDL; + // Close the file and turn off stats logging + closeStatsFile(); + return; } } else - { - //LL_WARNS() << "Couldn't open " << STATS_FILE_NAME << " for logging." << LL_ENDL; + { // Failed to open file + LL_WARNS() << "Couldn't open " << mStatsFileName << " for logging, turning off stats recording." << LL_ENDL; + mEnableStatsLogging = false; return; } } - std::ostringstream data_msg; - - data_msg << getTimeSinceStart() - << "\t " << mObjectCacheHitCount - << "\t" << mObjectCacheMissFullCount - << "\t" << mObjectCacheMissCrcCount - << "\t" << mObjectFullUpdates - << "\t" << mObjectTerseUpdates - << "\t" << mObjectCacheMissRequests - << "\t" << mObjectCacheMissResponses - << "\t" << mObjectCacheUpdateDupes - << "\t" << mObjectCacheUpdateChanges - << "\t" << mObjectCacheUpdateAdds - << "\t" << mObjectCacheUpdateReplacements - << "\t" << mObjectUpdateFailures - << "\t" << (mObjectCacheHitSize * 8 / delta_time) - << "\t" << (mObjectCacheMissFullSize * 8 / delta_time) - << "\t" << (mObjectCacheMissCrcSize * 8 / delta_time) - << "\t" << (mObjectFullUpdatesSize * 8 / delta_time) - << "\t" << (mObjectTerseUpdatesSize * 8 / delta_time) - << "\t" << (mObjectCacheMissResponsesSize * 8 / delta_time) - << "\t" << (mTextureFetchSize * 8 / delta_time) + std::ostringstream stats_data; + + stats_data << getTimeSinceStart() + << "," << LLWorld::getInstance()->getRegionList().size() + << "," << LLWorld::getInstance()->getNumOfActiveCachedObjects() + << "," << mObjectCacheHitCount + << "," << mObjectCacheMissFullCount + << "," << mObjectCacheMissCrcCount + << "," << mObjectFullUpdates + << "," << mObjectTerseUpdates + << "," << mObjectCacheMissRequests + << "," << mObjectCacheUpdateDupes + << "," << mObjectCacheUpdateChanges + << "," << mObjectCacheUpdateAdds + << "," << mObjectCacheUpdateReplacements + << "," << mObjectUpdateFailures + << "," << mTextureFetchCount + << "," << mMeshLoadedCount + << "," << mObjectKills << "\n"; - data_size = data_msg.str().size(); - if ( data_size != fwrite(data_msg.str().c_str(), 1, data_size, mObjectCacheFile )) + data_size = stats_data.str().size(); + if ( data_size != fwrite(stats_data.str().c_str(), 1, data_size, mStatsFile )) { - LL_WARNS() << "Unable to write complete column data to " << STATS_FILE_NAME << LL_ENDL; - } + LL_WARNS() << "Unable to write complete column data to " << mStatsFileName << LL_ENDL; + closeStatsFile(); + } clearStats(); + + if (getTimeSinceStart() >= mMaxDuration) + { // If file recording has been running for too long, stop it. + closeStatsFile(); + } } -F32 LLViewerStatsRecorder::getTimeSinceStart() +void LLViewerStatsRecorder::closeStatsFile() { - return (F32) (LLTimer::getTotalSeconds() - mStartTime); + if (mStatsFile) + { + LL_INFOS("ILX") << "ILX: Stopped writing update information to " << mStatsFileName << " after " << getTimeSinceStart() + << " seconds." << LL_ENDL; + LLFile::close(mStatsFile); + mStatsFile = NULL; + } + mEnableStatsLogging = false; } -void LLViewerStatsRecorder::recordTextureFetch( S32 msg_size ) +void LLViewerStatsRecorder::makeStatsFileName() { - mTextureFetchSize += msg_size; + // Create filename - tbd: use pid? +#if LL_WINDOWS + std::string stats_file_name("SLViewerStats-"); +#else + std::string stats_file_name("slviewerstats-"); +#endif + + F64 now = LLFrameTimer::getTotalSeconds(); + std::string date_str = LLDate(now).asString(); + std::replace(date_str.begin(), date_str.end(), ':', '-'); // Make it valid for a filename + stats_file_name.append(date_str); + stats_file_name.append(".csv"); + mStatsFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, stats_file_name); } +F32 LLViewerStatsRecorder::getTimeSinceStart() +{ + return (F32) (LLFrameTimer::getTotalSeconds() - mFileOpenTime); +} diff --git a/indra/newview/llviewerstatsrecorder.h b/indra/newview/llviewerstatsrecorder.h index c974bea49d..b9fe02e54d 100644 --- a/indra/newview/llviewerstatsrecorder.h +++ b/indra/newview/llviewerstatsrecorder.h @@ -31,10 +31,6 @@ // This is a diagnostic class used to record information from the viewer // for analysis. -// This is normally 0. Set to 1 to enable viewer stats recording -#define LL_RECORD_VIEWER_STATS 0 - - #include "llframetimer.h" #include "llviewerobject.h" #include "llviewerregion.h" @@ -49,97 +45,132 @@ class LLViewerStatsRecorder : public LLSingleton<LLViewerStatsRecorder> ~LLViewerStatsRecorder(); public: - void objectUpdateFailure(U32 local_id, const EObjectUpdateType update_type, S32 msg_size) - { -#if LL_RECORD_VIEWER_STATS - recordObjectUpdateFailure(local_id, update_type, msg_size); -#endif + // Enable/disable stats recording. This is broken down into two + // flags so we can record stats without writing them to the log + // file. This is useful to analyzing updates for scene loading. + void enableObjectStatsRecording(bool enable, bool logging = false); + + bool isEnabled() const { return mEnableStatsRecording; } + bool isLogging() const { return mEnableStatsLogging; } + + void objectUpdateFailure() + { + if (mEnableStatsRecording) + { + mObjectUpdateFailures++; + } } - void cacheMissEvent(U32 local_id, const EObjectUpdateType update_type, U8 cache_miss_type, S32 msg_size) + void cacheMissEvent(U8 cache_miss_type) { -#if LL_RECORD_VIEWER_STATS - recordCacheMissEvent(local_id, update_type, cache_miss_type, msg_size); -#endif + if (mEnableStatsRecording) + { + recordCacheMissEvent(cache_miss_type); + } + } + + void cacheHitEvent() + { + if (mEnableStatsRecording) + { + mObjectCacheHitCount++; + } + } + + void objectUpdateEvent(const EObjectUpdateType update_type) + { + if (mEnableStatsRecording) + { + recordObjectUpdateEvent(update_type); + } } - void objectUpdateEvent(U32 local_id, const EObjectUpdateType update_type, LLViewerObject * objectp, S32 msg_size) - { -#if LL_RECORD_VIEWER_STATS - recordObjectUpdateEvent(local_id, update_type, objectp, msg_size); -#endif + void cacheFullUpdate(LLViewerRegion::eCacheUpdateResult update_result) + { + if (mEnableStatsRecording) + { + recordCacheFullUpdate(update_result); + } } - void cacheFullUpdate(U32 local_id, const EObjectUpdateType update_type, LLViewerRegion::eCacheUpdateResult update_result, LLViewerObject* objectp, S32 msg_size) + void requestCacheMissesEvent(S32 count) { -#if LL_RECORD_VIEWER_STATS - recordCacheFullUpdate(local_id, update_type, update_result, objectp, msg_size); -#endif + if (mEnableStatsRecording) + { + mObjectCacheMissRequests += count; + } } - void requestCacheMissesEvent(S32 count) + void textureFetch() { -#if LL_RECORD_VIEWER_STATS - recordRequestCacheMissesEvent(count); -#endif + if (mEnableStatsRecording) + { + mTextureFetchCount += 1; + } } - void textureFetch(S32 msg_size) + void meshLoaded() { -#if LL_RECORD_VIEWER_STATS - recordTextureFetch(msg_size); -#endif + if (mEnableStatsRecording) + { + mMeshLoadedCount += 1; + } } - void log(F32 interval) + void recordObjectKills(S32 num_objects) + { + if (mEnableStatsRecording) + { + mObjectKills += num_objects; + } + } + + void idle() { -#if LL_RECORD_VIEWER_STATS - writeToLog(interval); -#endif + writeToLog(mInterval); } F32 getTimeSinceStart(); private: - void recordObjectUpdateFailure(U32 local_id, const EObjectUpdateType update_type, S32 msg_size); - void recordCacheMissEvent(U32 local_id, const EObjectUpdateType update_type, U8 cache_miss_type, S32 msg_size); - void recordObjectUpdateEvent(U32 local_id, const EObjectUpdateType update_type, LLViewerObject * objectp, S32 msg_size); - void recordCacheFullUpdate(U32 local_id, const EObjectUpdateType update_type, LLViewerRegion::eCacheUpdateResult update_result, LLViewerObject* objectp, S32 msg_size); - void recordRequestCacheMissesEvent(S32 count); - void recordTextureFetch(S32 msg_size); + void recordCacheMissEvent(U8 cache_miss_type); + void recordObjectUpdateEvent(const EObjectUpdateType update_type); + void recordCacheFullUpdate(LLViewerRegion::eCacheUpdateResult update_result); void writeToLog(F32 interval); + void closeStatsFile(); + void makeStatsFileName(); static LLViewerStatsRecorder* sInstance; - LLFILE * mObjectCacheFile; // File to write data into + LLFILE * mStatsFile; // File to write data into + std::string mStatsFileName; + LLFrameTimer mTimer; - F64 mStartTime; + F64 mFileOpenTime; F64 mLastSnapshotTime; + F32 mInterval; // Interval between data log writes + F32 mMaxDuration; // Time limit on file + + bool mEnableStatsRecording; // Set to true to enable recording stats data + bool mEnableStatsLogging; // Set true to write stats to log file + bool mSkipSaveIfZeros; // Set true to skip saving stats if all values are zero S32 mObjectCacheHitCount; - S32 mObjectCacheHitSize; S32 mObjectCacheMissFullCount; - S32 mObjectCacheMissFullSize; S32 mObjectCacheMissCrcCount; - S32 mObjectCacheMissCrcSize; S32 mObjectFullUpdates; - S32 mObjectFullUpdatesSize; S32 mObjectTerseUpdates; - S32 mObjectTerseUpdatesSize; S32 mObjectCacheMissRequests; - S32 mObjectCacheMissResponses; - S32 mObjectCacheMissResponsesSize; S32 mObjectCacheUpdateDupes; S32 mObjectCacheUpdateChanges; S32 mObjectCacheUpdateAdds; S32 mObjectCacheUpdateReplacements; S32 mObjectUpdateFailures; - S32 mObjectUpdateFailuresSize; - S32 mTextureFetchSize; - + S32 mTextureFetchCount; + S32 mMeshLoadedCount; + S32 mObjectKills; void clearStats(); }; #endif // LLVIEWERSTATSRECORDER_H - diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 7abb42dd8a..d2701f0aff 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -1194,7 +1194,11 @@ void LLViewerTextEditor::openEmbeddedLandmark( LLPointer<LLInventoryItem> item_p void LLViewerTextEditor::openEmbeddedCallingcard( LLInventoryItem* item, llwchar wc ) { - if(item && !item->getCreatorUUID().isNull()) + if (item && !item->getDescription().empty()) + { + LLAvatarActions::showProfile(LLUUID(item->getDescription())); + } + else if (item && !item->getCreatorUUID().isNull()) { LLAvatarActions::showProfile(item->getCreatorUUID()); } diff --git a/indra/newview/llviewerwearable.h b/indra/newview/llviewerwearable.h index cc99f6af2f..24b1323b2b 100644 --- a/indra/newview/llviewerwearable.h +++ b/indra/newview/llviewerwearable.h @@ -93,7 +93,6 @@ public: // the wearable was worn. make sure the name of the wearable object matches the LLViewerInventoryItem, // not the wearable asset itself. void refreshName(); - /*virtual*/void addToBakedTextureHash(LLMD5& hash) const {} protected: LLAssetID mAssetID; diff --git a/indra/newview/llvoicecallhandler.cpp b/indra/newview/llvoicecallhandler.cpp index 1e993d1384..95e11abd82 100644 --- a/indra/newview/llvoicecallhandler.cpp +++ b/indra/newview/llvoicecallhandler.cpp @@ -38,7 +38,7 @@ public: { } - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableVoiceCall")) { diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 150b556284..68d9f4ffab 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -53,7 +53,7 @@ public: // requests will be throttled from a non-trusted browser LLVoiceHandler() : LLCommandHandler("voice", UNTRUSTED_THROTTLE) {} - bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) + bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web) { if (params[0].asString() == "effects") { diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp index b0af565867..5cb7e7478b 100644 --- a/indra/newview/llvosurfacepatch.cpp +++ b/indra/newview/llvosurfacepatch.cpp @@ -408,7 +408,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, LLStrider<U16> &indicesp, U32 &index_offset) { - S32 vertex_count = 0; S32 i, x, y; S32 num_vertices; @@ -443,7 +442,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, normalsp++; texCoords0p++; texCoords1p++; - vertex_count++; } // North patch @@ -456,7 +454,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, normalsp++; texCoords0p++; texCoords1p++; - vertex_count++; } @@ -493,7 +490,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, normalsp++; texCoords0p++; texCoords1p++; - vertex_count++; } // Iterate through the north patch's points @@ -507,7 +503,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, normalsp++; texCoords0p++; texCoords1p++; - vertex_count++; } @@ -551,7 +546,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, normalsp++; texCoords0p++; texCoords1p++; - vertex_count++; } // Iterate through the north patch's points @@ -565,7 +559,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, normalsp++; texCoords0p++; texCoords1p++; - vertex_count++; } for (i = 0; i < length; i++) diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index bf9a4dfa12..4ddba872f1 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -5110,6 +5110,28 @@ LLControlAVBridge::LLControlAVBridge(LLDrawable* drawablep, LLViewerRegion* regi mPartitionType = LLViewerRegion::PARTITION_CONTROL_AV; } +void LLControlAVBridge::updateSpatialExtents() +{ + LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWABLE + + LLControlAvatar* controlAvatar = getVObj()->getControlAvatar(); + + LLSpatialGroup* root = (LLSpatialGroup*)mOctree->getListener(0); + + bool rootWasDirty = root->isDirty(); + + super::updateSpatialExtents(); // root becomes non-dirty here + + // SL-18251 "On-screen animesh characters using pelvis offset animations + // disappear when root goes off-screen" + // + // Expand extents to include Control Avatar placed outside of the bounds + if (controlAvatar && (rootWasDirty || controlAvatar->mPlaying)) + { + root->expandExtents(controlAvatar->mDrawable->getSpatialExtents(), *mDrawable->getXform()); + } +} + bool can_batch_texture(LLFace* facep) { if (facep->getTextureEntry()->getBumpmap()) @@ -6306,7 +6328,6 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace LLSpatialGroup::buffer_map_t buffer_map; LLViewerTexture* last_tex = NULL; - S32 buffer_index = 0; S32 texture_index_channels = 1; @@ -6319,11 +6340,6 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace { texture_index_channels = gDeferredAlphaProgram.mFeatures.mIndexedTextureChannels; } - - if (distance_sort) - { - buffer_index = -1; - } static LLCachedControl<U32> max_texture_index(gSavedSettings, "RenderMaxTextureIndex", 16); texture_index_channels = llmin(texture_index_channels, (S32) max_texture_index); @@ -6347,14 +6363,9 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace tex = NULL; } - if (last_tex == tex) - { - buffer_index++; - } - else + if (last_tex != tex) { last_tex = tex; - buffer_index = 0; } bool bake_sunlight = LLPipeline::sBakeSunlight && facep->getDrawable()->isStatic(); diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index 89b74ae962..8681f7c14e 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -104,8 +104,6 @@ BOOL LLPanelWearableOutfitItem::postBuild() { LLPanelWearableListItem::postBuild(); - LLViewerInventoryItem* inv_item = getItem(); - mShowWidgets &= (inv_item->getType() != LLAssetType::AT_BODYPART); if(mShowWidgets) { addWidgetToRightSide("add_wearable"); @@ -208,7 +206,12 @@ void LLPanelWearableOutfitItem::updateItem(const std::string& name, if(mShowWidgets) { setShowWidget("add_wearable", !is_worn); - setShowWidget("remove_wearable", is_worn); + + // Body parts can't be removed, only replaced + LLViewerInventoryItem* inv_item = getItem(); + bool show_remove = is_worn && inv_item && (inv_item->getType() != LLAssetType::AT_BODYPART); + setShowWidget("remove_wearable", show_remove); + if(mHovered) { setWidgetsVisible(true); diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 8f46e66551..6dd58518c5 100755 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -50,6 +50,7 @@ #include "lltextureview.h" #include "lltracker.h" #include "llviewercamera.h" +#include "llviewernetwork.h" #include "llviewertexture.h" #include "llviewertexturelist.h" #include "llviewerregion.h" @@ -1829,7 +1830,7 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask ) // Invoke the event details floater if someone is clicking on an event. LLSD params(LLSD::emptyArray()); params.append(event_id); - LLCommandDispatcher::dispatch("event", params, LLSD(), NULL, LLCommandHandler::NAV_TYPE_CLICKED, true); + LLCommandDispatcher::dispatch("event", params, LLSD(), LLGridManager::getInstance()->getGrid(), NULL, LLCommandHandler::NAV_TYPE_CLICKED, true); break; } case MAP_ITEM_LAND_FOR_SALE: diff --git a/indra/newview/skins/default/xui/da/floater_animation_preview.xml b/indra/newview/skins/default/xui/da/floater_animation_preview.xml deleted file mode 100644 index adf96841c0..0000000000 --- a/indra/newview/skins/default/xui/da/floater_animation_preview.xml +++ /dev/null @@ -1,187 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Animation Preview" title=""> - <floater.string name="failed_to_initialize"> - Fejlede at starte bevægelse - </floater.string> - <floater.string name="anim_too_long"> - Animations filen er [LENGTH] sekunder lang. - -Maksimal animations længde er [MAX_LENGTH] sekunder. - </floater.string> - <floater.string name="failed_file_read"> - Kan ikke læse animations fil. - -[STATUS] - </floater.string> - <floater.string name="E_ST_OK"> - OK - </floater.string> - <floater.string name="E_ST_EOF"> - Fil afsluttet for tidligt. - </floater.string> - <floater.string name="E_ST_NO_CONSTRAINT"> - Kan ikke læse "constraint definition". - </floater.string> - <floater.string name="E_ST_NO_FILE"> - Kan ikke åbne BVH fil. - </floater.string> - <floater.string name="E_ST_NO_HIER"> - Ugyldig header i HIERARCHY. - </floater.string> - <floater.string name="E_ST_NO_JOINT"> - Kan ikke finde "ROOT" eller "JOINT". - </floater.string> - <floater.string name="E_ST_NO_NAME"> - Kan ikke finde JOINT navn. - </floater.string> - <floater.string name="E_ST_NO_OFFSET"> - Kan ikke finde OFFSET. - </floater.string> - <floater.string name="E_ST_NO_CHANNELS"> - Kan ikke finde CHANNELS. - </floater.string> - <floater.string name="E_ST_NO_ROTATION"> - Kan ikke læse "rotation order". - </floater.string> - <floater.string name="E_ST_NO_AXIS"> - Kan ikke finde rotationsakser. - </floater.string> - <floater.string name="E_ST_NO_MOTION"> - Kan ikke finde MOTION. - </floater.string> - <floater.string name="E_ST_NO_FRAMES"> - Kan ikke læse antal "frames". - </floater.string> - <floater.string name="E_ST_NO_FRAME_TIME"> - Kan ikke læse "frame time". - </floater.string> - <floater.string name="E_ST_NO_POS"> - Kan ikke læse positionsværdier. - </floater.string> - <floater.string name="E_ST_NO_ROT"> - Kan ikke læse rotationsværdier. - </floater.string> - <floater.string name="E_ST_NO_XLT_FILE"> - kan ikke åbne "translation file". - </floater.string> - <floater.string name="E_ST_NO_XLT_HEADER"> - Kan ikke læse "translation header. - </floater.string> - <floater.string name="E_ST_NO_XLT_NAME"> - Kan ikke aflæse "translation" navne. - </floater.string> - <floater.string name="E_ST_NO_XLT_IGNORE"> - Kan ikke læse "translation ignore" værdi. - </floater.string> - <floater.string name="E_ST_NO_XLT_RELATIVE"> - Kan ikke læse "translation relative" værdi. - </floater.string> - <floater.string name="E_ST_NO_XLT_OUTNAME"> - Kan ikke læse "translation outname" værdi. - </floater.string> - <floater.string name="E_ST_NO_XLT_MATRIX"> - Kan ikke læse "translation matrix". - </floater.string> - <floater.string name="E_ST_NO_XLT_MERGECHILD"> - Kan ikke læse "mergechild" navn. - </floater.string> - <floater.string name="E_ST_NO_XLT_MERGEPARENT"> - Kan ikke læse "mergeparent" navn. - </floater.string> - <floater.string name="E_ST_NO_XLT_PRIORITY"> - Kan ikke finde prioritetsværdi. - </floater.string> - <floater.string name="E_ST_NO_XLT_LOOP"> - Kan ikke læse "loop" værdi. - </floater.string> - <floater.string name="E_ST_NO_XLT_EASEIN"> - kan ikke læse "easeIn" værdier. - </floater.string> - <floater.string name="E_ST_NO_XLT_EASEOUT"> - Kan ikke læse "easeOut" værdier. - </floater.string> - <floater.string name="E_ST_NO_XLT_HAND"> - Kan ikke læse "hand morph" værdi. - </floater.string> - <floater.string name="E_ST_NO_XLT_EMOTE"> - kan ikke læse "emote" navn. - </floater.string> - <floater.string name="E_ST_BAD_ROOT"> - Incorrect root joint name, use "hip". - </floater.string> - <text name="name_label"> - Navn: - </text> - <text name="description_label"> - Beskrivelse: - </text> - <spinner label="Prioritet" name="priority" tool_tip="Vælg hvilke andre animationer der "overstyres" af denne"/> - <check_box label="Gentag" name="loop_check" tool_tip="Gentager animationen konstant"/> - <spinner label="Ind(%)" label_width="40" left="76" name="loop_in_point" tool_tip="Sætter punktet hvor gentagelsen genstarter fra" width="105"/> - <spinner label="Ud (%)" name="loop_out_point" tool_tip="Sætter punktet i animationen der afslutter gentagelsen"/> - <text name="hand_label"> - Hånd posering - </text> - <combo_box label="" name="hand_pose_combo" tool_tip="Kontrollerer hvad hænderne går i løbet af animationen" width="140"> - <combo_box.item label="Spredt" name="Spread"/> - <combo_box.item label="Afslappet" name="Relaxed"/> - <combo_box.item label="Peg begge" name="PointBoth"/> - <combo_box.item label="Knytnæver" name="Fist"/> - <combo_box.item label="Afslappet venstre" name="RelaxedLeft"/> - <combo_box.item label="Peg venstre" name="PointLeft"/> - <combo_box.item label="Knytnæve venstre" name="FistLeft"/> - <combo_box.item label="Afslappet højre" name="RelaxedRight"/> - <combo_box.item label="peg højre" name="PointRight"/> - <combo_box.item label="knytnæve højre" name="FistRight"/> - <combo_box.item label="Honnør højre" name="SaluteRight"/> - <combo_box.item label="Skrivende" name="Typing"/> - <combo_box.item label="Fredstegn højre" name="PeaceRight"/> - </combo_box> - <text name="emote_label"> - Ansigtsudtryk - </text> - <combo_box label="" name="emote_combo" tool_tip="Angiver hvad ansigtet gør under animationen" width="140"> - <item label="(Intet)" name="[None]" value=""/> - <item label="Aaaaah" name="Aaaaah" value="Aaaaah"/> - <item label="Bange" name="Afraid" value="Bange"/> - <item label="Vred" name="Angry" value="Vred"/> - <item label="Stort smil" name="BigSmile" value="Stort smil"/> - <item label="Keder sig" name="Bored" value="Keder sig"/> - <item label="Græder" name="Cry" value="Grædende"/> - <item label="Forarget" name="Disdain" value="Foragt"/> - <item label="Flov" name="Embarrassed" value="Embarrassed"/> - <item label="Skuler" name="Frown" value="Alvorlig"/> - <item label="Kysser" name="Kiss" value="Kys"/> - <item label="Griner" name="Laugh" value="Leende"/> - <item label="Plllppt" name="Plllppt" value="Plllppt"/> - <item label="Frastødt" name="Repulsed" value="Frastødt"/> - <item label="Ked af det" name="Sad" value="Ked af det"/> - <item label="Skuldertræk" name="Shrug" value="Skuldertræk"/> - <item label="Smil" name="Smile" value="Smilende"/> - <item label="Overrasket" name="Surprise" value="Overrasket"/> - <item label="Blinker" name="Wink" value="Blink"/> - <item label="Bekymret" name="Worry" value="Bekymret"/> - </combo_box> - <text name="preview_label"> - Vis mens - </text> - <combo_box label="" name="preview_base_anim" tool_tip="Se hvordan animation ser ud i forskellige typiske avatar-situationer." width="140"> - <item label="Stående" name="Standing" value="Stående"/> - <item label="Gående" name="Walking" value="Gående"/> - <item label="Sidder" name="Sitting" value="Siddende"/> - <item label="Flyver" name="Flying" value="Flyvende"/> - </combo_box> - <spinner label="start (sec)" name="ease_in_time" tool_tip="Tid (i sekunder) animationen bruger på at komme i gang."/> - <spinner label="Afslut (sec)" name="ease_out_time" tool_tip="Tid (i sekunder) animationen bruger på at afslutte"/> - <button label="" name="play_btn" tool_tip="Start din animation"/> - <button name="pause_btn" tool_tip="Pause din animation"/> - <button label="" name="stop_btn" tool_tip="Stop afspilning af animation"/> - <slider label="" name="playback_slider"/> - <text name="bad_animation_text"> - Kan ikke læse animations fil. - -Vi anbefaler BVH filer der er exporteret fra Poser 4. - </text> - <button label="Hent (L$[AMOUNT])" name="ok_btn"/> - <button label="Annullér" name="cancel_btn"/> -</floater> diff --git a/indra/newview/skins/default/xui/da/floater_inventory.xml b/indra/newview/skins/default/xui/da/floater_inventory.xml deleted file mode 100644 index 3a4b0fbd6b..0000000000 --- a/indra/newview/skins/default/xui/da/floater_inventory.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Inventory" title="MIN BEHOLDNING"> - <floater.string name="Title"> - MIN BEHOLDNING - </floater.string> - <floater.string name="TitleFetching"> - MIN BEHOLDNING (Henter [ITEM_COUNT] genstande...) [FILTER] - </floater.string> - <floater.string name="TitleCompleted"> - MIN BEHOLDNING ([ITEM_COUNT] genstande) [FILTER] - </floater.string> - <floater.string name="Fetched"> - Hentet - </floater.string> - <panel label="Beholdningspanel" name="Inventory Panel"/> -</floater> diff --git a/indra/newview/skins/default/xui/da/floater_nearby_chat.xml b/indra/newview/skins/default/xui/da/floater_nearby_chat.xml deleted file mode 100644 index 76bc40edac..0000000000 --- a/indra/newview/skins/default/xui/da/floater_nearby_chat.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="nearby_chat" title="CHAT NÆRVED"> - <check_box label="Oversæt chat" name="translate_chat_checkbox"/> -</floater> diff --git a/indra/newview/skins/default/xui/da/floater_perm_prefs.xml b/indra/newview/skins/default/xui/da/floater_perm_prefs.xml deleted file mode 100644 index eecddbcdb0..0000000000 --- a/indra/newview/skins/default/xui/da/floater_perm_prefs.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="STANDARD RETTIGHEDER"> - <panel label="Tilladelser" name="permissions"> - <button label="?" label_selected="?" name="help"/> - <check_box label="Del med gruppe" name="share_with_group"/> - <check_box label="Tillad enhver at kopiere" name="everyone_copy"/> - <text name="NextOwnerLabel"> - Næste ejer kan: - </text> - <check_box label="Redigere" name="next_owner_modify"/> - <check_box label="Kopiére" name="next_owner_copy"/> - <check_box label="Sælge/Give væk" name="next_owner_transfer"/> - </panel> - <button label="OK" label_selected="OK" name="ok"/> - <button label="Annullér" label_selected="Annullér" name="cancel"/> -</floater> diff --git a/indra/newview/skins/default/xui/da/floater_postcard.xml b/indra/newview/skins/default/xui/da/floater_postcard.xml deleted file mode 100644 index 44b0fd4faa..0000000000 --- a/indra/newview/skins/default/xui/da/floater_postcard.xml +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Postcard" title="EMAIL FOTO"> - <text name="to_label"> - Send til: - </text> - <text name="from_label"> - Din e-mail: - </text> - <text name="name_label"> - Dit navn: - </text> - <text name="subject_label"> - Emne: - </text> - <line_editor label="Skriv dit emne her." name="subject_form"/> - <text name="msg_label"> - Besked: - </text> - <text_editor name="msg_form"> - Skriv din besked her. - </text_editor> - <text name="fine_print"> - Hvis din modtager opretter en konto i SL, vil du få en henvisnings bonus. - </text> - <button label="Annullér" name="cancel_btn"/> - <button label="Send" name="send_btn"/> - <string name="default_subject"> - Postkort fra [SECOND_LIFE]. - </string> - <string name="default_message"> - Tjek det her ud! - </string> - <string name="upload_message"> - Sender... - </string> -</floater> diff --git a/indra/newview/skins/default/xui/da/floater_voice_controls.xml b/indra/newview/skins/default/xui/da/floater_voice_controls.xml deleted file mode 100644 index 69de696bf5..0000000000 --- a/indra/newview/skins/default/xui/da/floater_voice_controls.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="Stemme opsætning"> - <string name="title_nearby"> - STEMMER NÆR - </string> - <string name="title_group"> - Gruppe opkald med [GROUP] - </string> - <string name="title_adhoc"> - Konference kald - </string> - <string name="title_peer_2_peer"> - Opkald med [NAME] - </string> - <string name="no_one_near"> - Ingen i nærheden har aktiveret stemmer - </string> - <layout_stack name="my_call_stack"> - <layout_panel name="my_panel"> - <text name="user_text" value="Min avatar:"/> - </layout_panel> - <layout_panel name="leave_call_panel"> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Forlad samtale" name="leave_call_btn"/> - </layout_panel> - </layout_stack> - </layout_panel> - </layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/da/menu_bottomtray.xml b/indra/newview/skins/default/xui/da/menu_bottomtray.xml deleted file mode 100644 index a0d74db36d..0000000000 --- a/indra/newview/skins/default/xui/da/menu_bottomtray.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="hide_camera_move_controls_menu"> - <menu_item_check label="Tal knap" name="EnableVoiceChat"/> - <menu_item_check label="Faste bevægelser" name="ShowGestureButton"/> - <menu_item_check label="Bevægelse knap" name="ShowMoveButton"/> - <menu_item_check label="Vis knap" name="ShowCameraButton"/> - <menu_item_check label="Foto knap" name="ShowSnapshotButton"/> - <menu_item_check label="Bygge knap" name="ShowBuildButton"/> - <menu_item_check label="Søge knap" name="ShowSearchButton"/> - <menu_item_check label="Kort knap" name="ShowWorldMapButton"/> - <menu_item_check label="Mini-Map button" name="ShowMiniMapButton"/> - <menu_item_call label="Klip" name="NearbyChatBar_Cut"/> - <menu_item_call label="Kopiér" name="NearbyChatBar_Copy"/> - <menu_item_call label="Sæt ind" name="NearbyChatBar_Paste"/> - <menu_item_call label="Slet" name="NearbyChatBar_Delete"/> - <menu_item_call label="Vælg alt" name="NearbyChatBar_Select_All"/> -</menu> diff --git a/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml deleted file mode 100644 index 8da35adb1b..0000000000 --- a/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="Profil" name="view_profile"/> - <menu_item_call label="Tilføj ven" name="add_friend"/> - <menu_item_call label="Besked" name="im"/> - <menu_item_call label="Opkald" name="call"/> - <menu_item_call label="Teleportér" name="teleport"/> - <menu_item_call label="Invitér til gruppe" name="invite_to_group"/> - <menu_item_call label="Blokér" name="block"/> - <menu_item_call label="Fjern blokering" name="unblock"/> - <menu_item_call label="Rapportér" name="report"/> - <menu_item_call label="Frys" name="freeze"/> - <menu_item_call label="Smid ud" name="eject"/> - <menu_item_call label="Spark" name="kick"/> - <menu_item_call label="CSR" name="csr"/> - <menu_item_call label="Debug teksturer" name="debug"/> - <menu_item_call label="Find på kort" name="find_on_map"/> - <menu_item_call label="Zoom ind" name="zoom_in"/> - <menu_item_call label="Betal" name="pay"/> - <menu_item_call label="Del" name="share"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml deleted file mode 100644 index 887c6484bc..0000000000 --- a/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="Sid ned" name="Sit Down Here"/> - <menu_item_call label="Stå op" name="Stand Up"/> - <context_menu label="Tag af" name="Take Off >"> - <context_menu label="Tøj" name="Clothes >"> - <menu_item_call label="Trøje" name="Shirt"/> - <menu_item_call label="Bukser" name="Pants"/> - <menu_item_call label="Nederdel" name="Skirt"/> - <menu_item_call label="Sko" name="Shoes"/> - <menu_item_call label="Strømper" name="Socks"/> - <menu_item_call label="Jakke" name="Jacket"/> - <menu_item_call label="Handsker" name="Gloves"/> - <menu_item_call label="Undertrøje" name="Self Undershirt"/> - <menu_item_call label="Underbukser" name="Self Underpants"/> - <menu_item_call label="Tatovering" name="Self Tattoo"/> - <menu_item_call label="Alpha" name="Self Alpha"/> - <menu_item_call label="Alt tøj" name="All Clothes"/> - </context_menu> - <context_menu label="HUD" name="Object Detach HUD"/> - <context_menu label="Tag af" name="Object Detach"/> - <menu_item_call label="Tag alt af" name="Detach All"/> - </context_menu> - <menu_item_call label="Skift sæt" name="Chenge Outfit"/> - <menu_item_call label="Redigér sæt" name="Edit Outfit"/> - <menu_item_call label="Redigér min figur" name="Edit My Shape"/> - <menu_item_call label="Mine venner" name="Friends..."/> - <menu_item_call label="Mine grupper" name="Groups..."/> - <menu_item_call label="Min profil" name="Profile..."/> - <menu_item_call label="Debug teksturer" name="Debug..."/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml deleted file mode 100644 index 32c5e6a6c7..0000000000 --- a/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Sortér efter navn" name="sort_name"/> - <menu_item_check label="Sortér efter status" name="sort_status"/> - <menu_item_check label="Vis person ikoner" name="view_icons"/> - <menu_item_check label="Vis tildelte rettigheder" name="view_permissions"/> - <menu_item_call label="Vis blokerede beboere og objekter" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/da/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_groups_view_sort.xml deleted file mode 100644 index 0b9a791530..0000000000 --- a/indra/newview/skins/default/xui/da/menu_people_groups_view_sort.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Vis gruppe ikoner" name="Display Group Icons"/> - <menu_item_call label="Forlad valgte gruppe" name="Leave Selected Group"/> -</menu> diff --git a/indra/newview/skins/default/xui/da/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_nearby_view_sort.xml deleted file mode 100644 index 2f35ff3c92..0000000000 --- a/indra/newview/skins/default/xui/da/menu_people_nearby_view_sort.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Sortér efter tidligere talere" name="sort_by_recent_speakers"/> - <menu_item_check label="Sortér efter navn" name="sort_name"/> - <menu_item_check label="Sortér efter afstand" name="sort_distance"/> - <menu_item_check label="Se ikoner for personer" name="view_icons"/> - <menu_item_call label="Vis blokerede beboere og objekter" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/da/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_recent_view_sort.xml deleted file mode 100644 index d081f637f2..0000000000 --- a/indra/newview/skins/default/xui/da/menu_people_recent_view_sort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Sortér efter nyeste" name="sort_most"/> - <menu_item_check label="Sortér efter navn" name="sort_name"/> - <menu_item_check label="Vis person ikoner" name="view_icons"/> - <menu_item_call label="Vis blokerede beboere og objekter" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml deleted file mode 100644 index 1953fad31f..0000000000 --- a/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="call_btn_panel"> - <button label="Opkald" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Forlad opkald" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Stemmekontroller" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/da/panel_bottomtray.xml b/indra/newview/skins/default/xui/da/panel_bottomtray.xml deleted file mode 100644 index 3cd9d55dd0..0000000000 --- a/indra/newview/skins/default/xui/da/panel_bottomtray.xml +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="bottom_tray"> - <string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/> - <string name="SpeakBtnToolTip" value="Slå mikrofon til/fra"/> - <string name="VoiceControlBtnToolTip" value="Vis/skjul stemme kontrolpanel"/> - <layout_stack name="toolbar_stack"> - <layout_panel name="speak_panel"> - <talk_button name="talk"> - <speak_button label="Tal" label_selected="Tal" name="speak_btn"/> - </talk_button> - </layout_panel> - <layout_panel name="gesture_panel"> - <gesture_combo_list label="Bevægelse" name="Gesture" tool_tip="Skjuler/viser bevægelser"/> - </layout_panel> - <layout_panel name="movement_panel"> - <bottomtray_button label="Flyt" name="movement_btn" tool_tip="Vis/skjul bevægelseskontroller"/> - </layout_panel> - <layout_panel name="cam_panel"> - <bottomtray_button label="Vis" name="camera_btn" tool_tip="Vis/Skjul kamerakontroller"/> - </layout_panel> - <layout_panel name="snapshot_panel"> - <bottomtray_button label="" name="snapshots" tool_tip="Tag foto"/> - </layout_panel> - <layout_panel name="build_btn_panel"> - <bottomtray_button label="Byg" name="build_btn" tool_tip="Vis/skjul byggeværktøjer"/> - </layout_panel> - <layout_panel name="search_btn_panel"> - <bottomtray_button label="Søg" name="search_btn" tool_tip="Vis/skjul søgning"/> - </layout_panel> - <layout_panel name="world_map_btn_panel"> - <bottomtray_button label="Kort" name="world_map_btn" tool_tip="Vis/skjul verdenskort"/> - </layout_panel> - <layout_panel name="mini_map_btn_panel"> - <bottomtray_button label="Mini-kort" name="mini_map_btn" tool_tip="Vis/skjul Mini-kort"/> - </layout_panel> - <layout_panel name="im_well_panel"> - <chiclet_im_well name="im_well"> - <button name="Unread IM messages" tool_tip="Konversationer"/> - </chiclet_im_well> - </layout_panel> - <layout_panel name="notification_well_panel"> - <chiclet_notification name="notification_well"> - <button name="Unread" tool_tip="Notifikationer"/> - </chiclet_notification> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/da/panel_group_control_panel.xml b/indra/newview/skins/default/xui/da/panel_group_control_panel.xml deleted file mode 100644 index 26fe4f6ebe..0000000000 --- a/indra/newview/skins/default/xui/da/panel_group_control_panel.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="group_info_btn_panel"> - <button label="Gruppe profil" name="group_info_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Opkald gruppe" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Forlad opkald" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Åben stemmekontroller" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/da/panel_im_control_panel.xml b/indra/newview/skins/default/xui/da/panel_im_control_panel.xml deleted file mode 100644 index 5cecb93d40..0000000000 --- a/indra/newview/skins/default/xui/da/panel_im_control_panel.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="button_stack"> - <layout_panel name="view_profile_btn_panel"> - <button label="Profil" name="view_profile_btn"/> - </layout_panel> - <layout_panel name="add_friend_btn_panel"> - <button label="Tilføj ven" name="add_friend_btn"/> - </layout_panel> - <layout_panel name="teleport_btn_panel"> - <button label="Teleport" name="teleport_btn" tool_tip="Tilbyd teleport til denne person"/> - </layout_panel> - <layout_panel name="share_btn_panel"> - <button label="Del" name="share_btn"/> - </layout_panel> - <layout_panel name="pay_btn_panel"> - <button label="Betal" name="pay_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Opkald" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Afslut kald" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Stemme kontroller" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/da/panel_region_texture.xml b/indra/newview/skins/default/xui/da/panel_region_texture.xml deleted file mode 100644 index c8a3ad328e..0000000000 --- a/indra/newview/skins/default/xui/da/panel_region_texture.xml +++ /dev/null @@ -1,57 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Terræn textures" name="Textures"> - <text name="region_text_lbl"> - Region: - </text> - <text name="region_text"> - ukendt - </text> - <text name="detail_texture_text"> - Terræn teksturer (kræver 1024x1024, 24 bit .tga filer) - </text> - <text name="height_text_lbl"> - 1 (Lav) - </text> - <text name="height_text_lbl2"> - 2 - </text> - <text name="height_text_lbl3"> - 3 - </text> - <text name="height_text_lbl4"> - 4 (Høj) - </text> - <text name="height_text_lbl5"> - Texture højde intervaller - </text> - <text name="height_text_lbl6"> - Nordvest - </text> - <text name="height_text_lbl7"> - Nordøst - </text> - <text name="height_text_lbl8"> - Sydvest - </text> - <text name="height_text_lbl9"> - Sydøst - </text> - <spinner label="Lav" name="height_start_spin_0"/> - <spinner label="Lav" name="height_start_spin_1"/> - <spinner label="Lav" name="height_start_spin_2"/> - <spinner label="Lav" name="height_start_spin_3"/> - <spinner label="Høj" name="height_range_spin_0"/> - <spinner label="Høj" name="height_range_spin_1"/> - <spinner label="Høj" name="height_range_spin_2"/> - <spinner label="Høj" name="height_range_spin_3"/> - <text name="height_text_lbl10"> - Disse værdier repræsenterer blandingsforhold for teksturer ovenfor. - </text> - <text name="height_text_lbl11"> - Målt i meter, angiver LAV værdien MAKSIMUM højden for tekstur 1 og HØJ værdien er MINIMUMSshøjden for tekstur 4. - </text> - <text name="height_text_lbl12"> - og HØJ værdien er MIMIMUM højde for texture nummer 4. - </text> - <button label="Gem" name="apply_btn"/> -</panel> diff --git a/indra/newview/skins/default/xui/de/floater_chat_bar.xml b/indra/newview/skins/default/xui/de/floater_chat_bar.xml deleted file mode 100644 index ab77d4dae5..0000000000 --- a/indra/newview/skins/default/xui/de/floater_chat_bar.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="nearby_chat" title="CHAT IN DER NÄHE"> - <panel name="bottom_panel"> - <line_editor label="Zum Chatten hier klicken." name="chat_box" tool_tip="Eingabetaste zum Sprechen, Strg+Eingabe zum Rufen"/> - <button name="show_nearby_chat" tool_tip="Chatprotokoll in der Nähe ein-/ausblenden"/> - </panel> -</floater> diff --git a/indra/newview/skins/default/xui/de/floater_perm_prefs.xml b/indra/newview/skins/default/xui/de/floater_perm_prefs.xml deleted file mode 100644 index 9be22f3ccb..0000000000 --- a/indra/newview/skins/default/xui/de/floater_perm_prefs.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="STANDARD-BERECHTIGUNGEN FÜR HOCHLADEN"> - <panel label="Berechtigungen" name="permissions"> - <button label="?" label_selected="?" name="help"/> - <check_box label="Mit Gruppe teilen" name="share_with_group"/> - <check_box label="Kopieren allen erlauben" name="everyone_copy"/> - <text name="NextOwnerLabel"> - Nächster Eigentümer kann: - </text> - <check_box label="Bearbeiten" name="next_owner_modify"/> - <check_box label="Kopieren" name="next_owner_copy"/> - <check_box label="Verkaufen/Weggeben" name="next_owner_transfer"/> - </panel> - <button label="OK" label_selected="OK" name="ok"/> - <button label="Abbrechen" label_selected="Abbrechen" name="cancel"/> -</floater> diff --git a/indra/newview/skins/default/xui/de/floater_voice_controls.xml b/indra/newview/skins/default/xui/de/floater_voice_controls.xml deleted file mode 100644 index 5efda4136e..0000000000 --- a/indra/newview/skins/default/xui/de/floater_voice_controls.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="SPRACHSTEUERUNGEN"> - <string name="title_nearby"> - VOICE-EINSTELLUNGEN - </string> - <string name="title_group"> - GRUPPENGESPRÄCH MIT [GROUP] - </string> - <string name="title_adhoc"> - KONFERENZGESPRÄCH - </string> - <string name="title_peer_2_peer"> - GESPRÄCH MIT [NAME] - </string> - <string name="no_one_near"> - Es ist niemand in der Nähe, der Voice aktiviert hat. - </string> - <layout_stack name="my_call_stack"> - <layout_panel name="my_panel"> - <text name="user_text" value="Mein Avatar:"/> - </layout_panel> - <layout_panel name="leave_call_panel"> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Anruf beenden" name="leave_call_btn"/> - </layout_panel> - </layout_stack> - </layout_panel> - </layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml deleted file mode 100644 index 641a0ceebe..0000000000 --- a/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="Profil anzeigen" name="view_profile"/> - <menu_item_call label="Freund hinzufügen" name="add_friend"/> - <menu_item_call label="IM" name="im"/> - <menu_item_call label="Anrufen" name="call"/> - <menu_item_call label="Teleportieren" name="teleport"/> - <menu_item_call label="In Gruppe einladen" name="invite_to_group"/> - <menu_item_call label="Ignorieren" name="block"/> - <menu_item_call label="Freischalten" name="unblock"/> - <menu_item_call label="Melden" name="report"/> - <menu_item_call label="Einfrieren" name="freeze"/> - <menu_item_call label="Hinauswerfen" name="eject"/> - <menu_item_call label="Hinauswerfen" name="kick"/> - <menu_item_call label="CSR" name="csr"/> - <menu_item_call label="Fehler in Texturen beseitigen" name="debug"/> - <menu_item_call label="Auf Karte anzeigen" name="find_on_map"/> - <menu_item_call label="Hineinzoomen" name="zoom_in"/> - <menu_item_call label="Bezahlen" name="pay"/> - <menu_item_call label="Teilen" name="share"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml deleted file mode 100644 index 5979194bfb..0000000000 --- a/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="Hinsetzen" name="Sit Down Here"/> - <menu_item_call label="Aufstehen" name="Stand Up"/> - <context_menu label="Ausziehen" name="Take Off >"> - <context_menu label="Kleidung" name="Clothes >"> - <menu_item_call label="Hemd" name="Shirt"/> - <menu_item_call label="Hose" name="Pants"/> - <menu_item_call label="Rock" name="Skirt"/> - <menu_item_call label="Schuhe" name="Shoes"/> - <menu_item_call label="Strümpfe" name="Socks"/> - <menu_item_call label="Jacke" name="Jacket"/> - <menu_item_call label="Handschuhe" name="Gloves"/> - <menu_item_call label="Unterhemd" name="Self Undershirt"/> - <menu_item_call label="Unterhose" name="Self Underpants"/> - <menu_item_call label="Tätowierung" name="Self Tattoo"/> - <menu_item_call label="Alpha" name="Self Alpha"/> - <menu_item_call label="Alle Kleider" name="All Clothes"/> - </context_menu> - <context_menu label="HUD" name="Object Detach HUD"/> - <context_menu label="Abnehmen" name="Object Detach"/> - <menu_item_call label="Alles abnehmen" name="Detach All"/> - </context_menu> - <menu_item_call label="Outfit ändern" name="Chenge Outfit"/> - <menu_item_call label="Mein Outfit bearbeiten" name="Edit Outfit"/> - <menu_item_call label="Meine Form bearbeiten" name="Edit My Shape"/> - <menu_item_call label="Meine Freunde" name="Friends..."/> - <menu_item_call label="Meine Gruppen" name="Groups..."/> - <menu_item_call label="Mein Profil" name="Profile..."/> - <menu_item_call label="Fehler in Texturen beseitigen" name="Debug..."/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/de/menu_name_field.xml b/indra/newview/skins/default/xui/de/menu_name_field.xml deleted file mode 100644 index 1d293c9361..0000000000 --- a/indra/newview/skins/default/xui/de/menu_name_field.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="CopyMenu"> - <menu_item_call label="Anzeigenamen kopieren" name="copy_display"/> - <menu_item_call label="Agent-Namen kopieren" name="copy_name"/> - <menu_item_call label="Agent-ID kopieren" name="copy_id"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml deleted file mode 100644 index 84d9d8938c..0000000000 --- a/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Nach Name sortieren" name="sort_name"/> - <menu_item_check label="Nach Status sortieren" name="sort_status"/> - <menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/> - <menu_item_check label="Erteilte Genehmigungen anzeigen" name="view_permissions"/> - <menu_item_call label="Ignorierte Einwohner & Objekte anzeigen" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/de/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_groups_view_sort.xml deleted file mode 100644 index b68597d8aa..0000000000 --- a/indra/newview/skins/default/xui/de/menu_people_groups_view_sort.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Gruppensymbole anzeigen" name="Display Group Icons"/> - <menu_item_call label="Ausgewählte Gruppe verlassen" name="Leave Selected Group"/> -</menu> diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml deleted file mode 100644 index a001544f3e..0000000000 --- a/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="Nach letzten Sprechern sortieren" name="sort_by_recent_speakers"/> - <menu_item_check label="Nach Name sortieren" name="sort_name"/> - <menu_item_check label="Nach Entfernung sortieren" name="sort_distance"/> - <menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/> - <menu_item_check label="Karte anzeigen" name="view_map"/> - <menu_item_call label="Ignorierte Einwohner & Objekte anzeigen" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/de/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_recent_view_sort.xml deleted file mode 100644 index 1ef020f5e1..0000000000 --- a/indra/newview/skins/default/xui/de/menu_people_recent_view_sort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Nach aktuellesten Sprechern sortieren" name="sort_most"/> - <menu_item_check label="Nach Name sortieren" name="sort_name"/> - <menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/> - <menu_item_call label="Ignorierte Einwohner & Objekte anzeigen" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/de/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/de/panel_adhoc_control_panel.xml deleted file mode 100644 index 6ad18781f5..0000000000 --- a/indra/newview/skins/default/xui/de/panel_adhoc_control_panel.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="call_btn_panel"> - <button label="Anrufen" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Anruf beenden" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Voice-Steuerung" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/de/panel_facebook_account.xml b/indra/newview/skins/default/xui/de/panel_facebook_account.xml deleted file mode 100644 index caa5f55186..0000000000 --- a/indra/newview/skins/default/xui/de/panel_facebook_account.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<panel name="panel_facebook_account"> - <string name="facebook_connected" value="Sie sind mit Facebook verbunden als:"/> - <string name="facebook_disconnected" value="Nicht mit Facebook verbunden"/> - <text name="account_caption_label"> - Nicht mit Facebook verbunden. - </text> - <panel name="panel_buttons"> - <button label="Verbinden..." name="connect_btn"/> - <button label="Trennen" name="disconnect_btn"/> - <text name="account_learn_more_label"> - [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Anweisungen zum Posten auf Facebook] - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/de/panel_group_control_panel.xml b/indra/newview/skins/default/xui/de/panel_group_control_panel.xml deleted file mode 100644 index 9cb72fafff..0000000000 --- a/indra/newview/skins/default/xui/de/panel_group_control_panel.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="group_info_btn_panel"> - <button label="Gruppenprofil" name="group_info_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Gruppe anrufen" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Anruf beenden" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Voice-Steuerung öffnen" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/de/panel_im_control_panel.xml b/indra/newview/skins/default/xui/de/panel_im_control_panel.xml deleted file mode 100644 index abf8011d9d..0000000000 --- a/indra/newview/skins/default/xui/de/panel_im_control_panel.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <text name="avatar_name" value="Unbekannt"/> - <layout_stack name="button_stack"> - <layout_panel name="view_profile_btn_panel"> - <button label="Profil" name="view_profile_btn"/> - </layout_panel> - <layout_panel name="add_friend_btn_panel"> - <button label="Freund hinzufügen" name="add_friend_btn"/> - </layout_panel> - <layout_panel name="teleport_btn_panel"> - <button label="Teleportieren" name="teleport_btn" tool_tip="Dieser Person einen Teleport anbieten."/> - </layout_panel> - <layout_panel name="share_btn_panel"> - <button label="Teilen" name="share_btn"/> - </layout_panel> - <layout_panel name="pay_btn_panel"> - <button label="Bezahlen" name="pay_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Anrufen" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Anruf beenden" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Voice-Steuerung" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/de/panel_profile_interests.xml b/indra/newview/skins/default/xui/de/panel_profile_interests.xml deleted file mode 100644 index 0f36f76aa0..0000000000 --- a/indra/newview/skins/default/xui/de/panel_profile_interests.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Interessen" name="panel_profile_interests"> - <text name="I Want To:"> - Ich möchte: - </text> - <check_box label="Erstellen" name="chk0"/> - <check_box label="Erkunden" name="chk1"/> - <check_box label="Treffen" name="chk2"/> - <check_box label="Angestellt werden" name="chk6"/> - <check_box label="Gruppe" name="chk3"/> - <check_box label="Kaufen" name="chk4"/> - <check_box label="Verkaufen" name="chk5"/> - <check_box label="Anstellen" name="chk7"/> - <line_editor name="want_to_edit"> - (wird geladen...) - </line_editor> - <text name="Skills:"> - Fähigkeiten: - </text> - <check_box label="Texturen" name="schk0"/> - <check_box label="Architektur" name="schk1"/> - <check_box label="Modellierung" name="schk3"/> - <check_box label="Eventplanung" name="schk2"/> - <check_box label="Scripting" name="schk4"/> - <check_box label="Benutzerdefinierte Charaktere" name="schk5"/> - <line_editor name="skills_edit"> - (wird geladen...) - </line_editor> - <text name="Languages:"> - Sprachen: - </text> - <line_editor name="languages_edit"> - (wird geladen...) - </line_editor> -</panel> diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index d9b0ac0060..684470e0fc 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -1114,11 +1114,15 @@ label="Open" name="Open" value="Open" /> - <combo_box.item + <combo_box.item label="Zoom" name="Zoom" value="Zoom" /> <combo_box.item + label="Ignore object" + name="Ignoreobject" + value="Ignore" /> + <combo_box.item label="None" name="None" value="None" /> diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml index b82fe43e74..a8b4b84ab7 100644 --- a/indra/newview/skins/default/xui/en/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/en/floater_top_objects.xml @@ -273,4 +273,17 @@ <button.commit_callback function="TopObjects.ReturnAll" /> </button> + <button + follows="bottom|left" + height="23" + label="Teleport to selected" + layout="topleft" + left_pad="10" + name="teleport_btn" + enabled="false" + top_delta="0" + width="160"> + <button.commit_callback + function="TopObjects.TeleportToSelected" /> +</button> </floater> diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby.xml b/indra/newview/skins/default/xui/en/menu_people_nearby.xml index c1500d4e7c..425de6cab8 100644 --- a/indra/newview/skins/default/xui/en/menu_people_nearby.xml +++ b/indra/newview/skins/default/xui/en/menu_people_nearby.xml @@ -75,7 +75,7 @@ name="remove_friend"> <menu_item_call.on_click function="Avatar.RemoveFriend" /> - <menu_item_call.on_enable + <menu_item_call.on_visible function="Avatar.EnableItem" parameter="can_delete" /> </menu_item_call> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index f72d1f0bf9..810d3fddd5 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -794,14 +794,36 @@ name="LandShow" tear_off="true"> <menu_item_check - label="Ban Lines" - name="Ban Lines"> + label="Hide Ban Lines" + name="Hide Ban Lines"> <menu_item_check.on_check - control="ShowBanLines" /> + function="World.CheckBanLines" + parameter="0" /> <menu_item_check.on_click - function="ToggleControl" - parameter="ShowBanLines" /> + function="World.ShowBanLines" + parameter="0" /> + </menu_item_check> + <menu_item_check + label="Show Ban Lines On Collision" + name="Show Ban Lines On Collision"> + <menu_item_check.on_check + function="World.CheckBanLines" + parameter="1" /> + <menu_item_check.on_click + function="World.ShowBanLines" + parameter="1" /> + </menu_item_check> + <menu_item_check + label="Show Ban Lines On Proximity" + name="Show Ban Lines On Proximity"> + <menu_item_check.on_check + function="World.CheckBanLines" + parameter="2" /> + <menu_item_check.on_click + function="World.ShowBanLines" + parameter="2" /> </menu_item_check> + <menu_item_separator /> <menu_item_check label="Beacons" name="beacons" @@ -3463,15 +3485,30 @@ function="World.EnvPreset" <menu_item_call.on_click function="Advanced.DumpRegionObjectCache" /> </menu_item_call> - -<menu_item_call - label="Interest List: Full Update" - name="Interest List: Full Update" + <menu_item_check + label="Record Stats to File" + name="Stats Recorder File"> + <menu_item_check.on_check + function="Advanced.CheckStatsRecorder" /> + <menu_item_check.on_click + function="Advanced.ToggleStatsRecorder" /> + </menu_item_check> + <menu_item_check + label="Interest Lists 360 Mode" + name="Interest List: 360 Mode" shortcut="alt|shift|I"> - <menu_item_call.on_click - function="Advanced.InterestListFullUpdate" /> - </menu_item_call> - </menu> + <menu_item_check.on_check + function="Advanced.CheckInterestList360Mode" /> + <menu_item_check.on_click + function="Advanced.ToggleInterestList360Mode" /> + </menu_item_check> + <menu_item_call + label="Reset Interest Lists" + name="Reset Interest Lists"> + <menu_item_call.on_click + function="Advanced.ResetInterestLists" /> + </menu_item_call> + </menu> <menu create_jump_keys="true" label="UI" @@ -3486,13 +3523,6 @@ function="World.EnvPreset" parameter="http://duckduckgo.com"/> </menu_item_call> <menu_item_call - label="FB Connect Test" - name="FB Connect Test"> - <menu_item_call.on_click - function="Advanced.WebContentTest" - parameter="https://cryptic-ridge-1632.herokuapp.com/"/> - </menu_item_call> - <menu_item_call label="Dump SelectMgr" name="Dump SelectMgr"> <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/panel_script_experience.xml b/indra/newview/skins/default/xui/en/panel_script_experience.xml index e798638751..9ae5b201a6 100644 --- a/indra/newview/skins/default/xui/en/panel_script_experience.xml +++ b/indra/newview/skins/default/xui/en/panel_script_experience.xml @@ -48,23 +48,28 @@ layout="topleft" visible="false"> <layout_panel width="120" - height="140"> - <text > + height="140" + name="xp_layout_panel"> + <text name="lbl_script"> Script: </text> - <text bottom_delta="25"> + <text bottom_delta="25" + name="lbl_associated"> Associated with: </text> - <text bottom_delta="25"> + <text bottom_delta="25" + name="lbl_contribute"> You can contribute: </text> - <text bottom_delta="25"> + <text bottom_delta="25" + name="lbl_associate"> Associate with: </text> </layout_panel> <layout_panel width="250" - height="140"> + height="140" + name="xp_choose_panel"> <text > EasySit Animator 1.2.4 </text> diff --git a/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml b/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml index 5647fd27db..fa2d4dfe73 100644 --- a/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml +++ b/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml @@ -319,7 +319,7 @@ Maximum Altitude: </text> <slider - decimal_digits="1" + decimal_digits="2" follows="left|top" height="16" increment="0.01" diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml index 0b32215964..5f0241512a 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml @@ -300,6 +300,10 @@ name="Zoom" value="Zoom" /> <combo_box.item + label="Ignore object" + name="Ignoreobject" + value="Ignore" /> + <combo_box.item label="None" name="None" value="None" /> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 01f5b513c7..0b19ad1473 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -233,7 +233,7 @@ If you feel this is an error, please contact support@secondlife.com</string> <string name="TooltipForSaleL$">For Sale: L$[AMOUNT]</string> <!-- L$ version --> <string name="TooltipFlagGroupBuild">Group Build</string> <string name="TooltipFlagNoBuild">No Build</string> - <string name="TooltipFlagNoEdit">Group Build</string> + <string name="TooltipFlagNoEdit">No Edit</string> <string name="TooltipFlagNotSafe">Not Safe</string><!-- damage area --> <string name="TooltipFlagNoFly">No Fly</string> <string name="TooltipFlagGroupScripts">Group Scripts</string> diff --git a/indra/newview/skins/default/xui/es/floater_chat_bar.xml b/indra/newview/skins/default/xui/es/floater_chat_bar.xml deleted file mode 100644 index 02369c9a43..0000000000 --- a/indra/newview/skins/default/xui/es/floater_chat_bar.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="nearby_chat" title="CHAT"> - <panel name="bottom_panel"> - <line_editor label="Pulsa aquí para chatear." name="chat_box" tool_tip="Pulsa Enter para decirlo o Ctrl+Enter para gritarlo"/> - <button name="show_nearby_chat" tool_tip="Muestra o esconde el registro del chat"/> - </panel> -</floater> diff --git a/indra/newview/skins/default/xui/es/floater_perm_prefs.xml b/indra/newview/skins/default/xui/es/floater_perm_prefs.xml deleted file mode 100644 index 93e2088aba..0000000000 --- a/indra/newview/skins/default/xui/es/floater_perm_prefs.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="PERMISOS POR DEFECTO DE SUBIDA"> - <panel label="Permisos" name="permissions"> - <button label="?" label_selected="?" name="help"/> - <check_box label="Compartir con el grupo" name="share_with_group"/> - <check_box label="Permitir a cualquiera que lo copie" name="everyone_copy"/> - <text name="NextOwnerLabel"> - El próximo propietario puede: - </text> - <check_box label="Modificarlo" name="next_owner_modify"/> - <check_box label="Copiarlo" name="next_owner_copy"/> - <check_box label="Revenderlo/Darlo" name="next_owner_transfer"/> - </panel> - <button label="OK" label_selected="OK" name="ok"/> - <button label="Cancelar" label_selected="Cancelar" name="cancel"/> -</floater> diff --git a/indra/newview/skins/default/xui/es/floater_voice_controls.xml b/indra/newview/skins/default/xui/es/floater_voice_controls.xml deleted file mode 100644 index eff21239be..0000000000 --- a/indra/newview/skins/default/xui/es/floater_voice_controls.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="CONTROLES DE LA VOZ"> - <string name="title_nearby"> - CONFIGURACIÓN DE VOZ - </string> - <string name="title_group"> - MULTICONFERENCIA DE VOZ CON [GROUP] - </string> - <string name="title_adhoc"> - MULTICONFERENCIA DE VOZ - </string> - <string name="title_peer_2_peer"> - LLAMADA A [NAME] - </string> - <string name="no_one_near"> - Nadie cercano tiene activada la voz - </string> - <layout_stack name="my_call_stack"> - <layout_panel name="my_panel"> - <text name="user_text" value="Mi avatar:"/> - </layout_panel> - <layout_panel name="leave_call_panel"> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Colgar" name="leave_call_btn"/> - </layout_panel> - </layout_stack> - </layout_panel> - </layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml deleted file mode 100644 index 82fc8ddd39..0000000000 --- a/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="Ver el perfil" name="view_profile"/> - <menu_item_call label="Añadir como amigo" name="add_friend"/> - <menu_item_call label="MI" name="im"/> - <menu_item_call label="Llamada" name="call"/> - <menu_item_call label="Teleportar" name="teleport"/> - <menu_item_call label="Invitar al grupo" name="invite_to_group"/> - <menu_item_call label="Ignorar" name="block"/> - <menu_item_call label="Designorar" name="unblock"/> - <menu_item_call label="Denunciar" name="report"/> - <menu_item_call label="Congelar" name="freeze"/> - <menu_item_call label="Expulsar" name="eject"/> - <menu_item_call label="Expulsar" name="kick"/> - <menu_item_call label="CSR" name="csr"/> - <menu_item_call label="Depurar las texturas" name="debug"/> - <menu_item_call label="Encontrar en el mapa" name="find_on_map"/> - <menu_item_call label="Acercar el zoom" name="zoom_in"/> - <menu_item_call label="Pagar" name="pay"/> - <menu_item_call label="Compartir" name="share"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml deleted file mode 100644 index 29ad718fdd..0000000000 --- a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="Sentarme" name="Sit Down Here"/> - <menu_item_call label="Levantarme" name="Stand Up"/> - <context_menu label="Quitarme" name="Take Off >"> - <context_menu label="Ropas" name="Clothes >"> - <menu_item_call label="Camisa" name="Shirt"/> - <menu_item_call label="Pantalones" name="Pants"/> - <menu_item_call label="Falda" name="Skirt"/> - <menu_item_call label="Zapatos" name="Shoes"/> - <menu_item_call label="Calcetines" name="Socks"/> - <menu_item_call label="Chaqueta" name="Jacket"/> - <menu_item_call label="Guantes" name="Gloves"/> - <menu_item_call label="Camiseta" name="Self Undershirt"/> - <menu_item_call label="Ropa interior" name="Self Underpants"/> - <menu_item_call label="Tatuaje" name="Self Tattoo"/> - <menu_item_call label="Alfa" name="Self Alpha"/> - <menu_item_call label="Toda la ropa" name="All Clothes"/> - </context_menu> - <context_menu label="HUD" name="Object Detach HUD"/> - <context_menu label="Quitar" name="Object Detach"/> - <menu_item_call label="Quitarse todo" name="Detach All"/> - </context_menu> - <menu_item_call label="Cambiar vestuario" name="Chenge Outfit"/> - <menu_item_call label="Editar mi vestuario" name="Edit Outfit"/> - <menu_item_call label="Editar mi anatomía" name="Edit My Shape"/> - <menu_item_call label="Mis amigos" name="Friends..."/> - <menu_item_call label="Mis grupos" name="Groups..."/> - <menu_item_call label="Mi perfil" name="Profile..."/> - <menu_item_call label="Depurar las texturas" name="Debug..."/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/es/menu_name_field.xml b/indra/newview/skins/default/xui/es/menu_name_field.xml deleted file mode 100644 index 0d51fbffeb..0000000000 --- a/indra/newview/skins/default/xui/es/menu_name_field.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="CopyMenu"> - <menu_item_call label="Copiar Nombre mostrado" name="copy_display"/> - <menu_item_call label="Copiar Nombre de agente" name="copy_name"/> - <menu_item_call label="Copiar ID de agente" name="copy_id"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml deleted file mode 100644 index 3899ad9e96..0000000000 --- a/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Ordenar alfabéticamente" name="sort_name"/> - <menu_item_check label="Ordenar por estatus" name="sort_status"/> - <menu_item_check label="Ver los iconos de la gente" name="view_icons"/> - <menu_item_check label="Ver permisos concedidos" name="view_permissions"/> - <menu_item_call label="Ver la lista de Residentes y Objetos ignorados" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/es/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_groups_view_sort.xml deleted file mode 100644 index 1bd3efb611..0000000000 --- a/indra/newview/skins/default/xui/es/menu_people_groups_view_sort.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Mostrar los iconos de grupo" name="Display Group Icons"/> - <menu_item_call label="Dejar el grupo seleccionado" name="Leave Selected Group"/> -</menu> diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml deleted file mode 100644 index 1403e4db01..0000000000 --- a/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="Ordenar según las intervenciones recientes" name="sort_by_recent_speakers"/> - <menu_item_check label="Ordenar alfabéticamente" name="sort_name"/> - <menu_item_check label="Ordenar según distancia" name="sort_distance"/> - <menu_item_check label="Ver los iconos de la gente" name="view_icons"/> - <menu_item_check label="Ver mapa" name="view_map"/> - <menu_item_call label="Ver la lista de Residentes y Objetos ignorados" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml deleted file mode 100644 index e4aaa89110..0000000000 --- a/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Ordenar por los más recientes" name="sort_most"/> - <menu_item_check label="Ordenar alfabéticamente" name="sort_name"/> - <menu_item_check label="Ver los iconos de la gente" name="view_icons"/> - <menu_item_call label="Ver la lista de Residentes y Objetos ignorados" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml deleted file mode 100644 index c64a93e0e5..0000000000 --- a/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="call_btn_panel"> - <button label="Llamar" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Colgar" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Controles de la voz" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/es/panel_facebook_account.xml b/indra/newview/skins/default/xui/es/panel_facebook_account.xml deleted file mode 100644 index 2b6d407ad7..0000000000 --- a/indra/newview/skins/default/xui/es/panel_facebook_account.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<panel name="panel_facebook_account"> - <string name="facebook_connected" value="Estás conectado a Facebook como:"/> - <string name="facebook_disconnected" value="No conectado a Facebook"/> - <text name="account_caption_label"> - No conectado a Facebook. - </text> - <panel name="panel_buttons"> - <button label="Conectar..." name="connect_btn"/> - <button label="Desconectar" name="disconnect_btn"/> - <text name="account_learn_more_label"> - [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Aprende a publicar en Facebook] - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/es/panel_group_control_panel.xml b/indra/newview/skins/default/xui/es/panel_group_control_panel.xml deleted file mode 100644 index b398293175..0000000000 --- a/indra/newview/skins/default/xui/es/panel_group_control_panel.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="group_info_btn_panel"> - <button label="Perfil del grupo" name="group_info_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Llamar al grupo" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Colgar" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Abrir los controles de la voz" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/es/panel_im_control_panel.xml b/indra/newview/skins/default/xui/es/panel_im_control_panel.xml deleted file mode 100644 index f218324d50..0000000000 --- a/indra/newview/skins/default/xui/es/panel_im_control_panel.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="button_stack"> - <layout_panel name="view_profile_btn_panel"> - <button label="Perfil" name="view_profile_btn"/> - </layout_panel> - <layout_panel name="add_friend_btn_panel"> - <button label="Añadir como amigo" name="add_friend_btn"/> - </layout_panel> - <layout_panel name="teleport_btn_panel"> - <button label="Teleportar" name="teleport_btn" tool_tip="Ofrecer teleporte a esta persona"/> - </layout_panel> - <layout_panel name="share_btn_panel"> - <button label="Compartir" name="share_btn"/> - </layout_panel> - <layout_panel name="pay_btn_panel"> - <button label="Pagar" name="pay_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Llamar" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Colgar" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Controles de la voz" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/es/panel_profile_interests.xml b/indra/newview/skins/default/xui/es/panel_profile_interests.xml deleted file mode 100644 index 86dd63390c..0000000000 --- a/indra/newview/skins/default/xui/es/panel_profile_interests.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Intereses" name="panel_profile_interests"> - <text name="I Want To:"> - Quiero: - </text> - <check_box label="Construye" name="chk0"/> - <check_box label="Explora" name="chk1"/> - <check_box label="Conoce" name="chk2"/> - <check_box label="Encuentra empleo" name="chk6"/> - <check_box label="Agrupa" name="chk3"/> - <check_box label="Compra" name="chk4"/> - <check_box label="Vende" name="chk5"/> - <check_box label="Contrata" name="chk7"/> - <line_editor name="want_to_edit"> - (cargando...) - </line_editor> - <text name="Skills:"> - Habilidades: - </text> - <check_box label="Texturas" name="schk0"/> - <check_box label="Arquitectura" name="schk1"/> - <check_box label="Modelo" name="schk3"/> - <check_box label="Planificación de eventos" name="schk2"/> - <check_box label="Preparación de scripts" name="schk4"/> - <check_box label="Personajes personalizados" name="schk5"/> - <line_editor name="skills_edit"> - (cargando...) - </line_editor> - <text name="Languages:"> - Idiomas: - </text> - <line_editor name="languages_edit"> - (cargando...) - </line_editor> -</panel> diff --git a/indra/newview/skins/default/xui/fr/floater_chat_bar.xml b/indra/newview/skins/default/xui/fr/floater_chat_bar.xml deleted file mode 100644 index 7dcb9a280d..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_chat_bar.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="nearby_chat" title="CHAT PRÈS DE MOI"> - <panel name="bottom_panel"> - <line_editor label="Cliquer ici pour chatter." name="chat_box" tool_tip="Appuyer sur Entrée pour dire, Ctrl+Entrée pour crier"/> - <button name="show_nearby_chat" tool_tip="Afficher/masquer le journal de chat près de vous."/> - </panel> -</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml deleted file mode 100644 index 36bec80561..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="DROITS DE CHARGEMENT PAR DÉFAUT"> - <panel label="Droits" name="permissions"> - <button label="?" label_selected="?" name="help"/> - <check_box label="Partager avec le groupe" name="share_with_group"/> - <check_box label="Autoriser tout le monde à copier" name="everyone_copy"/> - <text name="NextOwnerLabel"> - Le prochain propriétaire pourra : - </text> - <check_box label="Modifier" name="next_owner_modify"/> - <check_box label="Copier" name="next_owner_copy"/> - <check_box label="Revendre/Donner" name="next_owner_transfer"/> - </panel> - <button label="OK" label_selected="OK" name="ok"/> - <button label="Annuler" label_selected="Annuler" name="cancel"/> -</floater> diff --git a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml deleted file mode 100644 index fc4de4a5a6..0000000000 --- a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="CONTROLES DE LA VOIX"> - <string name="title_nearby"> - PARAMÈTRES VOCAUX - </string> - <string name="title_group"> - APPEL DE GROUPE AVEC [GROUP] - </string> - <string name="title_adhoc"> - CONFÉRENCE - </string> - <string name="title_peer_2_peer"> - APPEL AVEC [NAME] - </string> - <string name="no_one_near"> - Il n'y a personne près de vous avec le chat vocal activé - </string> - <layout_stack name="my_call_stack"> - <layout_panel name="my_panel"> - <text name="user_text" value="Mon avatar :"/> - </layout_panel> - <layout_panel name="leave_call_panel"> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Quitter l'appel" name="leave_call_btn"/> - </layout_panel> - </layout_stack> - </layout_panel> - </layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml deleted file mode 100644 index 53f22bb44a..0000000000 --- a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="Voir le profil" name="view_profile"/> - <menu_item_call label="Devenir amis" name="add_friend"/> - <menu_item_call label="IM" name="im"/> - <menu_item_call label="Appel" name="call"/> - <menu_item_call label="Téléporter" name="teleport"/> - <menu_item_call label="Inviter dans le groupe" name="invite_to_group"/> - <menu_item_call label="Ignorer" name="block"/> - <menu_item_call label="Ne plus ignorer" name="unblock"/> - <menu_item_call label="Signaler" name="report"/> - <menu_item_call label="Figer" name="freeze"/> - <menu_item_call label="Expulser" name="eject"/> - <menu_item_call label="Éjecter" name="kick"/> - <menu_item_call label="Représentant de l'Assistance client" name="csr"/> - <menu_item_call label="Déboguer les textures" name="debug"/> - <menu_item_call label="Situer sur la carte" name="find_on_map"/> - <menu_item_call label="Zoomer en avant" name="zoom_in"/> - <menu_item_call label="Payer" name="pay"/> - <menu_item_call label="Partager" name="share"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml deleted file mode 100644 index ac70df472d..0000000000 --- a/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="M'asseoir" name="Sit Down Here"/> - <menu_item_call label="Me lever" name="Stand Up"/> - <context_menu label="Enlever" name="Take Off >"> - <context_menu label="Habits" name="Clothes >"> - <menu_item_call label="Chemise" name="Shirt"/> - <menu_item_call label="Pantalon" name="Pants"/> - <menu_item_call label="Jupe" name="Skirt"/> - <menu_item_call label="Chaussures" name="Shoes"/> - <menu_item_call label="Chaussettes" name="Socks"/> - <menu_item_call label="Veste" name="Jacket"/> - <menu_item_call label="Gants" name="Gloves"/> - <menu_item_call label="Débardeur" name="Self Undershirt"/> - <menu_item_call label="Caleçon" name="Self Underpants"/> - <menu_item_call label="Tatouage" name="Self Tattoo"/> - <menu_item_call label="Alpha" name="Self Alpha"/> - <menu_item_call label="Tous les habits" name="All Clothes"/> - </context_menu> - <context_menu label="HUD" name="Object Detach HUD"/> - <context_menu label="Détacher" name="Object Detach"/> - <menu_item_call label="Tout détacher" name="Detach All"/> - </context_menu> - <menu_item_call label="Changer de tenue" name="Chenge Outfit"/> - <menu_item_call label="Modifier ma tenue" name="Edit Outfit"/> - <menu_item_call label="Modifier ma silhouette" name="Edit My Shape"/> - <menu_item_call label="Mes amis" name="Friends..."/> - <menu_item_call label="Mes groupes" name="Groups..."/> - <menu_item_call label="Mon profil" name="Profile..."/> - <menu_item_call label="Déboguer les textures" name="Debug..."/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_name_field.xml b/indra/newview/skins/default/xui/fr/menu_name_field.xml deleted file mode 100644 index 6c3fba4110..0000000000 --- a/indra/newview/skins/default/xui/fr/menu_name_field.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="CopyMenu"> - <menu_item_call label="Copier le Nom d'affichage" name="copy_display"/> - <menu_item_call label="Copier le Nom de l'agent" name="copy_name"/> - <menu_item_call label="Copier l'ID de l'agent" name="copy_id"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml deleted file mode 100644 index a6170a6c16..0000000000 --- a/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Trier par nom" name="sort_name"/> - <menu_item_check label="Trier par statut" name="sort_status"/> - <menu_item_check label="Afficher les icônes des résidents" name="view_icons"/> - <menu_item_check label="Afficher les droits octroyés" name="view_permissions"/> - <menu_item_call label="Afficher les résidents et les objets ignorés" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/fr/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_groups_view_sort.xml deleted file mode 100644 index 34f949cf2c..0000000000 --- a/indra/newview/skins/default/xui/fr/menu_people_groups_view_sort.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Afficher les icônes des groupes" name="Display Group Icons"/> - <menu_item_call label="Quitter le groupe sélectionné" name="Leave Selected Group"/> -</menu> diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml deleted file mode 100644 index 8bb466b8d6..0000000000 --- a/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="Trier par intervenants récents" name="sort_by_recent_speakers"/> - <menu_item_check label="Trier par nom" name="sort_name"/> - <menu_item_check label="Trier par distance" name="sort_distance"/> - <menu_item_check label="Afficher les icônes des résidents" name="view_icons"/> - <menu_item_check label="Afficher la carte" name="view_map"/> - <menu_item_call label="Afficher les résidents et les objets ignorés" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/fr/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_recent_view_sort.xml deleted file mode 100644 index 93b90ae61c..0000000000 --- a/indra/newview/skins/default/xui/fr/menu_people_recent_view_sort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Trier en commençant par le plus récent" name="sort_most"/> - <menu_item_check label="Trier par nom" name="sort_name"/> - <menu_item_check label="Afficher les icônes des résidents" name="view_icons"/> - <menu_item_call label="Afficher les résidents et les objets ignorés" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/fr/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_adhoc_control_panel.xml deleted file mode 100644 index 4191ba42f9..0000000000 --- a/indra/newview/skins/default/xui/fr/panel_adhoc_control_panel.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="call_btn_panel"> - <button label="Appeler" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Quitter l'appel" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Contrôles vocaux" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_account.xml b/indra/newview/skins/default/xui/fr/panel_facebook_account.xml deleted file mode 100644 index 6406ae4ae7..0000000000 --- a/indra/newview/skins/default/xui/fr/panel_facebook_account.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<panel name="panel_facebook_account"> - <string name="facebook_connected" value="Vous êtes connecté(e) à Facebook en tant que :"/> - <string name="facebook_disconnected" value="Pas connecté(e) à Facebook"/> - <text name="account_caption_label"> - Pas connecté(e) à Facebook. - </text> - <panel name="panel_buttons"> - <button label="Connexion..." name="connect_btn"/> - <button label="Déconnexion" name="disconnect_btn"/> - <text name="account_learn_more_label"> - [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Apprenez comment publier sur Facebook] - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml deleted file mode 100644 index 3e66b3c72a..0000000000 --- a/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="group_info_btn_panel"> - <button label="Profil du groupe" name="group_info_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Appeler le groupe" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Quitter l'appel" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Ouvrir contrôles vocaux" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml deleted file mode 100644 index 1f2169e22c..0000000000 --- a/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <text name="avatar_name" value="Inconnu"/> - <layout_stack name="button_stack"> - <layout_panel name="view_profile_btn_panel"> - <button label="Profil" name="view_profile_btn"/> - </layout_panel> - <layout_panel name="add_friend_btn_panel"> - <button label="Devenir amis" name="add_friend_btn"/> - </layout_panel> - <layout_panel name="teleport_btn_panel"> - <button label="Téléporter" name="teleport_btn" tool_tip="Proposer de téléporter cette personne"/> - </layout_panel> - <layout_panel name="share_btn_panel"> - <button label="Partager" name="share_btn"/> - </layout_panel> - <layout_panel name="pay_btn_panel"> - <button label="Payer" name="pay_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Appeler" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Quitter l'appel" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Contrôles vocaux" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/fr/panel_profile_interests.xml b/indra/newview/skins/default/xui/fr/panel_profile_interests.xml deleted file mode 100644 index e8212817d2..0000000000 --- a/indra/newview/skins/default/xui/fr/panel_profile_interests.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Centres d'intérêt" name="panel_profile_interests"> - <text name="I Want To:"> - Je veux : - </text> - <check_box label="Construire" name="chk0"/> - <check_box label="Explorer" name="chk1"/> - <check_box label="Rencontrer" name="chk2"/> - <check_box label="Être recruté" name="chk6"/> - <check_box label="Grouper" name="chk3"/> - <check_box label="Acheter" name="chk4"/> - <check_box label="Vendre" name="chk5"/> - <check_box label="Louer" name="chk7"/> - <line_editor name="want_to_edit"> - (en cours de chargement...) - </line_editor> - <text name="Skills:"> - Compétences : - </text> - <check_box label="Textures" name="schk0"/> - <check_box label="Architecture" name="schk1"/> - <check_box label="Modèle" name="schk3"/> - <check_box label="Planification des événements" name="schk2"/> - <check_box label="Langage de scripts" name="schk4"/> - <check_box label="Personnages personnalisés" name="schk5"/> - <line_editor name="skills_edit"> - (en cours de chargement...) - </line_editor> - <text name="Languages:"> - Langues : - </text> - <line_editor name="languages_edit"> - (en cours de chargement...) - </line_editor> -</panel> diff --git a/indra/newview/skins/default/xui/it/floater_chat_bar.xml b/indra/newview/skins/default/xui/it/floater_chat_bar.xml deleted file mode 100644 index b47e32ce90..0000000000 --- a/indra/newview/skins/default/xui/it/floater_chat_bar.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="nearby_chat" title="CHAT NEI DINTORNI"> - <panel name="bottom_panel"> - <line_editor label="Clicca qui per la chat." name="chat_box" tool_tip="Premi Invio per parlare, Ctrl+Invio per gridare"/> - <button name="show_nearby_chat" tool_tip="Mostra/Nasconde il registro della chat nei dintorni"/> - </panel> -</floater> diff --git a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml b/indra/newview/skins/default/xui/it/floater_perm_prefs.xml deleted file mode 100644 index a02b3b5075..0000000000 --- a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="DIRITTI DI CARICAMENTO PREDEFINITI"> - <panel label="Permessi" name="permissions"> - <button label="?" label_selected="?" name="help"/> - <check_box label="Condividi con il gruppo" name="share_with_group"/> - <check_box label="Permetti a chiunque di copiare" name="everyone_copy"/> - <text name="NextOwnerLabel"> - Il prossimo possessore può: - </text> - <check_box label="Modificare" name="next_owner_modify"/> - <check_box label="Copiare" name="next_owner_copy"/> - <check_box label="Rivendere/Regalare" name="next_owner_transfer"/> - </panel> - <button label="OK" label_selected="OK" name="ok"/> - <button label="Annulla" label_selected="Annulla" name="cancel"/> -</floater> diff --git a/indra/newview/skins/default/xui/it/floater_voice_controls.xml b/indra/newview/skins/default/xui/it/floater_voice_controls.xml deleted file mode 100644 index 77973eef1e..0000000000 --- a/indra/newview/skins/default/xui/it/floater_voice_controls.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="CONTROLLI VOCE"> - <string name="title_nearby"> - IMPOSTAZIONI VOCE - </string> - <string name="title_group"> - CHIAMATA DI GRUPPO CON [GROUP] - </string> - <string name="title_adhoc"> - CHIAMATA IN CONFERENZA - </string> - <string name="title_peer_2_peer"> - CHIAMATA CON [NAME] - </string> - <string name="no_one_near"> - Nessuno nei dintorni ha attivato la funzione voce - </string> - <layout_stack name="my_call_stack"> - <layout_panel name="my_panel"> - <text name="user_text" value="Il mio avatar:"/> - </layout_panel> - <layout_panel name="leave_call_panel"> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Abbandona chiamata" name="leave_call_btn"/> - </layout_panel> - </layout_stack> - </layout_panel> - </layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml deleted file mode 100644 index 1f10734c4a..0000000000 --- a/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="Vedi profilo" name="view_profile"/> - <menu_item_call label="Aggiungi amico" name="add_friend"/> - <menu_item_call label="IM" name="im"/> - <menu_item_call label="Chiama" name="call"/> - <menu_item_call label="Teleport" name="teleport"/> - <menu_item_call label="Invita al gruppo" name="invite_to_group"/> - <menu_item_call label="Blocca" name="block"/> - <menu_item_call label="Sblocca" name="unblock"/> - <menu_item_call label="Segnala" name="report"/> - <menu_item_call label="Congela" name="freeze"/> - <menu_item_call label="Espelli" name="eject"/> - <menu_item_call label="Espelli" name="kick"/> - <menu_item_call label="CSR" name="csr"/> - <menu_item_call label="Debug delle texture" name="debug"/> - <menu_item_call label="Trova sulla mappa" name="find_on_map"/> - <menu_item_call label="Zoom avanti" name="zoom_in"/> - <menu_item_call label="Paga" name="pay"/> - <menu_item_call label="Condividi" name="share"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml deleted file mode 100644 index 4f62ccaa9c..0000000000 --- a/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="Siedi" name="Sit Down Here"/> - <menu_item_call label="Alzati" name="Stand Up"/> - <context_menu label="Togli" name="Take Off >"> - <context_menu label="Abiti" name="Clothes >"> - <menu_item_call label="Camicia" name="Shirt"/> - <menu_item_call label="Pantaloni" name="Pants"/> - <menu_item_call label="Gonna" name="Skirt"/> - <menu_item_call label="Scarpe" name="Shoes"/> - <menu_item_call label="Calzini" name="Socks"/> - <menu_item_call label="Giacca" name="Jacket"/> - <menu_item_call label="Guanti" name="Gloves"/> - <menu_item_call label="Maglietta intima" name="Self Undershirt"/> - <menu_item_call label="Slip" name="Self Underpants"/> - <menu_item_call label="Tatuaggio" name="Self Tattoo"/> - <menu_item_call label="Alpha (Trasparenza)" name="Self Alpha"/> - <menu_item_call label="Tutti gli abiti" name="All Clothes"/> - </context_menu> - <context_menu label="HUD" name="Object Detach HUD"/> - <context_menu label="Stacca" name="Object Detach"/> - <menu_item_call label="Stacca tutto" name="Detach All"/> - </context_menu> - <menu_item_call label="Cambia vestiario" name="Chenge Outfit"/> - <menu_item_call label="Modifica il mio vestiario" name="Edit Outfit"/> - <menu_item_call label="Modifica la figura corporea" name="Edit My Shape"/> - <menu_item_call label="I miei amici" name="Friends..."/> - <menu_item_call label="I miei gruppi" name="Groups..."/> - <menu_item_call label="Il mio profilo" name="Profile..."/> - <menu_item_call label="Debug delle texture" name="Debug..."/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/it/menu_name_field.xml b/indra/newview/skins/default/xui/it/menu_name_field.xml deleted file mode 100644 index 9ac863323c..0000000000 --- a/indra/newview/skins/default/xui/it/menu_name_field.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="CopyMenu"> - <menu_item_call label="Copia Nome Visualizzato" name="copy_display"/> - <menu_item_call label="Copia Nome Agente" name="copy_name"/> - <menu_item_call label="Copia ID Agente" name="copy_id"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml deleted file mode 100644 index 3a799f44eb..0000000000 --- a/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Ordina in base al nome" name="sort_name"/> - <menu_item_check label="Ordina in base allo stato" name="sort_status"/> - <menu_item_check label="Icone persone" name="view_icons"/> - <menu_item_check label="Visualizza autorizzazioni concesse" name="view_permissions"/> - <menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/it/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_groups_view_sort.xml deleted file mode 100644 index d31ddaf1aa..0000000000 --- a/indra/newview/skins/default/xui/it/menu_people_groups_view_sort.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Visualizza le icone di gruppo" name="Display Group Icons"/> - <menu_item_call label="Lascia i gruppi selezionati" name="Leave Selected Group"/> -</menu> diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml deleted file mode 100644 index 2b5c235706..0000000000 --- a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="Ordina in base a intervenuti recenti" name="sort_by_recent_speakers"/> - <menu_item_check label="Ordina in base al nome" name="sort_name"/> - <menu_item_check label="Ordina in base alla distanza" name="sort_distance"/> - <menu_item_check label="Icone persone" name="view_icons"/> - <menu_item_check label="Visualizza mappa" name="view_map"/> - <menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml deleted file mode 100644 index 7fccd1621a..0000000000 --- a/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Mostra prima i più recenti" name="sort_most"/> - <menu_item_check label="Ordina in base al nome" name="sort_name"/> - <menu_item_check label="Icone persone" name="view_icons"/> - <menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml deleted file mode 100644 index be001d09f8..0000000000 --- a/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="call_btn_panel"> - <button label="Chiama" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Abbandona chiamata" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Regolazione voce" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/it/panel_facebook_account.xml b/indra/newview/skins/default/xui/it/panel_facebook_account.xml deleted file mode 100644 index e887e7e4dc..0000000000 --- a/indra/newview/skins/default/xui/it/panel_facebook_account.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<panel name="panel_facebook_account"> - <string name="facebook_connected" value="Sei in collegamento con Facebook come:"/> - <string name="facebook_disconnected" value="Non in collegamento con Facebook"/> - <text name="account_caption_label"> - Non in collegamento con Facebook. - </text> - <panel name="panel_buttons"> - <button label="Collegamento..." name="connect_btn"/> - <button label="Interrompi collegamento" name="disconnect_btn"/> - <text name="account_learn_more_label"> - [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Come pubblicare su Facebook] - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/it/panel_group_control_panel.xml b/indra/newview/skins/default/xui/it/panel_group_control_panel.xml deleted file mode 100644 index 2d17e4a0cd..0000000000 --- a/indra/newview/skins/default/xui/it/panel_group_control_panel.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="group_info_btn_panel"> - <button label="Profilo del gruppo" name="group_info_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Chiama il gruppo" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Abbandona chiamata" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Apri la regolazione voce" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/it/panel_im_control_panel.xml b/indra/newview/skins/default/xui/it/panel_im_control_panel.xml deleted file mode 100644 index 76b28eab24..0000000000 --- a/indra/newview/skins/default/xui/it/panel_im_control_panel.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="button_stack"> - <layout_panel name="view_profile_btn_panel"> - <button label="Profilo" name="view_profile_btn"/> - </layout_panel> - <layout_panel name="add_friend_btn_panel"> - <button label="Aggiungi amico" name="add_friend_btn"/> - </layout_panel> - <layout_panel name="teleport_btn_panel"> - <button label="Teleport" name="teleport_btn" tool_tip="Offri teleport a questa persona"/> - </layout_panel> - <layout_panel name="share_btn_panel"> - <button label="Condividi" name="share_btn"/> - </layout_panel> - <layout_panel name="pay_btn_panel"> - <button label="Paga" name="pay_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Chiama" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Chiudi chiamata" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Regolazione voce" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/it/panel_profile_interests.xml b/indra/newview/skins/default/xui/it/panel_profile_interests.xml deleted file mode 100644 index 9fe7331e5c..0000000000 --- a/indra/newview/skins/default/xui/it/panel_profile_interests.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Interessi" name="panel_profile_interests"> - <text name="I Want To:"> - Desidero: - </text> - <check_box label="Costruire" name="chk0"/> - <check_box label="Esplorare" name="chk1"/> - <check_box label="Incontrare" name="chk2"/> - <check_box label="Essere assunto" name="chk6"/> - <check_box label="Gruppo" name="chk3"/> - <check_box label="Acquistare" name="chk4"/> - <check_box label="Vendere" name="chk5"/> - <check_box label="Assumere" name="chk7"/> - <line_editor name="want_to_edit"> - (caricamento in corso...) - </line_editor> - <text name="Skills:"> - Abilità: - </text> - <check_box label="Texture" name="schk0"/> - <check_box label="Architettura" name="schk1"/> - <check_box label="Realizzazione modelli 3D" name="schk3"/> - <check_box label="Organizzazione eventi" name="schk2"/> - <check_box label="Scripting" name="schk4"/> - <check_box label="Personaggi personalizzati" name="schk5"/> - <line_editor name="skills_edit"> - (caricamento in corso...) - </line_editor> - <text name="Languages:"> - Lingue: - </text> - <line_editor name="languages_edit"> - (caricamento in corso...) - </line_editor> -</panel> diff --git a/indra/newview/skins/default/xui/ja/floater_chat_bar.xml b/indra/newview/skins/default/xui/ja/floater_chat_bar.xml deleted file mode 100644 index 9f5df6fb85..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_chat_bar.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="nearby_chat" title="近くのチャット"> - <panel name="bottom_panel"> - <line_editor label="ここをクリックしてチャットを開始します。" name="chat_box" tool_tip="Enter キーを押して話し、Ctrl + Enter キーで叫びます。"/> - <button name="show_nearby_chat" tool_tip="近くのチャットログを表示/非表示"/> - </panel> -</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml b/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml deleted file mode 100644 index 98cda25a81..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="デフォルトのアップロード権限"> - <panel label="権限" name="permissions"> - <button label="?" label_selected="?" name="help"/> - <check_box label="グループで共同管理" name="share_with_group"/> - <check_box label="誰に対してもコピーを許可" name="everyone_copy"/> - <text name="NextOwnerLabel"> - 次の所有者ができる操作: - </text> - <check_box label="修正" name="next_owner_modify"/> - <check_box label="コピー" name="next_owner_copy"/> - <check_box label="再販・プレゼント" name="next_owner_transfer"/> - </panel> - <button label="OK" label_selected="OK" name="ok"/> - <button label="取り消し" label_selected="取り消し" name="cancel"/> -</floater> diff --git a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml deleted file mode 100644 index f7d3fd11e0..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="ボイスコントロール"> - <string name="title_nearby"> - ボイス設定 - </string> - <string name="title_group"> - [GROUP] とグループコール - </string> - <string name="title_adhoc"> - コンファレンスコール - </string> - <string name="title_peer_2_peer"> - [NAME] とコール - </string> - <string name="no_one_near"> - 近くにボイスを有効にしている人はいません。 - </string> - <layout_stack name="my_call_stack"> - <layout_panel name="my_panel"> - <text name="user_text" value="マイ アバター:"/> - </layout_panel> - <layout_panel name="leave_call_panel"> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="コール終了" name="leave_call_btn"/> - </layout_panel> - </layout_stack> - </layout_panel> - </layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_avatar_gear.xml deleted file mode 100644 index 9d0d0f10a6..0000000000 --- a/indra/newview/skins/default/xui/ja/menu_inspect_avatar_gear.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="プロフィールの表示" name="view_profile"/> - <menu_item_call label="フレンド登録" name="add_friend"/> - <menu_item_call label="IM" name="im"/> - <menu_item_call label="コール" name="call"/> - <menu_item_call label="テレポート" name="teleport"/> - <menu_item_call label="グループに招待" name="invite_to_group"/> - <menu_item_call label="ブロック" name="block"/> - <menu_item_call label="ブロック解除" name="unblock"/> - <menu_item_call label="報告" name="report"/> - <menu_item_call label="フリーズ" name="freeze"/> - <menu_item_call label="追放" name="eject"/> - <menu_item_call label="追放" name="kick"/> - <menu_item_call label="CSR" name="csr"/> - <menu_item_call label="テクスチャのデバッグ" name="debug"/> - <menu_item_call label="地図で探す" name="find_on_map"/> - <menu_item_call label="ズームイン" name="zoom_in"/> - <menu_item_call label="支払う" name="pay"/> - <menu_item_call label="共有" name="share"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml deleted file mode 100644 index e3e206f3aa..0000000000 --- a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="座る" name="Sit Down Here"/> - <menu_item_call label="立ち上がる" name="Stand Up"/> - <context_menu label="取り外す" name="Take Off >"> - <context_menu label="衣類" name="Clothes >"> - <menu_item_call label="シャツ" name="Shirt"/> - <menu_item_call label="パンツ" name="Pants"/> - <menu_item_call label="スカート" name="Skirt"/> - <menu_item_call label="靴" name="Shoes"/> - <menu_item_call label="靴下" name="Socks"/> - <menu_item_call label="ジャケット" name="Jacket"/> - <menu_item_call label="手袋" name="Gloves"/> - <menu_item_call label="下着シャツ" name="Self Undershirt"/> - <menu_item_call label="下着パンツ" name="Self Underpants"/> - <menu_item_call label="タトゥ" name="Self Tattoo"/> - <menu_item_call label="アルファ" name="Self Alpha"/> - <menu_item_call label="すべての衣類" name="All Clothes"/> - </context_menu> - <context_menu label="HUD" name="Object Detach HUD"/> - <context_menu label="取り外す" name="Object Detach"/> - <menu_item_call label="すべて取り外す" name="Detach All"/> - </context_menu> - <menu_item_call label="アウトフィットの変更" name="Chenge Outfit"/> - <menu_item_call label="アウトフィットの編集" name="Edit Outfit"/> - <menu_item_call label="シェイプの編集" name="Edit My Shape"/> - <menu_item_call label="フレンド" name="Friends..."/> - <menu_item_call label="グループ" name="Groups..."/> - <menu_item_call label="プロフィール" name="Profile..."/> - <menu_item_call label="テクスチャのデバッグ" name="Debug..."/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_name_field.xml b/indra/newview/skins/default/xui/ja/menu_name_field.xml deleted file mode 100644 index 8c37d95073..0000000000 --- a/indra/newview/skins/default/xui/ja/menu_name_field.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="CopyMenu"> - <menu_item_call label="表示名をコピー" name="copy_display"/> - <menu_item_call label="エージェント名をコピー" name="copy_name"/> - <menu_item_call label="エージェント ID をコピー" name="copy_id"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml deleted file mode 100644 index 76340e4d76..0000000000 --- a/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="名前で並べ替え" name="sort_name"/> - <menu_item_check label="オンライン状態で並べ替え" name="sort_status"/> - <menu_item_check label="人のアイコン表示" name="view_icons"/> - <menu_item_check label="与えられた権限を表示" name="view_permissions"/> - <menu_item_call label="ブロックされた住人とオブジェクトを表示" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_groups_view_sort.xml deleted file mode 100644 index bfc7d15017..0000000000 --- a/indra/newview/skins/default/xui/ja/menu_people_groups_view_sort.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="グループアイコンを表示" name="Display Group Icons"/> - <menu_item_call label="選択したグループから脱退" name="Leave Selected Group"/> -</menu> diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml deleted file mode 100644 index 44c5438509..0000000000 --- a/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="最近の発言者で並べ替え" name="sort_by_recent_speakers"/> - <menu_item_check label="名前で並べ替え" name="sort_name"/> - <menu_item_check label="距離で並べ替え" name="sort_distance"/> - <menu_item_check label="人のアイコン表示" name="view_icons"/> - <menu_item_check label="地図を表示" name="view_map"/> - <menu_item_call label="ブロックされた住人とオブジェクトを表示" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ja/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_recent_view_sort.xml deleted file mode 100644 index b4f177a068..0000000000 --- a/indra/newview/skins/default/xui/ja/menu_people_recent_view_sort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="新しい順に並べ替え" name="sort_most"/> - <menu_item_check label="名前で並べ替え" name="sort_name"/> - <menu_item_check label="人のアイコン表示" name="view_icons"/> - <menu_item_call label="ブロックされた住人とオブジェクトを表示" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/ja/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_adhoc_control_panel.xml deleted file mode 100644 index 17e1283d24..0000000000 --- a/indra/newview/skins/default/xui/ja/panel_adhoc_control_panel.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="call_btn_panel"> - <button label="コール" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="コール終了" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="ボイスコントロール" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_account.xml b/indra/newview/skins/default/xui/ja/panel_facebook_account.xml deleted file mode 100644 index 5269e5a2da..0000000000 --- a/indra/newview/skins/default/xui/ja/panel_facebook_account.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<panel name="panel_facebook_account"> - <string name="facebook_connected" value="次のユーザーとして Facebook に接続:"/> - <string name="facebook_disconnected" value="Facebook に接続していません"/> - <text name="account_caption_label"> - Facebook に接続していません。 - </text> - <panel name="panel_buttons"> - <button label="接続..." name="connect_btn"/> - <button label="切断" name="disconnect_btn"/> - <text name="account_learn_more_label"> - [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Facebook への投稿について] - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml deleted file mode 100644 index 49749732c9..0000000000 --- a/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="group_info_btn_panel"> - <button label="グループプロフィール" name="group_info_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="グループコール" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="コール終了" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="ボイスコントロールを開く" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml deleted file mode 100644 index f2429ac12a..0000000000 --- a/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <text name="avatar_name" value="不明"/> - <layout_stack name="button_stack"> - <layout_panel name="view_profile_btn_panel"> - <button label="プロフィール" name="view_profile_btn"/> - </layout_panel> - <layout_panel name="add_friend_btn_panel"> - <button label="フレンド登録" name="add_friend_btn"/> - </layout_panel> - <layout_panel name="teleport_btn_panel"> - <button label="テレポート" name="teleport_btn" tool_tip="この人にテレポートを送ります"/> - </layout_panel> - <layout_panel name="share_btn_panel"> - <button label="共有" name="share_btn"/> - </layout_panel> - <layout_panel name="pay_btn_panel"> - <button label="支払う" name="pay_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="コール" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="コール終了" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="ボイスコントロール" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/ja/panel_profile_interests.xml b/indra/newview/skins/default/xui/ja/panel_profile_interests.xml deleted file mode 100644 index 93cde6ffec..0000000000 --- a/indra/newview/skins/default/xui/ja/panel_profile_interests.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="趣味" name="panel_profile_interests"> - <text name="I Want To:"> - 次の内容を実行: - </text> - <check_box label="作る" name="chk0"/> - <check_box label="探検" name="chk1"/> - <check_box label="出会う" name="chk2"/> - <check_box label="雇ってもらう" name="chk6"/> - <check_box label="グループ" name="chk3"/> - <check_box label="買う" name="chk4"/> - <check_box label="販売する" name="chk5"/> - <check_box label="雇う" name="chk7"/> - <line_editor name="want_to_edit"> - (ロード中...) - </line_editor> - <text name="Skills:"> - スキル: - </text> - <check_box label="テクスチャ" name="schk0"/> - <check_box label="建築" name="schk1"/> - <check_box label="モデリング" name="schk3"/> - <check_box label="イベント計画" name="schk2"/> - <check_box label="スクリプト" name="schk4"/> - <check_box label="キャラクターのカスタマイズ" name="schk5"/> - <line_editor name="skills_edit"> - (ロード中...) - </line_editor> - <text name="Languages:"> - 言語: - </text> - <line_editor name="languages_edit"> - (ロード中...) - </line_editor> -</panel> diff --git a/indra/newview/skins/default/xui/pl/floater_about.xml b/indra/newview/skins/default/xui/pl/floater_about.xml index b9c75e8e88..b8d75315de 100644 --- a/indra/newview/skins/default/xui/pl/floater_about.xml +++ b/indra/newview/skins/default/xui/pl/floater_about.xml @@ -6,8 +6,8 @@ </panel> <panel label="Podziękowania" name="credits_panel"> <text name="linden_intro"> - Second Life zostało dla Ciebie stworzone przez Lindenów, - z wkładem open source od: +Second Life zostało dla Ciebie stworzone przez Lindenów, +z wkładem open source od: </text> </panel> <panel label="Licencje" name="licenses_panel" /> diff --git a/indra/newview/skins/default/xui/pl/floater_about_land.xml b/indra/newview/skins/default/xui/pl/floater_about_land.xml index 1646db897a..9f8e110dd6 100644 --- a/indra/newview/skins/default/xui/pl/floater_about_land.xml +++ b/indra/newview/skins/default/xui/pl/floater_about_land.xml @@ -1,17 +1,26 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater name="floaterland" title="O DZIAŁCE"> + <floater.string name="Hours"> + [HOURS] godz. + </floater.string> + <floater.string name="Hour"> + godz. + </floater.string> <floater.string name="Minutes"> - [MINUTES] minuty + [MINUTES] min. </floater.string> <floater.string name="Minute"> - minuta + min. </floater.string> <floater.string name="Seconds"> - [SECONDS] sekund + [SECONDS] sek. </floater.string> <floater.string name="Remaining"> pozostało </floater.string> + <floater.string name="Always"> + Zawsze + </floater.string> <tab_container name="landtab"> <panel label="OGÓLNE" name="land_general_panel"> <panel.string name="new users only"> @@ -65,16 +74,10 @@ <text name="Owner:"> Właściciel: </text> - <text name="OwnerText"> - Ładowanie... - </text> <button label="Profil" name="Profile..." /> <text name="Group:"> Grupa: </text> - <text name="GroupText"> - Ładowanie... - </text> <button label="Ustaw" name="Set..." /> <check_box label="Udostępnij przypisywanie na Grupę" name="check deed" tool_tip="Oficer Grupy ma prawo przepisać prawo własności działki na Grupę. Działka wspierana jest przez przydziały pochodzące od członków Grupy." /> <button label="Przypisz" name="Deed..." tool_tip="Prawo przypisania działki na Grupę może dokonać jedynie oficer Grupy." /> @@ -111,7 +114,7 @@ <text name="DwellText"> Wczytywanie... </text> - <button label="Kup działkę" name="Buy Land..." /> + <button label="Kup działkę" label_selected="Kup działkę" name="Buy Land..." /> <button label="Sprzedaż przez Lindenów" name="Linden Sale..." tool_tip="Działka musi mieć Właściciela, zawartość oraz nie może być wystawiona na Aukcję." /> <button label="Skrypty" name="Scripts..."/> <button label="Kup dla Grupy" name="Buy For Group..." /> @@ -130,7 +133,7 @@ Działka zakupiona w tym Regionie może być łączona/dzielona. </panel.string> <panel.string name="can_not_change"> - Działka zakupiona w tym Regionie nie może być + Działka zakupiona w tym Regionie nie może być łączona/dzielona. </panel.string> <text name="estate_section_lbl"> @@ -151,9 +154,6 @@ <text name="covenant_timestamp_text"> Ostatnia modyfikacja Wed Dec 31 16:00:00 1969 </text> - <text name="region_name_text"> - Wczytywanie... - </text> <text name="region_landtype_lbl"> Typ: </text> @@ -220,8 +220,8 @@ <text name="Object Owners:"> Właściciele: </text> - <button name="Refresh List" tool_tip="Odśwież listę obiektów" /> - <button label="Zwróć obiekty" name="Return objects..." /> + <button label="Odśwież listę" label_selected="Odśwież listę" name="Refresh List" tool_tip="Odśwież listę obiektów" /> + <button label="Zwróć obiekty" label_selected="Zwróć obiekty" name="Return objects..." /> <name_list name="owner list"> <name_list.columns label="Typ" name="type" /> <name_list.columns label="Nazwa" name="name" /> @@ -250,7 +250,7 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki. Twoja działka bądź treść jaką zawiera klasyfikowana jest jako Moderate. </panel.string> <panel.string name="mature_check_adult_tooltip"> - Twoja działka bądź treść jaką zawiera klasyfikowana jest jako Adult + Twoja działka bądź treść jaką zawiera klasyfikowana jest jako Adult. </panel.string> <panel.string name="landing_point_none"> (brak) @@ -271,21 +271,21 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki. <text name="allow_label2"> Budowanie: </text> - <check_box label="Wszyscy" name="edit objects check" /> - <check_box label="Grupa" name="edit group objects check" /> + <check_box label="Wszyscy" name="edit objects check" tool_tip="Gdy ta opcja jest włączona, to Rezydenci mogą tworzyć i rezzować obiekty na Twojej działce." /> + <check_box label="Grupa" name="edit group objects check" tool_tip="Gdy ta opcja jest włączona, to osoby będące w grupie przypisanej do Twojej działki mogą na niej tworzyć i rezzować obiekty." /> <text name="allow_label3"> Nowe obiekty: </text> - <check_box label="Wszyscy" name="all object entry check" /> - <check_box label="Grupa" name="group object entry check" /> + <check_box label="Wszyscy" name="all object entry check" tool_tip="Gdy ta opcja jest włączona, to Rezydenci mogą przenosić istniejące obiekty z innych działek na tę działkę." /> + <check_box label="Grupa" name="group object entry check" tool_tip="Gdy ta opcja jest włączona, to osoby będące w grupie przypisanej do tej działki mogą na nią przenosić istniejące obiekty z innych działek." /> <text name="allow_label4"> Skrypty: </text> - <check_box label="Wszyscy" name="check other scripts" /> - <check_box label="Grupa" name="check group scripts" /> + <check_box label="Wszyscy" name="check other scripts" tool_tip="Gdy ta opcja jest włączona, to Rezydenci mogą uruchamiać skrypty na Twojej działce, włączając w to te z dodatków." /> + <check_box label="Grupa" name="check group scripts" tool_tip="Gdy ta opcja jest włączona, to osoby będące w grupie przypisanej do Twojej działki mogą na niej uruchamiać skrypty, włączając w to te z dodatków." /> <check_box label="Bezpieczna (brak uszkodzeń)" name="check safe" tool_tip="Wybrana - działka jest bezpieczna - uszkodzenia w walce są zablokowane. Nie jest wybrana - uszkodzenia w walce są włączone." /> <check_box label="Popychanie niedozwolone" name="PushRestrictCheck" tool_tip="Nie pozwalaj skryptom na popychanie. Wybranie tej opcji może być przydatne do ograniczenia zakłóceń spokoju na Twojej działce." /> - <check_box label="Wyświetlaj w wyszukiwarce (30L$/tyg.)" name="ShowDirectoryCheck" tool_tip="Udostępnij ukazywanie się nazwy działki w wyszukiwarce" /> + <check_box label="Wyświetlaj w wyszukiwarce (30L$/tyg.)" name="ShowDirectoryCheck" tool_tip="Udostępnij ukazywanie się nazwy działki w wyszukiwarce"/> <combo_box name="land category"> <combo_box.item label="Każda kategoria" name="item0" /> <combo_box.item label="Lokalizacja Lindenów" name="item1" /> @@ -301,24 +301,24 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki. <combo_box.item label="Wynajem" name="item13" /> <combo_box.item label="Inna" name="item12" /> </combo_box> - <check_box label="Treść Moderate" name="MatureCheck" /> + <check_box label="Treść Moderate" name="MatureCheck"/> <text name="Snapshot:"> Zdjęcie: </text> <texture_picker name="snapshot_ctrl" tool_tip="Kliknij by wybrać zdjęcie" /> - <text name="allow_label5"> + <text name="allow_see_label"> Awatary na innych działkach mogą rozmawiać/widzieć awatary na tej działce </text> - <check_box name="SeeAvatarsCheck" tool_tip="Pozwala Rezydentom z innych działek widzieć i rozmawiać z Rezydentami na tej działce - oraz Tobie, widzieć ich i rozmawiać z nimi." /> + <check_box label="Widzieć awatary" name="SeeAvatarsCheck" tool_tip="Pozwala Rezydentom z innych działek widzieć i rozmawiać z Rezydentami na tej działce - oraz Tobie, widzieć ich i rozmawiać z nimi." /> <text name="landing_point"> Punkt Lądowania: [LANDING] </text> <button label="Ustaw" label_selected="Ustaw" name="Set" tool_tip="Ustal miejsce lądowania dla przybywających gości. Używa położenia Twojego awatara na tej działce." /> - <button label="Wyczyść" label_selected="Wyczyść" name="Clear" tool_tip="Usuń dotychczasowe miejsce lądowania" /> + <button label="Wyczyść" label_selected="Wyczyść" name="Clear" tool_tip="Usuń dotychczasowe miejsce lądowania." /> <text name="Teleport Routing: "> Trasa teleportacji: </text> - <combo_box name="landing type" tool_tip="Trasa teleportacji - ustaw w jaki sposób będzie się odbywać proces teleportacji na działce"> + <combo_box name="landing type" tool_tip="Trasa teleportacji - ustaw w jaki sposób będzie się odbywać proces teleportacji na działce."> <combo_box.item label="Zablokowana" name="Blocked" /> <combo_box.item label="Punkt Lądowania" name="LandingPoint" /> <combo_box.item label="Gdziekolwiek" name="Anywhere" /> @@ -345,18 +345,18 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki. Obiekty używające tej tekstury będą wyświetlały film lub stronę internetową po naciśnięciu przycisku odtwarzania. Wybierz miniaturę, jeśli chcesz zmienić teksturę. </text> <check_box label="Skaluj automatycznie" name="media_auto_scale" tool_tip="Wybranie tej opcji dobierze rozmiar zawartości mediów dla tej działki automatycznie. Może to mieć znaczący wpływ na jakość odtwarzanego materiału - może on być odtwarzany wolniej i w gorszej jakości, ale żadne dalsze działania nie będą potrzebne." /> - <text name="media_size" tool_tip="Rozmiar dla ładowania mediów internetowych. Zostaw 0 dla ustawień domyślnych."> + <text name="media_size" tool_tip="Rozmiar dla przesyłanych mediów internetowych. Zostaw 0 dla ustawień domyślnych."> Rozmiar: </text> - <spinner name="media_size_width" tool_tip="Rozmiar dla ładowania mediów internetowych. Zostaw 0 dla ustawień domyślnych." /> - <spinner name="media_size_height" tool_tip="Rozmiar dla ładowania mediów internetowych. Zostaw 0 dla ustawień domyślnych." /> + <spinner name="media_size_width" tool_tip="Rozmiar dla przesyłanych mediów internetowych. Zostaw 0 dla ustawień domyślnych." /> + <spinner name="media_size_height" tool_tip="Rozmiar dla przesyłanych mediów internetowych. Zostaw 0 dla ustawień domyślnych." /> <text name="pixels"> pikseli </text> <text name="Options:"> Opcje: </text> - <check_box label="Odtwarzanie mediów w pętli" name="media_loop" tool_tip="Powtarzaj odtwarzanie mediów w pętli. Po wyświetleniu materiału odtwarzanie rozpocznie się od początku." /> + <check_box label="Odtwarzaj w pętli" name="media_loop" tool_tip="Powtarzaj odtwarzanie mediów w pętli. Po wyświetleniu materiału odtwarzanie rozpocznie się od początku." /> </panel> <panel label="DŹWIĘK" name="land_audio_panel"> <text name="MusicURL:"> @@ -377,6 +377,7 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki. <check_box label="Rozmowy włączone" name="parcel_enable_voice_channel" /> <check_box label="Rozmowy włączone (ustawione przez Majątek)" name="parcel_enable_voice_channel_is_estate_disabled" /> <check_box label="Ogranicz komunikację głosową do obszaru tej działki" name="parcel_enable_voice_channel_local" /> + <check_box label="Ogranicz MOAP do obecnej działki" name="obscure_moap" tool_tip="Media na primach znajdujących się poza tą działką nie powinny odtwarzać się automatycznie dla rezydentów będących na niej - i odwrotnie." /> </panel> <panel label="DOSTĘP" name="land_access_panel"> <panel.string name="access_estate_defined"> @@ -385,13 +386,10 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki. <panel.string name="estate_override"> Jedna lub więcej z tych opcji ustawiona jest z poziomu Majątku </panel.string> - <check_box name="public_access" label="Dostęp publiczny (brak zaznaczenia tej opcji = widoczne linie zakazu)" /> - <text name="Only Allow"> - Umożliwiaj dostęp tylko dla: - </text> - <check_box label="Rezydentów zarejestrowanych w systemie płatniczym Linden Lab [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Zbanuj Rezydentów niezarejestrowanych w systemie płatniczym Linden Lab. Odwiedź [SUPPORT_SITE], aby uzyskać więcej informacji." /> - <check_box label="Rezydentów, którzy mają 18+ lat [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Zbanuj Rezydetów, którzy mają mniej niż 18 lat. Odwiedź [SUPPORT_SITE], aby uzyskać więcej informacji." /> - <check_box label="Udostępnij wejście grupie [GROUP]" name="GroupCheck" tool_tip="Ustaw Grupę w głównej zakładce." /> + <check_box label="Każdy może odwiedzać (brak zaznaczenia = widoczne linie zakazu)" name="public_access" /> + <check_box label="Osoba musi mieć 18+ lat [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Zbanuj Rezydetów, którzy mają mniej niż 18 lat. Odwiedź [SUPPORT_SITE], aby uzyskać więcej informacji." /> + <check_box label="Osoba musi mieć dane płatnicze w systemie Linden Lab [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Zbanuj Rezydentów niezarejestrowanych w systemie płatniczym Linden Lab. Odwiedź [SUPPORT_SITE], aby uzyskać więcej informacji." /> + <check_box label="Umożliwiaj wejście bez ograniczeń grupie [GROUP]" name="GroupCheck" tool_tip="Ustaw Grupę w głównej zakładce." /> <check_box label="Sprzedaj przepustki:" name="PassCheck" tool_tip="Otwórz tymczasowy dostęp do tej działki" /> <combo_box name="pass_combo"> <combo_box.item label="Każdemu" name="Anyone" /> @@ -399,22 +397,32 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki. </combo_box> <spinner label="Cena w L$:" name="PriceSpin" /> <spinner label="Godziny dostępu:" name="HoursSpin" /> - <panel name="Allowed_layout_panel"> - <text label="Zawsze Zezwalaj" name="AllowedText"> - Dozwoleni Rezydenci - </text> - <name_list name="AccessList" tool_tip="([LISTED] na liście, [MAX] maksimum)" /> - <button label="Dodaj" name="add_allowed" /> - <button label="Usuń" label_selected="Usuń" name="remove_allowed" /> - </panel> - <panel name="Banned_layout_panel"> - <text label="Banuj" name="BanCheck"> - Zbanowani Rezydenci - </text> - <name_list name="BannedList" tool_tip="([LISTED] na liście, [MAX] maksimum)" /> - <button label="Dodaj" name="add_banned" /> - <button label="Usuń" label_selected="Usuń" name="remove_banned" /> - </panel> + <text name="OwnerLimited"> + (właściciel Majątku może ograniczać te wybory) + </text> + <layout_stack name="access_stack"> + <layout_panel name="Allowed_layout_panel"> + <text label="Zawsze zezwalaj" name="AllowedText"> + Zawsze zezwalaj ([COUNT]/[MAX]) + </text> + <name_list name="AccessList" tool_tip="([LISTED] na liście, [MAX] maksimum)"/> + <button label="Dodaj" name="add_allowed"/> + <button label="Usuń" label_selected="Usuń" name="remove_allowed"/> + </layout_panel> + <layout_panel name="Banned_layout_panel"> + <text label="Banuj" name="BanCheck"> + Zbanowani ([COUNT]/[MAX]) + </text> + <name_list name="BannedList" tool_tip="([LISTED] na liście, [MAX] maksimum)"> + <columns label="Imię" name="name" /> + <columns label="Czas" name="duration" /> + </name_list> + <button label="Dodaj" name="add_banned"/> + <button label="Usuń" label_selected="Usuń" name="remove_banned"/> + </layout_panel> + </layout_stack> </panel> + <panel label="PRZYGODY" name="land_experiences_panel"/> + <panel label="OTOCZENIE" name="land_environment_panel" /> </tab_container> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/pl/floater_animation_anim_preview.xml index ff2fee6f2f..c56f103d21 100644 --- a/indra/newview/skins/default/xui/pl/floater_animation_anim_preview.xml +++ b/indra/newview/skins/default/xui/pl/floater_animation_anim_preview.xml @@ -6,6 +6,6 @@ <text name="description_label"> Opis: </text> - <button label="Załaduj ([AMOUNT]L$)" name="ok_btn" /> + <button label="Prześlij ([AMOUNT]L$)" name="ok_btn" /> <button label="Anuluj" label_selected="Anuluj" name="cancel_btn" /> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/pl/floater_animation_bvh_preview.xml index 18212fad9c..63b0931b2b 100644 --- a/indra/newview/skins/default/xui/pl/floater_animation_bvh_preview.xml +++ b/indra/newview/skins/default/xui/pl/floater_animation_bvh_preview.xml @@ -173,6 +173,6 @@ Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund. Nie można wczytać pliku animacji. Doradzamy eksport plików BVH z Poser 4. </text> - <button label="Załaduj ([AMOUNT]L$)" name="ok_btn" /> + <button label="Prześlij ([AMOUNT]L$)" name="ok_btn" /> <button label="Anuluj" name="cancel_btn" /> </floater> diff --git a/indra/newview/skins/default/xui/pl/floater_associate_listing.xml b/indra/newview/skins/default/xui/pl/floater_associate_listing.xml index b5464dd59b..7ef99457c9 100644 --- a/indra/newview/skins/default/xui/pl/floater_associate_listing.xml +++ b/indra/newview/skins/default/xui/pl/floater_associate_listing.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="associate listing" title="PRZYPISANE PRZEDMIOTY"> - <text name="message">ID przedmiotu:</text> +<floater name="associate listing" title="PRZYPISZ RZECZ"> + <text name="message">ID rzeczy:</text> <line_editor name="listing_id">Wpisz tutaj ID</line_editor> - <button label="OK" name="OK"/> <button label="Anuluj" name="Cancel"/> </floater> diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml index 87e318be1b..e668c6cc20 100644 --- a/indra/newview/skins/default/xui/pl/notifications.xml +++ b/indra/newview/skins/default/xui/pl/notifications.xml @@ -1,10 +1,14 @@ <?xml version="1.0" encoding="utf-8" ?> <notifications> <global name="skipnexttime"> - Nie pokazuj tego następnym razem + Nie pokazuj tego ponownie + </global> + <global name="skipnexttimesessiononly"> + Nie pokazuj tego ponownie +(dla obecnej sesji) </global> <global name="alwayschoose"> - Zawsze wybieraj tą opcję + Zawsze wybieraj tę opcję </global> <global name="implicitclosebutton"> Zamknij @@ -20,20 +24,25 @@ Szczegóły błędu: Błąd o nazwie '[_NAME]' nie został odnaleziony [CONTROLS] </notification> <notification name="TutorialNotFound"> - Brak samouczka na ten temat + Brak samouczka na ten temat. </notification> <notification name="GenericAlertYesCancel"> [MESSAGE] <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Tak" /> </notification> <notification name="BadInstallation"> - Podczas aktualizacji [APP_NAME] wystąpił błąd. Proszę [http://get.secondlife.com odwiedzić stronę] aby ściągnąć ostatnią wersję klienta. + Instalacja [APP_NAME] jest uszkodzona. Proszę [http://get.secondlife.com pobrać nową kopię] przeglądarki i ponownie ją zainstalować. </notification> <notification name="LoginFailedNoNetwork"> Nie można połączyć z [SECOND_LIFE_GRID]. '[DIAGNOSTIC]' Upewnij się, że Twoje połączenie z internetem działa. </notification> + <notification name="LoginFailedToParse"> + Przeglądarka otrzymała zniekształconą odpowiedź z serwera. Upewnij się, że połączenie internetowe działa prawidłowo i spróbuj ponownie później. + +Jeśli uważasz, że to błąd - skontaktuj się z pomocą techniczną. + </notification> <notification name="MessageTemplateNotFound"> Szablon komunikatu dla [PATH] nie został odnaleziony. </notification> @@ -72,11 +81,96 @@ Foldery nie zostały wysłane na Marketplace z powodu błędu sieci lub systemu. Inicjalizacja Marketplace nieudana z powodu błędu sieci lub systemu. Spróbuj później. </notification> + <notification name="StockPasteFailed"> + Kopiowanie lub przeniesienie do folderu Magazynowego nie powiodło się: + +'[ERROR_CODE]' + </notification> + <notification name="MyOutfitsPasteFailed"> + Jeden lub więcej przedmiotów nie może być użyty w "Strojach" + </notification> + <notification name="MerchantPasteFailed"> + Kopiowanie lub przenoszenie przedmiotów na Marketplace nie powiodło się: + +'[ERROR_CODE]' + </notification> + <notification name="MerchantTransactionFailed"> + Transakcja z Marketplace nie powiodła się: + +[ERROR_REASON][ERROR_DESCRIPTION] + </notification> + <notification name="MerchantUnprocessableEntity"> + Wylistowanie tej rzeczy lub aktywowanie folderu z wersją nie było możliwe. Zazwyczaj jest to spowodowane brakującymi informacjami w formularzu z opisem przedmiotu, ale może to również wynikać z błędów w strukturze folderów. Zmień opis przedmiotu lub sprawdź foldery, aby znaleźć błędy. + </notification> + <notification name="MerchantListingFailed"> + Listowanie na Marketplace nie powiodło się: + + '[ERROR_CODE]' + </notification> + <notification name="MerchantFolderActivationFailed"> + Aktywacja tego folderu wersji nie powiodła się: + + '[ERROR_CODE]' + </notification> + <notification name="MerchantForceValidateListing"> + Aby wylistowanie tej rzeczy było możliwe hierarchia w jej zawartości została automatycznie naprawiona. + <usetemplate ignoretext="Ostrzegaj, gdy wylistowanie rzeczy automatycznie naprawia hierarchię zawartości" name="okignore" /> + </notification> + <notification name="ConfirmMerchantActiveChange"> + Jeśli kontynuujesz, to zmieni się aktywna zawartość tej rzeczy. Czy chcesz kontynuować? + <usetemplate ignoretext="Potwierdź przed zmodyfikowaniem aktywnej rzeczy na Marketplace" name="okcancelignore" notext="Anuluj" /> + </notification> + <notification name="ConfirmMerchantMoveInventory"> + Przedmioty przeciągnięte do okna listowania na Marketplace są przenoszone z ich oryginalnych lokalizacji, a nie kopiowane. Czy chcesz kontynuować? + <usetemplate ignoretext="Potwierdź, zanim prześlę na Marketplace przedmiot z mojej Szafy" name="okcancelignore" notext="Anuluj" /> + </notification> + <notification name="ConfirmListingCutOrDelete"> + Przeniesienie lub usunięcie folderu usunie również Twój przedmiot na Marketplace. Jeśli chcesz, aby przedmiot był ciągle widoczny na Marketplace musisz przesunąć lub usunąć zawartość folderu z wersją, którą chcesz zmodyfikować. Czy chcesz kontynuować? + <usetemplate ignoretext="Potwierdź, zanim usunę lub przeniosę przedmiot z Marketplace" name="okcancelignore" notext="Anuluj" /> + </notification> + <notification name="ConfirmCopyToMarketplace"> + Nie masz praw do skopiowania jednego lub więcej obiektów na Marketplace. Możesz je przenieść lub pozostawić. + <usetemplate canceltext="Anuluj" ignoretext="Potwierdź, zanim wyślę na Marketplace przedmioty bez praw kopiowania" name="yesnocancelbuttons" notext="Nie przenoś" yestext="Przenieś"/> + </notification> + <notification name="ConfirmMerchantUnlist"> + Jeśli kontynuujesz, to ta rzecz zostanie usunięta z listy. Czy chcesz kontynuować? + <usetemplate ignoretext="Potwierdź, zanim usunę z listy rzecz na Marketplace" name="okcancelignore" notext="Anuluj" /> + </notification> + <notification name="ConfirmMerchantClearVersion"> + Jeśli kontynuujesz, to folder wersji tej rzeczy zostanie zdeaktywowany. Czy chcesz kontynuować? + <usetemplate ignoretext="Potwierdź przed wyłączeniem folderu wersji dla rzeczy na Marketplace" name="okcancelignore" notext="Anuluj" /> + </notification> + <notification name="AlertMerchantListingNotUpdated"> + Ta rzecz nie może zostać zaktualizowana. +[[URL] Kliknij tutaj] aby zaktualizować ją na Marketplace. + </notification> + <notification name="AlertMerchantListingCannotWear"> + Nie możesz założyć ubrań lub części ciała, które znajdują się w folderze listy rzeczy Marketplace. + </notification> + <notification name="AlertMerchantListingInvalidID"> + Nieprawidłowy ID rzeczy. + </notification> + <notification name="AlertMerchantListingActivateRequired"> + Istnieje kilka, lub żadna, wersji folderu dla tej rzeczy. Będziesz musiał/a wybrać i uaktywnić jedną oddzielnie później. + <usetemplate ignoretext="Powiadamiaj o aktywacji folderu wersji, gdy tworzę rzecz z kilkoma folderami wersji" name="okignore" /> + </notification> + <notification name="AlertMerchantStockFolderSplit"> + Przedmioty z ograniczonymi zasobami magazynowymi różnych typów zostały rozdzielone do osobnych folderów, aby ogólna hierarchia katalogów umożliwiała ich listowanie. + <usetemplate ignoretext="Powiadom, gdy folder Magazynowy jest dzielony przed listowaniem" name="okignore" /> + </notification> + <notification name="AlertMerchantStockFolderEmpty"> + Twoja rzecz została usunięta z listy, ponieważ nie ma jej już w Magazynie. Musisz dodać więcej jej jednostek do folderu Magazynowego, aby można było ją ponownie wyświetlać na liście. + <usetemplate ignoretext="Powiadom, gdy rzecz jest zdjęta z listy, bo folder zasobów Magazynowych jest pusty" name="okignore" /> + </notification> + <notification name="AlertMerchantVersionFolderEmpty"> + Twoja rzecz została usunięta z listy, ponieważ folder wersji jest pusty. Musisz dodać więcej jej jednostek do folderu wersji, aby można było ją ponownie wyświetlać na liście. + <usetemplate ignoretext="Powiadom, gdy rzecz jest zdjęta z listy, bo folder wersji jest pusty" name="okignore" /> + </notification> <notification name="WriteAnimationFail"> Problem w zapisywaniu danych animacji. Spróbuj ponownie za kilka minut. </notification> <notification name="UploadAuctionSnapshotFail"> - W trakcie ładowania obrazu aukcji pojawił się problem z następującego powodu: [REASON]. + W trakcie przesyłania obrazu aukcji pojawił się problem z następującego powodu: [REASON]. </notification> <notification name="UnableToViewContentsMoreThanOne"> Nie można przeglądać zawartości więcej niż jednego obiektu naraz. @@ -89,9 +183,12 @@ Wybierz pojedynczy obiekt i spróbuj jeszcze raz. <notification name="FriendsAndGroupsOnly"> Osoby spoza listy znajomych nie będą wiedzieć, że zdecydowałeś/aś się ignorować ich rozmowy głosowe i wiadomości IM. </notification> - <notification name="FavoritesOnLogin"> + <notification name="FavoritesOnLogin"> Pamiętaj: kiedy włączysz tą opcję to każdy kto używa tego komputera będzie mógł zobaczyć Twoją listę ulubionych miejsc. </notification> + <notification name="AllowMultipleViewers"> + Uruchamianie kilku przeglądarek Second Life nie podlega wsparciu. Może prowadzić do kolizji pamięci podręcznej tekstur, jej uszkodzeń, pogorszenia efektów wizualnych oraz wydajności. + </notification> <notification name="GrantModifyRights"> Udzielenie praw modyfikacji innemu Rezydentowi umożliwia modyfikację, usuwanie lub wzięcie JAKIEGOKOLWIEK z Twoich obiektów. Używaj tej opcji z rozwagą! Czy chcesz udzielić prawa do modyfikacji [NAME]? @@ -110,6 +207,9 @@ Czy chcesz dać prawa modyfikacji wybranym osobom? Czy chcesz odebrać prawa modyfikacji wybranym Rezydentom? <usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak" /> </notification> + <notification name="GroupNameLengthWarning"> + Nazwa grupy musi zawierać od [MIN_LEN] do [MAX_LEN] znaków. + </notification> <notification name="UnableToCreateGroup"> Założenie grupy nie jest możliwe. [MESSAGE] @@ -171,6 +271,17 @@ Jeśli nie chcesz, aby te przywileje były dłużej przypisane do tej roli, to w Zamierzasz wyrzucić [COUNT] osób z grupy. <usetemplate ignoretext="Potwierdź wyrzucenie kilku osób z grupy" name="okcancelignore" notext="Anuluj" yestext="Wyrzuć" /> </notification> + <notification name="BanGroupMemberWarning"> + Zamierzasz zbanować [AVATAR_NAME] z grupy. + <usetemplate ignoretext="Potwierdź przed zbanowaniem osoby z grupy" name="okcancelignore" notext="Anuluj" yestext="Banuj" /> + </notification> + <notification name="BanGroupMembersWarning"> + Zamierzasz zbanować [COUNT] osób z grupy. + <usetemplate ignoretext="Potwierdź przed zbanowaniem z grupy kilku osób na raz" name="okcancelignore" notext="Anuluj" yestext="Banuj" /> + </notification> + <notification name="GroupBanUserOnBanlist"> + Niektórzy rezydenci nie dostali zaproszenia, ponieważ są zbanowani w grupie. + </notification> <notification name="AttachmentDrop"> Wybrałeś/aś opcję upuszczenia swojego dodatku. Czy chcesz kontynuować? @@ -182,7 +293,7 @@ Chcesz kontynuować? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Dołącz" /> </notification> <notification name="JoinGroupNoCost"> - Dołączasz do grupy [NAME]. + Dołączasz do grupy <nolink>[NAME]</nolink>. Czy chcesz kontynuować? <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Dołącz" /> </notification> @@ -194,7 +305,30 @@ Masz za mało L$ żeby do niej dołączyć. Stworzenie tej grupy kosztuje [COST]L$. W grupie powinna być więcej niż jedna osoba, w przeciwnym razie zostanie ona na zawsze skasowana. Zaproś kogoś w ciągu 48 godzin. - <usetemplate canceltext="Anuluj" name="okcancelbuttons" notext="Anuluj" yestext="Stwórz grupę za 100L$" /> + <usetemplate canceltext="Anuluj" name="okcancelbuttons" notext="Anuluj" yestext="Stwórz grupę za [COST]L$" /> + </notification> + <notification name="JoinGroupInaccessible"> + Ta grupa nie jest dla Ciebie dostępna. + </notification> + <notification name="JoinGroupError"> + Wystąpił błąd podczas próby dołączenia do grupy. + </notification> + <notification name="JoinGroupErrorReason"> + Nie można dołączyć do grupy: [reason] + </notification> + <notification name="JoinGroupTrialUser"> + Przepraszamy, ale konta próbne nie mogą dołączać do grup. + </notification> + <notification name="JoinGroupMaxGroups"> + Nie możesz dołączyć do '<nolink>[group_name]</nolink>': +Jesteś już w [group_count] grupach, a maksymalny dozwolony limit to [max_groups] + </notification> + <notification name="JoinGroupClosedEnrollment"> + Nie możesz dołączyć do '<nolink>[group_name]</nolink>': +Grupa nie umożliwia już swobodnego dołączania. + </notification> + <notification name="JoinGroupInsufficientFunds"> + Nie można przekazać wymaganej opłaty wstępu ([membership_fee] L$). </notification> <notification name="LandBuyPass"> Za [COST]L$ możesz odwiedzić tą działkę ('[PARCEL_NAME]') na [TIME] godzin. Chcesz kupić przepustkę? @@ -217,10 +351,9 @@ Cena wynosi [SALE_PRICE]L$, a sprzedaż będzie autoryzowana dla [NAME]. <usetemplate name="okcancelbuttons" notext="Anuluj" /> </notification> <notification name="ReturnObjectsDeededToGroup"> - Czy na pewno chcesz zwrócić wszystkie obiekty udostępnione grupie '[NAME]' na tej działce do szaf ich poprzednich właścicieli? + Czy na pewno chcesz zwrócić wszystkie obiekty udostępnione grupie '<nolink>[NAME]</nolink>' na tej działce do szaf ich poprzednich właścicieli? -*UWAGA* Wybrana opcja spowoduje usunięcie wszystkich obiektów -udostępnionych grupie, które nie mają praw transferu! +*UWAGA* Wybrana opcja spowoduje usunięcie wszystkich obiektów udostępnionych grupie, które nie mają praw transferu! Obiekty: [N] <usetemplate name="okcancelbuttons" notext="Anuluj" /> @@ -256,7 +389,7 @@ Obiekty: [N] <usetemplate name="okcancelbuttons" notext="Anuluj" /> </notification> <notification name="ReturnAllTopObjects"> - Czy na pewno chcesz zwrócić wszystkie wymienione obiekty znajdujące się na tej działce do szaf ich właścicieli? + Czy na pewno chcesz zwrócić wszystkie wymienione obiekty znajdujące się na tej działce do szaf ich właścicieli? Spowoduje to zwrot WSZYSTKICH oskryptowanych obiektów w regionie! <usetemplate name="okcancelbuttons" notext="Anuluj" /> </notification> <notification name="DisableAllTopObjects"> @@ -264,7 +397,7 @@ Obiekty: [N] <usetemplate name="okcancelbuttons" notext="Anuluj" /> </notification> <notification name="ReturnObjectsNotOwnedByGroup"> - Zwrócić obiekty z tej działki, które NIE są udostępnione grupie [NAME] do ich właścicieli? + Zwrócić obiekty z tej działki, które NIE są udostępnione grupie <nolink>[NAME]</nolink> do ich właścicieli? Obiekty: [N] <usetemplate name="okcancelbuttons" notext="Anuluj" /> @@ -299,14 +432,23 @@ W celu umieszczenia mediów tylko na jednej powierzchni skorzystaj z narzędzia <notification name="ErrorEncodingSnapshot"> Błąd w kodowaniu zdjęcia. </notification> + <notification name="ErrorPhotoCannotAfford"> + Potrzebujesz [COST]L$ aby zapisać zdjęcie do swojej Szafy. Możesz zamiast tego kupić L$ lub zapisać zdjęcie na swoim komputerze. + </notification> + <notification name="ErrorCannotAffordUpload"> + Potrzebujesz [COST]L$ aby przesłać ten element. + </notification> + <notification name="ErrorTextureCannotAfford"> + Potrzebujesz [COST]L$ aby zapisać teksturę do swojej Szafy. Możesz zamiast tego kupić L$ lub zapisać teksturę na swoim komputerze. + </notification> <notification name="ErrorUploadingPostcard"> - W trakcie ładowania zdjęcia pojawił się problem z następującego powodu: [REASON] + W trakcie przesyłania zdjęcia pojawił się problem z następującego powodu: [REASON] </notification> <notification name="ErrorUploadingReportScreenshot"> - W trakcie ładowania zdjęcia ekranu do raportu pojawił się problem z następującego powodu: [REASON] + W trakcie przesyłania zdjęcia ekranu do raportu pojawił się problem z następującego powodu: [REASON] </notification> <notification name="MustAgreeToLogIn"> - Musisz zaakceptować Warunki Umowy (Terms of Service) by kontynuować logowanie się do [SECOND_LIFE]. + Musisz zaakceptować Regulamin (Terms and Conditions), Politykę Prywatności (Privacy Policy) i Warunki korzystania z Usług (Terms of Service) by kontynuować logowanie się do [SECOND_LIFE]. </notification> <notification name="CouldNotPutOnOutfit"> Założenie stroju nie powiodło się. @@ -322,6 +464,9 @@ Limit [MAX_ATTACHMENTS] dodatków został przekroczony. Proszę najpierw odłąc <notification name="CannotWearInfoNotComplete"> Nie możesz założyć tego przedmiotu, ponieważ jeszcze się nie załadował do końca. Spróbuj ponownie za kilka minut. </notification> + <notification name="MustEnterPasswordToLogIn"> + Należy wprowadzić hasło. + </notification> <notification name="MustHaveAccountToLogIn"> Należy wprowadzić nazwę użytkownika. @@ -332,10 +477,10 @@ Potrzebujesz konta aby się zalogować do [SECOND_LIFE]. Czy chcesz utworzyć je Należy wprowadzić nazwę użytkownika lub imię oraz nazwisko Twojego awatara w pole nazwy użytkownika, a następnie ponownie się zalogować. </notification> <notification name="InvalidGrid"> - '[GRID]' nie jest prawidłowym identyfikatorem siatki. + '[GRID]' nie jest prawidłowym identyfikatorem świata. </notification> <notification name="InvalidLocationSLURL"> - Twój punkt startowy nie znajduje się na prawidłowej siatce. + Twój punkt startowy nie znajduje się w prawidłowym świecie. </notification> <notification name="DeleteClassified"> Usunąć reklamę '[NAME]'? @@ -354,10 +499,22 @@ Czy na pewno chcesz kontynuować? <notification name="ClassifiedInsufficientFunds"> Nie posiadasz wystarczających środków aby dodać reklamę. </notification> - <notification name="DeleteAvatarPick"> + <notification name="ProfileDeleteClassified"> + Usunąć reklamę <nolink>[CLASSIFIED]</nolink>? + <usetemplate name="okcancelbuttons" notext="Anuluj" /> + </notification> + <notification name="ProfileDeletePick"> Usunąć miejsce <nolink>[PICK]</nolink>? <usetemplate name="okcancelbuttons" notext="Anuluj" /> </notification> + <notification name="ProfileUnpublishedClassified"> + Masz nieopublikowane reklamy. Przepadną, jeśli zamkniesz okno. + <usetemplate name="okcancelbuttons" notext="Anuluj" /> + </notification> + <notification name="ProfileUnsavedChanges"> + Masz niezapisane zmiany. + <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Odrzuć" yestext="Zapisz" /> + </notification> <notification name="DeleteOutfits"> Skasować wybrane stroje? <usetemplate name="okcancelbuttons" notext="Anuluj" /> @@ -372,14 +529,6 @@ Czy na pewno chcesz kontynuować? <notification name="SelectHistoryItemToView"> Wybierz obiekt z historii, który chcesz zobaczyć. </notification> - <notification name="ResetShowNextTimeDialogs"> - Czy chcesz aktywować ponownie wszystkie te powiadomienia, przy których wcześniej zaznaczono 'nie pokazuj ponownie'? - <usetemplate name="okcancelbuttons" notext="Anuluj" /> - </notification> - <notification name="SkipShowNextTimeDialogs"> - Czy chcesz dezaktywować wszystkie powiadomienia, jakie tylko można? - <usetemplate name="okcancelbuttons" notext="Anuluj" /> - </notification> <notification name="CacheWillClear"> Bufor danych zostanie wyczyszczony po restarcie aplikacji [APP_NAME]. </notification> @@ -390,6 +539,9 @@ Pamiętaj: Opcja ta wyczyszcza bufor danych. <notification name="ChangeConnectionPort"> Ustawienia portu zostają zaktualizowane po restarcie aplikacji [APP_NAME]. </notification> + <notification name="ChangeDeferredDebugSetting"> + To ustawienie debugowania zostanie zaktualizowane po restarcie aplikacji [APP_NAME]. + </notification> <notification name="ChangeSkin"> Nowa skórka pojawi się po restarcie aplikacji [APP_NAME]. </notification> @@ -405,7 +557,11 @@ Pamiętaj: Opcja ta wyczyszcza bufor danych. <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie zapisuj" yestext="Zapisz" /> </notification> <notification name="DeleteNotecard"> - Usunąć notkę? + Czy na pewno chcesz usunąć tą notkę? + <usetemplate ignoretext="Potwierdź usuwanie notki" name="okcancelignore" notext="Anuluj" /> + </notification> + <notification name="LoadPreviousReportScreenshot"> + Czy chcesz użyć poprzedniego zrzutu ekranu dla swojego zgłoszenia? <usetemplate name="okcancelbuttons" notext="Anuluj" /> </notification> <notification name="GestureSaveFailedTooManySteps"> @@ -451,6 +607,10 @@ Obiekt może znajdować się zbyt daleko albo został usunięty. <notification name="CannotDownloadFile"> Nie można pobrać pliku </notification> + <notification name="MediaFileDownloadUnsupported"> + Zażądano pobrania pliku, jaki nie jest obsługiwany w [SECOND_LIFE]. + <usetemplate ignoretext="Ostrzegaj o pobieraniu nieobsługiwanych typów plików" name="okignore" /> + </notification> <notification name="CannotWriteFile"> Nie można zapisać pliku [[FILE]] </notification> @@ -460,23 +620,11 @@ Obiekt może znajdować się zbyt daleko albo został usunięty. Odwiedzić [_URL], aby uzyskać więcej informacji? <usetemplate ignoretext="Sprzęt w moim komputerze nie jest wspierany" name="okcancelignore" notext="Nie" yestext="Tak" /> </notification> - <notification name="IntelOldDriver"> - Prawdopodobnie istnieje nowszy sterownik dla Twojej karty graficznej. Aktualizacja sterowników graficznych może znacznie zwiększyć wydajność. - -Odwiedzić [_URL] aby sprawdzić, czy są nowsze sterowniki? - <usetemplate ignoretext="Moje sterowniki grafiki są przestarzałe" name="okcancelignore" notext="Nie" yestext="Tak" /> - </notification> - <notification name="AMDOldDriver"> - Prawdopodobnie istnieje nowszy sterownik dla Twojej karty graficznej. Aktualizacja sterowników graficznych może znacznie zwiększyć wydajność. - -Odwiedzić [_URL] aby sprawdzić, czy są nowsze sterowniki? - <usetemplate ignoretext="Moje sterowniki grafiki są przestarzałe" name="okcancelignore" notext="Nie" yestext="Tak" /> - </notification> - <notification name="NVIDIAOldDriver"> + <notification name="OldGPUDriver"> Prawdopodobnie istnieje nowszy sterownik dla Twojej karty graficznej. Aktualizacja sterowników graficznych może znacznie zwiększyć wydajność. -Odwiedzić [_URL] aby sprawdzić, czy są nowsze sterowniki? - <usetemplate ignoretext="Moje sterowniki grafiki są przestarzałe" name="okcancelignore" notext="Nie" yestext="Tak" /> +Odwiedzić [URL] aby sprawdzić, czy są nowsze sterowniki? + <usetemplate ignoretext="Moje sterowniki grafiki są przestarzałe" name="okcancelignore" notext="Nie" yestext="Tak"/> </notification> <notification name="UnknownGPU"> Twój system jest wyposażony w kartę graficzną, która nie jest rozpoznana przez [APP_NAME]. @@ -500,7 +648,7 @@ Możesz podnieść jakość grafiki pod Ustawienia > Grafika. </notification> <notification name="CannotCopyWarning"> Nie masz pozwolenia na kopiowanie następujących obiektów: -[ITEMS] +<nolink>[ITEMS]</nolink> i stracisz je w momencie przekazania. Czy na pewno chcesz oddać te obiekty? <usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak" /> </notification> @@ -547,7 +695,7 @@ Ta osoba tymczasowo nie będzie mogła się poruszać, używać czatu (IM) lub o <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Wyrzuć" /> </notification> <notification name="EjectAvatarFromGroup"> - Wyrzuciłeś/aś [AVATAR_NAME] z grupy [GROUP_NAME] + Wyrzuciłeś/aś [AVATAR_NAME] z grupy <nolink>[GROUP_NAME]</nolink>. </notification> <notification name="AcquireErrorTooManyObjects"> BŁĄD OTRZYMYWANIA: Zbyt wiele wybranych obiektów. @@ -562,6 +710,9 @@ Przemieść wszystkie otrzymywane obiekty do jednego regionu. Odwiedzić [_URL] po więcej informacji na temat zakupu L$? <usetemplate name="okcancelbuttons" notext="Anuluj" /> </notification> + <notification name="MuteLimitReached"> + Nie można dodać kolejnego wpisu do listy zablokowanych, ponieważ limit [MUTE_LIMIT] rekordów został osiągnięty. + </notification> <notification name="UnableToLinkObjects"> Nie można połączyć [COUNT] obiektów. Maksymalnie można połączyć [MAX] obiektów. @@ -577,6 +728,9 @@ Upewnij się, że żaden z obiektów nie jest zablokowany i wszystkie należą d <notification name="CannotLinkPermanent"> Nie możesz łączyć obiektów przez granice regionów. </notification> + <notification name="CannotLinkAcrossRegions"> + Nie możesz łączyć obiektów przez granice regionów. + </notification> <notification name="CannotLinkDifferentOwners"> Nie możesz połączyć obiektów, ponieważ należą one do różnych osób. @@ -592,7 +746,7 @@ Upewnij się, że nazwa pliku ma poprawne rozszerzenie. Oczekiwane: [VALIDS] </notification> <notification name="CannotUploadSoundFile"> - Nie można otworzyć załadowanego pliku dźwiękowego: + Nie można otworzyć przesłanego pliku dźwiękowego: [FILE] </notification> <notification name="SoundFileNotRIFF"> @@ -624,7 +778,7 @@ Oczekiwane: [VALIDS] [FILE] </notification> <notification name="SoundFileInvalidTooLong"> - Plik audio jest zbyt długi (10 sekund maksimum): + Plik audio jest zbyt długi (maksymalnie 30 sekund): [FILE] </notification> <notification name="ProblemWithFile"> @@ -655,10 +809,10 @@ To może się zdarzyć, kiedy zmieniasz ustawienia sieci. Zrestartowanie Przegl Nie można utworzyć pliku wyjściowego: [FILE] </notification> <notification name="DoNotSupportBulkAnimationUpload"> - [APP_NAME] obecnie nie wspomaga ładowania grupowego plików animacji w formacie BVH. + [APP_NAME] obecnie nie wspomaga przesyłania grupowego plików animacji w formacie BVH. </notification> <notification name="CannotUploadReason"> - Ładowanie pliku [FILE] nie powiodło się z powodu: [REASON] + Przesyłanie pliku [FILE] nie powiodło się z powodu: [REASON] Spróbuj jeszcze raz później. </notification> <notification name="LandmarkCreated"> @@ -670,6 +824,12 @@ Spróbuj jeszcze raz później. <notification name="CannotCreateLandmarkNotOwner"> Nie możesz zapamiętać tego miejsca (LM) ponieważ właściciel działki nie pozwala na to. </notification> + <notification label="Utwórz folder" name="CreateLandmarkFolder"> + Wybierz nazwę folderu: + <form name="form"> + <button name="Cancel" text="Anuluj" /> + </form> + </notification> <notification name="CannotRecompileSelectObjectsNoScripts"> 'Rekompilacja' nie powiodła się. @@ -719,8 +879,7 @@ Nowe zapytanie: [FINALQUERY] [REASON] </notification> <notification name="invalid_tport"> - Niestety, pojawił się błąd podczas próby teleportacji. Proponujemy wylogowanie się i spróbowanie teleportacji ponownie. -Jeżeli nadal otrzymujesz tę wiadomość proponujemy odwiedzić stronę [SUPPORT_SITE]. + Próby teleportacji są ograniczone do 6 na minutę. Jeśli masz problemy odczekaj minutę i spróbuj ponownie się teleportować. Jeśli problem będzie się powtarzał wyloguj się i zaloguj ponownie. </notification> <notification name="invalid_region_handoff"> Niestety, pojawił się błąd podczas próby przedostania się na drugi region. Proponujemy wylogowanie się i spróbowanie przedostania się na drugi region ponownie. @@ -750,6 +909,9 @@ Jeżeli nadal otrzymujesz tę wiadomość proponujemy odwiedzić stronę [SUPPOR <notification name="expired_region_handoff"> Przepraszamy, ale nie udało się przeprowadzić zmiany regionu wystarczająco szybko. Spróbuj jeszcze raz za kilka minut. </notification> + <notification name="preexisting_tport"> + Przepraszamy, ale system nie mógł zainicjować teleportacji. Spróbuj jeszcze raz za kilka minut. + </notification> <notification name="no_host"> Nie można znaleźć miejsca docelowego. To miejsce może być chwilowo nieosiągalne albo przestało istnieć. Spróbuj jeszcze raz za kilka minut. </notification> @@ -937,13 +1099,16 @@ Zazwyczaj jest to tymczasowy problem. Możesz kontynuować modyfikacje i zapisa <notification name="YouHaveBeenLoggedOut"> Nastąpiło wylogowanie z [SECOND_LIFE] [MESSAGE] - <usetemplate name="okcancelbuttons" notext="Wyłącz" yestext="Pokaż IM/czat" /> + <usetemplate name="okcancelbuttons" notext="Zakończ" yestext="Pokaż IM/czat" /> + </notification> + <notification name="InventoryUnusable"> + Wystąpił problem podczas ładowania szafy. Spróbuj się wylogować i zalogować ponownie. Jeśli zobaczysz ten komunikat jeszcze raz, to skontaktuj się z pomocą techniczną, aby rozwiązać problem. </notification> <notification name="OnlyOfficerCanBuyLand"> Nie możesz kupić działek dla grupy. Nie masz praw kupowania działek dla Twojej aktywnej grupy. </notification> - <notification label="Add Friend" name="AddFriendWithMessage"> + <notification label="Dodaj znajomego" name="AddFriendWithMessage"> Znajomi mogą pozwalać na odnajdywanie się wzajemnie na mapie i na otrzymywanie informacji o statusie online. Zaproponować znajomość [NAME]? @@ -1007,6 +1172,18 @@ do <notification label="Zmień nazwę stroju" name="RenameOutfit"> Nowa nazwa stroju: <form name="form"> + <button name="Cancel" text="Anuluj"/> + </form> + </notification> + <notification label="Zmień nazwę gestu" name="RenameGesture"> + Nowa nazwa gestu: + <form name="form"> + <button name="Cancel" text="Anuluj"/> + </form> + </notification> + <notification label="Zmień nazwę Landmarka" name="RenameLandmark"> + Wybierz nową nazwę dla [NAME] + <form name="form"> <button name="Cancel" text="Anuluj" /> </form> </notification> @@ -1127,7 +1304,7 @@ Wybierz mniejszy obszar i spróbuj jeszcze raz. Po przekazaniu tej działki grupa będzie musiała mieć i utrzymywać wystarczający kredyt na używanie działki. Cena zakupu działki nie jest zwracana właścicielowi. Jeżeli przekazana działka zostanie sprzedana, cena sprzedaży zostanie podzielona pomiędzy członków grupy. -Przekazać tą działkę o powierzchni [AREA] m² grupie '[GROUP_NAME]'? +Przekazać tą działkę o powierzchni [AREA] m² grupie '<nolink>[GROUP_NAME]</nolink>'? <usetemplate name="okcancelbuttons" notext="Anuluj" /> </notification> <notification name="DeedLandToGroupWithContribution"> @@ -1135,7 +1312,7 @@ Przekazać tą działkę o powierzchni [AREA] m² grupie '[GROUP_NAME]&apos Przekazanie będzie zawierać równoczesne przypisanie działki do grupy od '[NAME]'. Cena zakupu działki nie jest zwracana właścicielowi. Jeżeli przekazana działka zostanie sprzedana, cena sprzedaży zostanie podzielona pomiędzy członków grupy. -Przekazać tą działkę o powierzchni [AREA] m² grupie '[GROUP_NAME]'? +Przekazać tą działkę o powierzchni [AREA] m² grupie '<nolink>[GROUP_NAME]</nolink>'? <usetemplate name="okcancelbuttons" notext="Anuluj" /> </notification> <notification name="DisplaySetToSafe"> @@ -1169,12 +1346,32 @@ Możesz normalnie używać [SECOND_LIFE], inni użytkownicy będą Cię widzieli <ignore name="ignore" text="Ładowanie ubrań nadal trwa" /> </form> </notification> + <notification name="AgentComplexityWithVisibility"> + Twój [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 stopień złożoności awatara] to [AGENT_COMPLEXITY]. +[OVERLIMIT_MSG] + <usetemplate ignoretext="Ostrzegaj mnie, gdy stopień złożoności mojego awatara jest zbyt wysoki" name="notifyignore" /> + </notification> + <notification name="AgentComplexity"> + Twój [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 stopień złożoności awatara] to [AGENT_COMPLEXITY]. + <usetemplate ignoretext="Ostrzegaj mnie, gdy zmienia się stopień złożoności mojego awatara" name="notifyignore"/> + </notification> + <notification name="HUDComplexityWarning"> + [HUD_REASON]. Bardzo prawdopodobne, że wpłynie to negatywnie na Twoją wydajność. + <usetemplate ignoretext="Ostrzegaj mnie, gdy stopień złożoności moich dodatków HUD jest zbyt wysoki" name="notifyignore"/> + </notification> <notification name="FirstRun"> Instalacja [APP_NAME] zakończona. Jeżeli używasz [SECOND_LIFE] po raz pierwszy to musisz stworzyć konto żeby móc się zalogować. <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Stwórz konto..." /> </notification> + <notification name="LoginCantRemoveUsername"> + Zapamiętany użytkownik może zostać zapomniany w Awatar > Ustawienia > Zaawansowane > Zapamiętani użytkownicy. + </notification> + <notification name="LoginCantRemoveCurUsername"> + Zapomnienie zalogowanego użytkownika wymaga jego wylogowania. + <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Potwierdź i wyloguj się" /> + </notification> <notification name="LoginPacketNeverReceived"> Problemy z połączeniem. Problem może być spowodowany Twoim połączeniem z Internetem albo może istnieć po stronie [SECOND_LIFE_GRID]. @@ -1184,6 +1381,18 @@ Możesz sprawdzić swoje połączenie z Internetem i spróbować ponownie za kil <button name="Teleport" text="Teleportuj" /> </form> </notification> + <notification name="LoginPacketNeverReceivedNoTP"> + Problemy z połączeniem. Problem może być spowodowany Twoim połączeniem z Internetem albo może istnieć po stronie [SECOND_LIFE_GRID]. + +Możesz sprawdzić swoje połączenie z Internetem i spróbować ponownie za kilka minut lub połączyć się ze stroną pomocy technicznej [SUPPORT_SITE]. + <form name="form"> + <button name="Help" text="Pomoc"/> + </form> + </notification> + <notification name="LoginRemoveMultiGridUserData"> + Usuwane Dane Lokalne są współużytkowane przez wiele światów, czy na pewno chcesz je usunąć? + <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Potwierdź" /> + </notification> <notification name="WelcomeChooseSex"> Twoja postać pojawi się za moment. @@ -1193,7 +1402,11 @@ Wybierz awatara właściwej płci. Ten wybór będzie można później zmienić. <usetemplate name="okcancelbuttons" notext="Kobieta" yestext="Mężczyzna" /> </notification> <notification name="CantTeleportToGrid"> - Nie można teleportować do [SLURL], ponieważ jest na innej siatce ([GRID]) niż obecna siatka ([CURRENT_GRID]). Proszę zamknąć przeglądarkę i spróbować ponownie. + Nie można teleportować do [SLURL], ponieważ jest w innym świecie ([GRID]) niż obecny ([CURRENT_GRID]). Proszę zamknąć przeglądarkę i spróbować ponownie. + </notification> + <notification name="GeneralCertificateErrorShort"> + Połączenie z serwerem nie mogło zostać nawiązane. +[REASON] </notification> <notification name="GeneralCertificateError"> Połączenie z serwerem nie mogło zostać nawiązane. @@ -1208,7 +1421,6 @@ Odcisk palca SHA1: [MD5_DIGEST] Użycie klucza: [KEYUSAGE] Rozszerzone użycie klucza: [EXTENDEDKEYUSAGE] Identyfikator klucza podmiotu: [SUBJECTKEYIDENTIFIER] - </notification> <notification name="TrustCertificateError"> Wydawca certyfikatu dla tego serwera nie jest znany. @@ -1254,6 +1466,10 @@ Wybierz pojedynczy obiekt i spróbuj jeszcze raz. Teleportować wszystkich Rezydentów z tego regionu do ich miejsc startu? <usetemplate name="okcancelbuttons" notext="Anuluj" /> </notification> + <notification name="ChangeObjectBonusFactor"> + Obniżenie limitu obiektów bonusowych po tym, gdy konstrukcje zostały już poustawiane w regionie może spowodować, że część z nich może zostać zwrócona lub usunięta. Na pewno chcesz zmienić tą wartość? + <usetemplate ignoretext="Potwierdź zmianę mnożnika obiektów bonusowych" name="okcancelignore" notext="Anuluj"/> + </notification> <notification name="EstateObjectReturn"> Na pewno chcesz odesłać wszystkie obiekty należące do [USER_NAME]? <usetemplate name="okcancelbuttons" notext="Anuluj" /> @@ -1262,21 +1478,25 @@ Wybierz pojedynczy obiekt i spróbuj jeszcze raz. Nie można ustawić tekstur regionu: Tekstura terenu [TEXTURE_NUM] ma niewłaściwą głębię koloru - [TEXTURE_BIT_DEPTH]. -Zamień teksturę [TEXTURE_NUM] na 24-bitową teksturę o wymiarze 1024x1024 lub mniejszą i ponownie kliknij na "Zastosuj". +Zamień teksturę [TEXTURE_NUM] na 24-bitową teksturę o wymiarze [MAX_SIZE]x[MAX_SIZE] lub mniejszą i ponownie kliknij na "Zastosuj". </notification> <notification name="InvalidTerrainSize"> Nie można ustawić tekstur regionu: Tekstura terenu [TEXTURE_NUM] jest za duża - [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y]. -Zamień teksturę [TEXTURE_NUM] na 24-bitową teksturę o wymiarze 1024x1024 lub mniejszą i ponownie kliknij na "Zastosuj". +Zamień teksturę [TEXTURE_NUM] na 24-bitową teksturę o wymiarze [MAX_SIZE]x[MAX_SIZE] lub mniejszą i ponownie kliknij na "Zastosuj". </notification> <notification name="RawUploadStarted"> - Ładowanie rozpoczęte. Może potrwać do dwóch minut zależnie od prędkości Twojego połączenia. + Przesyłanie rozpoczęte. Może potrwać do dwóch minut zależnie od prędkości Twojego połączenia. </notification> <notification name="ConfirmBakeTerrain"> Na pewno chcesz zapisać obecne ukształtowanie terenu jako punkt odniesienia dla górnego i dolnego limitu terenu oraz jako domyślną wartość dla opcji 'Odtwórz'? <usetemplate name="okcancelbuttons" notext="Anuluj" /> </notification> + <notification name="ConfirmTextureHeights"> + Zamierzasz użyć wartości 'niższych' większych niż 'wyższe' dla zakresów elewacji. Chcesz kontynuować? + <usetemplate name="yesnocancelbuttons" notext="Anuluj" canceltext="Nie pytaj" /> + </notification> <notification name="MaxAllowedAgentOnRegion"> Maksymalna liczba Rezydentów wynosi [MAX_AGENTS]. </notification> @@ -1295,7 +1515,34 @@ Zamień teksturę [TEXTURE_NUM] na 24-bitową teksturę o wymiarze 1024x1024 lub Możesz mieć maksymalnie [MAX_MANAGER] zarządców Majątku. </notification> <notification name="OwnerCanNotBeDenied"> - Nie możesz dodać właściciela majątku do listy 'Niepożądanych Rezydentów (banów)' majątku. + Nie możesz dodać właściciela Majątku do listy 'Niepożądanych Rezydentów (banów)' Majątku. + </notification> + <notification name="ProblemAddingEstateManagerBanned"> + Nie możesz dodać zbanowanego rezydenta do listy zarządców Majątku. + </notification> + <notification name="ProblemBanningEstateManager"> + Nie można dodać zarządcy Majątku [AGENT] do listy zbanowanych. + </notification> + <notification name="GroupIsAlreadyInList"> + <nolink>[GROUP]</nolink> już jest na liście dostępu grup. + </notification> + <notification name="AgentIsAlreadyInList"> + [AGENT] już jest na Twojej liście: [LIST_TYPE]. + </notification> + <notification name="AgentsAreAlreadyInList"> + [AGENT] już są na Twojej liście: [LIST_TYPE]. + </notification> + <notification name="AgentWasAddedToList"> + [AGENT] został/a dodany/a do listy: [LIST_TYPE] w: [ESTATE]. + </notification> + <notification name="AgentsWereAddedToList"> + [AGENT] zostali dodani do listy: [LIST_TYPE] w: [ESTATE]. + </notification> + <notification name="AgentWasRemovedFromList"> + [AGENT] został/a usunięty/a z listy: [LIST_TYPE] w: [ESTATE]. + </notification> + <notification name="AgentsWereRemovedFromList"> + [AGENT] zostali usunięci z listy: [LIST_TYPE] w: [ESTATE]. </notification> <notification name="CanNotChangeAppearanceUntilLoaded"> Nie możesz zmienić wyglądu podczas ładowania ubrań i kształtu. @@ -1311,133 +1558,36 @@ Wybierz obiekt na sprzedaż i spróbuj jeszcze raz. Plik surowego terenu pobrany do: [DOWNLOAD_PATH]. </notification> - <notification name="DownloadWindowsMandatory"> - Nowa wersja [APP_NAME] została opublikowana. -[MESSAGE] -Musisz zainstalować nową wersję żeby używać [APP_NAME]. - <usetemplate name="okcancelbuttons" notext="Wyłącz" yestext="Pobierz" /> - </notification> - <notification name="DownloadWindows"> - Uaktualniona wersja [APP_NAME] została opublikowana. -[MESSAGE] -Aktualizacja nie jest wymagana, ale jest zalecana w celu poprawy wydajności i stabilności. - <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobierz" /> + <notification name="RequiredUpdate"> + Do zalogowania się wymagana jest wersja [VERSION]. +Pobierz ją z https://secondlife.com/support/downloads/ </notification> - <notification name="DownloadWindowsReleaseForDownload"> - Uaktualniona wersja [APP_NAME] została opublikowana. -[MESSAGE] -Aktualizacja nie jest wymagana, ale jest zalecana w celu poprawy wydajności i stabilności. - <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobierz" /> - </notification> - <notification name="DownloadLinuxMandatory"> - Nowa wersja [APP_NAME] jest dostępna. -[MESSAGE] -Musisz pobrać aktualizację aby korzystać z [APP_NAME]. - <usetemplate name="okcancelbuttons" notext="Wyłącz" yestext="Pobierz" /> - </notification> - <notification name="DownloadLinux"> - Aktualizacja [APP_NAME] jest dostępna. -[MESSAGE] -Ta aktualizacja nie jest wymagana, ale zaleca się jej instalację w celu poprawienia wydajności i stabilności. - <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobierz" /> - </notification> - <notification name="DownloadLinuxReleaseForDownload"> - Uaktualniona wersja [APP_NAME]została opublikowana. -[MESSAGE] -Aktualizacja nie jest wymagana, ale jest zalecana w celu poprawy wydajności i stabilności. - <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobierz" /> + <notification name="PauseForUpdate"> + Do zalogowania się wymagana jest wersja [VERSION]. +Informacje o wydaniu: [URL] + +Kliknij OK, aby pobrać i zainstalować. </notification> - <notification name="DownloadMacMandatory"> - Nowa wersja [APP_NAME] została opublikowana. -[MESSAGE] -Musisz zainstalować nową wersję żeby używać [APP_NAME]. + <notification name="OptionalUpdateReady"> + Wersja [VERSION] została pobrana i jest gotowa do zainstalowania. +Informacje o wydaniu: [URL] -Pobrać i zapisać w folderze Aplikacje? - <usetemplate name="okcancelbuttons" notext="Wyłącz" yestext="Pobierz" /> +Kliknij OK, aby zainstalować. </notification> - <notification name="DownloadMac"> - Uaktualniona wersja [APP_NAME] została opublikowana. -[MESSAGE] -Aktualizacja nie jest wymagana, ale jest zalecana w celu poprawy wydajności i stabilności. + <notification name="PromptOptionalUpdate"> + Wersja [VERSION] została pobrana i jest gotowa do zainstalowania. +Informacje o wydaniu: [URL] -Pobrać i zapisać w folderze Aplikacje? - <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobierz" /> +Kontynuować? + <usetemplate canceltext="Nie teraz" name="yesnocancelbuttons" notext="Pomiń" yestext="Instaluj" /> </notification> - <notification name="DownloadMacReleaseForDownload"> - Uaktualniona wersja [APP_NAME] została opublikowana. -[MESSAGE] -Aktualizacja nie jest wymagana, ale jest zalecana w celu poprawy wydajności i stabilności. - -Pobrać i zapisać w folderze Aplikacje? - <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobierz" /> - </notification> - <notification name="FailedUpdateInstall"> - Podczas aktualizacji pojawił się błąd. -Proszę pobrać i zainstalować najnowszego klienta z -http://secondlife.com/download - </notification> - <notification name="FailedRequiredUpdateInstall"> - Nie można zainstalować wymaganej aktualizacji. -Nie będzie można zalogować się dopóki [APP_NAME] nie zostanie zaktualizowana. -Proszę pobrać i zainstalować najnowszą wersję z -http://secondlife.com/download - <usetemplate name="okbutton" yestext="Wyjdź" /> - </notification> - <notification name="UpdaterServiceNotRunning"> - Istnieje obowiązkowa aktualizacja dla Second Life. -Możesz ją pobrać z http://www.secondlife.com/downloads -lub zainstalować teraz. - <usetemplate name="okcancelbuttons" notext="Opuść Second Life" yestext="Pobierz i instaluj teraz" /> - </notification> - <notification name="DownloadBackgroundTip"> - Aktualizacja dla [APP_NAME] została pobrana. -Wersja [VERSION] [[INFO_URL] Informacja o tej aktualizacji] - <usetemplate name="okcancelbuttons" notext="Później..." yestext="Instaluj teraz i restartuj [APP_NAME]" /> - </notification> - <notification name="DownloadBackgroundDialog"> - Aktualizacja [APP_NAME] została pobrana. -Wersja [VERSION] [[INFO_URL] Informacja o aktualizacji] - <usetemplate name="okcancelbuttons" notext="Później..." yestext="Instaluj teraz i restartuj [APP_NAME]" /> - </notification> - <notification name="RequiredUpdateDownloadedVerboseDialog"> - Pobrano wymaganą aktualizację. -Wersja [VERSION] [[INFO_URL] Informacje o tej aktualizacji] - -W celu instalacji aktualizacji [APP_NAME] musi zostać zrestartowany. - </notification> - <notification name="RequiredUpdateDownloadedDialog"> - W celu instalacji aktualizacji [APP_NAME] musi zostać zrestartowany. -[[INFO_URL] Informacje o tej aktualizacji] - </notification> - <notification name="OtherChannelDownloadBackgroundTip"> - Została pobrana aktualizacja dla Twojej instalacji [APP_NAME]. -Wersja [VERSION] -Ta eksperymentalna przeglądarka została zastąpiona przez wersję [NEW_CHANNEL]; -zobacz [[INFO_URL] Więcej informacji o tej aktualizacji] - <usetemplate name="okcancelbuttons" notext="Później..." yestext="Instaluj teraz i zrestartuj [APP_NAME]" /> - </notification> - <notification name="OtherChannelDownloadBackgroundDialog"> - Została pobrana aktualizacja dla Twojej instalacji [APP_NAME]. -Wersja [VERSION] -Ta eksperymentalna przeglądarka została zastąpiona przez wersję [NEW_CHANNEL]; -zobacz [[INFO_URL] Więcej informacji o tej aktualizacji] - <usetemplate name="okcancelbuttons" notext="Później..." yestext="Instaluj teraz i zrestartuj [APP_NAME]" /> - </notification> - <notification name="OtherChannelRequiredUpdateDownloadedVerboseDialog"> - Została pobrana wymagana aktualizacja. -Wersja [VERSION] -Ta eksperymentalna przeglądarka została zastąpiona przez wersję [NEW_CHANNEL]; -zobacz [[INFO_URL] Więcej informacji o tej aktualizacji] - -W celu instalacji aktualizacji [APP_NAME] musi zostać zrestartowany. - </notification> - <notification name="OtherChannelRequiredUpdateDownloadedDialog"> - W celu instalacji aktualizacji [APP_NAME] musi zostać zrestartowany. -Ta eksperymentalna przeglądarka została zastąpiona przez wersję [NEW_CHANNEL]; -zobacz [[INFO_URL] Więcej informacji o tej aktualizacji] + <notification name="LoginFailedUnknown"> + Przepraszamy, ale nie udało się zalogować - powód jest nieznany. +Jeśli ciągle widzisz tą wiadomość sprawdź [SUPPORT_SITE]. + <usetemplate name="okbutton" yestext="Wyjdź"/> </notification> <notification name="DeedObjectToGroup"> - Przekazanie tego obiektu spowoduje, że grupa: + Przypisanie tego obiektu spowoduje, że grupa: * Otrzyma L$ zapłacone temu obiektowi <usetemplate ignoretext="Potwierdź decyzję przypisania obiektu do grupy" name="okcancelignore" notext="Anuluj" yestext="Przekaż" /> </notification> @@ -1489,14 +1639,11 @@ Chcesz ją opuścić? Nie możesz opuścić tej grupy, ponieważ jesteś ostatnim z jej właścicieli. Przydziel najpierw innemu użytkownikowi rolę właściciela. </notification> <notification name="GroupDepartError"> - Nie można opuścić grupy: [reason]. - </notification> - <notification name="GroupDepart"> - Opuściłeś/aś grupę [group_name]. + Nie możesz opuścić tej grupy. </notification> <notification name="ConfirmKick"> - Na pewno chcesz wyrzucić wszystkich Rezydentów z siatki? - <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Wyrzuć Rezydentów" /> + Na pewno chcesz wyrzucić wszystkich Rezydentów ze świata? + <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Wyrzuć Rezydentów"/> </notification> <notification name="MuteLinden"> Przepraszamy, ale nie możesz zablokować Lindena. @@ -1520,8 +1667,7 @@ Chcesz ją opuścić? <notification name="DoNotDisturbModeSet"> Tryb Zajętości jest włączony. Nie będziesz powiadamiany/a o nadchodzących rozmowach. -- Inni Rezydenci będą otrzymywać Twoją wiadomość Trybu Zajętości (Ustawienia > Prywatność > Autoodpowiedzi). -- Propozycje teleportacji będą odrzucane. +- Inni Rezydenci będą otrzymywać Twoją wiadomość Trybu Zajętości (Ustawienia > Ogólne). - Propozycje rozmów głosowych będą odrzucane. <usetemplate ignoretext="Status zmieniony na Tryb Zajętości" name="okignore" /> </notification> @@ -1533,6 +1679,17 @@ Chcesz ją opuścić? <notification name="JoinedTooManyGroups"> Należysz już do maksymalnej ilości grup. Opuść proszę przynajmniej jedną grupę żeby przyjąć członkostwo w tej grupie, albo odmów. </notification> + <notification name="GroupLimitInfo"> + Rezydenci z członkostwem podstawowym mogą dołączyć do [MAX_BASIC] grup. +Członkostwo premium pozwala na [MAX_PREMIUM]. [https://secondlife.com/my/account/membership.php? Dowiedz się więcej] + <usetemplate name="okbutton" yestext="Zamknij" /> + </notification> + <notification name="GroupLimitInfoPlus"> + Rezydenci z członkostwem podstawowym mogą dołączyć do [MAX_BASIC] grup. +Członkostwo premium pozwala na [MAX_PREMIUM]. Członkostwo +Premium Plus pozwala na [MAX_PREMIUM_PLUS]. [https://secondlife.com/my/account/membership.php? Dowiedz się więcej] + <usetemplate name="okbutton" yestext="Zamknij" /> + </notification> <notification name="KickUser"> Wyrzuć tego Rezydenta, wysyłając następujący komunikat. <form name="form"> @@ -1543,7 +1700,7 @@ Chcesz ją opuścić? </form> </notification> <notification name="KickAllUsers"> - Z jakim komunikatem wyrzucić wszystkich użytkowników z regionu? + Z jakim komunikatem wyrzucić wszystkich użytkowników ze świata? <form name="form"> <input name="message"> Administrator wylogował Cię. @@ -1644,7 +1801,7 @@ co przekracza limit [LIMIT]. <notification name="TeleportViaSLAPP"> Na pewno chcesz się teleportować do <nolink>[LOCATION]</nolink>? <usetemplate ignoretext="Potwierdź próbę teleportacji przez SLAPP" name="okcancelignore" notext="Anuluj" yestext="Teleportuj" /> - </notification> + </notification> <notification name="TeleportToPick"> Teleportować do [PICK]? <usetemplate ignoretext="Potwierdź, że chcesz teleportować się do miejsca w Ulubionych" name="okcancelignore" notext="Anuluj" yestext="Teleportuj" /> @@ -1674,7 +1831,7 @@ Kontynuować? <notification label="Zmiana dostępu do Majątku Lindenów" name="ChangeLindenAccess"> Dokonujesz zmiany w liście dostępu Regionu głównego należącego do Lindenów (Regiony Główne, Teen Grid, Orientacja). -Żądana operacja jest wyjątkowo niebezpieczna dla wszystkich Rezydentów przebywających w regionie i powinna być używana wyłącznie w celu zablokowania opcji pozwalającej na przeniesienie obiektów/L$ do/z sieci. +Żądana operacja jest wyjątkowo niebezpieczna dla wszystkich Rezydentów przebywających w regionie i powinna być używana wyłącznie w celu zablokowania opcji pozwalającej na przeniesienie obiektów/L$ do/ze świata. Dodatkowo, zmiany dokonane w Regionie Głównym mogą spowodować problemy przestrzeni serwerowej innych regionów. Kontynuować? @@ -1712,6 +1869,30 @@ Kontynuować? Usunąć zarządcę majątku tylko z tego majątku czy z [ALL_ESTATES]? <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek" /> </notification> + <notification label="Wybierz Majątek" name="EstateAllowedExperienceAdd"> + Dodać do listy dostępu tylko do tego majątku czy do [ALL_ESTATES]? + <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek"/> + </notification> + <notification label="Wybierz Majątek" name="EstateAllowedExperienceRemove"> + Usunąć z listy dostępu tylko z tego majątku czy do [ALL_ESTATES]? + <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek"/> + </notification> + <notification label="Wybierz Majątek" name="EstateBlockedExperienceAdd"> + Zablokować dostęp tylko dla tego majątku czy dla [ALL_ESTATES]? + <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek"/> + </notification> + <notification label="Wybierz Majątek" name="EstateBlockedExperienceRemove"> + Odblokować dostęp tylko dla tego majątku czy dla [ALL_ESTATES]? + <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek"/> + </notification> + <notification label="Wybierz Majątek" name="EstateTrustedExperienceAdd"> + Dodać do listy kluczy tylko dla tego majątku czy dla [ALL_ESTATES]? + <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek"/> + </notification> + <notification label="Wybierz Majątek" name="EstateTrustedExperienceRemove"> + Usunąć z listy kluczy tylko dla tego majątku czy dla [ALL_ESTATES]? + <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek"/> + </notification> <notification label="Potwierdź Wyrzucenie" name="EstateKickUser"> Wyrzucić [EVIL_USER] z tego majątku? <usetemplate name="okcancelbuttons" notext="Anuluj" /> @@ -1720,8 +1901,18 @@ Kontynuować? Na pewno chcesz zmienić treść umowy dla tego majątku? <usetemplate name="okcancelbuttons" notext="Anuluj" /> </notification> + <notification name="EstateParcelAccessOverride"> + Odznaczenie tej opcji może usunąć ograniczenia nadane przez właścicieli działek w celu zapobiegania dokuczaniu, zachowaniu prywatności lub aby chronić nieletnich przed materiałami dla dorosłych. Porozmawiaj z właścicielami działek, jeśli to konieczne. + </notification> + <notification name="EstateParcelEnvironmentOverride"> + (Zmiana w całym majątku: [ESTATENAME]) Odznaczenie tej opcji spowoduje usunięcie wszelkich niestandardowych otoczeń, które zostały dodane do działek przez ich właścicieli. Przedyskutuj zmianę z właścicielami działek w razie potrzeby. +Czy chcesz kontynuować? + <usetemplate name="okcancelbuttons" notext="Anuluj" /> + </notification> <notification name="RegionEntryAccessBlocked"> - Region, który próbujesz odwiedzić zawiera treści przekraczające Twoje bieżące preferencje. Możesz je zmienić używając Ja > Ustawienia > Ogólne. + Region, który próbujesz odwiedzić, ma klasyfikację treści przekraczającą Twoje maksymalne preferencje. Możesz je zmienić używając Ja > Ustawienia > Ogólne. + +Pełne informacje na temat klasyfikacji treści można znaleźć [https://community.secondlife.com/knowledgebase/english/maturity-ratings-r52/ tutaj]. </notification> <notification name="RegionEntryAccessBlocked_AdultsOnlyContent"> Region, który próbujesz odwiedzić zawiera treści [REGIONMATURITY], które są dostępne tylko dla dorosłych. @@ -1745,7 +1936,9 @@ Kontynuować? Mamy trudności techniczne z Twoim wejściem w region, ponieważ Twoje preferencje są rozsynchronizowane z serwerem. </notification> <notification name="TeleportEntryAccessBlocked"> - Region, który próbujesz odwiedzić zawiera treści przekraczające Twoje bieżące preferencje. Możesz je zmienić używając Ja > Ustawienia > Ogólne. + Region, który próbujesz odwiedzić, ma klasyfikację treści przekraczającą Twoje maksymalne preferencje. Możesz je zmienić używając Ja > Ustawienia > Ogólne. + +Pełne informacje na temat klasyfikacji treści można znaleźć [https://community.secondlife.com/knowledgebase/english/maturity-ratings-r52/ tutaj]. </notification> <notification name="TeleportEntryAccessBlocked_AdultsOnlyContent"> Region, który próbujesz odwiedzić zawiera treści [REGIONMATURITY], które są dostępne tylko dla dorosłych. @@ -1777,7 +1970,7 @@ Kontynuować? Mamy trudności techniczne z Twoim teleportem, ponieważ Twoje preferencje są rozsynchronizowane z serwerem. </notification> <notification name="RegionTPSpecialUsageBlocked"> - Nie można wejść do tego regionu. '[REGION_NAME]' jest miejscem z grami (Skill Gaming Region) - musisz spełnić określone wymagania, jeśli chcesz go odwiedzić. Aby dowiedzieć się więcej zapoznaj się z [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ]. + Nie można wejść do tego regionu. '[REGION_NAME]' jest miejscem z grami (Skill Gaming Region) - musisz spełnić określone wymagania, jeśli chcesz go odwiedzić. Aby dowiedzieć się więcej zapoznaj się z [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Second_Life_Skill_Gaming_FAQ Skill Gaming FAQ]. </notification> <notification name="PreferredMaturityChanged"> Nie będziesz już otrzymywać żadnych powiadomień związanych z odwiedzaniem regionów z treściami [RATING]. Możesz zmienić swoją preferencję treści w przyszłości używając Ja > Ustawienia > Ogólne w pasku menu. @@ -1787,6 +1980,8 @@ Kontynuować? </notification> <notification name="LandClaimAccessBlocked"> Ziemia, którą próbujesz odzyskać ma klasyfikację treści przekraczającą Twoje obecne preferencje treści. Możesz je zmienić używając Ja > Ustawienia > Ogólne w pasku menu. + +Pełne informacje na temat klasyfikacji treści można znaleźć [https://community.secondlife.com/knowledgebase/english/maturity-ratings-r52/ tutaj]. </notification> <notification name="LandClaimAccessBlocked_AdultsOnlyContent"> Tylko dorośli mogą odzyskać tą ziemię. @@ -1808,6 +2003,8 @@ Kontynuować? </notification> <notification name="LandBuyAccessBlocked"> Ziemia, którą próbujesz kupić ma klasyfikację treści przekraczającą Twoje obecne preferencje treści. Możesz je zmienić używając Ja > Ustawienia > Ogólne w pasku menu. + +Pełne informacje na temat klasyfikacji treści można znaleźć [https://community.secondlife.com/knowledgebase/english/maturity-ratings-r52/ tutaj]. </notification> <notification name="LandBuyAccessBlocked_AdultsOnlyContent"> Tylko dorośli mogą kupić tą ziemię. @@ -1830,6 +2027,9 @@ Kontynuować? <notification name="TooManyPrimsSelected"> Zbyt wiele wybranych obiektów. Wybierz [MAX_PRIM_COUNT] lub mniej i spróbuj ponownie </notification> + <notification name="TooManyScriptsSelected"> + Zbyt wiele skryptów w wybranych obiektach. Wybierz mniej obiektów i spróbuj ponownie + </notification> <notification name="ProblemImportingEstateCovenant"> Problem z importem umowy majątku. </notification> @@ -1956,7 +2156,6 @@ Wpisz hasło ponownie i kliknij na OK. <notification name="SetPickLocation"> Uwaga: Lokalizacja tego miejsca została zaktualizowana, ale pozostałe szczegóły zachowają oryginalne wartości. - </notification> <notification name="MoveInventoryFromObject"> Wybrane obiekty Szafy nie mają praw kopiowania. @@ -1986,6 +2185,9 @@ Przenieść obiekty szafy? <notification name="PayObjectFailed"> Płatność nie powiodła się: nie można znaleźć obiektu. </notification> + <notification name="PaymentBlockedButtonMismatch"> + Płatność nie powiodła się: zapłacona suma nie pasuje do żadnego z przycisków płatności dla tego obiektu. + </notification> <notification name="OpenObjectCannotCopy"> W tym obiekcie nie ma elementów które możesz skopiować. </notification> @@ -1998,8 +2200,8 @@ Przenieść obiekty szafy? <usetemplate ignoretext="Potwierdź dodanie uczestników rozmowy" name="okcancelignore" notext="Anuluj" /> </notification> <notification name="ConfirmQuit"> - Na pewno chcesz zakończyć? - <usetemplate ignoretext="Na pewno chcesz zakończyć?" name="okcancelignore" notext="Nie kończ" yestext="Wyłącz" /> + Na pewno chcesz zakończyć sesję i wyłączyć przeglądarkę? + <usetemplate ignoretext="Na pewno chcesz zakończyć sesję?" name="okcancelignore" notext="Anuluj" yestext="Zakończ"/> </notification> <notification name="ConfirmRestoreToybox"> Ta akcja przywróci domyślny układ przycisków i pasków. @@ -2015,12 +2217,24 @@ Nie możesz tego cofnąć. </notification> <notification name="DeleteItems"> [QUESTION] - <usetemplate ignoretext="Potwierdź, że na pewno chcesz skasować obiekty" name="okcancelignore" notext="Anuluj" /> + <form name="form"> + <ignore name="ignore" text="Potwierdź przed kasowaniem obiektów" /> + <button name="No" text="Anuluj" /> + </form> </notification> - <notification name="HelpReportAbuseEmailLL"> - Używaj tej opcji do zgłaszania nadużyć [http://secondlife.com/corporate/tos.php Warunków Umowy (Terms of Service)] i [http://secondlife.com/corporate/cs.php Standardów Społeczeństwa (Community Standards)]. + <notification name="DeleteFilteredItems"> + Twoja Szafa jest obecnie filtrowana i nie wszystkie obiekty jakie masz zamiar usunąć są teraz widoczne. -Wszystkie zgłoszone nadużycia są badane i rozwiązywane. +Czy na pewno chcesz je skasować? + <usetemplate ignoretext="Potwierdź przed kasowaniem filtrowanych obiektów" name="okcancelignore" notext="Anuluj" /> + </notification> + <notification name="ConfirmUnlink"> + To duże zaznaczenie z wieloma zestawami obiektów. Jeśli rozłączysz, to ponowne połączenie może nie być możliwe. Możesz chcieć na wszelki wypadek wziąć kopie zestawów obiektów do swojej szafy. + <usetemplate ignoretext="Potwierdź podczas rozłączania zestawu obiektów" name="okcancelignore" notext="Anuluj" yestext="Rozłącz" /> + </notification> + <notification name="HelpReportAbuseConfirm"> + Dziękujemy za poświęcenie czasu na poinformowanie nas o tym problemie. +Przejrzymy Twoje zgłoszenie pod kątem ewentualnych nadużyć i podejmiemy odpowiednią akcję. </notification> <notification name="HelpReportAbuseSelectCategory"> Wybierz kategorię dla tego raportu o nadużyciu. @@ -2048,7 +2262,7 @@ Dokładne dane pomogą nam w klasyfikacji i przetwarzaniu raportu. Jeżeli składasz raport dotyczący naruszenia praw autorskich proszę się upewnić, że robisz to poprawnie: -(1) Przypadek Nadużycia. Możesz złożyć raport jeżeli sądzisz, że Rezydent narusza system przywilejów [SECOND_LIFE], na przykład używając CopyBot lub podobnych narzędzi robiących kopie, naruszając prawa autorskie. Komisja Nadużyć bada wykroczenia i stosuje akcje dyscyplinarne za zachowania sprzeczne z zasadami [http://secondlife.com/corporate/tos.php Warunków Umowy] i [http://secondlife.com/corporate/cs.php Standardów Społeczeństwa] w [SECOND_LIFE]. Komisja Nadużyć nie zajmuje się i nie odpowiada na żądania usunięcia treści ze środowiska [SECOND_LIFE]. +(1) Przypadek Nadużycia. Możesz złożyć raport jeżeli sądzisz, że Rezydent narusza system przywilejów [SECOND_LIFE], na przykład używając CopyBot lub podobnych narzędzi robiących kopie, naruszając prawa autorskie. Komisja Nadużyć bada wykroczenia i stosuje akcje dyscyplinarne za zachowania sprzeczne z zasadami Warunków Umowy [http://secondlife.com/corporate/tos.php Warunków Umowy] i [http://secondlife.com/corporate/cs.php Standardów Społeczeństwa] w [SECOND_LIFE]. Komisja Nadużyć nie zajmuje się i nie odpowiada na żądania usunięcia treści ze środowiska [SECOND_LIFE]. (2) Przypadek DMCA lub Usuwanie Treści. Aby wystąpić z żądaniem o usunięcie treści ze środowiska [SECOND_LIFE] MUSISZ przedłożyć ważne zawiadomienie o nadużyciu zgodne z naszą polityką DMCA [http://secondlife.com/corporate/dmca.php DMCA Policy]. @@ -2084,13 +2298,31 @@ Chcesz wyłączyć Tryb Zajętości przed zakończeniem tej transakcji? <button ignore="Nigdy nie wyłączaj trybu Zajętości" name="No" text="Anuluj" /> </form> </notification> + <notification label="Działka odtwarza media" name="ParcelPlayingMedia"> + Ta lokalizacja odtwarza media: +[URL] +Czy chcesz je odtworzyć? + <form name="form"> + <ignore name="ignore" text="Zawsze wybieraj tę opcję dla tej ziemi."/> + <button ignore="Odtwarzaj media" name="Yes" text="Odtwarzaj"/> + <button ignore="Ignoruj media" name="No" text="Nie odtwarzaj"/> + </form> + </notification> <notification name="ConfirmDeleteProtectedCategory"> Ten folder '[FOLDERNAME]' to folder systemowy. Usunięcie folderu systemowego spowoduje niestabilność. Czy na pewno chcesz go skasować? <usetemplate ignoretext="Potwierdź zanim folder systemu zostanie skasowany" name="okcancelignore" notext="Anuluj" /> </notification> + <notification name="PurgeSelectedItems"> + [COUNT] przedmiotów zostanie usuniętych. Na pewno chcesz permanentnie usunąć zaznaczoną zawartość Kosza? + <usetemplate name="okcancelbuttons" notext="Anuluj" /> + </notification> <notification name="ConfirmEmptyTrash"> - Na pewno chcesz permanentnie usunąć zawartość Kosza? - <usetemplate ignoretext="Potwierdź przed usunięciem zawartości Kosza" name="okcancelignore" notext="Anuluj" /> + [COUNT] przedmiotów i folderów zostanie usuniętych. Na pewno chcesz permanentnie usunąć zawartość Kosza? + <usetemplate name="okcancelbuttons" notext="Anuluj" /> + </notification> + <notification name="TrashIsFull"> + Twój kosz się przepełnia. Może to sprawić, że będziesz mieć problemy z zalogowaniem się. + <usetemplate name="okcancelbuttons" notext="Wyczyszczę kosz ręcznie później" yestext="Sprawdź kosz teraz" /> </notification> <notification name="ConfirmClearBrowserCache"> Na pewno chcesz wyczyścić bufory przeglądarki internetowej, wyszukiwania i podróży? @@ -2112,6 +2344,12 @@ Chcesz wyłączyć Tryb Zajętości przed zakończeniem tej transakcji? Na pewno chcesz permanentnie usunąć zawartość Twojego folderu Zagubione i odnalezione? <usetemplate ignoretext="Potwierdź przed usunięciem zawartości foldera Zagubione i odnalezione" name="okcancelignore" notext="Nie" yestext="Tak" /> </notification> + <notification name="ConfirmReplaceLink"> + Zamierzasz zastąpić link do części ciała o typie '[TYPE]' elementem, który nie pasuje do tego typu. + +Na pewno chcesz kontynuować? + <usetemplate ignoretext="Potwierdź przed zamianą linku" name="okcancelignore" notext="Nie" yestext="Tak" /> + </notification> <notification name="CopySLURL"> Następujący link SLurl został skopiowany do schowka: [SLURL] @@ -2132,7 +2370,15 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t Ten plik cyklu dziennego używa brakującego pliku nieba: [SKY]. </notification> <notification name="WLRegionApplyFail"> - Ustawienia nie mogą zostać zastosowane w regionie. Opuszczenie regionu, a następnie powrócenie do niego może naprawić problem. Powód: [FAIL_REASON] + Ustawienia nie mogą zostać zastosowane w regionie. Powód: [FAIL_REASON] + </notification> + <notification name="WLLocalTextureDayBlock"> + Lokalna tekstura jest używana na ścieżce [TRACK], klatce #[FRAMENO] ([FRAME]%) w polu [FIELD]. +Otoczenia nie mogą zostać zapisane gdy lokalne tekstury są w użyciu. + </notification> + <notification name="WLLocalTextureFixedBlock"> + Lokalna tekstura jest używana w polu [FIELD]. +Otoczenia nie mogą zostać zapisane gdy lokalne tekstury są w użyciu. </notification> <notification name="EnvCannotDeleteLastDayCycleKey"> Nie można usunąć ostatniego klucza w cyklu dnia, bo nie może on być pusty. Zmodyfikuj ten klucz zamiast go usuwać, a potem dodaj nowy. @@ -2182,13 +2428,10 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t Ciąg [STRING_NAME] nie został znaleziony w strings.xml </notification> <notification name="Cancelled"> - Anulowane - </notification> - <notification name="CancelledSit"> - Siadanie anulowane + Anulowane. </notification> <notification name="CancelledAttach"> - Dołączanie anulowane + Dołączanie anulowane. </notification> <notification name="ReplacedMissingWearable"> Brakujące ubranie/części ciała zastąpiono domyślnymi obiektami. @@ -2197,23 +2440,26 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t Temat: [SUBJECT], Treść: [MESSAGE] </notification> <notification name="FriendOnlineOffline"> - <nolink>[NAME]</nolink> jest [STATUS] + <nolink>[NAME]</nolink> jest [STATUS]. </notification> <notification name="AddSelfFriend"> Niewątpliwie znasz siebie najlepiej, ale nie możesz dodać swojej własnej osoby do listy znajomych. </notification> + <notification name="AddSelfRenderExceptions"> + Nie możesz dodać siebie do listy wyjątków renderowania. + </notification> <notification name="UploadingAuctionSnapshot"> - Ładowanie obrazów z Internetu... + Przesyłanie obrazów... (Zajmuje około 5 minut.) </notification> <notification name="UploadPayment"> - Ładowanie kosztowało [AMOUNT]L$. + Przesyłanie kosztowało [AMOUNT]L$. </notification> <notification name="UploadWebSnapshotDone"> - Ładowanie obrazu z Internetu zakończone pomyślnie. + Przesyłanie obrazu do sieci zakończone pomyślnie. </notification> <notification name="UploadSnapshotDone"> - Ładowanie zdjęcia zakończone pomyślnie. + Przesyłanie zdjęcia zakończone pomyślnie. </notification> <notification name="TerrainDownloaded"> Plik terrain.raw ściągnięty. @@ -2377,7 +2623,7 @@ Zainstaluj wtyczki ponownie lub skontaktuj się z dostawcą, jeśli problem nada Obiekty z działki należącej do Rezydenta [NAME] zostały zwrócone do jego Szafy. </notification> <notification name="GroupObjectsReturned"> - Obiekty z wybranej działki przypisane do grupy [GROUPNAME] zostały zwrócone do szaf ich właścicieli. + Obiekty z wybranej działki przypisane do grupy <nolink>[GROUPNAME]</nolink> zostały zwrócone do szaf ich właścicieli. Przekazywalne obiekty przekazane grupie zostały zwrócone do ich poprzednich właścicieli. Nieprzekazywalne obiekty przekazane grupie zostały usunięte. </notification> @@ -2400,7 +2646,7 @@ Nie możesz tutaj latać. Popychanie niedozwolone. Nie możesz tutaj popychać innych chyba, że jesteś właścicielem tej działki. </notification> <notification name="NoVoice"> - Ta działka nie pozwala na rozmowy głosowe. + Ta działka nie pozwala na rozmowy głosowe. Nie będziesz słyszeć, jak ktoś rozmawia. </notification> <notification name="NoBuild"> Ta działka nie pozwala na budowanie. Nie możesz tworzyć tutaj obiektów. @@ -2408,6 +2654,10 @@ Nie możesz tutaj latać. <notification name="PathfindingDirty"> W tym regionie są oczekujące zmiany w odnajdywaniu ścieżek. Jeśli posiadasz prawa budowania możesz odświeżyć region klikając na przycisk “Odśwież region”. </notification> + <notification name="PathfindingDirtyRebake"> + W tym regionie są oczekujące zmiany w odnajdywaniu ścieżek. Jeśli posiadasz prawa budowania możesz odświeżyć region klikając na przycisk “Odśwież region”. + <usetemplate name="okbutton" yestext="Odśwież" /> + </notification> <notification name="DynamicPathfindingDisabled"> Dynamiczne odnajdywanie ścieżek nie jest włączone w tym regionie. Oskryptowane obiekty używające odwołań LSL wykorzystujących odnajdywanie ścieżek mogą nie działać zgodnie z oczekiwaniami. </notification> @@ -2432,13 +2682,15 @@ Nie możesz tutaj latać. Tylko publiczne działki w tym regionie, co Ty, mogą być przejęte. </notification> <notification name="RegionTPAccessBlocked"> - Region, który próbujesz odwiedzić ma klasyfikację treści przekraczającą Twoje obecne preferencje treści. Możesz je zmienić używając Ja > Ustawienia > Ogólne w pasku menu. + Region, który próbujesz odwiedzić, ma klasyfikację treści przekraczającą Twoje maksymalne preferencje. Możesz je zmienić używając Ja > Ustawienia > Ogólne. + +Pełne informacje na temat klasyfikacji treści można znaleźć [https://community.secondlife.com/knowledgebase/english/maturity-ratings-r52/ tutaj]. </notification> <notification name="RegionAboutToShutdown"> Region, do którego próbujesz się dostać, właśnie się wyłącza. </notification> <notification name="URBannedFromRegion"> - Zostałeś zbanowany w regionie. + Zostałeś/aś zbanowany/a w regionie. </notification> <notification name="NoTeenGridAccess"> Twoje konto nie może zostać połączone z podanym regionem Teen Grid. @@ -2529,7 +2781,7 @@ Spróbuj ponownie za kilka minut. [ITEM_SLURL] <form name="form"> <button name="Show" text="Pokaż" /> - <button name="Discard" text="Wyrzuć" /> + <button name="Discard" text="Odrzuć" /> <button name="Mute" text="Zablokuj" /> </form> </notification> @@ -2673,22 +2925,80 @@ Czy się zgadzasz? <button name="Mute" text="Zablokuj" /> </form> </notification> - <notification name="ScriptQuestionCaution"> - Obiekt '<nolink>[OBJECTNAME]</nolink>' chciałby uzyskać zgodę na pobieranie Linden Dolarów (L$) z Twojego konta. Jeśli zezwolisz, to będzie on mógł brać z niego wszystkie lub część środków, w dowolnej chwili, bez dodatkowych ostrzeżeń. + <notification name="ExperienceAcquireFailed"> + Nie można uzyskać nowej przygody: +[ERROR_MESSAGE] + </notification> + <notification name="NotInGroupExperienceProfileMessage"> + Zmiana do grupy przygody została zignorowana, ponieważ właściciel nie jest członkiem wybranej grupy. + </notification> + <notification name="UneditableExperienceProfileMessage"> + Niemodyfikowalne pole '[field]' zostało zignorowane podczas aktualizacji profilu przygody. + </notification> + <notification name="RestrictedToOwnerExperienceProfileMessage"> + Zignorowano zmiany dla pola '[field]', ponieważ może ono być zmieniane tylko przez właściciela przygody. + </notification> + <notification name="MaturityRatingExceedsOwnerExperienceProfileMessage"> + Nie możesz ustawić poziomu treści dla przygody większego, niż ten właściciela. + </notification> + <notification name="RestrictedTermExperienceProfileMessage"> + Następujące rzeczy uniemożliwiły zaktualizowanie nazwy/opisu profilu przygody: [extra_info] + </notification> + <notification name="TeleportedHomeExperienceRemoved"> + Zostałeś/aś wyteleportowany/a z regionu [region_name] za usunięcie przygody secondlife:///app/experience/[public_id]/profile i wobec tego nie możesz tam dłużej przebywać. + <form name="form"> + <ignore name="ignore" text="Wyteleportowanie z regionu za usunięcie przygody"/> + </form> + </notification> + <notification name="TrustedExperienceEntry"> + Dostałeś/aś przyzwolenie na przebywanie w regionie [region_name], ponieważ zgodziłeś/aś się uczestniczyć w przygodzie secondlife:///app/experience/[public_id]/profile - usunięcie jej może spowodować, że zostaniesz usunięty/a z regionu. + <form name="form"> + <ignore name="ignore" text="Przyzwolenie na przebywanie w regionie po akceptacji przygody"/> + </form> + </notification> + <notification name="TrustedExperiencesAvailable"> + Nie masz dostępu do tego miejsca. Może będziesz go mieć, jeśli zaakceptujesz następującą przygodę: -Zanim zezwolisz na dostęp upewnij się, że wiesz jaki to obiekt i dlaczego pyta o zgodę - oraz że ufasz jego twórcy. Jeśli nie masz pewności kliknij na Odmów. +[EXPERIENCE_LIST] + +Inne przygody również mogą stać się dostępne. + </notification> + <notification name="ExperienceEvent"> + Obiekt dostał zezwolenie: [EventType] - poprzez przygodę: secondlife:///app/experience/[public_id]/profile +Właściciel: secondlife:///app/agent/[OwnerID]/inspect +Nazwa obiektu: [ObjectName] +Nazwa działki: [ParcelName] + </notification> + <notification name="ExperienceEventAttachment"> + Dodatek na Tobie dostał zezwolenie: [EventType] - poprzez przygodę: secondlife:///app/experience/[public_id]/profile +Właściciel: secondlife:///app/agent/[OwnerID]/inspect + </notification> + <notification name="ScriptQuestionExperience"> + Obiekt '<nolink>[OBJECTNAME]</nolink>' którego właścicielem jest '[NAME]' prosi Cię o udział w przygodzie ([GRID_WIDE]): + +[EXPERIENCE] + +Gdy zezwolenie zostanie zatwierdzone nie zobaczysz tej wiadomości ponownie, dla tej przygody - chyba, że zostanie ono cofnięte w profilu przygody. + +Skrypty powiązane z tą przygodą będą mogły robić następujące rzeczy w regionach, gdzie przygoda jest aktywna: + +[QUESTIONS] + +Czy wyrażasz na to zgodę? <form name="form"> - <button name="Grant" text="Zezwól na dostęp" /> - <button name="Deny" text="Odmów" /> + <button name="BlockExperience" text="Zablokuj przygodę"/> + <button name="Mute" text="Zablokuj obiekt"/> + <button name="Yes" text="Tak"/> + <button name="No" text="Nie"/> </form> </notification> - <notification name="UnknownScriptQuestion"> - Zezwolenia, o jakie prosi skrypt z '<nolink>[OBJECTNAME]</nolink>', którego właścicielem jest '[NAME]', nie są rozpoznawane przez przeglądarkę i nie mogą zostać udzielone. + <notification name="ScriptQuestionCaution"> + Obiekt '<nolink>[OBJECTNAME]</nolink>' chciałby uzyskać zgodę na pobieranie Linden Dolarów (L$) z Twojego konta. Jeśli zezwolisz, to będzie on mógł brać z niego wszystkie lub część środków, w dowolnej chwili, bez dodatkowych ostrzeżeń. -Aby ich udzielić prosimy zaktualizować przeglądarkę do najnowszej wersji z [DOWNLOADURL]. +Zanim zezwolisz na dostęp upewnij się, że wiesz jaki to obiekt i dlaczego pyta o zgodę - oraz że ufasz jego twórcy. Jeśli nie masz pewności kliknij na Odmów. <form name="form"> - <button name="Deny" text="Ok, odmów jednorazowo" /> - <button name="Mute" text="Zablokuj/Wycisz" /> + <button name="Grant" text="Zezwól na dostęp"/> + <button name="Deny" text="Odmów"/> </form> </notification> <notification name="ScriptDialog"> @@ -2700,21 +3010,13 @@ Aby ich udzielić prosimy zaktualizować przeglądarkę do najnowszej wersji z [ </form> </notification> <notification name="ScriptDialogGroup"> - '<nolink>[TITLE]</nolink>' - [GROUPNAME] + '<nolink>[TITLE]</nolink>' - <nolink>[GROUPNAME]</nolink> [MESSAGE] <form name="form"> <button name="Client_Side_Mute" text="Blokuj" /> <button name="Client_Side_Ignore" text="Zignoruj" /> </form> </notification> - <notification name="FirstBalanceIncrease"> - Właśnie otrzymałeś/aś [AMOUNT] L$. -Twój stan L$ jest widoczny w prawym górnym narożniku ekranu. - </notification> - <notification name="FirstBalanceDecrease"> - Właśnie wydałeś/aś [AMOUNT] L$. -Twój stan L$ jest widoczny w prawym górnym narożniku ekranu. - </notification> <notification name="BuyLindenDollarSuccess"> Dziękujemy za wpłatę! @@ -2756,7 +3058,7 @@ Wybierz Zablokuj żeby wyciszyć wszystkie wiadomości od tej osoby. Zaoferowano [NAME] obiekty i ta osoba została automatycznie odblokowana. </notification> <notification name="VoiceInviteGroup"> - [NAME] zaczyna rozmowę głosową z grupą [GROUP]. + [NAME] zaczyna rozmowę głosową z grupą <nolink>[GROUP]</nolink>. Wybierz Zaakceptuj żeby rozmawiać albo Odmów żeby nie przyjąć zaproszenia. Wybierz Zablokuj żeby wyciszyć dzwoniącą osobę. <form name="form"> @@ -2792,31 +3094,34 @@ Wybierz Zablokuj żeby wyciszyć tą osobę. Przepraszamy. Limit rozmów został przekroczony w tym obszarze. Spróbuj w innym miejscu. </notification> <notification name="VoiceChannelDisconnected"> - [VOICE_CHANNEL_NAME] odłączył się. Przełączanie do rozmowy w czacie lokalnym. + [VOICE_CHANNEL_NAME] odłączył się. Przełączanie do rozmowy w czacie w pobliżu. </notification> <notification name="VoiceChannelDisconnectedP2P"> - [VOICE_CHANNEL_NAME] skończył rozmowę. Przełączanie do rozmowy w czacie lokalnym. + [VOICE_CHANNEL_NAME] skończył rozmowę. Przełączanie do rozmowy w czacie w pobliżu. </notification> <notification name="P2PCallDeclined"> - [VOICE_CHANNEL_NAME] odmówił połączenia. Przełączanie do rozmowy w czacie lokalnym. + [VOICE_CHANNEL_NAME] odmówił połączenia. Przełączanie do rozmowy w czacie w pobliżu. </notification> <notification name="P2PCallNoAnswer"> - [VOICE_CHANNEL_NAME] nie odpowiada. Przełączanie do rozmowy w czacie lokalnym. + [VOICE_CHANNEL_NAME] nie odpowiada. Przełączanie do rozmowy w czacie w pobliżu. </notification> <notification name="VoiceChannelJoinFailed"> - Brak połączenia z [VOICE_CHANNEL_NAME], spróbuj później. Przełączanie do rozmowy w czacie lokalnym. + Brak połączenia z [VOICE_CHANNEL_NAME], spróbuj później. Przełączanie do rozmowy w czacie w pobliżu. </notification> <notification name="VoiceEffectsExpired"> Subskrypcja jednego lub więcej Przekształceń Głosu wygasła. [[URL] Kliknij tutaj] oby odnowić subskrypcję. +Jeśli jesteś użytkownikiem premium, to [[PREMIUM_URL] kliknij tutaj] aby otrzymać swój perk Przekształceń Głosu. </notification> <notification name="VoiceEffectsExpiredInUse"> Czas aktywności Przekształcenia Głosu wygasł, normalne ustawienia Twojego głosu zostały zastosowane. [[URL] Kliknij tutaj] aby odnowić subskrypcję. +Jeśli jesteś użytkownikiem premium, to [[PREMIUM_URL] kliknij tutaj] aby otrzymać swój perk Przekształceń Głosu. </notification> <notification name="VoiceEffectsWillExpire"> Jedno lub więcej z Twoich Przekształceń Głosu wygaśnie za mniej niż [INTERVAL] dni. [[URL] Kliknij tutaj] aby odnowić subskrypcję. +Jeśli jesteś użytkownikiem premium, to [[PREMIUM_URL] kliknij tutaj] aby otrzymać swój perk Przekształceń Głosu. </notification> <notification name="VoiceEffectsNew"> Nowe Przekształcenia Głosu są dostępne! @@ -2859,6 +3164,31 @@ Zostaną zablokowane na kilka sekund dla bezpieczeństwa. <notification name="AttachmentSaved"> Załącznik został zapisany. </notification> + <notification name="AppearanceToXMLSaved"> + Wygląd został zapisany do XML, w [PATH] + </notification> + <notification name="AppearanceToXMLFailed"> + Nie udało się zapisać wyglądu do XML. + </notification> + <notification name="SnapshotToComputerFailed"> + Nie można zapisać zrzutu ekranu do [PATH]: Dysk jest pełny. Potrzeba [NEED_MEMORY]KB, ale wolnego jest [FREE_MEMORY]KB. + </notification> + <notification name="SnapshotToLocalDirNotExist"> + Nie można zapisać zrzutu ekranu do [PATH]: Katalog nie istnieje. + </notification> + <notification name="PresetNotSaved"> + Błąd podczas zapisywania ustawienia [NAME]. + </notification> + <notification name="DefaultPresetNotSaved"> + Nie można zastąpić domyślnego ustawienia. + </notification> + <notification name="PresetAlreadyExists"> + '[NAME]' jest w użyciu. Możesz zastąpić +to ustawienie lub wybrać inną nazwę. + </notification> + <notification name="PresetNotDeleted"> + Błąd podczas usuwania ustawienia [NAME]. + </notification> <notification name="UnableToFindHelpTopic"> Nie można znaleźć tematu pomocy dla tego elementu. </notification> @@ -2872,12 +3202,25 @@ Zostaną zablokowane na kilka sekund dla bezpieczeństwa. <notification name="VoiceIsMutedByModerator"> Twoja rozmowa głosowa została wyciszona przez moderatora. </notification> + <notification name="FailedToGetBenefits"> + Niestety nie udało nam się uzyskać informacji o korzyściach dla tej sesji. Nie powinno się to zdarzyć w normalnym środowisku produkcyjnym. Skontaktuj się z pomocą techniczną. Ta sesja nie będzie działać normalnie i zalecamy restart. + </notification> + <notification name="BulkUploadCostConfirmation"> + Spowoduje to przesłanie [COUNT] elementów o łącznym koszcie [COST]L$. Czy chcesz kontynuować przesyłanie? + <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Prześlij"/> + </notification> + <notification name="BulkUploadNoCompatibleFiles"> + Wybranych plików nie można przesłać zbiorczo. + </notification> + <notification name="BulkUploadIncompatibleFiles"> + Niektórych z wybranych plików nie można przesłać zbiorczo. + </notification> <notification name="UploadCostConfirmation"> - Załadowanie tego na serwer będzie kosztować [PRICE]L$, chcesz kontynuować? - <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Załaduj" /> + Przesłanie tego na serwer będzie kosztować [PRICE]L$, chcesz kontynuować? + <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Prześlij"/> </notification> <notification name="ConfirmClearTeleportHistory"> - Czy na pewno chcesz usunąć historię teleportacji? + Spowoduje to usunięcie całej listy odwiedzonych przez Ciebie miejsc i nie będzie można tego cofnąć. Kontynuować? <usetemplate name="okcancelbuttons" notext="Anuluj" /> </notification> <notification name="BottomTrayButtonCanNotBeShown"> @@ -2887,13 +3230,16 @@ Przycisk zostanie wyświetlony w przypadku dostatecznej ilości przestrzeni. <notification name="ShareNotification"> Zaznacz Rezydentów, z którymi chcesz się podzielić. </notification> + <notification name="MeshUploadErrorDetails"> + Nie można przesłać [LABEL]: [MESSAGE] +[DETAILS] Zobacz SecondLife.log, aby dowiedzieć się więcej. + </notification> <notification name="MeshUploadError"> - Nie można załadować [LABEL]: [MESSAGE] [IDENTIFIER] - -Zobacz log, aby dowiedzieć się więcej. + Nie można przesłać [LABEL]: [MESSAGE] +Zobacz SecondLife.log, aby dowiedzieć się więcej. </notification> <notification name="MeshUploadPermError"> - Wystąpił błąd podczas pobierania uprawnień ładowania meszy. + Wystąpił błąd podczas pobierania uprawnień przesyłania meszy. </notification> <notification name="RegionCapabilityRequestError"> Nie udało się uzyskać zdolności regionu: '[CAPABILITY]'. @@ -2973,14 +3319,26 @@ Awatar '[NAME]' rozpoczął edycję wyglądu. Awatar '[NAME]' opuścił edycję wyglądu. </notification> <notification name="NoConnect"> - Występuje problem z połączeniem [PROTOCOL] [HOSTID]. + Występuje problem z połączeniem [PROTOCOL] <nolink>[HOSTID]</nolink>. Proszę sprawdź swoją sieć i ustawienia firewall. </notification> <notification name="NoVoiceConnect"> - Występuje problem z Twoim połączeniem głosowym: + Nie możemy połączyć się z serwerem głosowym: [HOSTID] +Porty, które muszą być otwarte dla połączeń głosowych, to: +:TCP: 80, 443 +:UDP: 3478, 3479, 5060, 5062, 6250, 12000-32000 + +Proszę sprawdź swoją sieć i ustawienia firewall. +Wyłącz wszelkie funkcjonalności SIP ALG (Application Layer Gateway) w swoim routerze. + +Komunikacja głosowa nie będzie dostępna. + </notification> + <notification name="NoVoiceConnect-GIAB"> + Występuje problem z Twoim połączeniem głosowym. + Komunikacja głosowa nie będzie dostępna. Proszę sprawdź swoją sieć i ustawienia firewall. </notification> @@ -2990,20 +3348,27 @@ Awatar '[NAME]' pozostał w pełni załadowany. </notification> <notification name="AvatarRezSelfBakedTextureUploadNotification"> ( [EXISTENCE] sekund w Second Life ) -Wstępnie przetworzone tekstury [RESOLUTION] dla '[BODYREGION]' zostały załadowane po [TIME] sekundach. +Wstępnie przetworzone tekstury [RESOLUTION] dla '[BODYREGION]' zostały przesłane po [TIME] sekundach. </notification> <notification name="AvatarRezSelfBakedTextureUpdateNotification"> ( [EXISTENCE] sekund w Second Life ) Wstępnie przetworzone tekstury [RESOLUTION] zostały lokalnie zaktualizowane dla '[BODYREGION]' po [TIME] sekundach. </notification> <notification name="CannotUploadTexture"> - Nie można załadować tekstury. -[REASON] - </notification> + Nie można przesłać tekstury. +[REASON] + </notification> <notification name="LivePreviewUnavailable"> Nie można wyświetlić podglądu tej tekstury - jest niekopiowalna lub/oraz nietransferowalna. <usetemplate ignoretext="Ostrzegaj, gdy podgląd na żywo nie może wyświetlić niekopiowalnych/nietransferowalnych tekstur" name="okignore" /> </notification> + <notification name="FacePasteFailed"> + Wklejanie nie powiodło się. [REASON] + </notification> + <notification name="FacePasteTexturePermissions"> + Zastosowano teksturę z ograniczonymi uprawnieniami, obiekt odziedziczy więc te uprawnienia. + <usetemplate ignoretext="Wklejanie: zastosowano teksturę z ograniczonymi uprawnieniami" name="notifyignore" /> + </notification> <notification name="ConfirmLeaveCall"> Czy jesteś pewien/pewna, że chcesz zakończyć rozmowę? <usetemplate ignoretext="Potwierdź zanim rozmowa głosowa zostanie zakończona" name="okcancelignore" notext="Nie" yestext="Tak" /> @@ -3063,13 +3428,6 @@ Kliknij i przeciągnij gdziekolwiek aby obrócić widok. <notification name="ForceQuitDueToLowMemory"> SL zostanie wyłączone za 30 sekund, brak pamięci. </notification> - <notification name="PopupAttempt"> - Wyskakujące okienko zostało zablokowane. - <form name="form"> - <ignore name="ignore" text="Zezwól na wyskakujące okienka" /> - <button name="open" text="Otwórz wyskakujące okno" /> - </form> - </notification> <notification name="SOCKS_NOT_PERMITTED"> Serwer proxy SOCKS 5 "[HOST]:[PORT]" odmawia połączenia, brak dostępu na podstawie zestawu reguł. </notification> @@ -3161,7 +3519,7 @@ Kliknij i przeciągnij gdziekolwiek aby obrócić widok. </notification> <notification name="ConfirmHideUI"> Ta akcja ukryje wszystkie menu i przyciski. Aby je pokazać użyj skrótu [SHORTCUT] ponownie. - <usetemplate name="okcancelignore" notext="Anuluj" ignoretext="Potwierdź przed ukryciem interfejsu" /> + <usetemplate name="okcancelignore" notext="Anuluj" ignoretext="Potwierdź przed ukryciem interfejsu" /> </notification> <notification name="PathfindingLinksets_WarnOnPhantom"> Niektórym z zaznaczonych zbiorów części zostanie przełączony status Widmowy. @@ -3219,10 +3577,10 @@ Czy chcesz kontynuować? Wybrany obiekt ma wpływ na Navmesh. Dodanie elastyczności spowoduje usunięcie go z Navmesha. <usetemplate ignoretext="Wybrany obiekt ma wpływ na Navmesh. Dodanie elastyczności spowoduje usunięcie go z Navmesha." name="okcancelignore" notext="Anuluj" /> </notification> - <global name="UnsupportedGLRequirements"> - Wygląda na to, że Twój system nie spełnia wymagań sprzętowych [APP_NAME]. [APP_NAME] wymaga karty graficznej kompatybilnej z OpenGL z multiteksturami. Jeżeli masz taką kartę zainstaluj najnowsze sterowniki do niej i uaktualnienia systemu operacyjnego. + <global name="UnsupportedIntelDriver"> + Zainstalowany sterownik graficzny Intela dla [GPUNAME], wersja [VERSION], jest przestarzały i jest znany z powodowania awarii. Zdecydowanie zaleca się aktualizację do aktualnego sterownika Intel. -Jeżeli wciąż masz problemy sprawdź: [SUPPORT_SITE]. +Czy chcesz sprawdzić witrynę sterowników firmy Intel? </global> <global name="UnsupportedGPU"> - Twoja karta graficzna nie spełnia minimalnych wymagań. @@ -3230,9 +3588,12 @@ Jeżeli wciąż masz problemy sprawdź: [SUPPORT_SITE]. <global name="UnsupportedRAM"> - Pamięć Twojego systemu nie spełnia minimalnych wymagań. </global> + <global name="LLLeapUpdaterFailure"> + Nie udało się uruchomić usługi aktualizatora [UPDATER_APP]. Sprawdź, czy przeglądarka jest poprawnie zainstalowana i czy ma niezbędne uprawnienia do uruchomienia. Jeśli nadal będziesz mieć problemy, odwiedź [SUPPORT_SITE]. + </global> <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". + Jeśli jesteś właścicielem działki, to możesz ustawić na niej miejsce startu. +W innym przypadku możesz poszukać na mapie miejsc oznaczonych jako "Infohub". </global> <global name="You died and have been teleported to your home location"> Nastąpiła śmierć i teleportacja do Miejsca Startu. @@ -3309,13 +3670,13 @@ Anulowano. Nie możesz tworzyć drzew i trawy na ziemi, która nie należy do Ciebie. </notification> <notification name="NoCopyPermsNoObject"> - Kopiowanie nie powiodło się, ponieważ nie masz zezwoleń na kopiowanie obiektu '[OBJ_NAME]'. + Kopiowanie nie powiodło się, ponieważ nie masz zezwoleń na kopiowanie obiektu <nolink>'[OBJ_NAME]'</nolink>. </notification> <notification name="NoTransPermsNoObject"> - Kopiowanie nie powiodło się, ponieważ obiekt '[OBJ_NAME]' nie może zostać przetransferowany do Ciebie. + Kopiowanie nie powiodło się, ponieważ obiekt <nolink>'[OBJ_NAME]'</nolink> nie może zostać przetransferowany do Ciebie. </notification> <notification name="AddToNavMeshNoCopy"> - Kopiowanie nie powiodło się, ponieważ obiekt '[OBJ_NAME]' ma wpływ na Navmesh. + Kopiowanie nie powiodło się, ponieważ obiekt <nolink>'[OBJ_NAME]'</nolink> ma wpływ na Navmesh. </notification> <notification name="DupeWithNoRootsSelected"> Wybrano duplikat bez obiektów głównych. @@ -3362,34 +3723,37 @@ Spróbuj ponownie za minutę. Zabieranie z powrotem do Szafy zostało wyłączone. </notification> <notification name="NoExistNoSaveToContents"> - Nie można zapisać '[OBJ_NAME]' do zawartości obiektu, ponieważ obiekt z którego został zrezzowany już nie istnieje. + Nie można zapisać <nolink>'[OBJ_NAME]'</nolink> do zawartości obiektu, ponieważ obiekt z którego został zrezzowany już nie istnieje. </notification> <notification name="NoModNoSaveToContents"> - Nie można zapisać '[OBJ_NAME]' do zawartości obiektu, ponieważ nie masz praw do modyfikacji obiektu '[DEST_NAME]'. + Nie można zapisać <nolink>'[OBJ_NAME]'</nolink> do zawartości obiektu, ponieważ nie masz praw do modyfikacji obiektu <nolink>'[DEST_NAME]'</nolink>. </notification> <notification name="NoSaveBackToInvDisabled"> - Nie można zabrać '[OBJ_NAME]' z powrotem do Szafy -- ta operacja została wyłączona. + Nie można zabrać <nolink>'[OBJ_NAME]'</nolink> z powrotem do Szafy -- ta operacja została wyłączona. </notification> <notification name="NoCopyNoSelCopy"> - Nie możesz skopiować tego, co jest zaznaczone, ponieważ nie masz prawa do skopiowania obiektu '[OBJ_NAME]'. + Nie możesz skopiować tego, co jest zaznaczone, ponieważ nie masz prawa do skopiowania obiektu <nolink>'[OBJ_NAME]'</nolink>. </notification> <notification name="NoTransNoSelCopy"> - Nie możesz skopiować tego, co jest zaznaczone, ponieważ obiektu '[OBJ_NAME]' nie można transferować. + Nie możesz skopiować tego, co jest zaznaczone, ponieważ obiektu <nolink>'[OBJ_NAME]'</nolink> nie można transferować. </notification> <notification name="NoTransNoCopy"> - Nie możesz skopiować tego, co jest zaznaczone, ponieważ obiektu '[OBJ_NAME]' nie można transferować. + Nie możesz skopiować tego, co jest zaznaczone, ponieważ obiektu <nolink>'[OBJ_NAME]'</nolink> nie można transferować. </notification> <notification name="NoPermsNoRemoval"> - Usunięcie obiektu '[OBJ_NAME]' z symulatora zostało wzbronione przez system zezwoleń. + Usunięcie obiektu <nolink>'[OBJ_NAME]'</nolink> z symulatora zostało wzbronione przez system zezwoleń. </notification> <notification name="NoModNoSaveSelection"> - Nie możesz zapisać tego, co jest zaznaczone, ponieważ nie masz prawa do modyfikacji obiektu '[OBJ_NAME]'. + Nie możesz zapisać tego, co jest zaznaczone, ponieważ nie masz prawa do modyfikacji obiektu <nolink>'[OBJ_NAME]'</nolink>. + </notification> + <notification name="NoTransNoSaveToContents"> + Nie można zapisać <nolink>'[OBJ_NAME]'</nolink> do zawartości obiektu, ponieważ nie masz uprawnień do przeniesienia praw własności obiektu. </notification> <notification name="NoCopyNoSaveSelection"> - Nie możesz zapisać tego, co jest zaznaczone, ponieważ obiektu '[OBJ_NAME]' nie można kopiować. + Nie możesz zapisać tego, co jest zaznaczone, ponieważ obiektu <nolink>'[OBJ_NAME]'</nolink> nie można kopiować. </notification> <notification name="NoModNoTaking"> - Nie możesz zabrać tego, co jest zaznaczone, ponieważ nie masz prawa do modyfikacji obiektu '[OBJ_NAME]'. + Nie możesz zabrać tego, co jest zaznaczone, ponieważ nie masz prawa do modyfikacji obiektu <nolink>'[OBJ_NAME]'</nolink>. </notification> <notification name="RezDestInternalError"> Błąd wewnętrzny: Nieznany typ lokalizacji docelowej. @@ -3415,33 +3779,39 @@ Spróbuj ponownie za minutę. <notification name="AvatarEjectFailed"> Wyrzucenie nie powiodło się, ponieważ nie masz uprawnień administratora na tej działce. </notification> - <notification name="CantMoveObjectParcelFull"> - Nie można przesunąć obiektu '[OBJECT_NAME]' do -[OBJ_POSITION] w regionie [REGION_NAME], ponieważ działka jest zbyt pełna. + <notification name="CMOParcelFull"> + Nie można przesunąć obiektu '[O]' do +[P] w regionie [R], ponieważ działka jest zbyt pełna. + </notification> + <notification name="CMOParcelPerms"> + Nie można przesunąć obiektu '[O]' do +[P] w regionie [R], ponieważ Twoje obiekty nie są dozwolone na tej działce. </notification> - <notification name="CantMoveObjectParcelPerms"> - Nie można przesunąć obiektu '[OBJECT_NAME]' do -[OBJ_POSITION] w regionie [REGION_NAME], ponieważ Twoje obiekty nie są dozwolone na tej działce. + <notification name="CMOParcelResources"> + Nie można przesunąć obiektu '[O]' do +[P] w regionie [R], ponieważ nie ma wystarczającej ilości zasobów na tej działce. </notification> - <notification name="CantMoveObjectParcelResources"> - Nie można przesunąć obiektu '[OBJECT_NAME]' do -[OBJ_POSITION] w regionie [REGION_NAME], ponieważ nie ma wystarczającej ilości zasobów na tej działce. + <notification name="NoParcelPermsNoObject"> + Kopiowanie nie powiodło się, ponieważ nie masz dostępu do tej działki. </notification> - <notification name="CantMoveObjectRegionVersion"> - Nie można przesunąć obiektu '[OBJECT_NAME]' do -[OBJ_POSITION] w regionie [REGION_NAME], ponieważ the region działa na starszej wersji symulatora, która nie obsługuje otrzymywania obiektów przez granice działek. + <notification name="CMORegionVersion"> + Nie można przesunąć obiektu '[O]' do +[P] w regionie [R], ponieważ the region działa na starszej wersji symulatora, która nie obsługuje otrzymywania obiektów przez granice działek. </notification> - <notification name="CantMoveObjectNavMesh"> - Nie można przesunąć obiektu '[OBJECT_NAME]' do -[OBJ_POSITION] w regionie [REGION_NAME], ponieważ nie możesz modyfikować Navmesha przez granice regionów. + <notification name="CMONavMesh"> + Nie można przesunąć obiektu '[O]' do +[P] w regionie [R], ponieważ nie możesz modyfikować Navmesha przez granice regionów. </notification> - <notification name="CantMoveObjectWTF"> - Nie można przesunąć obiektu '[OBJECT_NAME]' do -[OBJ_POSITION] w regionie [REGION_NAME] ze względu na nieznany powód. ([FAILURE_TYPE]) + <notification name="CMOWTF"> + Nie można przesunąć obiektu '[O]' do +[P] w regionie [R] ze względu na nieznany powód. ([F]) </notification> <notification name="NoPermModifyObject"> Nie masz uprawnień do modyfikowania tego obiektu </notification> + <notification name="TooMuchObjectInventorySelected"> + Zbyt wiele obiektów z dużą zawartością zostało zaznaczonych. Zaznacz mniej obiektów i spróbuj ponownie. + </notification> <notification name="CantEnablePhysObjContributesToNav"> Nie można włączyć fizyki dla obiektu, który ma wpływ na Navmesh. </notification> @@ -3478,6 +3848,12 @@ Spróbuj ponownie za minutę. <notification name="CantSaveModifyAttachment"> Nie można zapisać do zawartości obiektu: To zmodyfikowałoby prawa dodatku. </notification> + <notification name="AttachmentHasTooMuchInventory"> + Twoje dodatki zawierają w sobie zbyt dużo obiektów, aby dodać więcej. + </notification> + <notification name="IllegalAttachment"> + Dodatek chciał się doczepić do punktu, jaki nie istnieje na awatarze. Został on zamiast tego dołączony do klatki piersiowej. + </notification> <notification name="TooManyScripts"> Za dużo skryptów. </notification> @@ -3485,7 +3861,7 @@ Spróbuj ponownie za minutę. Nie można dodać skryptu! </notification> <notification name="AssetServerTimeoutObjReturn"> - Czas odpowiedzi z serwera zasobów danych przekroczył dozwolony limit. Obiekt został zwrócony do sima. + Czas odpowiedzi z serwera zasobów danych przekroczył dozwolony limit. Obiekt został zwrócony do regionu. </notification> <notification name="RegionDisablePhysicsShapes"> Ten region nie ma włączonych kształtów fizycznych. @@ -3518,7 +3894,7 @@ Spróbuj ponownie za minutę. Nie możesz zmieniać kształtu obiektu meszowego. </notification> <notification name="FullRegionCantEnter"> - Nie możesz wejść do tego regionu, \nponieważ jest pełny. + Nie możesz wejść do tego regionu, ponieważ jest pełny. </notification> <notification name="LinkFailedOwnersDiffer"> Scalanie nie powiodło się -- właściciele są różni @@ -3570,9 +3946,18 @@ Spróbuj ponownie za minutę. <notification name="TeleportedByObjectUnknownUser"> Zostałeś/aś teleportowany/a przez obiekt '[OBJECT_NAME]' należący do nieznanej osoby. </notification> + <notification name="StandDeniedByObject"> + '[OBJECT_NAME]' nie pozwala Ci w tej chwili stać. + </notification> + <notification name="ResitDeniedByObject"> + '[OBJECT_NAME]' nie pozwala Ci w tej chwili zmieniać siedzeń. + </notification> <notification name="CantCreateObjectRegionFull"> Nie można utworzyć żądanego obiektu. Region jest pełny. </notification> + <notification name="CantCreateAnimatedObjectTooLarge"> + Nie można utworzyć żądanego obiektu animowanego, ponieważ przekracza on limit trójkątów riggowania. + </notification> <notification name="CantAttackMultipleObjOneSpot"> Nie możesz podłączyć wielu obiektów do jednego punktu. </notification> @@ -3621,6 +4006,21 @@ Spróbuj ponownie za minutę. <notification name="CantChangeShape"> Nie masz pozwolenia na zmianę tego kształtu. </notification> + <notification name="NoPermsTooManyAttachedAnimatedObjects"> + Operacja spowodowałaby przekroczenie limitu liczby dołączonych animowanych obiektów. + </notification> + <notification name="NoPermsLinkAnimatedObjectTooLarge"> + Nie można połączyć tych obiektów, ponieważ powstały animowany obiekt przekroczyłby limit trójkątów riggowania. + </notification> + <notification name="NoPermsSetFlagAnimatedObjectTooLarge"> + Nie można przekształcić tego obiektu w animowany obiekt, ponieważ przekroczyłby limit trójkątów riggowania. + </notification> + <notification name="CantChangeAnimatedObjectStateInsufficientLand"> + Nie można zmienić stanu animowanego obiektu dla tej rzeczy, ponieważ spowodowałoby to przekroczenie limitu działki. + </notification> + <notification name="ErrorNoMeshData"> + Błąd serwera: nie można ukończyć tej operacji, ponieważ dane meszu nie zostały załadowane. + </notification> <notification name="NoAccessToClaimObjects"> Twoje uprawnienia nie pozwalają Ci na żądanie obiektów w tym miejscu. </notification> @@ -3679,7 +4079,7 @@ Spróbuj ponownie za minutę. Sprecyzuj proszę swoje parametry usuwania. </notification> <notification name="UnableToUploadAsset"> - Nie można załadować zasobu danych (assetu). + Nie można przesłać zasobu danych (assetu). </notification> <notification name="CantTeleportCouldNotFindUser"> Nie można znaleźć użytkownika, aby teleportować do domu @@ -3691,7 +4091,7 @@ Spróbuj ponownie za minutę. żądanie ogólne nie powiodło się </notification> <notification name="CantUploadPostcard"> - Nie można załadować pocztówki. Spróbuj ponownie później. + Nie można przesłać pocztówki. Spróbuj ponownie później. </notification> <notification name="CantFetchInventoryForGroupNotice"> Nie można pobrać szczegółów dołączonego przedmiotu dla ogłoszenia grupy. @@ -3706,7 +4106,7 @@ Spróbuj ponownie za minutę. Nie można zanalizować przedmiotu z ogłoszenia. </notification> <notification name="TerrainUploadFailed"> - Ładowanie podłoża na serwer nie powiodło się. + Przesyłanie podłoża na serwer nie powiodło się. </notification> <notification name="TerrainFileWritten"> Plik podłoża zapisany. @@ -3799,7 +4199,7 @@ Spróbuj zaznaczyć mniejszy obszar ziemi. Nie można w tej chwili kupić przepustki. Spróbuj ponownie później. </notification> <notification name="CantCreateObjectParcelFull"> - Nie można utworzyć obiektu, \n ponieważ działka jest pełna. + Nie można utworzyć obiektu, ponieważ działka jest pełna. </notification> <notification name="FailedPlacingObject"> Nie udało się umieścić obiektu w żądanej lokalizacji. Spróbuj ponownie. @@ -3870,6 +4270,9 @@ Spróbuj zaznaczyć mniejszy obszar ziemi. <notification name="CantTransfterMoneyRegionDisabled"> Transfery pieniędzy do obiektów są obecnie wyłączone w tym regionie. </notification> + <notification name="DroppedMoneyTransferRequest"> + Nie udało się dokonać płatności ze względu na obciążenie systemu. + </notification> <notification name="CantPayNoAgent"> Nie udało się ustalić, komu zapłacić. </notification> @@ -3883,12 +4286,16 @@ Spróbuj zaznaczyć mniejszy obszar ziemi. Błąd wewnętrzny uniemożliwił poprawną aktualizację danych przeglądarki. Stan konta L$ lub posiadane działki wyświetlane w przeglądarce mogą nie odzwierciedlać faktycznego stanu posiadania na serwerach. </notification> <notification name="LargePrimAgentIntersect"> - Nie można utworzyć wielkich prim, które nachodzą na innych rezydentów. Spróbuj jeszcze raz, gdy przesuną się oni. + Nie można tworzyć wielkich prim, które nachodzą na innych rezydentów. Spróbuj jeszcze raz, gdy się oni przesuną. </notification> <notification name="PreferenceChatClearLog"> Ta opcja usunie dzienniki poprzednich rozmów i wszelkie kopie zapasowe tego pliku. <usetemplate ignoretext="Potwierdź, zanim usunę dzienniki poprzednich rozmów." name="okcancelignore" notext="Anuluj" /> </notification> + <notification name="PreferenceControlsDefaults"> + Czy chcesz przywrócić domyślne ustawienia klawiszy sterowania? + <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Obecny tryb" yestext="Wszystkie tryby" /> + </notification> <notification name="PreferenceChatDeleteTranscripts"> Ta opcja usunie logi wszystkich poprzednich rozmów. Nie będzie to miało wpływu na listę rozmów odbytych w przeszłości. Wszystkie pliki z przyrostkami .txt oraz txt.backup w folderze [FOLDER] zostaną usunięte. <usetemplate ignoretext="Potwierdź, zanim usunę logi rozmów." name="okcancelignore" notext="Anuluj" /> @@ -3903,4 +4310,113 @@ Spróbuj zaznaczyć mniejszy obszar ziemi. <notification name="ChatHistoryIsBusyAlert"> Plik historii czatu jest w tej chwili przetwarzany przez poprzednią operację. Spróbuj ponownie za kilka minut lub wybierz czat innej osoby. </notification> + <notification name="AddPaymentMethod"> + Na następnej stronie wybierz kwotę L$ +i kliknij przycisk składania zamówienia. +Będziesz mógł/a dodać metodę płatności w kasie. + <form name="form"> + <button name="Continue" text="Kontynuuj" /> + <button name="Cancel" text="Anuluj" /> + </form> + </notification> + <notification name="FailedToFindSettings"> + Nie można załadować ustawień dla [NAME] z bazy danych. + </notification> + <notification name="FailedToLoadSettingsApply"> + Nie można zastosować tych ustawień do otoczenia. + </notification> + <notification name="FailedToBuildSettingsDay"> + Nie można zastosować tych ustawień do otoczenia. + </notification> + <notification name="NoEnvironmentSettings"> + Ten region nie obsługuje ustawień otoczenia. + </notification> + <notification label="Zapisz otoczenie" name="SaveSettingAs"> + Zapisz bieżące ustawienia otoczenia jako: + <form name="form"> + <input name="message"> + [DESC] (nowe) + </input> + <button name="Cancel" text="Anuluj" /> + </form> + </notification> + <notification name="WLImportFail"> + Nie można zaimportować starszych ustawień Windlight [NAME] z +[FILE]. + +[REASONS] + </notification> + <notification name="WLParcelApplyFail"> + Nie można ustawić otoczenia dla tej działki. +Odwiedź lub wybierz działkę, którą masz prawo zmodyfikować. + </notification> + <notification name="SettingsUnsuported"> + Otoczenia nie są obsługiwane w tym regionie. +Przejdź do regionu z włączonymi otoczeniami i spróbuj ponownie. + </notification> + <notification name="SettingsConfirmLoss"> + Za chwilę stracisz zmiany wprowadzone dla [TYPE] o nazwie "[NAME]". +Czy na pewno chcesz kontynuować? + <usetemplate ignoretext="Czy na pewno chcesz stracić zmiany?" name="okcancelignore" notext="Nie" yestext="Tak" /> + </notification> + <notification name="SettingsConfirmReset"> + Za chwilę usuniesz wszystkie zastosowane otoczenia. +Czy na pewno chcesz kontynuować? + <usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak" /> + </notification> + <notification name="PersonalSettingsConfirmReset"> + Za chwilę usuniesz wszystkie zastosowane ustawienia własnego oświetlenia. +Czy na pewno chcesz kontynuować? + <usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak" /> + </notification> + <notification name="SettingsMakeNoTrans"> + Zamierzasz zaimportować nietransferowalne otoczenia do tego cyklu dnia. Kontynuowanie spowoduje, że edytowane otoczenia również staną się nietransferowalne. + +Tej zmiany nie można cofnąć. + +Czy na pewno chcesz kontynuować? + <usetemplate ignoretext="Czy na pewno chcesz, aby otoczenia były nietransferowalne?" name="okcancelignore" notext="Nie" yestext="Tak" /> + </notification> + <notification name="NoEditFromLibrary"> + Nie możesz edytować otoczeń bezpośrednio w bibliotece. +Skopiuj do własnej szafy i spróbuj ponownie. + </notification> + <notification name="EnvironmentApplyFailed"> + Napotkaliśmy problem z tymi ustawieniami otoczenia. Nie można ich teraz zapisać ani zastosować. + </notification> + <notification name="TrackLoadFailed"> + Nie można załadować ścieżki do [TRACK]. + </notification> + <notification name="TrackLoadMismatch"> + Nie można załadować ścieżki z [TRACK1] do [TRACK2]. + </notification> + <notification name="CompressionTestResults"> +Wynik testu kompresji pliku dla gzip na poziomie 6 z [FILE] o rozmiarze [SIZE] KB: +Pakowanie: [PACK_TIME]s [PSIZE]KB +Rozpakowywanie: [UNPACK_TIME]s [USIZE]KB + </notification> + <notification label="Monituj o token usługi MFA" name="PromptMFAToken"> + [MESSAGE] + <form name="form"> + <button name="continue" text="Kontynuuj" /> + <button name="cancel" text="Anuluj" /> + </form> + </notification> + <notification label="Utwórz podfolder" name="CreateSubfolder"> + Nazwij nowy folder: + <form name="form"> + <button name="Cancel" text="Anuluj" /> + </form> + </notification> + <notification name="SameFolderRequired"> + Wybrane elementy muszą znajdować się w tym samym folderze. + </notification> + <notification name="RiggedMeshAttachedToHUD"> + Dodatek o nazwie "[NAME]" dołączony do HUD "[POINT]" zawiera riggowany mesz. + +Riggowane mesze są przeznaczone do dodawania do samego awatara. Ani ty, ani nikt inny nie zobaczy tego obiektu. + +Jeśli chcesz zobaczyć ten obiekt, to usuń go i ponownie dołącz do punktu doczepienia na awatarze. + <usetemplate ignoretext="Ostrzegaj, gdy dodatek z riggowanym meszem jest dołączany do punktu HUD" name="okignore" /> + </notification> </notifications> diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml index 90d2d86c02..26ec6cc9dc 100644 --- a/indra/newview/skins/default/xui/pl/strings.xml +++ b/indra/newview/skins/default/xui/pl/strings.xml @@ -18,8 +18,11 @@ <string name="StartupRequireDriverUpdate"> Nie można zainicjować grafiki. Zaktualizuj sterowniki! </string> + <string name="BuildConfig"> + Konfiguracja budowania: [BUILD_CONFIG] + </string> <string name="AboutPosition"> -Położenie [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] w [REGION] zlokalizowanym w <nolink>[HOSTNAME]</nolink> ([HOSTIP]) +Położenie [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] w [REGION] zlokalizowanym w <nolink>[HOSTNAME]</nolink> SLURL: <nolink>[SLURL]</nolink> (koordynaty globalne [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1]) [SERVER_VERSION] @@ -28,28 +31,53 @@ SLURL: <nolink>[SLURL]</nolink> <string name="AboutSystem"> Procesor (CPU): [CPU] Pamięć (Memory): [MEMORY_MB] MB -Wersja OS (OS Version): [OS_VERSION] -Sprzedawca karty graficznej (Graphics Card Vendor): [GRAPHICS_CARD_VENDOR] +System operacyjny (OS Version): [OS_VERSION] +Dostawca karty graficznej (Graphics Card Vendor): [GRAPHICS_CARD_VENDOR] Karta graficzna (Graphics Card): [GRAPHICS_CARD] </string> <string name="AboutDriver"> - Sterownik karty graficznej Windows (Driver Version): [GRAPHICS_DRIVER_VERSION] + Sterownik karty graficznej (Driver Version): [GRAPHICS_DRIVER_VERSION] + </string> + <string name="AboutOGL"> + Wersja OpenGL: [OPENGL_VERSION] + </string> + <string name="AboutSettings"> +Rozmiar okna (Window size): [WINDOW_WIDTH]x[WINDOW_HEIGHT] +Dostrojenie rozmiaru czcionki: [FONT_SIZE_ADJUSTMENT]pt +Skalowanie interfejsu (UI Scaling): [UI_SCALE] +Pole widzenia (Draw Distance): [DRAW_DISTANCE]m +Przepustowość (Bandwidth): [NET_BANDWITH]kbit/s +Mnożnik poziomu detali (LOD Factor): [LOD_FACTOR] +Jakość wyświetlania (Render quality): [RENDER_QUALITY] +Zaawansowane oświetlenie (Advanced Lighting Model): [GPU_SHADERS] +Pamięć tekstur (Texture memory): [TEXTURE_MEMORY]MB +Pamięć podręczna dysku (Disk cache): [DISK_CACHE_INFO] + </string> + <string name="AboutOSXHiDPI"> + Tryb obrazu HiDPI: [HIDPI] </string> <string name="AboutLibs"> -Wersja OpenGL: [OPENGL_VERSION] - Wersja dekodera J2C: [J2C_VERSION] Wersja sterownika dźwięku (Audio Driver): [AUDIO_DRIVER_VERSION] -Wersja CEF: [LIBCEF_VERSION] +[LIBCEF_VERSION] Wersja LibVLC: [LIBVLC_VERSION] Wersja serwera głosu (Voice Server): [VOICE_VERSION] </string> <string name="AboutTraffic"> Pakiety utracone: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) </string> + <string name="AboutTime"> + [day, datetime, slt] [month, datetime, slt] [year, datetime, slt], [hour24, datetime, slt]:[min, datetime, slt]:[second, datetime, slt] SLT + </string> + <string name="LocalTime"> + [day, datetime, local] [month, datetime, local] [year, datetime, local], [hour24, datetime, local]:[min, datetime, local]:[second, datetime, local] + </string> <string name="ErrorFetchingServerReleaseNotesURL"> Błąd podczas pobierania informacji o wydaniu. </string> + <string name="BuildConfiguration"> + Konfiguracja budowania + </string> <string name="ProgressRestoring"> Przywracanie... </string> @@ -123,22 +151,28 @@ Wersja serwera głosu (Voice Server): [VOICE_VERSION] Pobieranie ubrania... </string> <string name="InvalidCertificate"> - Serwer zwrócił nieważny lub zniekształcony certyfikat. Proszę skontaktuj się z administratorem siatki. + Serwer zwrócił nieważny lub zniekształcony certyfikat. Proszę skontaktuj się z administratorem świata. </string> <string name="CertInvalidHostname"> - Nazwa hosta jest nieważna, proszę sprawdź SLURL lub nazwę hosta siatki. + Nazwa hosta jest nieważna, proszę sprawdź SLURL lub nazwę hosta świata. </string> <string name="CertExpired"> - Termin ważności certyfikatu zwróconego przez siatkę minął. Proszę sprawdzić swój zegar systemowy lub skontaktować się z administratorem siatki. + Termin ważności certyfikatu zwróconego przez świat minął. Proszę sprawdzić swój zegar systemowy lub skontaktować się z administratorem świata. </string> <string name="CertKeyUsage"> - Certyfikat zwrócony przez serwer nie może być użyty dla SSL. Proszę skontaktuj się z administratorem siatki. + Certyfikat zwrócony przez serwer nie może być użyty dla SSL. Proszę skontaktuj się z administratorem świata. </string> <string name="CertBasicConstraints"> - Zbyt wiele certyfikatów w łańcuchu certyfikatów serwera. Proszę skontaktować się z administratorem siatki. + Zbyt wiele certyfikatów w łańcuchu certyfikatów serwera. Proszę skontaktować się z administratorem świata. + </string> + <string name="CertInvalid"> + Nie udało się załadować certyfikatu. Skontaktuj się ze swoim administratorem świata. </string> <string name="CertInvalidSignature"> - Podpis certyfikatu zwrócony przez siatkę nie mógł zostać zweryfikowany. Proszę skontaktować się z administratorem siatki. + Podpis certyfikatu zwrócony przez świat nie mógł zostać zweryfikowany. Proszę skontaktować się z administratorem świata. + </string> + <string name="CertAllocationFailure"> + Nie udało się przydzielić pamięci openssl dla certyfikatu. </string> <string name="LoginFailedNoNetwork"> Błąd sieci: Brak połączenia z siecią, sprawdź status swojego połączenia internetowego. @@ -149,6 +183,12 @@ Wersja serwera głosu (Voice Server): [VOICE_VERSION] <string name="Quit"> Wyłącz </string> + <string name="AgniGridLabel"> + Second Life: świat główny (Agni) + </string> + <string name="AditiGridLabel"> + Second Life Beta: świat testowy (Aditi) + </string> <string name="LoginFailedViewerNotPermitted"> Przeglądarka używana przez Ciebie nie ma już dostępu do Second Life. Proszę przejść na poniższą stronę i pobrać nową: http://secondlife.com/download @@ -156,6 +196,10 @@ http://secondlife.com/download Więcej informacji w naszym FAQ: http://secondlife.com/viewer-access-faq </string> + <string name="LoginFailed"> + Logowanie nieudane. +Jeśli uważasz, że to błąd, skontaktuj się z support@secondlife.com. + </string> <string name="LoginIntermediateOptionalUpdateAvailable"> Opcjonalna aktualizacja jest dostępna: [VERSION]. </string> @@ -170,6 +214,7 @@ http://secondlife.com/viewer-access-faq Upewnij się, że wpisano poprawnie: * Login (np. bobsmith12 czy steller.sunshine) * Hasło + * Token weryfikacji dwuetapowej (gdy włączona) Sprawdź też, czy klawisz Caps Lock nie jest wciśnięty. </string> <string name="LoginFailedPasswordChanged"> @@ -199,14 +244,17 @@ Osoby posiadające darmowe konta nie mogą się teraz zalogować, aby ludzie pos Jeśli myślisz, że to błąd skontaktuj się z support@secondlife.com </string> + <string name="PacificTime"> + czas pacyficzny + </string> <string name="LoginFailedAcountSuspended"> Twoje konto jest niedostępne do -[TIME] czasu pacyficznego. +[TIME]. +Jeśli myślisz, że to błąd skontaktuj się z support@secondlife.com </string> <string name="LoginFailedAccountDisabled"> Nie jesteśmy w stanie na tą chwilę wykonać Twojego żądania. -Aby uzyskać pomoc skontaktuj się ze wsparciem: http://secondlife.com/support -Jeśli nie możesz zmienić swojego hasła zadzwoń pod numer (866) 476-9763. +Aby uzyskać pomoc skontaktuj się ze wsparciem: http://support.secondlife.com </string> <string name="LoginFailedTransformError"> Podczas logowania wykryto niespójność danych. @@ -215,7 +263,7 @@ Skontaktuj się z nami: support@secondlife.com <string name="LoginFailedAccountMaintenance"> Twoje konto jest w trakcie drobnych konserwacji. Nie będzie ono dostępne do -[TIME] czasu pacyficznego. +[TIME]. Jeśli myślisz, że to błąd skontaktuj się z support@secondlife.com </string> <string name="LoginFailedPendingLogoutFault"> @@ -223,8 +271,7 @@ Jeśli myślisz, że to błąd skontaktuj się z support@secondlife.com </string> <string name="LoginFailedPendingLogout"> System w tej chwili Cię wylogowywuje. -Twoje konto będzie niedostępne do -[TIME] czasu pacyficznego. +Poczekaj chwilę, zanim spróbujesz zalogować się ponownie. </string> <string name="LoginFailedUnableToCreateSession"> Nie można utworzyć poprawnej sesji. @@ -282,6 +329,10 @@ Spróbuj zalogować się ponownie za minutę. System rozpoczął wylogowywanie Twojej ostatniej sesji. Spróbuj zalogować się ponownie za minutę. </string> + <string name="LoginFailedAuthenticationMFARequired"> + Wprowadź nowy token z aplikacji do uwierzytelniania wieloskładnikowego. +Jeśli myślisz, że to błąd skontaktuj się z support@secondlife.com + </string> <string name="AgentLostConnection"> Ten region może mieć problemy. Sprawdź podłączenie do Internetu. </string> @@ -303,60 +354,6 @@ Spróbuj zalogować się ponownie za minutę. <string name="TestingDisconnect"> Testowanie rozłączenia klienta </string> - <string name="SocialFacebookConnecting"> - Łączenie z Facebookiem... - </string> - <string name="SocialFacebookPosting"> - Wysyłanie... - </string> - <string name="SocialFacebookDisconnecting"> - Rozłączanie z Facebookiem... - </string> - <string name="SocialFacebookErrorConnecting"> - Problem z łączeniem z Facebookiem - </string> - <string name="SocialFacebookErrorPosting"> - Problem z wysyłaniem na Facebooka - </string> - <string name="SocialFacebookErrorDisconnecting"> - Problem z rozłączaniem z Facebookiem - </string> - <string name="SocialFlickrConnecting"> - Łączenie z Flickr... - </string> - <string name="SocialFlickrPosting"> - Wysyłanie... - </string> - <string name="SocialFlickrDisconnecting"> - Rozłączanie z Flickr... - </string> - <string name="SocialFlickrErrorConnecting"> - Problem z łączeniem z Flickr - </string> - <string name="SocialFlickrErrorPosting"> - Problem z wysyłaniem na Flickr - </string> - <string name="SocialFlickrErrorDisconnecting"> - Problem z rozłączaniem z Flickr - </string> - <string name="SocialTwitterConnecting"> - Łączenie z Twitterem... - </string> - <string name="SocialTwitterPosting"> - Wysyłanie... - </string> - <string name="SocialTwitterDisconnecting"> - Rozłączanie z Twitterem... - </string> - <string name="SocialTwitterErrorConnecting"> - Problem z łączeniem z Twitterem - </string> - <string name="SocialTwitterErrorPosting"> - Problem z wysyłaniem na Twittera - </string> - <string name="SocialTwitterErrorDisconnecting"> - Problem z rozłączaniem z Twittera - </string> <string name="BlackAndWhite"> Czerń i biel </string> @@ -436,29 +433,56 @@ Spróbuj zalogować się ponownie za minutę. Nie możesz założyć folderu, który zawiera więcej niż [AMOUNT] przedmiotów. Możesz zmienić ten limit w Zaawansowane > Pokaż ustawienia debugowania > WearFolderLimit. </string> <string name="TooltipPrice" value="[AMOUNT]L$: "/> + <string name="TooltipSLIcon"> + Link do strony znajdującej się w oficjalnej domenie SecondLife.com lub LindenLab.com. + </string> <string name="TooltipOutboxDragToWorld"> - Nie możesz rezzować obiektów w skrzynce nadawczej kupca + Nie możesz rezzować obiektów z folderu rzeczy na Marketplace + </string> + <string name="TooltipOutboxWorn"> + Nie możesz umieszczać na Marketplace przedmiotów, które masz na sobie założone + </string> + <string name="TooltipOutboxFolderLevels"> + Głębokość zagnieżdżonych folderów przekracza [AMOUNT]. Zmniejsz ilość zagdzieżdżeń; Spakuj przedmioty w pudełka, jeśli to pomoże. + </string> + <string name="TooltipOutboxTooManyFolders"> + Ilość podfolderów przekracza [AMOUNT]. Zmniejsz ilość folderów; Spakuj przedmioty w pudełka, jeśli to pomoże. + </string> + <string name="TooltipOutboxTooManyObjects"> + Ilość rzeczy przekracza [AMOUNT]. Jeśli chcesz sprzedać więcej, niż [AMOUNT] rzeczy jako jedną pozycję, to musisz je spakować w pudełka. + </string> + <string name="TooltipOutboxTooManyStockItems"> + Ilość przedmiotów w folderze Magazynowym przekracza [AMOUNT]. + </string> + <string name="TooltipOutboxCannotDropOnRoot"> + Możesz przenosić foldery lub przedmioty wyłącznie do kart WSZYSTKO lub NIEPRZYPISANE. Wybierz teraz jedną z tych kart i spróbuj ponownie. </string> <string name="TooltipOutboxNoTransfer"> - Jeden lub kilka z tych obiektów nie może zostać sprzedany / przetransferowany. + Jeden lub kilka z tych obiektów nie może zostać sprzedany / przetransferowany </string> <string name="TooltipOutboxNotInInventory"> - Twoja skrzynka nadawcza kupca akceptuje tylko przedmioty bezpośrednio z Twojej Szafy. + Marketplace akceptuje tylko przedmioty bezpośrednio z Twojej Szafy. </string> - <string name="TooltipOutboxWorn"> - Nie możesz umieszczać w skrzynce nadawczej kupca przedmiotów, które masz na sobie założone + <string name="TooltipOutboxLinked"> + Nie możesz sprzedać zlinkowanych folderów lub przedmiotów na Marketplace </string> <string name="TooltipOutboxCallingCard"> - Nie możesz umieszczać wizytówek w skrzynce nadawczej kupca + Nie możesz umieszczać wizytówek na Marketplace </string> - <string name="TooltipOutboxFolderLevels"> - Głębokość zagnieżdżonych folderów przekracza 3 + <string name="TooltipOutboxDragActive"> + Nie można przenieść wylistowanej rzeczy </string> - <string name="TooltipOutboxTooManyFolders"> - Ilość podfolderów w folderze najwyższego poziomu przekracza 20 + <string name="TooltipOutboxCannotMoveRoot"> + Nie możesz przenieść folderu głównego rzeczy na Marketplace </string> - <string name="TooltipOutboxTooManyObjects"> - Ilość pozycji w folderze najwyższego poziomu przekracza 200 + <string name="TooltipOutboxMixedStock"> + Wszystkie rzeczy w folderze Magazynowym muszą mieć ten sam typ i zezwolenia + </string> + <string name="TooltipOutfitNotInInventory"> + W "Strojach" możesz umieszczać tylko przedmioty lub stroje z własnej Szafy + </string> + <string name="TooltipCantCreateOutfit"> + Jeden lub więcej przedmiotów nie może być użyty w "Strojach" </string> <string name="TooltipDragOntoOwnChild"> Nie możesz przenieść folderu do jego obiektu podrzędnego @@ -521,6 +545,9 @@ Spróbuj zalogować się ponownie za minutę. Kliknij aby uruchomić komendę secondlife:// </string> <string name="CurrentURL" value=" Obecny URL: [CurrentURL]"/> + <string name="TooltipEmail"> + Kliknij aby utworzyć wiadomość e-mail + </string> <string name="SLurlLabelTeleport"> Teleportuj do </string> @@ -569,6 +596,15 @@ Spróbuj zalogować się ponownie za minutę. <string name="BUTTON_HELP"> Pokaż Pomoc </string> + <string name="TooltipNotecardNotAllowedTypeDrop"> +Przedmioty tego typu nie mogą być dołączane +do notek z tego regionu. + </string> + <string name="TooltipNotecardOwnerRestrictedDrop"> +Tylko przedmioty z nieograniczonymi +uprawnieniami 'następnego właściciela' +mogą być dołączane do notek. + </string> <string name="Searching"> Wyszukiwanie... </string> @@ -588,7 +624,7 @@ Spróbuj zalogować się ponownie za minutę. (brak danych) </string> <string name="AvatarNameWaiting"> - (ładowanie) + (Wczytywanie...) </string> <string name="AvatarNameMultiple"> (kilka) @@ -629,6 +665,31 @@ Spróbuj zalogować się ponownie za minutę. <string name="AssetErrorUnknownStatus"> Status nieznany </string> + <string name="AssetUploadServerUnreacheble"> + Usługa niedostępna. + </string> + <string name="AssetUploadServerDifficulties"> + Serwer doświadcza nieoczekiwanych trudności. + </string> + <string name="AssetUploadServerUnavaliable"> + Usługa niedostępna lub osiągnięto limit czasu. + </string> + <string name="AssetUploadRequestInvalid"> + Błąd podczas przesyłania. Odwiedź +http://secondlife.com/support aby uzyskać pomoc. + </string> + <string name="SettingValidationError"> + Walidacja nie powiodła się - importowanie ustawień [NAME] + </string> + <string name="SettingImportFileError"> + Nie można otworzyć pliku [FILE] + </string> + <string name="SettingParseFileError"> + Nie można otworzyć pliku [FILE] + </string> + <string name="SettingTranslateError"> + Nie można przetłumaczyć windlight [NAME] + </string> <string name="texture"> tekstury </string> @@ -698,15 +759,18 @@ Spróbuj zalogować się ponownie za minutę. <string name="favorite"> ulubione </string> + <string name="symbolic link"> + link + </string> <string name="symbolic folder link"> link folderu </string> + <string name="settings blob"> + otoczenie + </string> <string name="mesh"> mesz </string> - <string name="settings"> - ustawień - </string> <string name="AvatarEditingAppearance"> (Edycja wyglądu) </string> @@ -714,7 +778,7 @@ Spróbuj zalogować się ponownie za minutę. Śpi </string> <string name="AvatarDoNotDisturb"> - Zajęty + Zajęty/a </string> <string name="AvatarMuted"> Wyciszony @@ -957,10 +1021,10 @@ Spróbuj zalogować się ponownie za minutę. Nie można znaleźć Podstawy lub Stawu. </string> <string name="NearbyChatTitle"> - Czat lokalny + Czat w pobliżu </string> <string name="NearbyChatLabel"> - (Czat lokalny) + (Czat w pobliżu) </string> <string name="whisper"> szepcze: @@ -1034,15 +1098,18 @@ Spróbuj zalogować się ponownie za minutę. <string name="ChangeYourDefaultAnimations"> Zmieniać Twoje domyślne animacje </string> + <string name="ForceSitAvatar"> + Zmuszać Twojego awatara do siadania + </string> + <string name="ChangeEnvSettings"> + Zmieniać Twoje ustawienia otoczenia + </string> <string name="NotConnected"> Brak połączenia </string> <string name="AgentNameSubst"> (Ty) </string> - <string name="JoinAnExperience"> - Rozpocznij przygodę - </string> <string name="SilentlyManageEstateAccess"> Wyciszyć powiadomienia o zmianach zezwoleń Majątku </string> @@ -1172,6 +1239,9 @@ Spróbuj zalogować się ponownie za minutę. <string name="tattoo"> Tatuaż </string> + <string name="universal"> + Warstwa uniwersalna + </string> <string name="physics"> Fizyka </string> @@ -1214,6 +1284,9 @@ Spróbuj zalogować się ponownie za minutę. <string name="tattoo_not_worn"> Tatuaż nie jest założony </string> + <string name="universal_not_worn"> + Warstwa uniwersalna nie jest założona + </string> <string name="physics_not_worn"> Fizyka nie jest założona </string> @@ -1260,13 +1333,16 @@ Spróbuj zalogować się ponownie za minutę. Nowa spódnica </string> <string name="create_new_alpha"> - Nowe alpha + Nowa warstwa alpha </string> <string name="create_new_tattoo"> Nowy tatuaż </string> + <string name="create_new_universal"> + Nowa warstwa uniwersalna + </string> <string name="create_new_physics"> - Nową fizyka + Nowa fizyka </string> <string name="create_new_invalid"> nieprawidłowy @@ -1284,7 +1360,7 @@ Spróbuj zalogować się ponownie za minutę. Ogłoszenia grupowe </string> <string name="GroupNotifySentBy"> - Wysłane przez + Wysłał/a </string> <string name="GroupNotifyAttached"> Załączone: @@ -1325,6 +1401,9 @@ Spróbuj zalogować się ponownie za minutę. <string name="BodyPartsRightLeg"> Prawa noga </string> + <string name="BodyPartsEnhancedSkeleton"> + Rozszerzony szkielet + </string> <string name="GraphicsQualityLow"> Niska </string> @@ -1340,11 +1419,20 @@ Spróbuj zalogować się ponownie za minutę. <string name="InventoryNoMatchingItems"> Nie udało Ci się znaleźć tego, czego szukasz? Spróbuj [secondlife:///app/search/all/[SEARCH_TERM] Wyszukiwarki]. </string> + <string name="InventoryNoMatchingRecentItems"> + Nie udało Ci się znaleźć tego, czego szukasz? Spróbuj [secondlife:///app/inventory/filters Filtrowania]. + </string> <string name="PlacesNoMatchingItems"> - Nie udało Ci się znaleźć tego, czego szukasz? Spróbuj [secondlife:///app/search/places/[SEARCH_TERM] Wyszukiwarki]. + Aby dodać miejsce do ulubionych, kliknij gwiazdkę po prawej stronie nazwy lokalizacji. </string> <string name="FavoritesNoMatchingItems"> - Przeciągnij landmark tutaj aby dodać go do swoich ulubionych. + Aby dodać miejsce do ulubionych, kliknij gwiazdkę po prawej stronie nazwy lokalizacji, a następnie zapisz landmark na pasku "Ulubione". + </string> + <string name="MarketplaceNoListing"> + Nie masz jeszcze żadnych przedmiotów na Marketplace. + </string> + <string name="MarketplaceNoMatchingItems"> + Niczego nie znaleziono. Sprawdź pisownię i spróbuj ponownie. </string> <string name="InventoryNoTexture"> Nie posiadasz kopii tej tekstury w swojej Szafie. @@ -1352,6 +1440,15 @@ Spróbuj zalogować się ponownie za minutę. <string name="InventoryInboxNoItems"> Przedmioty zakupione na Marketplace pojawią się tutaj. Możesz następnie przeciągnąć je do głównej części Szafy. </string> + <string name="InventoryPlayAnimationTooltip"> + Otwórz okno z opcjami odtwarzania. + </string> + <string name="InventoryPlayGestureTooltip"> + Odtwarzaj wybrany gest w świecie. + </string> + <string name="InventoryPlaySoundTooltip"> + Otwórz okno z opcjami odtwarzania. + </string> <string name="InventoryOutboxNotMerchantTitle"> Każdy może sprzedawać przedmioty na Marketplace. </string> @@ -1376,29 +1473,110 @@ Spróbuj zalogować się ponownie za minutę. <string name="InventoryOutboxError"> [[MARKETPLACE_CREATE_STORE_URL] Sklep na Marketplace] zwraca błędy. </string> + <string name="InventoryMarketplaceError"> + Wystapił błąd podczas otwierania listy rzeczy z Marketplace. +Jeśli ciągle otrzymujesz tą wiadomość, to skontaktuj się z pomocą techniczną Second Life: http://support.secondlife.com + </string> + <string name="InventoryMarketplaceConnectionError"> + Wystapił błąd podczas łączenia z Marketplace. +Jeśli ciągle otrzymujesz tą wiadomość, to skontaktuj się z pomocą techniczną Second Life: http://support.secondlife.com + </string> + <string name="InventoryMarketplaceConnectionErrorReason"> + Wystapił błąd podczas łączenia z Marketplace. Powód: [REASON] +Jeśli ciągle otrzymujesz tą wiadomość, to skontaktuj się z pomocą techniczną Second Life: http://support.secondlife.com + </string> + <string name="InventoryMarketplaceListingsNoItemsTitle"> + Twój folder rzeczy na Marketplace jest pusty. + </string> + <string name="InventoryMarketplaceListingsNoItems"> + Przeciągnij foldery do tego obszaru, aby dodać je na listę sprzedaży w [[MARKETPLACE_DASHBOARD_URL] Marketplace]. + </string> + <string name="InventoryItemsCount"> + ( [ITEMS_COUNT] elementów ) + </string> + <string name="Marketplace Validation Warning Stock"> + folder Magazynowy musi być zawarty w folderze wersji + </string> + <string name="Marketplace Validation Error Mixed Stock"> + : Błąd: wszystkie przedmioty w folderze Magazynowym muszą mieć ten sam typ i być niekopiowalne + </string> + <string name="Marketplace Validation Error Subfolder In Stock"> + : Błąd: folder Magazynowy nie może zawierać podfolderów + </string> + <string name="Marketplace Validation Warning Empty"> + : Uwaga: folder jest pusty + </string> + <string name="Marketplace Validation Warning Create Stock"> + : Uwaga: tworzę folder Magazynowy + </string> + <string name="Marketplace Validation Warning Create Version"> + : Uwaga: tworzę folder wersji + </string> + <string name="Marketplace Validation Warning Move"> + : Uwaga: przenoszę przedmioty + </string> + <string name="Marketplace Validation Warning Delete"> + : Uwaga: zawartość folderu przeniesiona do folderu Magazynowego, usuwam pusty katalog + </string> + <string name="Marketplace Validation Error Stock Item"> + : Błąd: przedmioty bez praw kopiowania muszą się znajdować w folderze Magazynowym + </string> + <string name="Marketplace Validation Warning Unwrapped Item"> + : Uwaga: przedmioty muszą się znajdować w folderze wersji + </string> + <string name="Marketplace Validation Error"> + : Błąd: + </string> + <string name="Marketplace Validation Warning"> + : Uwaga: + </string> + <string name="Marketplace Validation Error Empty Version"> + : Uwaga: folder wersji musi zawierać przynajmniej jedną pozycję + </string> + <string name="Marketplace Validation Error Empty Stock"> + : Uwaga: folder Magazynowy musi zawierać przynajmniej jedną pozycję + </string> + <string name="Marketplace Validation No Error"> + Brak błędów lub ostrzeżeń + </string> <string name="Marketplace Error None"> Brak błędów </string> + <string name="Marketplace Error Prefix"> + Błąd: + </string> <string name="Marketplace Error Not Merchant"> - Błąd: Przed wysłaniem przedmiotów na Marketplace musisz zostać kupcem (darmowe). + Przed wysłaniem przedmiotów na Marketplace musisz zostać kupcem (darmowe). </string> - <string name="Marketplace Error Empty Folder"> - Błąd: Ten folder nie ma zawartości. + <string name="Marketplace Error Not Accepted"> + Nie można przenieść tego przedmiotu. </string> - <string name="Marketplace Error Unassociated Products"> - Błąd: Ta pozycja nie może zostać załadowana, ponieważ Twoje konto kupca ma zbyt wiele nieprzypisanych przedmiotów. Aby naprawić ten błąd zaloguj się na stronę Marketplace i zmniejsz ilość nieprzypisanych (unassociated) przedmiotów. + <string name="Marketplace Error Unsellable Item"> + Ta pozycja nie może być sprzedana na Marketplace. </string> - <string name="Marketplace Error Object Limit"> - Błąd: Ta pozycja zawiera zbyt wiele elementów. Umieść przedmioty razem w pudełkach, aby zmniejszyć ich całkowitą liczbę do mniej niż 200. + <string name="MarketplaceNoID"> + Brak Mkt ID </string> - <string name="Marketplace Error Folder Depth"> - Błąd: Ta pozycja zawiera zbyt wiele zagnieżdżonych folderów. Zreorganizuj wszystko tak, aby były obecne maksymalnie 3 poziomy zagnieżdżonych folderów. + <string name="MarketplaceLive"> + na liście </string> - <string name="Marketplace Error Unsellable Item"> - Błąd: Ta pozycja nie może być sprzedana na Marketplace. + <string name="MarketplaceActive"> + aktywne + </string> + <string name="MarketplaceMax"> + maks + </string> + <string name="MarketplaceStock"> + magazyn </string> - <string name="Marketplace Error Internal Import"> - Błąd: Wystąpił problem z tą pozycją. Spróbuj ponownie później. + <string name="MarketplaceNoStock"> + brak w Magazynie + </string> + <string name="MarketplaceUpdating"> + aktualizacja... + </string> + <string name="UploadFeeInfo"> + Opłata zależy od Twojego poziomu członkostwa. Wyższe poziomy to niższe opłaty. [https://secondlife.com/my/account/membership.php? Więcej] </string> <string name="Open landmarks"> Otwórz landmarki @@ -1445,6 +1623,7 @@ Spróbuj zalogować się ponownie za minutę. <string name="Scripts" value=" Skrypty,"/> <string name="Sounds" value=" Dźwięki,"/> <string name="Textures" value=" Tekstury,"/> + <string name="Settings" value=" Otoczenia," /> <string name="Snapshots" value=" Zdjęcia,"/> <string name="No Filters" value="Nie "/> <string name="Since Logoff" value=" - od wylogowania"/> @@ -1614,7 +1793,7 @@ Spróbuj zalogować się ponownie za minutę. Usta </string> <string name="Chin"> - Szczęka + Podbródek </string> <string name="Left Ear"> Lewe ucho @@ -1676,6 +1855,51 @@ Spróbuj zalogować się ponownie za minutę. <string name="Avatar Center"> Środek awatara </string> + <string name="Left Ring Finger"> + Lewy palec serdeczny + </string> + <string name="Right Ring Finger"> + Prawy palec serdeczny + </string> + <string name="Tail Base"> + Podstawa ogona + </string> + <string name="Tail Tip"> + Koniec ogona + </string> + <string name="Left Wing"> + Lewe skrzydło + </string> + <string name="Right Wing"> + Prawe skrzydło + </string> + <string name="Jaw"> + Szczęka + </string> + <string name="Alt Left Ear"> + Lewe ucho 2 + </string> + <string name="Alt Right Ear"> + Prawe ucho 2 + </string> + <string name="Alt Left Eye"> + Lewe oko 2 + </string> + <string name="Alt Right Eye"> + Prawe oko 2 + </string> + <string name="Tongue"> + Język + </string> + <string name="Groin"> + Krocze + </string> + <string name="Left Hind Foot"> + Lewa tylna stopa + </string> + <string name="Right Hind Foot"> + Prawa tylna stopa + </string> <string name="Invalid Attachment"> Nieprawidłowy punkt dodatku </string> @@ -1706,6 +1930,42 @@ Spróbuj zalogować się ponownie za minutę. <string name="TodayOld"> Dołączył dzisiaj </string> + <string name="av_render_everyone_now"> + Wszyscy mogą Cię obecnie widzieć. + </string> + <string name="av_render_not_everyone"> + Możesz nie być widziany/a przez niektóre osoby wokół Ciebie. + </string> + <string name="av_render_over_half"> + Możesz nie być widziany/a przez ponad połowę osób wokół Ciebie. + </string> + <string name="av_render_most_of"> + Możesz nie być widziany/a przez większość osób wokół Ciebie. + </string> + <string name="av_render_anyone"> + Wszystkie osoby znajdujące się wokół Ciebie nie mogą Cię widzieć. + </string> + <string name="hud_description_total"> + Twój HUD + </string> + <string name="hud_name_with_joint"> + [OBJ_NAME] (założone na [JNT_NAME]) + </string> + <string name="hud_render_memory_warning"> + [HUD_DETAILS] używa dużo pamięci tekstur + </string> + <string name="hud_render_cost_warning"> + [HUD_DETAILS] zawiera dużo obiektów i tekstur, jakie są ciężkie w renderowaniu + </string> + <string name="hud_render_heavy_textures_warning"> + [HUD_DETAILS] zawiera dużo tekstur w wielkich rozmiarach + </string> + <string name="hud_render_cramped_warning"> + [HUD_DETAILS] zawiera zbyt dużo obiektów + </string> + <string name="hud_render_textures_warning"> + [HUD_DETAILS] zawiera zbyt dużo tekstur + </string> <string name="AgeYearsA"> [COUNT] rok </string> @@ -1764,10 +2024,10 @@ Spróbuj zalogować się ponownie za minutę. Pracownik Linden Lab </string> <string name="PaymentInfoUsed"> - Płatności: Dane użyte + Płatności: Dane w użyciu </string> <string name="PaymentInfoOnFile"> - Płatności: Dane znane + Płatności: Dane przypisane </string> <string name="NoPaymentInfoOnFile"> Płatności: Dane nieznane @@ -1823,6 +2083,9 @@ Spróbuj zalogować się ponownie za minutę. <string name="CompileQueueUnknownFailure"> Nieznany błąd podczas pobierania </string> + <string name="CompileNoExperiencePerm"> + Pomijanie skryptu [SCRIPT] z Przygodą [EXPERIENCE]. + </string> <string name="CompileQueueTitle"> Postęp rekompilacji </string> @@ -1857,11 +2120,14 @@ Spróbuj zalogować się ponownie za minutę. Zapisywanie zakończone. </string> <string name="UploadFailed"> - Ładowanie nieudane: + Przesyłanie nieudane: </string> <string name="ObjectOutOfRange"> Skrypt (obiekt poza zasięgiem) </string> + <string name="ScriptWasDeleted"> + Skrypt (usunięty z zawartości obiektu) + </string> <string name="GodToolsObjectOwnedBy"> Obiekt [OBJECT] należący do [OWNER] </string> @@ -1894,6 +2160,9 @@ Spróbuj zalogować się ponownie za minutę. <string name="NoGroupDataFound"> Brak informacji na temat grupy </string> + <string name="AlreadyInGroup"> + Jesteś już w tej grupie + </string> <string name="IMParentEstate"> majątek rodziców </string> @@ -1916,22 +2185,34 @@ Spróbuj zalogować się ponownie za minutę. wszystkie majątki, które nadzorujesz dla [OWNER] </string> <string name="RegionInfoAllowedResidents"> - Dozwoleni Rezydenci: ([ALLOWEDAGENTS], maks. [MAXACCESS]) + Zawsze dozwoleni: ([ALLOWEDAGENTS], maks. [MAXACCESS]) </string> <string name="RegionInfoAllowedGroups"> - Dozwolone Grupy: ([ALLOWEDGROUPS], maks. [MAXACCESS]) + Zawsze dozwolone grupy: ([ALLOWEDGROUPS], maks. [MAXACCESS]) </string> <string name="RegionInfoEstateManagers"> Zarządcy Majątku: ([ESTATEMANAGERS], maks. [MAXMANAGERS]) </string> <string name="RegionInfoBannedResidents"> - Zbanowani Rezydenci: ([BANNEDAGENTS], maks. [MAXBANNED]) + Zawsze zbanowani: ([BANNEDAGENTS], maks. [MAXBANNED]) </string> <string name="RegionInfoListTypeAllowedAgents"> - Dozwoleni Rezydenci + zawsze dozwoleni rezydenci </string> <string name="RegionInfoListTypeBannedAgents"> - Zbanowani Rezydenci + zawsze zbanowani rezydenci + </string> + <string name="RegionInfoAllEstates"> + wszystkie majątki + </string> + <string name="RegionInfoManagedEstates"> + zarządzane majątki + </string> + <string name="RegionInfoThisEstate"> + ten majątek + </string> + <string name="AndNMore"> + i [EXTRA_COUNT] więcej </string> <string name="ScriptLimitsParcelScriptMemory"> Pamięć skryptów działki @@ -1976,7 +2257,7 @@ Spróbuj zalogować się ponownie za minutę. Klatka piersiowa </string> <string name="ATTACH_HEAD"> - Głowa + Czaszka </string> <string name="ATTACH_LSHOULDER"> Lewe ramię @@ -1997,7 +2278,7 @@ Spróbuj zalogować się ponownie za minutę. Prawa stopa </string> <string name="ATTACH_BACK"> - Plecy + Kręgosłup </string> <string name="ATTACH_PELVIS"> Miednica @@ -2027,13 +2308,13 @@ Spróbuj zalogować się ponownie za minutę. Prawe górne ramię </string> <string name="ATTACH_RLARM"> - Prawe dolne ramię + Prawe przedramię </string> <string name="ATTACH_LUARM"> Lewe górne ramię </string> <string name="ATTACH_LLARM"> - Lewe dolne ramię + Lewe przedramię </string> <string name="ATTACH_RHIP"> Biodro prawe @@ -2056,12 +2337,12 @@ Spróbuj zalogować się ponownie za minutę. <string name="ATTACH_BELLY"> Brzuch </string> - <string name="ATTACH_RPEC"> - Prawa pierś - </string> - <string name="ATTACH_LPEC"> + <string name="ATTACH_LEFT_PEC"> Lewa pierś </string> + <string name="ATTACH_RIGHT_PEC"> + Prawa pierś + </string> <string name="ATTACH_HUD_CENTER_2"> HUD środek 2 </string> @@ -2092,6 +2373,51 @@ Spróbuj zalogować się ponownie za minutę. <string name="ATTACH_AVATAR_CENTER"> Środek awatara </string> + <string name="ATTACH_LHAND_RING1"> + Lewy palec serdeczny + </string> + <string name="ATTACH_RHAND_RING1"> + Prawy palec serdeczny + </string> + <string name="ATTACH_TAIL_BASE"> + Podstawa ogona + </string> + <string name="ATTACH_TAIL_TIP"> + Koniec ogona + </string> + <string name="ATTACH_LWING"> + Lewe skrzydło + </string> + <string name="ATTACH_RWING"> + Prawe skrzydło + </string> + <string name="ATTACH_FACE_JAW"> + Szczęka + </string> + <string name="ATTACH_FACE_LEAR"> + Lewe ucho 2 + </string> + <string name="ATTACH_FACE_REAR"> + Prawe ucho 2 + </string> + <string name="ATTACH_FACE_LEYE"> + Lewe oko 2 + </string> + <string name="ATTACH_FACE_REYE"> + Prawe oko 2 + </string> + <string name="ATTACH_FACE_TONGUE"> + Język + </string> + <string name="ATTACH_GROIN"> + Krocze + </string> + <string name="ATTACH_HIND_LFOOT"> + Lewa tylna stopa + </string> + <string name="ATTACH_HIND_RFOOT"> + Prawa tylna stopa + </string> <string name="CursorPos"> Linia [LINE], Kolumna [COLUMN] </string> @@ -2129,7 +2455,7 @@ Spróbuj zalogować się ponownie za minutę. Brak umowy dla tego majątku. </string> <string name="RegionNoCovenantOtherOwner"> - Brak umowy dla tego majątku. Działka w tym majątku została sprzedana przez właściciela majątku, a nie przez Linden Lab. Skontaktuj się z właścicielem majątku w celu uzyskania szczegółów sprzedaży. + Brak umowy dla tego majątku. Działka w tym majątku została sprzedana przez właściciela majątku. Skontaktuj się z właścicielem majątku w celu uzyskania szczegółów sprzedaży. </string> <string name="covenant_last_modified" value="Ostatnia modyfikacja: "/> <string name="none_text" value=" (brak) "/> @@ -2146,6 +2472,27 @@ Spróbuj zalogować się ponownie za minutę. <string name="RegionSettings"> Ustawienia regionu </string> + <string name="NoEnvironmentSettings"> + Ten region nie obsługuje ustawień otoczenia. + </string> + <string name="EnvironmentSun"> + Słońce + </string> + <string name="EnvironmentMoon"> + Księżyc + </string> + <string name="EnvironmentBloom"> + Blask + </string> + <string name="EnvironmentCloudNoise"> + Szum chmur + </string> + <string name="EnvironmentNormalMap"> + Mapa normalnych + </string> + <string name="EnvironmentTransparent"> + Przezroczyste + </string> <string name="ClassifiedClicksTxt"> Kliknij: [TELEPORT] teleportuj, [MAP] mapa, [PROFILE] profil </string> @@ -2153,11 +2500,23 @@ Spróbuj zalogować się ponownie za minutę. (zostanie zaktualizowane po publikacji) </string> <string name="NoPicksClassifiedsText"> - Nie dodałeś/aś nic do Ulubionych i Reklam. Kliknij na przycisk + poniżej, aby dodać miejsce do Ulubionych lub Reklam. + Nie dodano nic do Miejsc i Reklam. Kliknij na przycisk Nowe, aby utworzyć Miejsce lub Reklamę. + </string> + <string name="NoPicksText"> + Nie dodano żadnych Miejsc. Kliknij na przycisk Nowe, aby utworzyć Miejsce. + </string> + <string name="NoClassifiedsText"> + Nie dodano żadnych reklam. Kliknij na przycisk Nowa, aby utworzyć reklamę. </string> <string name="NoAvatarPicksClassifiedsText"> Brak ulubionych miejsc/reklam </string> + <string name="NoAvatarPicksText"> + Brak ulubionych miejsc + </string> + <string name="NoAvatarClassifiedsText"> + Brak reklam + </string> <string name="PicksClassifiedsLoadingText"> Ładowanie... </string> @@ -2228,14 +2587,11 @@ Spróbuj zalogować się ponownie za minutę. Anuluj </string> <string name="UploadingCosts"> - Załadowanie [NAME] kosztuje [AMOUNT]L$ - </string> - <string name="BuyingCosts"> - Cena zakupu tego wynosi [AMOUNT]L$ + Przesyłanie [NAME] kosztuje [AMOUNT]L$ </string> <string name="UnknownFileExtension"> Nieznane rozszerzenie pliku .%s -Oczekiwane .wav, .tga, .bmp, .jpg, .jpeg, lub .bvh +Oczekiwane .wav, .tga, .bmp, .jpg, .jpeg, lub .anim </string> <string name="MuteObject2"> Zablokuj @@ -2327,6 +2683,9 @@ Oczekiwane .wav, .tga, .bmp, .jpg, .jpeg, lub .bvh <string name="Linden Location"> Lokalizacja Lindenów </string> + <string name="Adult"> + Dla dorosłych + </string> <string name="Arts&Culture"> Sztuka i Kultura </string> @@ -2383,7 +2742,7 @@ Błąd: <string name="MBUnableToAccessFile"> Aplikacja [APP_NAME] nie odnalazła poszukiwanego pliku. -Może być to spowodowane aktywnością kilku kopii oprogramowania w tej samej chwili lub Twój system błędnie odczytuje proces zakończenia dla uruchomionych aplikacji. +Może być to spowodowane aktywnością kilku kopii oprogramowania w tej samej chwili lub Twój system błędnie uważa, że plik jest otwarty / zablokowany. Jeżeli nadal otrzymujesz ten komunikat, uruchom swój komputer ponownie. Jeżeli problem nadal występuje, proponujemy całkowite odinstalowanie aplikacji [APP_NAME] oraz ponowną jej instalację. </string> @@ -2448,7 +2807,7 @@ Uruchomione w oknie. Ustaw tryb koloru swojego wyświetlacza na 32-bity. </string> <string name="MBAlpha"> - Aplikacja [APP_NAME] nie może zostać uruchomiona, ponieważ nie jest możliwe dostanie się na kanał 8 bitowy alpha. Najczęściej jest to spowodowane błędami sterowników karty video. + Aplikacja [APP_NAME] nie może zostać uruchomiona, ponieważ nie może uzyskać dostępu do 8 bitowego kanału alpha. Najczęściej jest to spowodowane błędami sterowników karty video. Upewnij się, że posiadasz najnowsze aktualizacje sterowników karty video. Dodatkowo, sprawdź czy Twój monitor posiada poprawną konfigurację koloru (32-bity) w Panel Sterowania > Ekran > Ustawienia. Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. @@ -2467,7 +2826,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. </string> - <string name="5 O'Clock Shadow"> + <string name="5 O'Clock Shadow"> Cień na godzinie 5 </string> <string name="All White"> @@ -3997,9 +4356,6 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="IM_to_label"> Do </string> - <string name="IM_moderator_label"> - (Moderator) - </string> <string name="Saved_message"> (Zapisano [LONG_TIMESTAMP]) </string> @@ -4012,6 +4368,12 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. <string name="OfflineStatus"> niedostępny/a </string> + <string name="not_online_msg"> + Ta osoba jest niedostępna - wiadomość zostanie zapisana i dostarczona później. + </string> + <string name="not_online_inventory"> + Ta osoba jest niedostępna - przedmiot został zapisany. + </string> <string name="answered_call"> Twoja rozmowa głosowa została odebrana </string> @@ -4046,20 +4408,14 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Konferencja z [AGENT_NAME] </string> <string name="inventory_item_offered-im"> - Zaoferowano przedmiot + Zaoferowano przedmiot: '[ITEM_NAME]' + </string> + <string name="inventory_folder_offered-im"> + Zaoferowano folder: '[ITEM_NAME]' </string> <string name="share_alert"> Przeciągaj tutaj rzeczy z Szafy </string> - <string name="facebook_post_success"> - Wysłałeś/aś post na Facebooka. - </string> - <string name="flickr_post_success"> - Wysłałeś/aś post na Flickr. - </string> - <string name="twitter_post_success"> - Wysłałeś/aś post na Twittera. - </string> <string name="no_session_message"> (Sesja IM wygasła) </string> @@ -4076,10 +4432,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE]. Zablokowałeś/aś tego Rezydenta. Wysłanie wiadomości odblokuje go automatycznie. </string> <string name="generic"> - Błąd zapytania, proszę spróbować później + Zamknij i ponownie otwórz rozmowę - lub przeloguj się i spróbuj ponownie. </string> <string name="generic_request_error"> - Błąd. Spróbuj ponownie za kilka minut. + Zamknij i ponownie otwórz rozmowę - lub przeloguj się i spróbuj ponownie. </string> <string name="insufficient_perms_error"> Nie masz wystarczających uprawnień. @@ -4131,6 +4487,9 @@ Jeśli nie pojawi się w ciągu kilku minut może to oznaczać, że została pom <string name="unread_chat_multiple"> [SOURCES] powiedział/a coś nowego </string> + <string name="teleport_preamble_compact_chat"> + Jesteś teraz w + </string> <string name="session_initialization_timed_out_error"> Inicjalizacja sesji wygasła </string> @@ -4140,12 +4499,18 @@ Jeśli nie pojawi się w ciągu kilku minut może to oznaczać, że została pom <string name="paid_you_ldollars"> [NAME] zapłacił/a Tobie [AMOUNT]L$ [REASON]. </string> + <string name="paid_you_ldollars_gift"> + [NAME] zapłacił/a Tobie [AMOUNT]L$: [REASON] + </string> <string name="paid_you_ldollars_no_reason"> [NAME] zapłacił/a Tobie [AMOUNT]L$. </string> <string name="you_paid_ldollars"> Zapłacono [NAME] [AMOUNT]L$ [REASON]. </string> + <string name="you_paid_ldollars_gift"> + Zapłacono [NAME] [AMOUNT]L$: [REASON] + </string> <string name="you_paid_ldollars_no_info"> Zapłacono [AMOUNT]L$. </string> @@ -4158,6 +4523,9 @@ Jeśli nie pojawi się w ciągu kilku minut może to oznaczać, że została pom <string name="you_paid_failure_ldollars"> Nie udało się zapłacić [NAME] [AMOUNT]L$ [REASON]. </string> + <string name="you_paid_failure_ldollars_gift"> + Nie udało się zapłacić [NAME] [AMOUNT]L$: [REASON] + </string> <string name="you_paid_failure_ldollars_no_info"> Nie udało się zapłacić [AMOUNT]L$. </string> @@ -4186,25 +4554,25 @@ Jeśli nie pojawi się w ciągu kilku minut może to oznaczać, że została pom aby dołączyć do grupy </string> <string name="to upload"> - aby załadować + aby przesłać </string> <string name="to publish a classified ad"> publikacja reklamy </string> - <string name="giving"> - Dajesz [AMOUNT]L$ - </string> <string name="uploading_costs"> - Ładowanie kosztuje [AMOUNT]L$ + Przesyłanie kosztuje [AMOUNT]L$ </string> <string name="this_costs"> To kosztuje [AMOUNT]L$ </string> <string name="buying_selected_land"> - Kupno wybranej działki za [AMOUNT]L$ + Działka kosztuje </string> <string name="this_object_costs"> - Ten obiekt kosztuje [AMOUNT]L$ + Obiekt kosztuje + </string> + <string name="giving"> + Chcesz dać </string> <string name="group_role_everyone"> Każdy @@ -4219,7 +4587,7 @@ Jeśli nie pojawi się w ciągu kilku minut może to oznaczać, że została pom Obecnie w SL </string> <string name="uploading_abuse_report"> - Ładowanie... + Przesyłanie... Raport o Nadużyciu </string> @@ -4268,6 +4636,9 @@ Raport o Nadużyciu <string name="New Tattoo"> Nowy tatuaż </string> + <string name="New Universal"> + Nowa warstwa uniwersalna + </string> <string name="New Physics"> Nowa fizyka </string> @@ -4394,6 +4765,15 @@ Raport o Nadużyciu <string name="Female - Wow"> Kobieta - Wow </string> + <string name="New Day"> + Nowy cykl dnia + </string> + <string name="New Water"> + Nowa woda + </string> + <string name="New Sky"> + Nowe niebo + </string> <string name="AvatarBirthDateFormat"> [day,datetime,slt].[mthnum,datetime,slt].[year,datetime,slt] </string> @@ -4403,10 +4783,19 @@ Raport o Nadużyciu <string name="texture_load_dimensions_error"> Nie można załadować obrazów większych niż [WIDTH]*[HEIGHT] </string> + <string name="outfit_photo_load_dimensions_error"> + Maks. rozmiar zdjęcia stroju to [WIDTH]*[HEIGHT]. Przeskaluj lub użyj innego. + </string> + <string name="outfit_photo_select_dimensions_error"> + Maks. rozmiar zdjęcia stroju to [WIDTH]*[HEIGHT]. Użyj innej tekstury. + </string> + <string name="outfit_photo_verify_dimensions_error"> + Nie można sprawdzić wymiarów zdjęcia. Poczekaj, aż pojawi się na podglądzie. + </string> <string name="server_is_down"> Pomimo naszych najlepszych starań wystąpił niespodziewany problem. -Proszę sprawdzić czy na stronie status.secondlifegrid.net nie zostały umieszczone informacje o rozpoznanych problemach serwera. +Proszę sprawdzić czy na https://status.secondlifegrid.net nie zostały umieszczone informacje o rozpoznanych problemach serwera. Jeśli problemy będą występowały nadal, proszę sprawdź sieć i ustawienia firewall. </string> <string name="dateTimeWeekdaysNames"> @@ -4466,6 +4855,18 @@ Jeśli problemy będą występowały nadal, proszę sprawdź sieć i ustawienia <string name="Chat"> Czat </string> + <string name="BaseMembership"> + Podstawowe + </string> + <string name="InternalMembership"> + Wewnętrzne + </string> + <string name="MembershipUpgradeText"> + Zmień plan członkostwa + </string> + <string name="MembershipPremiumText"> + Moje członkostwo Premium + </string> <string name="DeleteItems"> Usunąć zaznaczone obiekty? </string> @@ -4476,7 +4877,7 @@ Jeśli problemy będą występowały nadal, proszę sprawdź sieć i ustawienia W tym stroju nie ma elementów </string> <string name="ExternalEditorNotSet"> - Wybierz edytor używając ustawień ExternalEditor. + Wybierz edytor poprzez ustawienie zmiennej środowiska LL_SCRIPT_EDITOR lub ustawienie ExternalEditor. </string> <string name="ExternalEditorNotFound"> Nie odnaleziono zewnętrznego edytora wskazanego przez Ciebie. @@ -4507,6 +4908,24 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu. <string name="Divide"> Podziel </string> + <string name="LMB"> + LPM + </string> + <string name="MMB"> + ŚPM + </string> + <string name="RMB"> + PPM + </string> + <string name="MB4"> + Mysz4 + </string> + <string name="MB5"> + Mysz5 + </string> + <string name="Double LMB"> + Podwójny LPM + </string> <string name="BeaconParticle"> Emitery cząsteczek (niebieski) </string> @@ -4525,9 +4944,18 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu. <string name="BeaconMedia"> Emitery mediów (biały) </string> + <string name="BeaconSun"> + Emiter kierunku Słońca (pomarańczowy) + </string> + <string name="BeaconMoon"> + Emiter kierunku Księżyca (purpurowy) + </string> <string name="ParticleHiding"> Ukryj cząsteczki </string> + <string name="Command_360_Capture_Label"> + Zdjęcie 360° + </string> <string name="Command_AboutLand_Label"> O działce </string> @@ -4535,7 +4963,7 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu. Wygląd </string> <string name="Command_Avatar_Label"> - Awatar + Biblioteka awatarów </string> <string name="Command_Build_Label"> Buduj @@ -4552,9 +4980,15 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu. <string name="Command_Destinations_Label"> Cele podróży </string> + <string name="Command_Environments_Label"> + Otoczenia + </string> <string name="Command_Gestures_Label"> Gesty </string> + <string name="Command_Grid_Status_Label"> + Status świata + </string> <string name="Command_HowTo_Label"> Samouczek </string> @@ -4564,18 +4998,12 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu. <string name="Command_Map_Label"> Mapa </string> - <string name="Command_Marketplace_Label"> - Marketplace - </string> <string name="Command_MiniMap_Label"> Minimapa </string> <string name="Command_Move_Label"> Ruch </string> - <string name="Command_Outbox_Label"> - Skrzynka nadawcza kupca - </string> <string name="Command_People_Label"> Ludzie </string> @@ -4591,6 +5019,9 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu. <string name="Command_Profile_Label"> Profil </string> + <string name="Command_Report_Abuse_Label"> + Zgłoś nadużycie + </string> <string name="Command_Search_Label"> Szukaj </string> @@ -4606,6 +5037,9 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu. <string name="Command_Voice_Label"> Pobliski głos </string> + <string name="Command_360_Capture_Tooltip"> + Uchwyć równoprostokątny obraz 360° + </string> <string name="Command_AboutLand_Tooltip"> Informacje o miejscu, które odwiedzasz </string> @@ -4630,15 +5064,15 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu. <string name="Command_Destinations_Tooltip"> Punkty, jakie mogą być interesujące </string> - <string name="Command_Facebook_Tooltip"> - Wyślij na Facebooka - </string> - <string name="Command_Flickr_Tooltip"> - Wyślij na Flickr + <string name="Command_Environments_Tooltip"> + Otoczenia </string> <string name="Command_Gestures_Tooltip"> Gesty Twojego awatara </string> + <string name="Command_Grid_Status_Tooltip"> + Pokaż obecny status świata + </string> <string name="Command_HowTo_Tooltip"> Jak wykonywać zwyczajne rzeczy </string> @@ -4651,15 +5085,15 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu. <string name="Command_Marketplace_Tooltip"> Idź na zakupy </string> + <string name="Command_MarketplaceListings_Tooltip"> + Sprzedawaj owoce swojej kreatywności + </string> <string name="Command_MiniMap_Tooltip"> Pokaż ludzi w pobliżu </string> <string name="Command_Move_Tooltip"> Poruszanie Twoim awatarem </string> - <string name="Command_Outbox_Tooltip"> - Przenieś przedmioty na Marketplace, aby je sprzedać - </string> <string name="Command_People_Tooltip"> Znajomi, grupy i ludzie w pobliżu </string> @@ -4675,6 +5109,9 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu. <string name="Command_Profile_Tooltip"> Edytuj lub zobacz swój profil </string> + <string name="Command_Report_Abuse_Tooltip"> + Zgłoś nadużycie + </string> <string name="Command_Search_Tooltip"> Znajdź miejsca, wydarzenia i ludzi </string> @@ -4756,6 +5193,99 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu. <string name="UserDictionary"> [Użytkownika] </string> + <string name="experience_tools_experience"> + Przygoda + </string> + <string name="ExperienceNameNull"> + (bez przygody) + </string> + <string name="ExperienceNameUntitled"> + (przygoda bez nazwy) + </string> + <string name="Land-Scope"> + Zakres: Ziemia + </string> + <string name="Grid-Scope"> + Zakres: Cały świat + </string> + <string name="Allowed_Experiences_Tab"> + ZEZWALAM + </string> + <string name="Blocked_Experiences_Tab"> + BLOKUJĘ + </string> + <string name="Contrib_Experiences_Tab"> + TWORZĘ + </string> + <string name="Admin_Experiences_Tab"> + ZARZĄDZAM + </string> + <string name="Recent_Experiences_Tab"> + OSTATNIE + </string> + <string name="Owned_Experiences_Tab"> + MOJE + </string> + <string name="ExperiencesCounter"> + ([EXPERIENCES], maks. [MAXEXPERIENCES]) + </string> + <string name="ExperiencePermission1"> + kontrolować klawisze + </string> + <string name="ExperiencePermission3"> + animować Twojego awatara + </string> + <string name="ExperiencePermission4"> + dołączać do Twojego awatara + </string> + <string name="ExperiencePermission9"> + śledzić Twoją kamerę + </string> + <string name="ExperiencePermission10"> + kontrolować Twoją kamerę + </string> + <string name="ExperiencePermission11"> + teleportować Cię + </string> + <string name="ExperiencePermission12"> + automatycznie akceptować uprawnienia przygody + </string> + <string name="ExperiencePermission16"> + zmuszać Twojego awatara do siadania + </string> + <string name="ExperiencePermission17"> + zmieniać Twoje ustawienia otoczenia + </string> + <string name="ExperiencePermissionShortUnknown"> + wykonać nieznaną operację: [Permission] + </string> + <string name="ExperiencePermissionShort1"> + Kontrola klawiszy + </string> + <string name="ExperiencePermissionShort3"> + Rozpoczynanie animacji + </string> + <string name="ExperiencePermissionShort4"> + Dołączanie + </string> + <string name="ExperiencePermissionShort9"> + Śledzenie kamery + </string> + <string name="ExperiencePermissionShort10"> + Kontrola kamery + </string> + <string name="ExperiencePermissionShort11"> + Teleportacja + </string> + <string name="ExperiencePermissionShort12"> + Uprawnienia + </string> + <string name="ExperiencePermissionShort16"> + Siadanie + </string> + <string name="ExperiencePermissionShort17"> + Otoczenie + </string> <string name="logging_calls_disabled_log_empty"> Rozmowy nie są zapisywane do dziennika. Jeśli chcesz zacząć je logować wybierz "Zapisywanie: tylko dziennik" lub "Zapisywanie: dziennik i logi rozmów" w Preferencje > Czat. </string> @@ -4768,4 +5298,52 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu. <string name="loading_chat_logs"> Wczytywanie... </string> + <string name="na"> + n/d + </string> + <string name="preset_combo_label"> + -Lista jest pusta- + </string> + <string name="Default"> + Domyślne + </string> + <string name="none_paren_cap"> + (Brak) + </string> + <string name="no_limit"> + Bez limitu + </string> + <string name="Mav_Details_MAV_FOUND_DEGENERATE_TRIANGLES"> + Kształt fizyczny zawiera trójkąty, które są zbyt małe. Spróbuj uprościć model fizyczny. + </string> + <string name="Mav_Details_MAV_CONFIRMATION_DATA_MISMATCH"> + Kształt fizyczny zawiera uszkodzone dane. Spróbuj poprawić model fizyczny. + </string> + <string name="Mav_Details_MAV_BLOCK_MISSING"> + Brakujące dane. Upewnij się, że wysoki LOD jest obecny i prawidłowy. Ustaw model fizyczny, jeśli nie jest obecny. + </string> + <string name="Mav_Details_MAV_UNKNOWN_VERSION"> + Kształt fizyczny zawiera niepoprawną wersję. Ustaw poprawną wersję dla modelu fizycznego. + </string> + <string name="couldnt_resolve_host"> + DNS nie mógł znaleźć nazwy hosta ([HOSTNAME]). +Sprawdź, czy możesz połączyć się z www.secondlife.com +Jeśli możesz, ale nadal otrzymujesz ten błąd, to przejdź +do sekcji pomocy technicznej i zgłoś ten problem. + </string> + <string name="ssl_peer_certificate"> + Serwer logowania nie mógł zweryfikować się poprzez SSL. +Jeśli nadal będziesz otrzymywać ten błąd, to przejdź +do sekcji wsparcia witryny SecondLife.com i zgłoś problem. + </string> + <string name="ssl_connect_error"> + Często oznacza to, że zegar komputera jest ustawiony nieprawidłowo. +Przejdź do Panelu Sterowania i upewnij się, że godzina i data +są ustawione prawidłowo. +Sprawdź również, czy twoja sieć i zapora są poprawnie skonfigurowane. +Jeśli nadal będziesz otrzymywać ten błąd, to przejdź +do sekcji wsparcia witryny SecondLife.com i zgłoś problem. + +[https://community.secondlife.com/knowledgebase/english/error-messages-r520/#Section__3 Knowledge Base] + </string> </strings> diff --git a/indra/newview/skins/default/xui/pt/floater_chat_bar.xml b/indra/newview/skins/default/xui/pt/floater_chat_bar.xml deleted file mode 100644 index 2eb2c94940..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_chat_bar.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="nearby_chat" title="BATE-PAPO LOCAL"> - <panel name="bottom_panel"> - <line_editor label="Clique aqui para bater papo." name="chat_box" tool_tip="Tecle Enter para falar, Ctrl+Enter para gritar"/> - <button name="show_nearby_chat" tool_tip="Mostra/oculta o histórico do bate-papo local"/> - </panel> -</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml deleted file mode 100644 index 33a0d6a456..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="PERMISSÕES PADRÃO DE UPLOAD"> - <panel label="Permissões" name="permissions"> - <button label="?" label_selected="?" name="help"/> - <check_box label="Compartilhar com o grupo" name="share_with_group"/> - <check_box label="Permitir que qualquer um copie" name="everyone_copy"/> - <text name="NextOwnerLabel"> - O próximo dono pode: - </text> - <check_box label="Modificar" name="next_owner_modify"/> - <check_box label="Copiar" name="next_owner_copy"/> - <check_box label="Revender/Dar" name="next_owner_transfer"/> - </panel> - <button label="OK" label_selected="OK" name="ok"/> - <button label="Cancelar" label_selected="Cancelar" name="cancel"/> -</floater> diff --git a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml deleted file mode 100644 index 745a7d0e00..0000000000 --- a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="CONTROLES DE VOZ"> - <string name="title_nearby"> - CONFIGURAÇÕES DE VOZ - </string> - <string name="title_group"> - LIGAÇÃO DE GRUPO COM [GROUP] - </string> - <string name="title_adhoc"> - TELECONFERÊNCIA - </string> - <string name="title_peer_2_peer"> - LIGAÇÃO PARA [NAME] - </string> - <string name="no_one_near"> - Ninguém por perto ativou a voz - </string> - <layout_stack name="my_call_stack"> - <layout_panel name="my_panel"> - <text name="user_text" value="Meu avatar:"/> - </layout_panel> - <layout_panel name="leave_call_panel"> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Desligar" name="leave_call_btn"/> - </layout_panel> - </layout_stack> - </layout_panel> - </layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml deleted file mode 100644 index 2b5aa7508b..0000000000 --- a/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="Ver perfil" name="view_profile"/> - <menu_item_call label="Adicionar amigo..." name="add_friend"/> - <menu_item_call label="MI" name="im"/> - <menu_item_call label="Ligar" name="call"/> - <menu_item_call label="Teletransportar" name="teleport"/> - <menu_item_call label="Convidar para entrar no grupo" name="invite_to_group"/> - <menu_item_call label="Bloquear" name="block"/> - <menu_item_call label="Desbloquear" name="unblock"/> - <menu_item_call label="Denunciar" name="report"/> - <menu_item_call label="Congelar" name="freeze"/> - <menu_item_call label="Ejetar" name="eject"/> - <menu_item_call label="Chutar" name="kick"/> - <menu_item_call label="CSR" name="csr"/> - <menu_item_call label="Depurar texturas" name="debug"/> - <menu_item_call label="Localizar no mapa" name="find_on_map"/> - <menu_item_call label="Mais zoom" name="zoom_in"/> - <menu_item_call label="Pagar" name="pay"/> - <menu_item_call label="Compartilhar" name="share"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml deleted file mode 100644 index e8fafa58a9..0000000000 --- a/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="Sentar" name="Sit Down Here"/> - <menu_item_call label="Ficar de pé" name="Stand Up"/> - <context_menu label="Tirar" name="Take Off >"> - <context_menu label="Roupa" name="Clothes >"> - <menu_item_call label="Camisa" name="Shirt"/> - <menu_item_call label="Calças" name="Pants"/> - <menu_item_call label="Saia" name="Skirt"/> - <menu_item_call label="Sapatos" name="Shoes"/> - <menu_item_call label="Meias" name="Socks"/> - <menu_item_call label="Jaqueta" name="Jacket"/> - <menu_item_call label="Luvas" name="Gloves"/> - <menu_item_call label="Camiseta" name="Self Undershirt"/> - <menu_item_call label="Roupa de baixo" name="Self Underpants"/> - <menu_item_call label="Tatuagem" name="Self Tattoo"/> - <menu_item_call label="Alpha" name="Self Alpha"/> - <menu_item_call label="Todas as roupas" name="All Clothes"/> - </context_menu> - <context_menu label="HUD" name="Object Detach HUD"/> - <context_menu label="Separar" name="Object Detach"/> - <menu_item_call label="Separar tudo" name="Detach All"/> - </context_menu> - <menu_item_call label="Trocar de look" name="Chenge Outfit"/> - <menu_item_call label="Editar meu look" name="Edit Outfit"/> - <menu_item_call label="Editar meu corpo" name="Edit My Shape"/> - <menu_item_call label="Meus amigos" name="Friends..."/> - <menu_item_call label="Meus grupos" name="Groups..."/> - <menu_item_call label="Meu perfil" name="Profile..."/> - <menu_item_call label="Depurar texturas" name="Debug..."/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/pt/menu_name_field.xml b/indra/newview/skins/default/xui/pt/menu_name_field.xml deleted file mode 100644 index 2157de9813..0000000000 --- a/indra/newview/skins/default/xui/pt/menu_name_field.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="CopyMenu"> - <menu_item_call label="Exibir Cópia do Nome" name="copy_display"/> - <menu_item_call label="Copiar Nome do Agente" name="copy_name"/> - <menu_item_call label="Copiar Id do Agente" name="copy_id"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml deleted file mode 100644 index e7c325010f..0000000000 --- a/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Ordenar por nome" name="sort_name"/> - <menu_item_check label="Ordenar por status" name="sort_status"/> - <menu_item_check label="Ver ícones de pessoas" name="view_icons"/> - <menu_item_check label="Autorizações de visualização dadas" name="view_permissions"/> - <menu_item_call label="Ver residentes e objetos bloqueados" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/pt/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_groups_view_sort.xml deleted file mode 100644 index 86a9d2263f..0000000000 --- a/indra/newview/skins/default/xui/pt/menu_people_groups_view_sort.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Mostrar ícones de grupos" name="Display Group Icons"/> - <menu_item_call label="Sair do grupo selecionado" name="Leave Selected Group"/> -</menu> diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml deleted file mode 100644 index 0d32d58de4..0000000000 --- a/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="Ordenar por conversas mais recentes" name="sort_by_recent_speakers"/> - <menu_item_check label="Ordenar por nome" name="sort_name"/> - <menu_item_check label="Ordenar por distância" name="sort_distance"/> - <menu_item_check label="Ver ícones de pessoas" name="view_icons"/> - <menu_item_check label="Ver Mapa" name="view_map"/> - <menu_item_call label="Ver residentes e objetos bloqueados" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/pt/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_recent_view_sort.xml deleted file mode 100644 index f3b89e01cd..0000000000 --- a/indra/newview/skins/default/xui/pt/menu_people_recent_view_sort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<menu name="menu_group_plus"> - <menu_item_check label="Ordenar por mais recente" name="sort_most"/> - <menu_item_check label="Ordenar por nome" name="sort_name"/> - <menu_item_check label="Ver ícones de pessoas" name="view_icons"/> - <menu_item_call label="Ver residentes e objetos bloqueados" name="show_blocked_list"/> -</menu> diff --git a/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml deleted file mode 100644 index bd50d4953d..0000000000 --- a/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="call_btn_panel"> - <button label="Ligar" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Desligar" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Controles de voz" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_account.xml b/indra/newview/skins/default/xui/pt/panel_facebook_account.xml deleted file mode 100644 index b449e7959d..0000000000 --- a/indra/newview/skins/default/xui/pt/panel_facebook_account.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<panel name="panel_facebook_account"> - <string name="facebook_connected" value="Você está conectado ao Facebook como:"/> - <string name="facebook_disconnected" value="Não conectado ao Facebook"/> - <text name="account_caption_label"> - Não conectado ao Facebook. - </text> - <panel name="panel_buttons"> - <button label="Conectar..." name="connect_btn"/> - <button label="Desconectar" name="disconnect_btn"/> - <text name="account_learn_more_label"> - [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Aprenda a publicar no Facebook] - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml deleted file mode 100644 index 502dae8d67..0000000000 --- a/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="group_info_btn_panel"> - <button label="Perfil do grupo" name="group_info_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Ligar para o grupo" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Desligar" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Abrir controles de voz" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml deleted file mode 100644 index 91b7d1b7cd..0000000000 --- a/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="button_stack"> - <layout_panel name="view_profile_btn_panel"> - <button label="Perfil" name="view_profile_btn"/> - </layout_panel> - <layout_panel name="add_friend_btn_panel"> - <button label="Adicionar amigo" name="add_friend_btn"/> - </layout_panel> - <layout_panel name="teleport_btn_panel"> - <button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/> - </layout_panel> - <layout_panel name="share_btn_panel"> - <button label="Compartilhar" name="share_btn"/> - </layout_panel> - <layout_panel name="pay_btn_panel"> - <button label="Pagar" name="pay_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Ligar" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Encerrar ligação" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Controles de voz" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/pt/panel_profile_interests.xml b/indra/newview/skins/default/xui/pt/panel_profile_interests.xml deleted file mode 100644 index edf74115f2..0000000000 --- a/indra/newview/skins/default/xui/pt/panel_profile_interests.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Interesses" name="panel_profile_interests"> - <text name="I Want To:"> - Quero: - </text> - <check_box label="Crie" name="chk0"/> - <check_box label="Explore" name="chk1"/> - <check_box label="Encontrar" name="chk2"/> - <check_box label="Seja contratado" name="chk6"/> - <check_box label="Grupo" name="chk3"/> - <check_box label="Comprar" name="chk4"/> - <check_box label="Venda" name="chk5"/> - <check_box label="Contratar" name="chk7"/> - <line_editor name="want_to_edit"> - (carregando...) - </line_editor> - <text name="Skills:"> - Habilidades: - </text> - <check_box label="Texturas" name="schk0"/> - <check_box label="Arquitetura" name="schk1"/> - <check_box label="Modelo" name="schk3"/> - <check_box label="Planejamento de evento" name="schk2"/> - <check_box label="Scripts" name="schk4"/> - <check_box label="Personagens personalizados" name="schk5"/> - <line_editor name="skills_edit"> - (carregando...) - </line_editor> - <text name="Languages:"> - Idiomas: - </text> - <line_editor name="languages_edit"> - (carregando...) - </line_editor> -</panel> diff --git a/indra/newview/skins/default/xui/ru/floater_chat_bar.xml b/indra/newview/skins/default/xui/ru/floater_chat_bar.xml deleted file mode 100644 index f6b2fc81e1..0000000000 --- a/indra/newview/skins/default/xui/ru/floater_chat_bar.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="nearby_chat" title="ЛОКАЛЬНЫЙ ЧАТ"> - <panel name="bottom_panel"> - <line_editor label="Щелкните здесь для общения." name="chat_box" tool_tip="Нажмите Enter, чтобы сказать, Ctrl+Enter, чтобы прокричать"/> - <button name="show_nearby_chat" tool_tip="Показать/скрыть лог локального чата"/> - </panel> -</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_perm_prefs.xml b/indra/newview/skins/default/xui/ru/floater_perm_prefs.xml deleted file mode 100644 index 626f3c9321..0000000000 --- a/indra/newview/skins/default/xui/ru/floater_perm_prefs.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="СТАНДАРТНЫЕ РАЗРЕШЕНИЯ НА ПЕРЕДАЧУ"> - <panel label="Разрешения" name="permissions"> - <check_box label="Поделиться с группой" name="share_with_group"/> - <check_box label="Разрешить всем копировать" name="everyone_copy"/> - <text name="NextOwnerLabel"> - Следующий владелец может: - </text> - <check_box label="изменять" name="next_owner_modify"/> - <check_box label="копировать" name="next_owner_copy"/> - <check_box initial_value="true" label="перепродавать/отдавать" name="next_owner_transfer"/> - </panel> - <button label="ОК" label_selected="ОК" name="ok"/> - <button label="Отмена" label_selected="Отмена" name="cancel"/> -</floater> diff --git a/indra/newview/skins/default/xui/ru/floater_voice_controls.xml b/indra/newview/skins/default/xui/ru/floater_voice_controls.xml deleted file mode 100644 index 2b23086062..0000000000 --- a/indra/newview/skins/default/xui/ru/floater_voice_controls.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="УПРАВЛЕНИЕ ГОЛОСОМ"> - <string name="title_nearby"> - НАСТРОЙКИ ГОЛОСА - </string> - <string name="title_group"> - ЗВОНОК ГРУППЕ [GROUP] - </string> - <string name="title_adhoc"> - КОНФЕРЕНЦИЯ - </string> - <string name="title_peer_2_peer"> - ЗВОНОК ПОЛЬЗОВАТЕЛЮ [NAME] - </string> - <string name="no_one_near"> - Нет никого с включенным голосом - </string> - <layout_stack name="my_call_stack"> - <layout_panel name="my_panel"> - <text name="user_text" value="Мой аватар:"/> - </layout_panel> - <layout_panel name="leave_call_panel"> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Прервать звонок" name="leave_call_btn"/> - </layout_panel> - </layout_stack> - </layout_panel> - </layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/ru/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/ru/menu_inspect_avatar_gear.xml deleted file mode 100644 index 957609a7a3..0000000000 --- a/indra/newview/skins/default/xui/ru/menu_inspect_avatar_gear.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="Смотреть профиль" name="view_profile"/> - <menu_item_call label="В друзья" name="add_friend"/> - <menu_item_call label="IM" name="im"/> - <menu_item_call label="Звонок" name="call"/> - <menu_item_call label="Телепорт" name="teleport"/> - <menu_item_call label="Пригласить в группу" name="invite_to_group"/> - <menu_item_call label="Заблокировать" name="block"/> - <menu_item_call label="Разблокировать" name="unblock"/> - <menu_item_call label="Пожаловаться" name="report"/> - <menu_item_call label="Заморозить" name="freeze"/> - <menu_item_call label="Выкинуть" name="eject"/> - <menu_item_call label="Выкинуть" name="kick"/> - <menu_item_call label="Поддержка" name="csr"/> - <menu_item_call label="Отладка текстур" name="debug"/> - <menu_item_call label="Найти на карте" name="find_on_map"/> - <menu_item_call label="Приблизить" name="zoom_in"/> - <menu_item_call label="Заплатить" name="pay"/> - <menu_item_call label="Поделиться" name="share"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/ru/menu_inspect_self_gear.xml deleted file mode 100644 index 901bb615e0..0000000000 --- a/indra/newview/skins/default/xui/ru/menu_inspect_self_gear.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="Self Pie"> - <menu_item_call label="Сесть" name="Sit Down Here"/> - <menu_item_call label="Встать" name="Stand Up"/> - <context_menu label="Снять" name="Take Off >"> - <context_menu label="одежду" name="Clothes >"> - <menu_item_call label="рубашку" name="Shirt"/> - <menu_item_call label="брюки" name="Pants"/> - <menu_item_call label="юбку" name="Skirt"/> - <menu_item_call label="обувь" name="Shoes"/> - <menu_item_call label="носки" name="Socks"/> - <menu_item_call label="пиджак" name="Jacket"/> - <menu_item_call label="перчатки" name="Gloves"/> - <menu_item_call label="майку" name="Self Undershirt"/> - <menu_item_call label="трусы" name="Self Underpants"/> - <menu_item_call label="тату" name="Self Tattoo"/> - <menu_item_call label="альфа-маску" name="Self Alpha"/> - <menu_item_call label="всю одежду" name="All Clothes"/> - </context_menu> - <context_menu label="данные в игре" name="Object Detach HUD"/> - <context_menu label="Отсоединить" name="Object Detach"/> - <menu_item_call label="Отсоединить все" name="Detach All"/> - </context_menu> - <menu_item_call label="Сменить костюм" name="Chenge Outfit"/> - <menu_item_call label="Изменить костюм" name="Edit Outfit"/> - <menu_item_call label="Изменить фигуру" name="Edit My Shape"/> - <menu_item_call label="Мои друзья" name="Friends..."/> - <menu_item_call label="Мои группы" name="Groups..."/> - <menu_item_call label="Мой профиль" name="Profile..."/> - <menu_item_call label="Отладка текстур" name="Debug..."/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_name_field.xml b/indra/newview/skins/default/xui/ru/menu_name_field.xml deleted file mode 100644 index 889f3c37ab..0000000000 --- a/indra/newview/skins/default/xui/ru/menu_name_field.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="CopyMenu"> - <menu_item_call label="Копировать отображаемое имя" name="copy_display"/> - <menu_item_call label="Копировать имя агента" name="copy_name"/> - <menu_item_call label="Копировать Id агента" name="copy_id"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/ru/menu_people_friends_view_sort.xml deleted file mode 100644 index 0fa252aa99..0000000000 --- a/indra/newview/skins/default/xui/ru/menu_people_friends_view_sort.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="Сортировать по имени" name="sort_name"/> - <menu_item_check label="Сортировать по статусу" name="sort_status"/> - <menu_item_check label="Показывать значки" name="view_icons"/> - <menu_item_check label="Показывать разрешенные действия" name="view_permissions"/> - <menu_item_call label="Показать черный список" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/ru/menu_people_groups_view_sort.xml deleted file mode 100644 index 0358068db9..0000000000 --- a/indra/newview/skins/default/xui/ru/menu_people_groups_view_sort.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="Показывать значки группы" name="Display Group Icons"/> - <menu_item_call label="Покинуть выбранную группу" name="Leave Selected Group"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/ru/menu_people_nearby_view_sort.xml deleted file mode 100644 index 4589815f6b..0000000000 --- a/indra/newview/skins/default/xui/ru/menu_people_nearby_view_sort.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="Сортировать по недавно говорившим" name="sort_by_recent_speakers"/> - <menu_item_check label="Сортировать по имени" name="sort_name"/> - <menu_item_check label="Сортировать по расстоянию" name="sort_distance"/> - <menu_item_check label="Показывать значки участников" name="view_icons"/> - <menu_item_check label="Смотреть карту" name="view_map"/> - <menu_item_call label="Показать черный список жителей и объектов" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ru/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/ru/menu_people_recent_view_sort.xml deleted file mode 100644 index 2ac83ffe52..0000000000 --- a/indra/newview/skins/default/xui/ru/menu_people_recent_view_sort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="Сортировать по времени" name="sort_most"/> - <menu_item_check label="Сортировать по имени" name="sort_name"/> - <menu_item_check label="Показывать значки людей" name="view_icons"/> - <menu_item_call label="Показать черный список" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/ru/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/ru/panel_adhoc_control_panel.xml deleted file mode 100644 index ae2240593d..0000000000 --- a/indra/newview/skins/default/xui/ru/panel_adhoc_control_panel.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="call_btn_panel"> - <button label="Звонок" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Прервать звонок" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Управление голосом" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_account.xml b/indra/newview/skins/default/xui/ru/panel_facebook_account.xml deleted file mode 100644 index 22b4e46897..0000000000 --- a/indra/newview/skins/default/xui/ru/panel_facebook_account.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<panel name="panel_facebook_account"> - <string name="facebook_connected" value="Вы подключились к Facebook как:"/> - <string name="facebook_disconnected" value="Не подключено к Facebook"/> - <text name="account_caption_label"> - Не подключено к Facebook. - </text> - <panel name="panel_buttons"> - <button label="Подключение..." name="connect_btn"/> - <button label="Отключить" name="disconnect_btn"/> - <text name="account_learn_more_label"> - [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 О публикации в Facebook] - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_group_control_panel.xml b/indra/newview/skins/default/xui/ru/panel_group_control_panel.xml deleted file mode 100644 index 2e6f3502b6..0000000000 --- a/indra/newview/skins/default/xui/ru/panel_group_control_panel.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="group_info_btn_panel"> - <button label="Профиль группы" name="group_info_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Звонок группе" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Прервать звонок" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Открыть голосовое управление" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_im_control_panel.xml b/indra/newview/skins/default/xui/ru/panel_im_control_panel.xml deleted file mode 100644 index 2a23cdb800..0000000000 --- a/indra/newview/skins/default/xui/ru/panel_im_control_panel.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="button_stack"> - <layout_panel name="view_profile_btn_panel"> - <button label="Профиль" name="view_profile_btn"/> - </layout_panel> - <layout_panel name="add_friend_btn_panel"> - <button label="Добавить в друзья" name="add_friend_btn"/> - </layout_panel> - <layout_panel name="teleport_btn_panel"> - <button label="Телепортация" name="teleport_btn" tool_tip="Предложить телепортацию этому жителю"/> - </layout_panel> - <layout_panel name="share_btn_panel"> - <button label="Поделиться" name="share_btn"/> - </layout_panel> - <layout_panel name="pay_btn_panel"> - <button label="Заплатить" name="pay_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Звонок" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Завершить звонок" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Управление голосом" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/ru/panel_profile_interests.xml b/indra/newview/skins/default/xui/ru/panel_profile_interests.xml deleted file mode 100644 index ba1c3d0357..0000000000 --- a/indra/newview/skins/default/xui/ru/panel_profile_interests.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="Круг интересов" name="panel_profile_interests"> - <text name="I Want To:"> - Я собираюсь: - </text> - <check_box label="Построить" name="chk0"/> - <check_box label="Просмотреть" name="chk1"/> - <check_box label="Встретить" name="chk2"/> - <check_box label="Получить работу" name="chk6"/> - <check_box label="Группа" name="chk3"/> - <check_box label="Купить" name="chk4"/> - <check_box label="Продать" name="chk5"/> - <check_box label="Нанять" name="chk7"/> - <line_editor name="want_to_edit"> - (загрузка…) - </line_editor> - <text name="Skills:"> - Навыки: - </text> - <check_box label="Текстуры" name="schk0"/> - <check_box label="Архитектура" name="schk1"/> - <check_box label="Моделирование" name="schk3"/> - <check_box label="Планирование мероприятия" name="schk2"/> - <check_box label="Создавать сценарии" name="schk4"/> - <check_box label="Пользовательские символы" name="schk5"/> - <line_editor name="skills_edit"> - (загрузка…) - </line_editor> - <text name="Languages:"> - Языки: - </text> - <line_editor name="languages_edit"> - (загрузка…) - </line_editor> -</panel> diff --git a/indra/newview/skins/default/xui/tr/floater_chat_bar.xml b/indra/newview/skins/default/xui/tr/floater_chat_bar.xml deleted file mode 100644 index cd999b4b7a..0000000000 --- a/indra/newview/skins/default/xui/tr/floater_chat_bar.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="nearby_chat" title="YAKINDAKİ SOHBET"> - <panel name="bottom_panel"> - <line_editor label="Sohbet etmek için buraya tıklayın." name="chat_box" tool_tip="Söylemek için Enter, bağırmak için Ctrl+Enter yapın"/> - <button name="show_nearby_chat" tool_tip="Yakın sohbet günlüğünü gösterir/gizler"/> - </panel> -</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_perm_prefs.xml b/indra/newview/skins/default/xui/tr/floater_perm_prefs.xml deleted file mode 100644 index 669b833c26..0000000000 --- a/indra/newview/skins/default/xui/tr/floater_perm_prefs.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="VARSAYILAN KARŞIYA YÜKLEME İZİNLERİ"> - <panel label="İzinler" name="permissions"> - <check_box label="Grupla paylaş" name="share_with_group"/> - <check_box label="Herkese kopyalama izni ver" name="everyone_copy"/> - <text name="NextOwnerLabel"> - Sonraki sahip şunu yapabilir: - </text> - <check_box label="Değiştir" name="next_owner_modify"/> - <check_box label="Kopyala" name="next_owner_copy"/> - <check_box initial_value="true" label="Tekrar sat/Ver" name="next_owner_transfer"/> - </panel> - <button label="Tamam" label_selected="Tamam" name="ok"/> - <button label="İptal" label_selected="İptal" name="cancel"/> -</floater> diff --git a/indra/newview/skins/default/xui/tr/floater_voice_controls.xml b/indra/newview/skins/default/xui/tr/floater_voice_controls.xml deleted file mode 100644 index 5ff0804f17..0000000000 --- a/indra/newview/skins/default/xui/tr/floater_voice_controls.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="SES DENETİMLERİ"> - <string name="title_nearby"> - SES AYARLARI - </string> - <string name="title_group"> - [GROUP] İLE GRUP ARAMASI - </string> - <string name="title_adhoc"> - KONFERANS ARAMASI - </string> - <string name="title_peer_2_peer"> - [NAME] İLE ARAMA - </string> - <string name="no_one_near"> - Yakındaki kimsede ses etkin değil - </string> - <layout_stack name="my_call_stack"> - <layout_panel name="my_panel"> - <text name="user_text" value="Avatarım:"/> - </layout_panel> - <layout_panel name="leave_call_panel"> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="Aramadan Ayrıl" name="leave_call_btn"/> - </layout_panel> - </layout_stack> - </layout_panel> - </layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/tr/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/tr/menu_inspect_avatar_gear.xml deleted file mode 100644 index 69432e967b..0000000000 --- a/indra/newview/skins/default/xui/tr/menu_inspect_avatar_gear.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="Profili Göster" name="view_profile"/> - <menu_item_call label="Arkadaş Ekle" name="add_friend"/> - <menu_item_call label="Aİ" name="im"/> - <menu_item_call label="Ara" name="call"/> - <menu_item_call label="Işınla" name="teleport"/> - <menu_item_call label="Gruba Davet Et" name="invite_to_group"/> - <menu_item_call label="Engelle" name="block"/> - <menu_item_call label="Engellemeyi Kaldır" name="unblock"/> - <menu_item_call label="Raporla" name="report"/> - <menu_item_call label="Dondur" name="freeze"/> - <menu_item_call label="Çıkar" name="eject"/> - <menu_item_call label="Çıkar" name="kick"/> - <menu_item_call label="CSR" name="csr"/> - <menu_item_call label="Dokularda Hata Ayıkla" name="debug"/> - <menu_item_call label="Haritada Bul" name="find_on_map"/> - <menu_item_call label="Yakınlaştır" name="zoom_in"/> - <menu_item_call label="Öde" name="pay"/> - <menu_item_call label="Paylaş" name="share"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/tr/menu_inspect_self_gear.xml deleted file mode 100644 index 0655db8196..0000000000 --- a/indra/newview/skins/default/xui/tr/menu_inspect_self_gear.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="Self Pie"> - <menu_item_call label="Otur" name="Sit Down Here"/> - <menu_item_call label="Kalk" name="Stand Up"/> - <context_menu label="Çıkar" name="Take Off >"> - <context_menu label="Giysiler" name="Clothes >"> - <menu_item_call label="Gömlek" name="Shirt"/> - <menu_item_call label="Pantolon" name="Pants"/> - <menu_item_call label="Etek" name="Skirt"/> - <menu_item_call label="Ayakkabılar" name="Shoes"/> - <menu_item_call label="Çoraplar" name="Socks"/> - <menu_item_call label="Ceket" name="Jacket"/> - <menu_item_call label="Eldivenler" name="Gloves"/> - <menu_item_call label="Fanila" name="Self Undershirt"/> - <menu_item_call label="Külot" name="Self Underpants"/> - <menu_item_call label="Dövme" name="Self Tattoo"/> - <menu_item_call label="Alfa" name="Self Alpha"/> - <menu_item_call label="Tüm Giysiler" name="All Clothes"/> - </context_menu> - <context_menu label="BÜG" name="Object Detach HUD"/> - <context_menu label="Ayır" name="Object Detach"/> - <menu_item_call label="Tümünü Ayır" name="Detach All"/> - </context_menu> - <menu_item_call label="Dış Görünümü Değiştir" name="Chenge Outfit"/> - <menu_item_call label="Dış Görünümümü Düzenle" name="Edit Outfit"/> - <menu_item_call label="Şeklimi Düzenle" name="Edit My Shape"/> - <menu_item_call label="Arkadaşlarım" name="Friends..."/> - <menu_item_call label="Gruplarım" name="Groups..."/> - <menu_item_call label="Profilim" name="Profile..."/> - <menu_item_call label="Dokularda Hata Ayıkla" name="Debug..."/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_name_field.xml b/indra/newview/skins/default/xui/tr/menu_name_field.xml deleted file mode 100644 index b1afd737c3..0000000000 --- a/indra/newview/skins/default/xui/tr/menu_name_field.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="CopyMenu"> - <menu_item_call label="Görünen Adı Kopyala" name="copy_display"/> - <menu_item_call label="Aracı Adını Kopyala" name="copy_name"/> - <menu_item_call label="Aracı Kimliğini Kopyala" name="copy_id"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/tr/menu_people_friends_view_sort.xml deleted file mode 100644 index 404fab17e6..0000000000 --- a/indra/newview/skins/default/xui/tr/menu_people_friends_view_sort.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="Ada Göre Sırala" name="sort_name"/> - <menu_item_check label="Duruma Göre Sırala" name="sort_status"/> - <menu_item_check label="Kişi Simgelerini Göster" name="view_icons"/> - <menu_item_check label="Verilen İzinleri Göster" name="view_permissions"/> - <menu_item_call label="Engellenmiş Sakinleri ve Nesneleri Göster" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/tr/menu_people_groups_view_sort.xml deleted file mode 100644 index a1e5ad9a50..0000000000 --- a/indra/newview/skins/default/xui/tr/menu_people_groups_view_sort.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="Grup Simgelerini Göster" name="Display Group Icons"/> - <menu_item_call label="Seçilen Gruptan Ayrıl" name="Leave Selected Group"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/tr/menu_people_nearby_view_sort.xml deleted file mode 100644 index 0ff2111e9e..0000000000 --- a/indra/newview/skins/default/xui/tr/menu_people_nearby_view_sort.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="Son Konuşanlara Göre Sırala" name="sort_by_recent_speakers"/> - <menu_item_check label="Ada Göre Sırala" name="sort_name"/> - <menu_item_check label="Mesafeye Göre Sırala" name="sort_distance"/> - <menu_item_check label="Kişi Simgelerini Göster" name="view_icons"/> - <menu_item_check label="Haritayı Göster" name="view_map"/> - <menu_item_call label="Engellenmiş Sakinleri ve Nesneleri Göster" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/tr/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/tr/menu_people_recent_view_sort.xml deleted file mode 100644 index adfba50138..0000000000 --- a/indra/newview/skins/default/xui/tr/menu_people_recent_view_sort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="En Sonunculara Göre Sırala" name="sort_most"/> - <menu_item_check label="Ada Göre Sırala" name="sort_name"/> - <menu_item_check label="Kişi Simgelerini Göster" name="view_icons"/> - <menu_item_call label="Engellenmiş Sakinleri ve Nesneleri Göster" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/tr/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/tr/panel_adhoc_control_panel.xml deleted file mode 100644 index 602818de94..0000000000 --- a/indra/newview/skins/default/xui/tr/panel_adhoc_control_panel.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="call_btn_panel"> - <button label="Ara" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Aramadan Ayrıl" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Ses Denetimleri" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_account.xml b/indra/newview/skins/default/xui/tr/panel_facebook_account.xml deleted file mode 100644 index e2d2b193a6..0000000000 --- a/indra/newview/skins/default/xui/tr/panel_facebook_account.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<panel name="panel_facebook_account"> - <string name="facebook_connected" value="Facebook'a şu kimlikle bağlandınız:"/> - <string name="facebook_disconnected" value="Facebook'a bağlanılmadı"/> - <text name="account_caption_label"> - Facebook'a bağlanılmadı. - </text> - <panel name="panel_buttons"> - <button label="Bağlan..." name="connect_btn"/> - <button label="Bağlantıyı kes" name="disconnect_btn"/> - <text name="account_learn_more_label"> - [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Facebook'ta içerik yayınlama hakkında bilgi edinin] - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_group_control_panel.xml b/indra/newview/skins/default/xui/tr/panel_group_control_panel.xml deleted file mode 100644 index 58bb68a5c3..0000000000 --- a/indra/newview/skins/default/xui/tr/panel_group_control_panel.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="group_info_btn_panel"> - <button label="Grup Profili" name="group_info_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Grubu Ara" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Aramadan Ayrıl" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Ses Denetimlerini Aç" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_im_control_panel.xml b/indra/newview/skins/default/xui/tr/panel_im_control_panel.xml deleted file mode 100644 index aebdc6b48d..0000000000 --- a/indra/newview/skins/default/xui/tr/panel_im_control_panel.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="button_stack"> - <layout_panel name="view_profile_btn_panel"> - <button label="Profil" name="view_profile_btn"/> - </layout_panel> - <layout_panel name="add_friend_btn_panel"> - <button label="Arkadaş Ekle" name="add_friend_btn"/> - </layout_panel> - <layout_panel name="teleport_btn_panel"> - <button label="Işınla" name="teleport_btn" tool_tip="Bu kişiyi ışınlamayı teklif et"/> - </layout_panel> - <layout_panel name="share_btn_panel"> - <button label="Paylaş" name="share_btn"/> - </layout_panel> - <layout_panel name="pay_btn_panel"> - <button label="Öde" name="pay_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="Ara" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="Aramayı Bitir" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="Ses Denetimleri" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/tr/panel_profile_interests.xml b/indra/newview/skins/default/xui/tr/panel_profile_interests.xml deleted file mode 100644 index b068aa3dad..0000000000 --- a/indra/newview/skins/default/xui/tr/panel_profile_interests.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="İlgi alanları" name="panel_profile_interests"> - <text name="I Want To:"> - Şunu Yapmak İstiyorum: - </text> - <check_box label="İnşa Et" name="chk0"/> - <check_box label="Keşfet" name="chk1"/> - <check_box label="Tanış" name="chk2"/> - <check_box label="İşe Gir" name="chk6"/> - <check_box label="Gruplandır" name="chk3"/> - <check_box label="Satın Al" name="chk4"/> - <check_box label="Sat" name="chk5"/> - <check_box label="İşe Al" name="chk7"/> - <line_editor name="want_to_edit"> - (yükleniyor...) - </line_editor> - <text name="Skills:"> - Beceriler: - </text> - <check_box label="Dokular" name="schk0"/> - <check_box label="Mimari" name="schk1"/> - <check_box label="Modelleme" name="schk3"/> - <check_box label="Etkinlik Planlama" name="schk2"/> - <check_box label="Kodlama" name="schk4"/> - <check_box label="Özel Karakterler" name="schk5"/> - <line_editor name="skills_edit"> - (yükleniyor...) - </line_editor> - <text name="Languages:"> - Diller: - </text> - <line_editor name="languages_edit"> - (yükleniyor...) - </line_editor> -</panel> diff --git a/indra/newview/skins/default/xui/zh/floater_chat_bar.xml b/indra/newview/skins/default/xui/zh/floater_chat_bar.xml deleted file mode 100644 index f1a69a7688..0000000000 --- a/indra/newview/skins/default/xui/zh/floater_chat_bar.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="chat_bar" title="附近的聊天"> - <panel name="bottom_panel"> - <line_editor label="點按此處開始聊天。" name="chat_box" tool_tip="按下 Enter 鍵來說或按下 Ctrl+Enter 來喊叫"/> - <button name="show_nearby_chat" tool_tip="顯示 / 隱藏 附近的聊天紀錄"/> - </panel> -</floater> diff --git a/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml b/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml deleted file mode 100644 index b38db59ff3..0000000000 --- a/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="perm prefs" title="預設上傳權限"> - <panel label="權限" name="permissions"> - <check_box label="與群組分享" name="share_with_group"/> - <check_box label="允許任何人覆製" name="everyone_copy"/> - <text name="NextOwnerLabel"> - 下一個所有人可以: - </text> - <check_box label="修改" name="next_owner_modify"/> - <check_box label="恚庨" name="next_owner_copy"/> - <check_box initial_value="true" label="轉售 / 送人" name="next_owner_transfer"/> - </panel> - <button label="確定" label_selected="確定" name="ok"/> - <button label="取消" label_selected="取消" name="cancel"/> -</floater> diff --git a/indra/newview/skins/default/xui/zh/floater_voice_controls.xml b/indra/newview/skins/default/xui/zh/floater_voice_controls.xml deleted file mode 100644 index a3a7679957..0000000000 --- a/indra/newview/skins/default/xui/zh/floater_voice_controls.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_voice_controls" title="語音控制"> - <string name="title_nearby"> - 語音設定 - </string> - <string name="title_group"> - 與 [GROUP] 進行群組通話 - </string> - <string name="title_adhoc"> - 多方通話 - </string> - <string name="title_peer_2_peer"> - 和 [NAME] 通話 - </string> - <string name="no_one_near"> - 附近沒有一人開啟語音 - </string> - <layout_stack name="my_call_stack"> - <layout_panel name="my_panel"> - <text name="user_text" value="我的化身:"/> - </layout_panel> - <layout_panel name="leave_call_panel"> - <layout_stack name="voice_effect_and_leave_call_stack"> - <layout_panel name="leave_call_btn_panel"> - <button label="離開通話" name="leave_call_btn"/> - </layout_panel> - </layout_stack> - </layout_panel> - </layout_stack> -</floater> diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml deleted file mode 100644 index f4e886ff67..0000000000 --- a/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<toggleable_menu name="Gear Menu"> - <menu_item_call label="察看檔案" name="view_profile"/> - <menu_item_call label="加為朋友" name="add_friend"/> - <menu_item_call label="IM" name="im"/> - <menu_item_call label="通話" name="call"/> - <menu_item_call label="瞬間傳送" name="teleport"/> - <menu_item_call label="邀請加入群組" name="invite_to_group"/> - <menu_item_call label="封鎖" name="block"/> - <menu_item_call label="解除封鎖" name="unblock"/> - <menu_item_call label="回報" name="report"/> - <menu_item_call label="凍結" name="freeze"/> - <menu_item_call label="踢出" name="eject"/> - <menu_item_call label="踢出" name="kick"/> - <menu_item_call label="客服" name="csr"/> - <menu_item_call label="材質除錯" name="debug"/> - <menu_item_call label="在地圖上尋找" name="find_on_map"/> - <menu_item_call label="放大" name="zoom_in"/> - <menu_item_call label="支付" name="pay"/> - <menu_item_call label="分享" name="share"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml deleted file mode 100644 index c48ee0c9be..0000000000 --- a/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="Self Pie"> - <menu_item_call label="坐下" name="Sit Down Here"/> - <menu_item_call label="起立" name="Stand Up"/> - <context_menu label="脫下" name="Take Off >"> - <context_menu label="衣服" name="Clothes >"> - <menu_item_call label="襯衫" name="Shirt"/> - <menu_item_call label="褲子" name="Pants"/> - <menu_item_call label="裙子" name="Skirt"/> - <menu_item_call label="鞋子" name="Shoes"/> - <menu_item_call label="襪子" name="Socks"/> - <menu_item_call label="夾克" name="Jacket"/> - <menu_item_call label="手套" name="Gloves"/> - <menu_item_call label="內衣" name="Self Undershirt"/> - <menu_item_call label="內褲" name="Self Underpants"/> - <menu_item_call label="刺青" name="Self Tattoo"/> - <menu_item_call label="半透明" name="Self Alpha"/> - <menu_item_call label="全部衣服" name="All Clothes"/> - </context_menu> - <context_menu label="擡頭顯示" name="Object Detach HUD"/> - <context_menu label="卸下" name="Object Detach"/> - <menu_item_call label="全部卸下" name="Detach All"/> - </context_menu> - <menu_item_call label="變更裝扮" name="Chenge Outfit"/> - <menu_item_call label="編輯我的裝扮" name="Edit Outfit"/> - <menu_item_call label="編輯我的體形" name="Edit My Shape"/> - <menu_item_call label="我的朋友" name="Friends..."/> - <menu_item_call label="我的群組" name="Groups..."/> - <menu_item_call label="我的個人檔案" name="Profile..."/> - <menu_item_call label="材質除錯" name="Debug..."/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_name_field.xml b/indra/newview/skins/default/xui/zh/menu_name_field.xml deleted file mode 100644 index 5eaf3461cd..0000000000 --- a/indra/newview/skins/default/xui/zh/menu_name_field.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="CopyMenu"> - <menu_item_call label="複製顯示名稱" name="copy_display"/> - <menu_item_call label="複製代理名稱" name="copy_name"/> - <menu_item_call label="複製代理ID" name="copy_id"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml deleted file mode 100644 index 59854faeec..0000000000 --- a/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="依名稱排序" name="sort_name"/> - <menu_item_check label="依狀態排序" name="sort_status"/> - <menu_item_check label="察看人群圖示" name="view_icons"/> - <menu_item_check label="察看許可權限" name="view_permissions"/> - <menu_item_call label="顯示被封鎖的居民與物件" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml deleted file mode 100644 index 1be5c69b94..0000000000 --- a/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="顯示群組圖示" name="Display Group Icons"/> - <menu_item_call label="脫離所選擇的群組" name="Leave Selected Group"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml deleted file mode 100644 index 6cb0ac3c89..0000000000 --- a/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="依最近說話者排序" name="sort_by_recent_speakers"/> - <menu_item_check label="依名稱排序" name="sort_name"/> - <menu_item_check label="依距離排序" name="sort_distance"/> - <menu_item_check label="察看人群圖示" name="view_icons"/> - <menu_item_check label="察看地圖" name="view_map"/> - <menu_item_call label="顯示被封鎖的居民與物件" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_recent_view_sort.xml deleted file mode 100644 index 5b6e7335d6..0000000000 --- a/indra/newview/skins/default/xui/zh/menu_people_recent_view_sort.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<toggleable_menu name="menu_group_plus"> - <menu_item_check label="依最近排序" name="sort_most"/> - <menu_item_check label="依名稱排序" name="sort_name"/> - <menu_item_check label="察看人群圖示" name="view_icons"/> - <menu_item_call label="顯示被封鎖的居民與物件" name="show_blocked_list"/> -</toggleable_menu> diff --git a/indra/newview/skins/default/xui/zh/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_adhoc_control_panel.xml deleted file mode 100644 index 7d16ac4129..0000000000 --- a/indra/newview/skins/default/xui/zh/panel_adhoc_control_panel.xml +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="call_btn_panel"> - <button label="通話" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="離開通話" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="語音控制" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_account.xml b/indra/newview/skins/default/xui/zh/panel_facebook_account.xml deleted file mode 100644 index e8c31c69c5..0000000000 --- a/indra/newview/skins/default/xui/zh/panel_facebook_account.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<panel name="panel_facebook_account"> - <string name="facebook_connected" value="已成功連通臉書,身分為:"/> - <string name="facebook_disconnected" value="未連通臉書"/> - <text name="account_caption_label"> - 未連通臉書。 - </text> - <panel name="panel_buttons"> - <button label="連通…" name="connect_btn"/> - <button label="中斷" name="disconnect_btn"/> - <text name="account_learn_more_label"> - [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 如何發佈到臉書] - </text> - </panel> -</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml deleted file mode 100644 index f468aba514..0000000000 --- a/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="vertical_stack"> - <layout_panel name="group_info_btn_panel"> - <button label="群組檔案" name="group_info_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="群組通話" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="離開通話" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="開啟語音控制" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_im_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_im_control_panel.xml deleted file mode 100644 index e937368a2b..0000000000 --- a/indra/newview/skins/default/xui/zh/panel_im_control_panel.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_im_control_panel"> - <layout_stack name="button_stack"> - <layout_panel name="view_profile_btn_panel"> - <button label="檔案" name="view_profile_btn"/> - </layout_panel> - <layout_panel name="add_friend_btn_panel"> - <button label="加為朋友" name="add_friend_btn"/> - </layout_panel> - <layout_panel name="teleport_btn_panel"> - <button label="瞬間傳送" name="teleport_btn" tool_tip="發出瞬間傳送邀請給此人"/> - </layout_panel> - <layout_panel name="share_btn_panel"> - <button label="分享" name="share_btn"/> - </layout_panel> - <layout_panel name="pay_btn_panel"> - <button label="支付" name="pay_btn"/> - </layout_panel> - <layout_panel name="call_btn_panel"> - <button label="通話" name="call_btn"/> - </layout_panel> - <layout_panel name="end_call_btn_panel"> - <button label="結束通話" name="end_call_btn"/> - </layout_panel> - <layout_panel name="voice_ctrls_btn_panel"> - <button label="語音控制" name="voice_ctrls_btn"/> - </layout_panel> - </layout_stack> -</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_navmesh_rebake.xml b/indra/newview/skins/default/xui/zh/panel_navmesh_rebake.xml deleted file mode 100644 index bb52c13a11..0000000000 --- a/indra/newview/skins/default/xui/zh/panel_navmesh_rebake.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel name="panel_navmesh_rebake"> - <button label="重新產出地區" name="navmesh_btn" tool_tip="點按即可重新產出該地區的導航網面。"/> - <button label="正在請求重新產出" name="navmesh_btn_sending" tool_tip="正向伺服器發送重新產出請求。"/> - <button label="地區正在重新產出" name="navmesh_btn_baking" tool_tip="地區正在重新產出。 完成後,這個按鈕將會消失。"/> -</panel> diff --git a/indra/newview/skins/default/xui/zh/panel_profile_interests.xml b/indra/newview/skins/default/xui/zh/panel_profile_interests.xml deleted file mode 100644 index 150f3cca4f..0000000000 --- a/indra/newview/skins/default/xui/zh/panel_profile_interests.xml +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<panel label="興趣" name="panel_profile_interests"> - <text name="I Want To:"> - 我想要: - </text> - <check_box label="建造" name="chk0"/> - <check_box label="探索" name="chk1"/> - <check_box label="見面" name="chk2"/> - <check_box label="受雇" name="chk6"/> - <check_box label="群組" name="chk3"/> - <check_box label="購買" name="chk4"/> - <check_box label="出售" name="chk5"/> - <check_box label="招人" name="chk7"/> - <line_editor name="want_to_edit"> - (載入中...) - </line_editor> - <text name="Skills:"> - 技能: - </text> - <check_box label="材質" name="schk0"/> - <check_box label="架構" name="schk1"/> - <check_box label="建模" name="schk3"/> - <check_box label="計畫活動" name="schk2"/> - <check_box label="建腳本" name="schk4"/> - <check_box label="定製角色" name="schk5"/> - <line_editor name="skills_edit"> - (載入中...) - </line_editor> - <text name="Languages:"> - 語言: - </text> - <line_editor name="languages_edit"> - (載入中...) - </line_editor> -</panel> diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 89481add29..3a7c7d7f46 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -49,7 +49,7 @@ viewer_dir = os.path.dirname(__file__) # indra.util.llmanifest under their system Python! sys.path.insert(0, os.path.join(viewer_dir, os.pardir, "lib", "python")) from indra.util.llmanifest import LLManifest, main, path_ancestors, CHANNEL_VENDOR_BASE, RELEASE_CHANNEL, ManifestError, MissingError -from llbase import llsd +import llsd class ViewerManifest(LLManifest): def is_packaging_viewer(self): @@ -790,27 +790,15 @@ class WindowsManifest(ViewerManifest): # Check two paths, one for Program Files, and one for Program Files (x86). # Yay 64bit windows. - for ProgramFiles in 'ProgramFiles', 'ProgramFiles(x86)': - NSIS_path = os.path.expandvars(r'${%s}\NSIS\makensis.exe' % ProgramFiles) - if os.path.exists(NSIS_path): - break - installer_created=False - nsis_attempts=3 - nsis_retry_wait=15 - for attempt in range(nsis_attempts): - try: - self.run_command([NSIS_path, '/V2', self.dst_path_of(tempfile)]) - except ManifestError as err: - if attempt+1 < nsis_attempts: - print("nsis failed, waiting %d seconds before retrying" % nsis_retry_wait, file=sys.stderr) - time.sleep(nsis_retry_wait) - nsis_retry_wait*=2 - else: - # NSIS worked! Done! - break - else: - print("Maximum nsis attempts exceeded; giving up", file=sys.stderr) - raise + nsis_path = "makensis.exe" + for program_files in '${programfiles}', '${programfiles(x86)}': + for nesis_path in 'NSIS', 'NSIS\\Unicode': + possible_path = os.path.expandvars(f"{program_files}\\{nesis_path}\\makensis.exe") + if os.path.exists(possible_path): + nsis_path = possible_path + break + + self.run_command([possible_path, '/V2', self.dst_path_of(tempfile)]) self.sign(installer_file) self.created_path(self.dst_path_of(installer_file)) diff --git a/scripts/metrics/slp_conv.py b/scripts/metrics/slp_conv.py index 27f922b74a..25f9a8c060 100644 --- a/scripts/metrics/slp_conv.py +++ b/scripts/metrics/slp_conv.py @@ -29,7 +29,7 @@ Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA $/LicenseInfo$ """ -from llbase import llsd +import llsd import argparse parser = argparse.ArgumentParser( diff --git a/scripts/metrics/viewer_asset_logs.py b/scripts/metrics/viewer_asset_logs.py index 0365936188..bd996dff79 100644 --- a/scripts/metrics/viewer_asset_logs.py +++ b/scripts/metrics/viewer_asset_logs.py @@ -28,7 +28,7 @@ $/LicenseInfo$ import argparse from lxml import etree -from llbase import llsd +import llsd def get_metrics_record(infiles): for filename in args.infiles: diff --git a/scripts/metrics/viewerstats.py b/scripts/metrics/viewerstats.py index 7e19539e15..e64343329c 100755 --- a/scripts/metrics/viewerstats.py +++ b/scripts/metrics/viewerstats.py @@ -31,7 +31,7 @@ import numpy as np import pandas as pd import json from collections import Counter, defaultdict -from llbase import llsd +import llsd import io import re import os |