Merge branch 'master' of https://vcs.firestormviewer.org/phoenix-firestorm
commit
2de048052b
|
|
@ -225,38 +225,72 @@ U64 LLMemory::getCurrentRSS()
|
|||
}
|
||||
|
||||
#elif defined(LL_LINUX)
|
||||
// <FS:Beq> Linux RSS appears to have drifted from the implementation below.
|
||||
// U64 LLMemory::getCurrentRSS()
|
||||
// {
|
||||
// static const char statPath[] = "/proc/self/stat";
|
||||
// LLFILE *fp = LLFile::fopen(statPath, "r");
|
||||
// U64 rss = 0;
|
||||
|
||||
U64 LLMemory::getCurrentRSS()
|
||||
{
|
||||
static const char statPath[] = "/proc/self/stat";
|
||||
LLFILE *fp = LLFile::fopen(statPath, "r");
|
||||
U64 rss = 0;
|
||||
// if (fp == NULL)
|
||||
// {
|
||||
// LL_WARNS() << "couldn't open " << statPath << LL_ENDL;
|
||||
// return 0;
|
||||
// }
|
||||
|
||||
if (fp == NULL)
|
||||
{
|
||||
LL_WARNS() << "couldn't open " << statPath << LL_ENDL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Eee-yew! See Documentation/filesystems/proc.txt in your
|
||||
// nearest friendly kernel tree for details.
|
||||
// // Eee-yew! See Documentation/filesystems/proc.txt in your
|
||||
// // nearest friendly kernel tree for details.
|
||||
|
||||
{
|
||||
int ret = fscanf(fp, "%*d (%*[^)]) %*c %*d %*d %*d %*d %*d %*d %*d "
|
||||
"%*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %Lu",
|
||||
&rss);
|
||||
if (ret != 1)
|
||||
{
|
||||
LL_WARNS() << "couldn't parse contents of " << statPath << LL_ENDL;
|
||||
rss = 0;
|
||||
}
|
||||
}
|
||||
// {
|
||||
// int ret = fscanf(fp, "%*d (%*[^)]) %*c %*d %*d %*d %*d %*d %*d %*d "
|
||||
// "%*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %Lu",
|
||||
// &rss);
|
||||
// if (ret != 1)
|
||||
// {
|
||||
// LL_WARNS() << "couldn't parse contents of " << statPath << LL_ENDL;
|
||||
// rss = 0;
|
||||
// }
|
||||
// }
|
||||
|
||||
fclose(fp);
|
||||
// fclose(fp);
|
||||
|
||||
return rss;
|
||||
// return rss;
|
||||
// }
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <filesystem>
|
||||
#include <unistd.h>
|
||||
|
||||
// return the RSS in bytes. This value is converted to kilobytes implicitly elsewhere.
|
||||
U64 LLMemory::getCurrentRSS() {
|
||||
namespace fs = std::filesystem;
|
||||
|
||||
// Get the page size (static variable)
|
||||
static const long pageSize = sysconf(_SC_PAGESIZE);
|
||||
|
||||
// Open the /proc/self/statm file
|
||||
static const auto statmPath = fs::path("/proc/self/statm");
|
||||
std::ifstream statmFile(statmPath);
|
||||
if (!statmFile.is_open()) {
|
||||
return 0; // Return 0 if the file cannot be opened
|
||||
}
|
||||
|
||||
// Read the entire line from statm file
|
||||
std::string line;
|
||||
std::getline(statmFile, line);
|
||||
statmFile.close();
|
||||
|
||||
// Extract the values from the line
|
||||
std::istringstream iss(line);
|
||||
long size, rss, shared, text, lib, data, dt;
|
||||
iss >> size >> rss >> shared >> text >> lib >> data >> dt;
|
||||
|
||||
// Convert pages to bytes and return RSS
|
||||
return static_cast<U64>( rss * pageSize );
|
||||
}
|
||||
|
||||
// </FS:Beq>
|
||||
#else
|
||||
|
||||
U64 LLMemory::getCurrentRSS()
|
||||
|
|
|
|||
|
|
@ -311,7 +311,7 @@ bool LLThreadSafeQueue<ElementT, QueueT>::push_(lock_t& lock, T&& element)
|
|||
// <FS:Beq> Make thread queue capacity hangs visible
|
||||
// return false;
|
||||
{
|
||||
LL_WARNS("ThreadPool") << "Threadsafe queue push_(lockacquired) queue full " << mStorage.size() << " >= " << mCapacity << LL_ENDL;
|
||||
LL_WARNS_ONCE("ThreadPool") << "Threadsafe queue push_(lockacquired) queue full " << mStorage.size() << " >= " << mCapacity << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
|
|
|||
|
|
@ -947,7 +947,7 @@ std::ostream& operator<<(std::ostream &s, const LLAggregatePermissions &perm)
|
|||
}
|
||||
|
||||
// This converts a permissions mask into a string for debugging use.
|
||||
void mask_to_string(U32 mask, char* str)
|
||||
void mask_to_string(U32 mask, char* str, bool isOpenSim /*=false*/) // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
{
|
||||
if (mask & PERM_MOVE)
|
||||
{
|
||||
|
|
@ -990,23 +990,29 @@ void mask_to_string(U32 mask, char* str)
|
|||
str++;
|
||||
|
||||
// <FS:CR> OpenSim export permission
|
||||
if (mask & PERM_EXPORT)
|
||||
#ifdef OPENSIM
|
||||
// The export permission is only available in OpenSim.
|
||||
if (isOpenSim)
|
||||
{
|
||||
*str = 'X';
|
||||
if (mask & PERM_EXPORT)
|
||||
{
|
||||
*str = 'X';
|
||||
}
|
||||
else
|
||||
{
|
||||
*str = ' ';
|
||||
}
|
||||
str++;
|
||||
}
|
||||
else
|
||||
{
|
||||
*str = ' ';
|
||||
}
|
||||
str++;
|
||||
#endif
|
||||
// </FS:CR>
|
||||
*str = '\0';
|
||||
}
|
||||
|
||||
std::string mask_to_string(U32 mask)
|
||||
std::string mask_to_string(U32 mask, bool isOpenSim /*=false*/) // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
{
|
||||
char str[16];
|
||||
mask_to_string(mask, str);
|
||||
mask_to_string(mask, str, isOpenSim); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
return std::string(str);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,8 +35,8 @@
|
|||
|
||||
// prototypes
|
||||
class LLMessageSystem;
|
||||
extern void mask_to_string(U32 mask, char* str);
|
||||
extern std::string mask_to_string(U32 mask);
|
||||
extern void mask_to_string(U32 mask, char* str, bool isOpenSim=false);
|
||||
extern std::string mask_to_string(U32 mask, bool isOpenSim=false);
|
||||
template<class T> class LLMetaClassT;
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
|
|
|||
|
|
@ -9948,7 +9948,7 @@
|
|||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>64</integer>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>NoPreload</key>
|
||||
<map>
|
||||
|
|
@ -14282,7 +14282,7 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>2048</integer>
|
||||
<integer>4096</integer>
|
||||
</map>
|
||||
<key>SceneLoadLowMemoryBound</key>
|
||||
<map>
|
||||
|
|
@ -14293,7 +14293,7 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>750</integer>
|
||||
<integer>2048</integer>
|
||||
</map>
|
||||
<key>SceneLoadMinRadius</key>
|
||||
<map>
|
||||
|
|
|
|||
|
|
@ -174,6 +174,11 @@ FSAreaSearch::FSAreaSearch(const LLSD& key) :
|
|||
mRlvBehaviorCallbackConnection()
|
||||
{
|
||||
LLViewerRegion::sFSAreaSearchActive = true;
|
||||
if( LLViewerRegion* region = gAgent.getRegion() )
|
||||
{
|
||||
checkRegion();
|
||||
}
|
||||
|
||||
mFactoryMap["area_search_list_panel"] = LLCallbackMap(createPanelList, this);
|
||||
mFactoryMap["area_search_find_panel"] = LLCallbackMap(createPanelFind, this);
|
||||
mFactoryMap["area_search_filter_panel"] = LLCallbackMap(createPanelFilter, this);
|
||||
|
|
@ -185,11 +190,24 @@ FSAreaSearch::FSAreaSearch(const LLSD& key) :
|
|||
|
||||
mParcelChangedObserver = std::make_unique<FSParcelChangeObserver>(this);
|
||||
LLViewerParcelMgr::getInstance()->addObserver(mParcelChangedObserver.get());
|
||||
mRegionChangeConnection = gAgent.addRegionChangedCallback(boost::bind(&FSAreaSearch::checkRegion, this));
|
||||
}
|
||||
|
||||
FSAreaSearch::~FSAreaSearch()
|
||||
{
|
||||
LLViewerRegion::sFSAreaSearchActive = false;
|
||||
|
||||
// Tell the Simulator not to send us everything anymore
|
||||
// and revert to the regular "keyhole" frustum of interest
|
||||
// list updates.
|
||||
if( !LLApp::isExiting() )
|
||||
{
|
||||
if( LLViewerRegion* region = gAgent.getRegion() )
|
||||
{
|
||||
region->useFullUpdateInterestListMode(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (!gIdleCallbacks.deleteFunction(idle, this))
|
||||
{
|
||||
LL_WARNS("FSAreaSearch") << "FSAreaSearch::~FSAreaSearch() failed to delete callback" << LL_ENDL;
|
||||
|
|
@ -214,6 +232,11 @@ FSAreaSearch::~FSAreaSearch()
|
|||
LLViewerParcelMgr::getInstance()->removeObserver(mParcelChangedObserver.get());
|
||||
mParcelChangedObserver = nullptr;
|
||||
}
|
||||
|
||||
if (mRegionChangeConnection.connected())
|
||||
{
|
||||
mRegionChangeConnection.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
BOOL FSAreaSearch::postBuild()
|
||||
|
|
@ -320,24 +343,27 @@ void FSAreaSearch::updateRlvRestrictions(ERlvBehaviour behavior)
|
|||
|
||||
void FSAreaSearch::checkRegion()
|
||||
{
|
||||
if (mActive)
|
||||
{
|
||||
// Check if we changed region, and if we did, clear the object details cache.
|
||||
if (LLViewerRegion* region = gAgent.getRegion(); region && (region != mLastRegion))
|
||||
static LLViewerRegion *last_region = nullptr;
|
||||
// Check if we changed region, if so reset the interest list to full,
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if( region && (region != last_region) )
|
||||
{
|
||||
region->useFullUpdateInterestListMode(true, true); // we force this because we want a true count
|
||||
if ( mActive )
|
||||
{
|
||||
if (!mExcludeNeighborRegions)
|
||||
// and if we did and are active, clear the object details cache.
|
||||
if( !mExcludeNeighborRegions )
|
||||
{
|
||||
std::vector<LLViewerRegion*> uniqueRegions;
|
||||
region->getNeighboringRegions(uniqueRegions);
|
||||
if (std::find(uniqueRegions.begin(), uniqueRegions.end(), mLastRegion) != uniqueRegions.end())
|
||||
if( std::find( uniqueRegions.begin(), uniqueRegions.end(), last_region ) != uniqueRegions.end() )
|
||||
{
|
||||
// Crossed into a neighboring region, no need to clear everything.
|
||||
mLastRegion = region;
|
||||
last_region = region;
|
||||
return;
|
||||
}
|
||||
// else teleported into a new region
|
||||
}
|
||||
mLastRegion = region;
|
||||
mRequested = 0;
|
||||
mObjectDetails.clear();
|
||||
mRegionRequests.clear();
|
||||
|
|
@ -347,7 +373,14 @@ void FSAreaSearch::checkRegion()
|
|||
mPanelList->setAgentLastPosition(gAgent.getPositionGlobal());
|
||||
mRefresh = true;
|
||||
}
|
||||
if( last_region )
|
||||
{
|
||||
// we clear the old region status, because the instance may persist for us
|
||||
// but the region itself will have reset when we left.
|
||||
last_region->clearFullUpdateInterestList();
|
||||
}
|
||||
}
|
||||
last_region = region;
|
||||
}
|
||||
|
||||
void FSAreaSearch::refreshList(bool cache_clear)
|
||||
|
|
|
|||
|
|
@ -213,7 +213,8 @@ private:
|
|||
typedef std::map<LLUUID, boost::signals2::connection> name_cache_connection_map_t;
|
||||
name_cache_connection_map_t mNameCacheConnections;
|
||||
|
||||
LLViewerRegion* mLastRegion;
|
||||
boost::signals2::connection mRegionChangeConnection; // reset interest list verbosity after TP
|
||||
|
||||
|
||||
class FSParcelChangeObserver;
|
||||
friend class FSParcelChangeObserver;
|
||||
|
|
|
|||
|
|
@ -51,6 +51,27 @@
|
|||
|
||||
#include <iterator>
|
||||
|
||||
// <FS:Beq> Fix 360 capture missing objects after TP
|
||||
void LLFloater360Capture::checkRegion()
|
||||
{
|
||||
static LLViewerRegion *last_region = nullptr;
|
||||
// Check if we changed region, if so reset the interest list to full,
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if( region && (region != last_region) )
|
||||
{
|
||||
region->useFullUpdateInterestListMode(true, true);
|
||||
if( last_region )
|
||||
{
|
||||
// we clear the old region status, because the instance may persist for us
|
||||
// but the region itself will have reset when we left.
|
||||
last_region->clearFullUpdateInterestList();
|
||||
}
|
||||
}
|
||||
last_region = region;
|
||||
}
|
||||
|
||||
// </FS:Beq>
|
||||
|
||||
LLFloater360Capture::LLFloater360Capture(const LLSD& key)
|
||||
: LLFloater(key)
|
||||
{
|
||||
|
|
@ -66,10 +87,19 @@ LLFloater360Capture::LLFloater360Capture(const LLSD& key)
|
|||
// will take care of cleaning up for us.
|
||||
if (gSavedSettings.getBOOL("360CaptureUseInterestListCap"))
|
||||
{
|
||||
// <FS:Beq> Fix 360 capture missing objects after TP
|
||||
// send everything to us for as long as this floater is open
|
||||
const bool send_everything = true;
|
||||
changeInterestListMode(send_everything);
|
||||
// const bool send_everything = true;
|
||||
// changeInterestListMode(send_everything);
|
||||
// }
|
||||
// }
|
||||
if( LLViewerRegion* region = gAgent.getRegion() )
|
||||
{
|
||||
checkRegion();
|
||||
}
|
||||
}
|
||||
mRegionChangeConnection = gAgent.addRegionChangedCallback(boost::bind(&LLFloater360Capture::checkRegion, this));
|
||||
// </FS:Beq>
|
||||
}
|
||||
|
||||
LLFloater360Capture::~LLFloater360Capture()
|
||||
|
|
@ -86,9 +116,22 @@ LLFloater360Capture::~LLFloater360Capture()
|
|||
// list updates.
|
||||
if (!LLApp::isExiting() && gSavedSettings.getBOOL("360CaptureUseInterestListCap"))
|
||||
{
|
||||
const bool send_everything = false;
|
||||
changeInterestListMode(send_everything);
|
||||
// <FS:Beq> Fix 360 capture missing objects after TP
|
||||
// const bool send_everything = false;
|
||||
// changeInterestListMode(send_everything);
|
||||
// }
|
||||
// }
|
||||
|
||||
if( LLViewerRegion* region = gAgent.getRegion() )
|
||||
{
|
||||
region->useFullUpdateInterestListMode(false);
|
||||
}
|
||||
}
|
||||
if (mRegionChangeConnection.connected())
|
||||
{
|
||||
mRegionChangeConnection.disconnect();
|
||||
}
|
||||
// </FS:Beq>
|
||||
}
|
||||
|
||||
BOOL LLFloater360Capture::postBuild()
|
||||
|
|
@ -171,6 +214,8 @@ void LLFloater360Capture::onChooseQualityRadioGroup()
|
|||
setSourceImageSize();
|
||||
}
|
||||
|
||||
// <FS:Beq> Area search improvements - allow area search and 360 to coexist nicely.
|
||||
// Code moved to LLViewerRegion.cpp
|
||||
// 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
|
||||
|
|
@ -183,40 +228,40 @@ void LLFloater360Capture::onChooseQualityRadioGroup()
|
|||
// (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;
|
||||
// void LLFloater360Capture::changeInterestListMode(bool send_everything)
|
||||
// {
|
||||
// LLSD body;
|
||||
// if (send_everything)
|
||||
// {
|
||||
// body["mode"] = LLSD::String("360");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// body["mode"] = LLSD::String("default");
|
||||
// }
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
// 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;
|
||||
// }
|
||||
// }
|
||||
// </FS:Beq>
|
||||
|
||||
// There is is a setting (360CaptureSourceImageSize) that holds the size
|
||||
// (width == height since it's a square) of each of the 6 source snapshots.
|
||||
|
|
|
|||
|
|
@ -50,11 +50,14 @@ class LLFloater360Capture:
|
|||
void onOpen(const LLSD& key) override;
|
||||
void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) override;
|
||||
|
||||
void changeInterestListMode(bool send_everything);
|
||||
// void changeInterestListMode(bool send_everything); // <FS:Beq/> Area search improvements - code relocated to LLViewerRegion
|
||||
|
||||
const std::string getHTMLBaseFolder();
|
||||
void capture360Images();
|
||||
|
||||
// <FS:Beq/> make 360 work properly after region crossing/TP
|
||||
void checkRegion();
|
||||
boost::signals2::connection mRegionChangeConnection;
|
||||
// </FS:Beq>
|
||||
const std::string makeFullPathToJS(const std::string filename);
|
||||
void writeDataURLHeader(const std::string filename);
|
||||
void writeDataURLFooter(const std::string filename);
|
||||
|
|
|
|||
|
|
@ -453,32 +453,40 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
|
|||
}
|
||||
|
||||
std::string perm_string;
|
||||
|
||||
// <FS:Beq> remove misleading X for export when not in OpenSim
|
||||
bool isOpenSim {false};
|
||||
#ifdef OPENSIM
|
||||
if( LLGridManager::instance().isInOpenSim() )
|
||||
{
|
||||
isOpenSim = true;
|
||||
}
|
||||
#endif
|
||||
// </FS:Beq>
|
||||
perm_string = "B: ";
|
||||
perm_string += mask_to_string(base_mask);
|
||||
perm_string += mask_to_string(base_mask, isOpenSim); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChild<LLUICtrl>("BaseMaskDebug")->setValue(perm_string);
|
||||
getChildView("BaseMaskDebug")->setVisible(TRUE);
|
||||
|
||||
perm_string = "O: ";
|
||||
perm_string += mask_to_string(owner_mask);
|
||||
perm_string += mask_to_string(owner_mask, isOpenSim); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChild<LLUICtrl>("OwnerMaskDebug")->setValue(perm_string);
|
||||
getChildView("OwnerMaskDebug")->setVisible(TRUE);
|
||||
|
||||
perm_string = "G";
|
||||
perm_string += overwrite_group ? "*: " : ": ";
|
||||
perm_string += mask_to_string(group_mask);
|
||||
perm_string += mask_to_string(group_mask, isOpenSim); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChild<LLUICtrl>("GroupMaskDebug")->setValue(perm_string);
|
||||
getChildView("GroupMaskDebug")->setVisible(TRUE);
|
||||
|
||||
perm_string = "E";
|
||||
perm_string += overwrite_everyone ? "*: " : ": ";
|
||||
perm_string += mask_to_string(everyone_mask);
|
||||
perm_string += mask_to_string(everyone_mask, isOpenSim); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChild<LLUICtrl>("EveryoneMaskDebug")->setValue(perm_string);
|
||||
getChildView("EveryoneMaskDebug")->setVisible(TRUE);
|
||||
|
||||
perm_string = "N";
|
||||
perm_string += slam_perm ? "*: " : ": ";
|
||||
perm_string += mask_to_string(next_owner_mask);
|
||||
perm_string += mask_to_string(next_owner_mask, isOpenSim); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChild<LLUICtrl>("NextMaskDebug")->setValue(perm_string);
|
||||
getChildView("NextMaskDebug")->setVisible(TRUE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@
|
|||
#include "rlvcommon.h"
|
||||
// [/RLVa:KB]
|
||||
// <FS:CR> For OpenSim export permisson
|
||||
#include "llviewernetwork.h" // <FS:Beq/> for gridmanager
|
||||
#include "lfsimfeaturehandler.h"
|
||||
#include "llinventoryfunctions.h"
|
||||
|
||||
|
|
@ -630,7 +631,7 @@ void LLPanelPermissions::refresh()
|
|||
}
|
||||
else
|
||||
{
|
||||
// FIRE-777: allow batch edit for name and description
|
||||
// FIRE-777:<EFBFBD>allow batch edit for name and description
|
||||
// getChild<LLUICtrl>("Object Name")->setValue(LLStringUtil::null);
|
||||
// LineEditorObjectDesc->setText(LLStringUtil::null);
|
||||
if (keyboard_focus_view != LineEditorObjectName)
|
||||
|
|
@ -650,7 +651,7 @@ void LLPanelPermissions::refresh()
|
|||
|
||||
// figure out the contents of the name, description, & category
|
||||
BOOL edit_name_desc = FALSE;
|
||||
// FIRE-777: allow batch edit for name and description
|
||||
// FIRE-777:<EFBFBD>allow batch edit for name and description
|
||||
// if (is_one_object && objectp->permModify() && !objectp->isPermanentEnforced())
|
||||
if (objectp->permModify())
|
||||
// /FIRE-777
|
||||
|
|
@ -811,20 +812,28 @@ void LLPanelPermissions::refresh()
|
|||
&next_owner_mask_on,
|
||||
&next_owner_mask_off);
|
||||
|
||||
|
||||
if (gSavedSettings.getBOOL("DebugPermissions") )
|
||||
{
|
||||
// <FS:Beq> remove misleading X for export when not in OpenSim
|
||||
bool isOpenSim {false};
|
||||
#ifdef OPENSIM
|
||||
if( LLGridManager::instance().isInOpenSim() )
|
||||
{
|
||||
isOpenSim = true;
|
||||
}
|
||||
#endif
|
||||
// </FS:Beq>
|
||||
if (valid_base_perms)
|
||||
{
|
||||
getChild<LLUICtrl>("B:")->setValue("B: " + mask_to_string(base_mask_on));
|
||||
getChild<LLUICtrl>("B:")->setValue("B: " + mask_to_string(base_mask_on, isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("B:")->setVisible(TRUE);
|
||||
getChild<LLUICtrl>("O:")->setValue("O: " + mask_to_string(owner_mask_on));
|
||||
getChild<LLUICtrl>("O:")->setValue("O: " + mask_to_string(owner_mask_on, isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("O:")->setVisible(TRUE);
|
||||
getChild<LLUICtrl>("G:")->setValue("G: " + mask_to_string(group_mask_on));
|
||||
getChild<LLUICtrl>("G:")->setValue("G: " + mask_to_string(group_mask_on, isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("G:")->setVisible(TRUE);
|
||||
getChild<LLUICtrl>("E:")->setValue("E: " + mask_to_string(everyone_mask_on));
|
||||
getChild<LLUICtrl>("E:")->setValue("E: " + mask_to_string(everyone_mask_on, isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("E:")->setVisible(TRUE);
|
||||
getChild<LLUICtrl>("N:")->setValue("N: " + mask_to_string(next_owner_mask_on));
|
||||
getChild<LLUICtrl>("N:")->setValue("N: " + mask_to_string(next_owner_mask_on, isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("N:")->setVisible(TRUE);
|
||||
}
|
||||
else if(!root_selected)
|
||||
|
|
@ -834,15 +843,15 @@ void LLPanelPermissions::refresh()
|
|||
LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstNode();
|
||||
if (node && node->mValid)
|
||||
{
|
||||
getChild<LLUICtrl>("B:")->setValue("B: " + mask_to_string( node->mPermissions->getMaskBase()));
|
||||
getChild<LLUICtrl>("B:")->setValue("B: " + mask_to_string( node->mPermissions->getMaskBase(), isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("B:")->setVisible(TRUE);
|
||||
getChild<LLUICtrl>("O:")->setValue("O: " + mask_to_string(node->mPermissions->getMaskOwner()));
|
||||
getChild<LLUICtrl>("O:")->setValue("O: " + mask_to_string(node->mPermissions->getMaskOwner(), isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("O:")->setVisible(TRUE);
|
||||
getChild<LLUICtrl>("G:")->setValue("G: " + mask_to_string(node->mPermissions->getMaskGroup()));
|
||||
getChild<LLUICtrl>("G:")->setValue("G: " + mask_to_string(node->mPermissions->getMaskGroup(), isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("G:")->setVisible(TRUE);
|
||||
getChild<LLUICtrl>("E:")->setValue("E: " + mask_to_string(node->mPermissions->getMaskEveryone()));
|
||||
getChild<LLUICtrl>("E:")->setValue("E: " + mask_to_string(node->mPermissions->getMaskEveryone(), isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("E:")->setVisible(TRUE);
|
||||
getChild<LLUICtrl>("N:")->setValue("N: " + mask_to_string(node->mPermissions->getMaskNextOwner()));
|
||||
getChild<LLUICtrl>("N:")->setValue("N: " + mask_to_string(node->mPermissions->getMaskNextOwner(), isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("N:")->setVisible(TRUE);
|
||||
}
|
||||
}
|
||||
|
|
@ -864,7 +873,7 @@ void LLPanelPermissions::refresh()
|
|||
|
||||
//if (objectp->permExport()) flag_mask |= PERM_EXPORT; // <FS:CR> OpenSim export permissions
|
||||
|
||||
getChild<LLUICtrl>("F:")->setValue("F:" + mask_to_string(flag_mask));
|
||||
getChild<LLUICtrl>("F:")->setValue("F:" + mask_to_string(flag_mask, isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("F:")->setVisible( TRUE);
|
||||
}
|
||||
else
|
||||
|
|
@ -910,7 +919,7 @@ void LLPanelPermissions::refresh()
|
|||
getChildView("checkbox allow everyone copy")->setEnabled(FALSE);
|
||||
}
|
||||
|
||||
// <FS:CR> Opensim export permissions - Codeblock courtesy of Liru Færs.
|
||||
// <FS:CR> Opensim export permissions - Codeblock courtesy of Liru F<EFBFBD>rs.
|
||||
// Is this user allowed to toggle export on this object?
|
||||
if (LFSimFeatureHandler::instance().simSupportsExport()
|
||||
&& self_owned && mCreatorID == mOwnerID
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@
|
|||
#include "llexperiencecache.h"
|
||||
#include "lltrans.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "llviewernetwork.h" // <FS:Beq/> for gridmanager
|
||||
// [RLVa:KB] - Checked: RLVa-2.0.1
|
||||
#include "rlvactions.h"
|
||||
#include "rlvcommon.h"
|
||||
|
|
@ -610,27 +611,37 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
|
|||
|
||||
std::string perm_string;
|
||||
|
||||
// <FS:Beq> remove misleading X for export when not in OpenSim
|
||||
bool isOpenSim {false};
|
||||
#ifdef OPENSIM
|
||||
if( LLGridManager::instance().isInOpenSim() )
|
||||
{
|
||||
isOpenSim = true;
|
||||
}
|
||||
#endif
|
||||
// </FS:Beq>
|
||||
|
||||
perm_string = "B: ";
|
||||
perm_string += mask_to_string(base_mask);
|
||||
perm_string += mask_to_string(base_mask, isOpenSim); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChild<LLUICtrl>("BaseMaskDebug")->setValue(perm_string);
|
||||
|
||||
perm_string = "O: ";
|
||||
perm_string += mask_to_string(owner_mask);
|
||||
perm_string += mask_to_string(owner_mask, isOpenSim); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChild<LLUICtrl>("OwnerMaskDebug")->setValue(perm_string);
|
||||
|
||||
perm_string = "G";
|
||||
perm_string += overwrite_group ? "*: " : ": ";
|
||||
perm_string += mask_to_string(group_mask);
|
||||
perm_string += mask_to_string(group_mask, isOpenSim); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChild<LLUICtrl>("GroupMaskDebug")->setValue(perm_string);
|
||||
|
||||
perm_string = "E";
|
||||
perm_string += overwrite_everyone ? "*: " : ": ";
|
||||
perm_string += mask_to_string(everyone_mask);
|
||||
perm_string += mask_to_string(everyone_mask, isOpenSim); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChild<LLUICtrl>("EveryoneMaskDebug")->setValue(perm_string);
|
||||
|
||||
perm_string = "N";
|
||||
perm_string += slam_perm ? "*: " : ": ";
|
||||
perm_string += mask_to_string(next_owner_mask);
|
||||
perm_string += mask_to_string(next_owner_mask, isOpenSim); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChild<LLUICtrl>("NextMaskDebug")->setValue(perm_string);
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@
|
|||
#include "lltextbase.h"
|
||||
#include "llstring.h"
|
||||
#include "lltrans.h"
|
||||
#include "llviewernetwork.h" // <FS:Beq/> for gridmanager
|
||||
// [RLVa:KB] - Checked: 2010-08-25 (RLVa-1.2.2a)
|
||||
#include "llslurl.h"
|
||||
#include "rlvhandler.h"
|
||||
|
|
@ -638,21 +639,30 @@ void LLSidepanelTaskInfo::refresh()
|
|||
|
||||
if (gSavedSettings.getBOOL("DebugPermissions") )
|
||||
{
|
||||
// <FS:Beq> remove misleading X for export when not in OpenSim
|
||||
bool isOpenSim {false};
|
||||
#ifdef OPENSIM
|
||||
if( LLGridManager::instance().isInOpenSim() )
|
||||
{
|
||||
isOpenSim = true;
|
||||
}
|
||||
#endif
|
||||
// </FS:Beq>
|
||||
if (valid_base_perms)
|
||||
{
|
||||
getChild<LLUICtrl>("B:")->setValue("B: " + mask_to_string(base_mask_on));
|
||||
getChild<LLUICtrl>("B:")->setValue("B: " + mask_to_string(base_mask_on, isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("B:")->setVisible( TRUE);
|
||||
|
||||
getChild<LLUICtrl>("O:")->setValue("O: " + mask_to_string(owner_mask_on));
|
||||
getChild<LLUICtrl>("O:")->setValue("O: " + mask_to_string(owner_mask_on, isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("O:")->setVisible( TRUE);
|
||||
|
||||
getChild<LLUICtrl>("G:")->setValue("G: " + mask_to_string(group_mask_on));
|
||||
getChild<LLUICtrl>("G:")->setValue("G: " + mask_to_string(group_mask_on, isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("G:")->setVisible( TRUE);
|
||||
|
||||
getChild<LLUICtrl>("E:")->setValue("E: " + mask_to_string(everyone_mask_on));
|
||||
getChild<LLUICtrl>("E:")->setValue("E: " + mask_to_string(everyone_mask_on, isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("E:")->setVisible( TRUE);
|
||||
|
||||
getChild<LLUICtrl>("N:")->setValue("N: " + mask_to_string(next_owner_mask_on));
|
||||
getChild<LLUICtrl>("N:")->setValue("N: " + mask_to_string(next_owner_mask_on, isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("N:")->setVisible( TRUE);
|
||||
}
|
||||
|
||||
|
|
@ -662,7 +672,7 @@ void LLSidepanelTaskInfo::refresh()
|
|||
if (objectp->permCopy()) flag_mask |= PERM_COPY;
|
||||
if (objectp->permTransfer()) flag_mask |= PERM_TRANSFER;
|
||||
|
||||
getChild<LLUICtrl>("F:")->setValue("F:" + mask_to_string(flag_mask));
|
||||
getChild<LLUICtrl>("F:")->setValue("F:" + mask_to_string(flag_mask, isOpenSim)); // <FS:Beq/> remove misleading X for export when not in OpenSim
|
||||
getChildView("F:")->setVisible( TRUE);
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1480,49 +1480,85 @@ class LLAdvancedDumpRegionObjectCache : public view_listener_t
|
|||
}
|
||||
};
|
||||
|
||||
class LLAdvancedInterestListFullUpdate : public view_listener_t
|
||||
// <FS:Beq> Handle InterestListFullUpdate as a proper state toggle
|
||||
// class LLAdvancedInterestListFullUpdate : public view_listener_t
|
||||
// {
|
||||
// bool handleEvent(const LLSD& userdata)
|
||||
// {
|
||||
// LLSD request;
|
||||
// LLSD body;
|
||||
// static bool using_360 = false;
|
||||
|
||||
// if (using_360)
|
||||
// {
|
||||
// body["mode"] = LLSD::String("default");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// body["mode"] = LLSD::String("360");
|
||||
// }
|
||||
// using_360 = !using_360;
|
||||
|
||||
// if (gAgent.requestPostCapability("InterestList", body, [](const LLSD& response)
|
||||
// {
|
||||
// LL_INFOS("Int") <<
|
||||
// "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 LLAdvancedCheckInterestListFullUpdate : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
LLSD request;
|
||||
LLSD body;
|
||||
static bool using_360 = false;
|
||||
|
||||
if (using_360)
|
||||
LLViewerRegion* regionp = gAgent.getRegion();
|
||||
if (regionp)
|
||||
{
|
||||
body["mode"] = LLSD::String("default");
|
||||
bool current_value = ( regionp->mFullUpdateInUseCount > 0 );
|
||||
return current_value;
|
||||
}
|
||||
else
|
||||
{
|
||||
body["mode"] = LLSD::String("360");
|
||||
}
|
||||
using_360 = !using_360;
|
||||
|
||||
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;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
class LLAdvancedToggleInterestListFullUpdate : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
LLViewerRegion* regionp = gAgent.getRegion();
|
||||
if (regionp)
|
||||
{
|
||||
bool current_value = ( regionp->mFullUpdateInUseCount > 0 );
|
||||
if(current_value)
|
||||
{
|
||||
regionp->useFullUpdateInterestListMode(false, true);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
regionp->useFullUpdateInterestListMode(true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
// </FS:Beq>
|
||||
class LLAdvancedBuyCurrencyTest : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
|
|
@ -12236,7 +12272,12 @@ 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");
|
||||
|
||||
// <FS:Beq> Make InterestList a proper stateful toggle
|
||||
// view_listener_t::addMenu(new LLAdvancedInterestListFullUpdate(), "Advanced.InterestListFullUpdate");
|
||||
view_listener_t::addMenu(new LLAdvancedCheckInterestListFullUpdate(), "Advanced.CheckInterestListFullUpdate");
|
||||
view_listener_t::addMenu(new LLAdvancedToggleInterestListFullUpdate(), "Advanced.ToggleInterestListFullUpdate");
|
||||
// </FS:Beq>
|
||||
|
||||
// Advanced > UI
|
||||
commit.add("Advanced.WebBrowserTest", boost::bind(&handle_web_browser_test, _2)); // sigh! this one opens the MEDIA browser
|
||||
|
|
|
|||
|
|
@ -1728,6 +1728,7 @@ BOOL LLViewerRegion::isViewerCameraStatic()
|
|||
|
||||
void LLViewerRegion::killInvisibleObjects(F32 max_time)
|
||||
{
|
||||
if(sFSAreaSearchActive){ return; } // <FS:Beq/> FIRE-32668 Area Search improvements
|
||||
if(!sVOCacheCullingEnabled)
|
||||
{
|
||||
return;
|
||||
|
|
@ -3555,6 +3556,53 @@ void LLViewerRegion::logActiveCapabilities() const
|
|||
log_capabilities(mImpl->mCapabilities);
|
||||
}
|
||||
|
||||
// <FS:Beq> Area Search improvement
|
||||
void LLViewerRegion::useFullUpdateInterestListMode(bool send_everything, bool force_update)
|
||||
{
|
||||
static const char *FSLogTag = "InterestListMode";
|
||||
U32 previousCount = mFullUpdateInUseCount;
|
||||
LLSD body;
|
||||
LL_DEBUGS(FSLogTag) << "useFullUpdateInterestListMode" << " send_everything:" << send_everything << " inUse: " << mFullUpdateInUseCount << LL_ENDL;
|
||||
if (send_everything)
|
||||
{
|
||||
body["mode"] = LLSD::String("360");
|
||||
mFullUpdateInUseCount++; // we increment irrespective of the actual success as we're really just tracking the attempts.
|
||||
}
|
||||
else
|
||||
{
|
||||
if(mFullUpdateInUseCount > 0)
|
||||
{
|
||||
mFullUpdateInUseCount--; // see above.
|
||||
}
|
||||
if(force_update)
|
||||
{
|
||||
mFullUpdateInUseCount=0; // when we are forcing the off state then we need to clear the count to zero.
|
||||
}
|
||||
body["mode"] = LLSD::String("default");
|
||||
}
|
||||
|
||||
if( force_update || ( send_everything && mFullUpdateInUseCount == 1 ) || ( ( !send_everything ) && mFullUpdateInUseCount == 0 && previousCount != 0) ) // Only send if this is the first enable or last disable.
|
||||
{
|
||||
if (gAgent.requestPostCapability("InterestList", body,
|
||||
[](const LLSD &response)
|
||||
{
|
||||
LL_INFOS(FSLogTag) << "InterestList capability responded: \n"
|
||||
<< ll_pretty_print_sd(response) << LL_ENDL;
|
||||
}))
|
||||
{
|
||||
LL_INFOS(FSLogTag) << "Successfully posted an InterestList capability request with payload: \n"
|
||||
<< ll_pretty_print_sd(body) << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS(FSLogTag) << "Unable to post an InterestList capability request with payload: \n"
|
||||
<< ll_pretty_print_sd(body) << LL_ENDL;
|
||||
}
|
||||
}
|
||||
LL_DEBUGS(FSLogTag) << "useFullUpdateInterestListMode" << " (AFTER): inUse: " << mFullUpdateInUseCount << LL_ENDL;
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
LLSpatialPartition* LLViewerRegion::getSpatialPartition(U32 type)
|
||||
{
|
||||
if (type < mImpl->mObjectPartition.size() && type < PARTITION_VO_CACHE)
|
||||
|
|
|
|||
|
|
@ -351,7 +351,11 @@ public:
|
|||
bool dynamicPathfindingEnabled() const;
|
||||
|
||||
bool avatarHoverHeightEnabled() const;
|
||||
|
||||
// <FS:Beq> Area search improvements
|
||||
U32 mFullUpdateInUseCount {0};
|
||||
void clearFullUpdateInterestList(){ LL_DEBUGS("InterestListMode") << "Resetting for previous region" << LL_ENDL; mFullUpdateInUseCount = 0; };
|
||||
void useFullUpdateInterestListMode(bool full_update, bool force_update=false);
|
||||
// </FS:Beq>
|
||||
// </FS:CR>
|
||||
#ifdef OPENSIM
|
||||
std::set<std::string> getGods() { return mGodNames; };
|
||||
|
|
|
|||
|
|
@ -383,6 +383,21 @@ void LLVOCacheEntry::updateDebugSettings()
|
|||
LLMemory::updateMemoryInfo() ;
|
||||
U32 allocated_mem = LLMemory::getAllocatedMemKB().value();
|
||||
static const F32 KB_to_MB = 1.f / 1024.f;
|
||||
// <FS:Beq> FIRE-32688 Area search and other visibility issues
|
||||
// If this machine has limited RAM, then restore the LL defaults.
|
||||
// So long as we have at least 8GB of RAM, then we will use our values.
|
||||
if( LLMemory::getAvailableMemKB() * KB_to_MB < 8096 )
|
||||
{
|
||||
if( (U32)low_mem_bound_MB > 768 )
|
||||
{
|
||||
gSavedSettings.setU32("SceneLoadLowMemoryBound", 768);
|
||||
}
|
||||
if( (U32)high_mem_bound_MB > 2048 )
|
||||
{
|
||||
gSavedSettings.setU32("SceneLoadLowMemoryBound", 2048);
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
U32 clamped_memory = llclamp(allocated_mem * KB_to_MB, (F32) low_mem_bound_MB, (F32) high_mem_bound_MB);
|
||||
const F32 adjust_range = high_mem_bound_MB - low_mem_bound_MB;
|
||||
const F32 adjust_factor = (high_mem_bound_MB - clamped_memory) / adjust_range; // [0, 1]
|
||||
|
|
@ -404,7 +419,11 @@ void LLVOCacheEntry::updateDebugSettings()
|
|||
//the number of frames invisible objects stay in memory
|
||||
static LLCachedControl<U32> inv_obj_time(gSavedSettings,"NonvisibleObjectsInMemoryTime");
|
||||
static const U32 MIN_FRAMES = 10;
|
||||
static const U32 MAX_FRAMES = 64;
|
||||
// <FS:Beq> FIRE-32688 Area search and other visibility
|
||||
// static const U32 MAX_FRAMES = 64;
|
||||
// 64 frames for many users now is about a second. Having this as the longest we wait before purging leads to excessively aggressive purging.
|
||||
static const U32 MAX_FRAMES = 1024;
|
||||
// </FS:Beq>
|
||||
const U32 clamped_frames = inv_obj_time ? llclamp((U32) inv_obj_time, MIN_FRAMES, MAX_FRAMES) : MAX_FRAMES; // [10, 64], with zero => 64
|
||||
sMinFrameRange = MIN_FRAMES + ((clamped_frames - MIN_FRAMES) * adjust_factor);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_translation_settings" title="Übersetzungseinstellungen für Chats">
|
||||
<string name="bing_api_key_not_verified">
|
||||
Bing-AppID nicht verifiziert. Versuchen Sie es erneut.
|
||||
<string name="azure_api_key_not_verified">
|
||||
Azure-Service-Identifikator nicht verifiziert. Versuchen Sie es erneut.
|
||||
</string>
|
||||
<string name="google_api_key_not_verified">
|
||||
Google-API-Schlüssel nicht verifiziert. Versuchen Sie es erneut.
|
||||
</string>
|
||||
<string name="bing_api_key_verified">
|
||||
Bing-AppID verifiziert.
|
||||
<string name="deepl_api_key_not_verified">
|
||||
DeepL-Authentifizierungsschlüssel nicht verifiziert. Versuchen Sie es erneut.
|
||||
</string>
|
||||
<string name="azure_api_key_verified">
|
||||
Azure-Service-Identifikator verifiziert.
|
||||
</string>
|
||||
<string name="google_api_key_verified">
|
||||
Google-API-Schlüssel verifiziert.
|
||||
</string>
|
||||
<string name="deepl_api_key_verified">
|
||||
DeepL-Authentifizierungsschlüssel verifiziert.
|
||||
</string>
|
||||
<check_box label="Maschinenübersetzung beim Chatten aktivieren" name="translate_chat_checkbox"/>
|
||||
<text name="translate_language_label">
|
||||
Chat übersetzen in:
|
||||
|
|
@ -39,19 +45,43 @@
|
|||
Übersetzungsservice auswählen:
|
||||
</text>
|
||||
<radio_group name="translation_service_rg">
|
||||
<radio_item initial_value="bing" label="Bing Translator" name="bing"/>
|
||||
<radio_item initial_value="google" label="Google Translate" name="google"/>
|
||||
<radio_item label="Azure Translator" name="bing"/>
|
||||
<radio_item label="Google Translate" name="google"/>
|
||||
<radio_item label="DeepL Translator" name="deepl"/>
|
||||
</radio_group>
|
||||
<text name="bing_api_key_label">
|
||||
Bing-[http://www.bing.com/developers/createapp.aspx AppID]:
|
||||
<text name="google_links_text">
|
||||
[https://learn.microsoft.com/de-de/azure/cognitive-services/translator/create-translator-resource Einrichtung]
|
||||
</text>
|
||||
<button label="Verifizieren" name="verify_bing_api_key_btn"/>
|
||||
<text name="azure_api_endoint_label">
|
||||
Endpunkt:
|
||||
</text>
|
||||
<text name="azure_api_key_label">
|
||||
Azure-Key:
|
||||
</text>
|
||||
<line_editor default_text="API-Key eingeben & "Verifizieren"" name="azure_api_key"/>
|
||||
<text name="azure_api_region_label">
|
||||
Region:
|
||||
</text>
|
||||
<line_editor default_text="Optional für globale Dienste" name="azure_api_region"/>
|
||||
<button label="Verifizieren" name="verify_azure_api_key_btn"/>
|
||||
<text name="google_api_key_label">
|
||||
Google-[http://code.google.com/apis/language/translate/v2/getting_started.html#auth API-Schlüssel]:
|
||||
Google-[http://code.google.com/apis/language/translate/v2/getting_started.html#auth API-Key]:
|
||||
</text>
|
||||
<line_editor default_text="API-Key eingeben & "Verifizieren"" name="google_api_key"/>
|
||||
<button label="Verifizieren" name="verify_google_api_key_btn"/>
|
||||
<text name="google_links_text">
|
||||
[http://code.google.com/apis/language/translate/v2/pricing.html Pricing] | [https://code.google.com/apis/console Statistik]
|
||||
[http://code.google.com/apis/language/translate/v2/pricing.html Preise] | [https://code.google.com/apis/console Statistik]
|
||||
</text>
|
||||
<text name="deepl_api_domain_label">
|
||||
Endpunkt:
|
||||
</text>
|
||||
<text name="deepl_api_key_label">
|
||||
DeepL-API-Key:
|
||||
</text>
|
||||
<line_editor default_text="API-Key eingeben & "Verifizieren"" name="deepl_api_key"/>
|
||||
<button label="Verifizieren" name="verify_deepl_api_key_btn"/>
|
||||
<text name="deepl_links_text">
|
||||
[https://www.deepl.com/pro/select-country?cta=header-prices Preise]
|
||||
</text>
|
||||
<button label="OK" name="ok_btn"/>
|
||||
<button label="Abbrechen" name="cancel_btn"/>
|
||||
|
|
|
|||
|
|
@ -553,7 +553,7 @@
|
|||
<menu_item_check label="Sonnen-Override für Sim" name="Sim Sun Override"/>
|
||||
<menu_item_check label="Festgelegtes Wetter" name="Fixed Weather"/>
|
||||
<menu_item_call label="Regionsobjekt-Cache ausgeben" name="Dump Region Object Cache"/>
|
||||
<menu_item_call label="Interest-Liste: Vollständiges Update" name="Interest List: Full Update"/>
|
||||
<menu_item_check label="Interest-Liste: Vollständiges Update" name="Interest List: Full Update"/>
|
||||
<menu_item_call label="Simulator-Features ausgeben" name="DumpSimFeaturesToChat"/>
|
||||
</menu>
|
||||
<menu label="UI" name="UI">
|
||||
|
|
|
|||
|
|
@ -4756,13 +4756,15 @@
|
|||
function="Advanced.DumpRegionObjectCache" />
|
||||
</menu_item_call>
|
||||
|
||||
<menu_item_call
|
||||
<menu_item_check
|
||||
label="Interest List: Full Update"
|
||||
name="Interest List: Full Update"
|
||||
shortcut="alt|shift|I">
|
||||
<menu_item_call.on_click
|
||||
function="Advanced.InterestListFullUpdate" />
|
||||
</menu_item_call>
|
||||
<menu_item_check.on_check
|
||||
function="Advanced.CheckInterestListFullUpdate" />
|
||||
<menu_item_check.on_click
|
||||
function="Advanced.ToggleInterestListFullUpdate" />
|
||||
</menu_item_check>
|
||||
<menu_item_call
|
||||
label="Dump Simulator Features to Nearby Chat"
|
||||
name="DumpSimFeaturesToChat">
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_translation_settings" title="Paramètres de traduction automatique">
|
||||
<string name="bing_api_key_not_verified">appID Bing incorrect. Veuillez réessayer.</string>
|
||||
<string name="google_api_key_not_verified">Google API key incorrecte. Veuillez réessayer.</string>
|
||||
<string name="bing_api_key_verified">Bing appID vérifié.</string>
|
||||
<string name="google_api_key_verified">Google API key vérifiée.</string>
|
||||
<string name="azure_api_key_not_verified">Identifiant du service Azure non vérifié. Statut : [STATUS]. Veuillez vérifier vos paramètres et réessayer.</string>
|
||||
<string name="google_api_key_not_verified">Clé API Google non vérifiée. Statut : [STATUS]. Veuillez vérifier votre clé et réessayer.</string>
|
||||
<string name="deepl_api_key_not_verified">Clé DeepL Auth Key non vérifiée. Statut : [STATUS]. Veuillez vérifier votre clé et réessayer.</string>
|
||||
<string name="azure_api_key_verified">Identifiant du service Azure vérifié.</string>
|
||||
<string name="google_api_key_verified">Clé Google API vérifiée.</string>
|
||||
<string name="deepl_api_key_verified">Clé d'API DeepL vérifiée.</string>
|
||||
<check_box label="Activer la traduction automatique pendant que je discute" name="translate_chat_checkbox"/>
|
||||
<text name="translate_language_label">Traduire le chat en :</text>
|
||||
<combo_box name="translate_language_combo">
|
||||
|
|
@ -27,16 +29,31 @@
|
|||
</combo_box>
|
||||
<text name="tip">Sélectionnez le service de traduction automatique :</text>
|
||||
<radio_group name="translation_service_rg">
|
||||
<radio_item label="Bing Translator" name="bing"/>
|
||||
<radio_item label="Azure Translator" name="azure"/>
|
||||
<radio_item label="Google Translate" name="google"/>
|
||||
<radio_item label="DeepL Translate" name="deepl"/>
|
||||
</radio_group>
|
||||
<text name="bing_api_key_label">Bing [http://www.bing.com/developers/createapp.aspx AppID] :</text>
|
||||
<line_editor default_text="Saisissez votre Bing AppID" name="bing_api_key"/>
|
||||
<button label="Vérification" name="verify_bing_api_key_btn"/>
|
||||
<text name="google_links_text">
|
||||
[https://learn.microsoft.com/en-us/azure/cognitive-services/translator/create-translator-resource Guide]</text>
|
||||
<text name="azure_api_endoint_label">Point final :</text>
|
||||
<text name="azure_api_key_label">Clé Azure :</text>
|
||||
<line_editor default_text="Entrez la clé du traducteur et cliquez sur "Vérifier"" name="azure_api_key"/>
|
||||
<text name="azure_api_region_label">Région :</text>
|
||||
<line_editor default_text="Peut être laissé vide pour les services globaux" name="azure_api_region"/>
|
||||
<button label="Vérifier" name="verify_azure_api_key_btn"/>
|
||||
<text name="google_api_key_label">Google [http://code.google.com/apis/language/translate/v2/getting_started.html#auth API key] :</text>
|
||||
<line_editor default_text="Saisissez votre Google API key" name="google_api_key"/>
|
||||
<button label="Vérification" name="verify_google_api_key_btn"/>
|
||||
<text name="google_links_text">[http://code.google.com/apis/language/translate/v2/pricing.html Prix] | [https://code.google.com/apis/console Stats] </text>
|
||||
<text name="deepl_api_domain_label">Point final :</text>
|
||||
<combo_box name="deepl_api_domain_combo">
|
||||
<combo_box.item label="DeepL gratuit" name="global"/>
|
||||
<combo_box.item label="DeepL Pro" name="api-apc"/>
|
||||
</combo_box>
|
||||
<text name="deepl_api_key_label">Clé d’API DeepL :</text>
|
||||
<line_editor default_text="Entrez la clé de l'API DeepL et cliquez sur "Vérifier"" name="deepl_api_key"/>
|
||||
<button label="Vérifier" name="verify_deepl_api_key_btn"/>
|
||||
<text name="deepl_links_text">[https://www.deepl.com/pro/select-country?cta=header-prices Tarifs]</text>
|
||||
<button label="OK" name="ok_btn"/>
|
||||
<button label="Annuler" name="cancel_btn"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -494,7 +494,7 @@
|
|||
<menu_item_check label="Ignorer les paramètres du soleil de la sim" name="Sim Sun Override"/>
|
||||
<menu_item_check label="Météo fixe" name="Fixed Weather"/>
|
||||
<menu_item_call label="Vidage de cache d'objets de la région" name="Dump Region Object Cache"/>
|
||||
<menu_item_call label="Liste d'intérêt : Mise à jour complète" name="Interest List: Full Update"/>
|
||||
<menu_item_check label="Liste d'intérêt : Mise à jour complète" name="Interest List: Full Update"/>
|
||||
<menu_item_call label="Envoie les fonctionnalités du simulateur dans le chat local" name="DumpSimFeaturesToChat"/>
|
||||
</menu>
|
||||
<menu label="Interface" name="UI">
|
||||
|
|
|
|||
|
|
@ -2597,6 +2597,9 @@ Voulez-vous les jouer ?
|
|||
Votre corbeille déborde. Cela risque de provoquer des problèmes lors de la connexion.
|
||||
<usetemplate name="okcancelbuttons" notext="Je viderai la corbeille plus tard" yestext="Vérifier le dossier Corbeille"/>
|
||||
</notification>
|
||||
<notification name="InventoryLimitReachedAIS">
|
||||
Votre inventaire rencontre des problèmes. Veuillez contacter le support de votre grille.
|
||||
</notification>
|
||||
<notification name="ConfirmClearBrowserCache">
|
||||
Êtes-vous certain de vouloir supprimer l'historique de vos visites et recherches ?
|
||||
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
|
||||
|
|
|
|||
|
|
@ -9,12 +9,26 @@
|
|||
<string name="status_unknown">
|
||||
Inconnu
|
||||
</string>
|
||||
<string name="BadgeBeta" value="Bêta-testeur originel" />
|
||||
<string name="BadgeBetaLifetime" value="Membre Beta à vie" />
|
||||
<string name="BadgeLifetime" value="Membre à vie" />
|
||||
<string name="BadgeLinden" value="Employé(e) de Linden Lab" />
|
||||
<string name="BadgePremiumLifetime" value="Premium à vie" />
|
||||
<string name="BadgePremiumPlusLifetime" value="Premium Plus à vie" />
|
||||
<string name="BadgeTeam" value="membre de [APP_NAME]" />
|
||||
<string name="payment_update_link_url">
|
||||
http://www.secondlife.com/account/billing.php?lang=fr
|
||||
</string>
|
||||
<string name="partner_edit_link_url">
|
||||
http://www.secondlife.com/account/partners.php?lang=fr
|
||||
</string>
|
||||
<string name="no_partner_text" value="Aucun"/>
|
||||
<string name="no_group_text" value="Aucun"/>
|
||||
<string name="FSDev" value="Développeur"/>
|
||||
<string name="FSSupp" value="Assistance"/>
|
||||
<string name="FSQualityAssurance" value="Suivi des anomalies"/>
|
||||
<string name="FSGW" value="Portail"/>
|
||||
<string name="texture_picker_label" value="Photo du profil" />
|
||||
<text name="name_label" value="Nom :"/>
|
||||
<panel name="name_holder">
|
||||
<text_editor name="complete_name" value="(en cours de chargement...)"/>
|
||||
|
|
@ -37,6 +51,11 @@
|
|||
<text name="label" value="Date de naissance:"/>
|
||||
<text_editor name="user_age" value="(en cours de chargement...)"/>
|
||||
<text name="label2" value="Compte :"/>
|
||||
<layout_stack name="badgepositioner">
|
||||
<layout_panel name="badge_layout">
|
||||
<icon name="badge_icon" tool_tip="Employé(e) Linden Lab" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<text name="partner_label" value="Partenaire :"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
|
|
|||
|
|
@ -542,7 +542,7 @@
|
|||
<menu_item_check label="Domyślne ustawienia otoczenia Regionu" name="Sim Sun Override"/>
|
||||
<menu_item_check label="Ustalona pogoda" name="Fixed Weather"/>
|
||||
<menu_item_call label="Zrzut buforu pamięci obiektów regionu" name="Dump Region Object Cache"/>
|
||||
<menu_item_call label="Interest List: Pełne odświeżenie" name="Interest List: Full Update"/>
|
||||
<menu_item_check label="Interest List: Pełne odświeżenie" name="Interest List: Full Update"/>
|
||||
<menu_item_call label="Zrzut właściwości symulatora do czatu w pobliżu" name="DumpSimFeaturesToChat"/>
|
||||
</menu>
|
||||
<menu label="Interfejs" name="UI">
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
<string name="BadgeLinden" value="Pracownik Linden Lab" />
|
||||
<string name="BadgePremiumLifetime" value="Dożywotni uczestnik Premium" />
|
||||
<string name="BadgePremiumPlusLifetime" value="Dożywotni uczestnik Premium Plus" />
|
||||
<string name="BadgeTeam" value="Zespół [APP_NAME]" />
|
||||
<string name="BadgeTeam" value="Zespół [APP_NAME]a" />
|
||||
<string name="no_partner_text" value="Brak" />
|
||||
<string name="no_group_text" value="Brak" />
|
||||
<string name="FSDev" value=" Programista" />
|
||||
|
|
|
|||
|
|
@ -1,58 +1,90 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="floater_translation_settings" title="Настройки перевода чата">
|
||||
<string name="bing_api_key_not_verified">
|
||||
Bing appID не подтвержден. Повторите попытку.
|
||||
<string name="azure_api_key_not_verified">
|
||||
Идентификатор службы Azure не подтвержден. Статус: [STATUS]. Проверьте ваши настройки и повторите попытку.
|
||||
</string>
|
||||
<string name="google_api_key_not_verified">
|
||||
Ключ Google API не подтвержден. Повторите попытку.
|
||||
Ключ API Google не подтвержден. Статус: [STATUS]. Проверьте свой ключ и повторите попытку.
|
||||
</string>
|
||||
<string name="bing_api_key_verified">
|
||||
Bing appID подтвержден.
|
||||
<string name="deepl_api_key_not_verified">
|
||||
Ключ API DeepL не подтвержден. Статус: [STATUS]. Проверьте свой ключ и повторите попытку.
|
||||
</string>
|
||||
<string name="azure_api_key_verified">
|
||||
Идентификатор службы Azure подтвержден.
|
||||
</string>
|
||||
<string name="google_api_key_verified">
|
||||
Ключ Google API подтвержден.
|
||||
Ключ API Google подтвержден.
|
||||
</string>
|
||||
<check_box label="Включить машинный перевод при чате" name="translate_chat_checkbox"/>
|
||||
<string name="deepl_api_key_verified">
|
||||
Ключ API DeepL подтвержден.
|
||||
</string>
|
||||
<check_box label="Включить машинный перевод во время чата" name="translate_chat_checkbox"/>
|
||||
<text name="translate_language_label">
|
||||
Переводить чат на:
|
||||
</text>
|
||||
<combo_box name="translate_language_combo">
|
||||
<combo_box.item label="язык системы" name="System Default Language"/>
|
||||
<combo_box.item label="английский" name="English"/>
|
||||
<combo_box.item label="датский" name="Danish"/>
|
||||
<combo_box.item label="немецкий" name="German"/>
|
||||
<combo_box.item label="испанский" name="Spanish"/>
|
||||
<combo_box.item label="французский" name="French"/>
|
||||
<combo_box.item label="итальянский" name="Italian"/>
|
||||
<combo_box.item label="венгерский" name="Hungarian"/>
|
||||
<combo_box.item label="нидерландский" name="Dutch"/>
|
||||
<combo_box.item label="польский" name="Polish"/>
|
||||
<combo_box.item label="португальский" name="Portugese"/>
|
||||
<combo_box.item label="русский" name="Russian"/>
|
||||
<combo_box.item label="турецкий" name="Turkish"/>
|
||||
<combo_box.item label="украинский" name="Ukrainian"/>
|
||||
<combo_box.item label="китайский" name="Chinese"/>
|
||||
<combo_box.item label="японский" name="Japanese"/>
|
||||
<combo_box.item label="корейский" name="Korean"/>
|
||||
<combo_box.item label="По умолчанию системы" name="System Default Language"/>
|
||||
<combo_box.item label="Английский" name="English"/>
|
||||
<combo_box.item label="Dansk (Датский)" name="Danish"/>
|
||||
<combo_box.item label="Deutsch (Немецкий)" name="German"/>
|
||||
<combo_box.item label="Español (Испанский)" name="Spanish"/>
|
||||
<combo_box.item label="Français (Французский)" name="French"/>
|
||||
<combo_box.item label="Italiano (Итальянский)" name="Italian"/>
|
||||
<combo_box.item label="Magyar (Венгерский)" name="Hungarian"/>
|
||||
<combo_box.item label="Nederlands (Голландский)" name="Dutch"/>
|
||||
<combo_box.item label="Polski (Польский)" name="Polish"/>
|
||||
<combo_box.item label="Português (Португальский)" name="Portugese"/>
|
||||
<combo_box.item label="Русский (Русский)" name="Russian"/>
|
||||
<combo_box.item label="Türkçe (Турецкий)" name="Turkish"/>
|
||||
<combo_box.item label="Українська (Украинский)" name="Ukrainian"/>
|
||||
<combo_box.item label="中文 (正體) (Китайский)" name="Chinese"/>
|
||||
<combo_box.item label="日本語 (Японский)" name="Japanese"/>
|
||||
<combo_box.item label="한국어 (Корейский)" name="Korean"/>
|
||||
</combo_box>
|
||||
<text name="tip">
|
||||
Выберите сервис перевода:
|
||||
</text>
|
||||
<radio_group name="translation_service_rg">
|
||||
<radio_item initial_value="bing" label="Bing Translator" name="bing"/>
|
||||
<radio_item initial_value="google" label="Google Translate" name="google"/>
|
||||
<radio_item label="Переводчик Azure" name="azure" />
|
||||
<radio_item label="Переводчик Google" name="google"/>
|
||||
<radio_item label="Переводчик DeepL" name="deepl"/>
|
||||
</radio_group>
|
||||
<text name="bing_api_key_label">
|
||||
Bing [http://www.bing.com/developers/createapp.aspx AppID]:
|
||||
<text name="google_links_text">
|
||||
[https://learn.microsoft.com/en-us/azure/cognitive-services/translator/create-translator-resource Установка]
|
||||
</text>
|
||||
<button label="Подтвердить" name="verify_bing_api_key_btn"/>
|
||||
<text name="azure_api_endoint_label">
|
||||
Конечная точка:
|
||||
</text>
|
||||
<text name="azure_api_key_label">
|
||||
Ключ Azure:
|
||||
</text>
|
||||
<line_editor default_text="Введите ключ Переводчика и нажмите "Проверить"" name="azure_api_key"/>
|
||||
<text name="azure_api_region_label">
|
||||
Регион:
|
||||
</text>
|
||||
<line_editor default_text="Можно оставить пустым для глобальных служб" name="azure_api_region"/>
|
||||
<button label="Проверить" name="verify_azure_api_key_btn"/>
|
||||
<text name="google_api_key_label">
|
||||
Google [http://code.google.com/apis/language/translate/v2/getting_started.html#auth Ключ API]:
|
||||
</text>
|
||||
<button label="Подтвердить" name="verify_google_api_key_btn"/>
|
||||
<line_editor default_text="Введите ключ API Google и нажмите "Проверить"" name="google_api_key"/>
|
||||
<button label="Проверить" name="verify_google_api_key_btn"/>
|
||||
<text name="google_links_text">
|
||||
[http://code.google.com/apis/language/translate/v2/pricing.html Цены] | [https://code.google.com/apis/console Статистика]
|
||||
</text>
|
||||
<text name="deepl_api_domain_label">
|
||||
Конечная точка:
|
||||
</text>
|
||||
<combo_box name="deepl_api_domain_combo">
|
||||
<combo_box.item label="DeepL Free" name="global"/>
|
||||
<combo_box.item label="DeepL Pro" name="api-apc"/>
|
||||
</combo_box>
|
||||
<text name="deepl_api_key_label">
|
||||
API DeepL ключ:
|
||||
</text>
|
||||
<line_editor default_text="Введите ключ API DeepL и нажмите "Проверить"" name="deepl_api_key"/>
|
||||
<button label="Проверить" name="verify_deepl_api_key_btn"/>
|
||||
<text name="deepl_links_text">[https://www.deepl.com/pro/select-country?cta=header-prices Цены]</text>
|
||||
<button label="OK" name="ok_btn"/>
|
||||
<button label="Отмена" name="cancel_btn"/>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -583,6 +583,7 @@
|
|||
<menu_item_check label="Перекрытие солнца в симуляторе" name="Sim Sun Override"/>
|
||||
<menu_item_check label="Фиксированная погода" name="Fixed Weather"/>
|
||||
<menu_item_call label="Дамп кэша объектов региона" name="Dump Region Object Cache"/>
|
||||
<menu_item_check label="Список интересов: полное обновление" name="Interest List: Full Update"/>
|
||||
<menu_item_call label="Дамп возможностей симулятора в общий чат" name="DumpSimFeaturesToChat"/>
|
||||
</menu>
|
||||
<menu label="Интерфейс пользователя" name="UI">
|
||||
|
|
|
|||
|
|
@ -2536,6 +2536,9 @@
|
|||
Ваша корзина переполнена. Это может вызвать проблемы при входе.
|
||||
<usetemplate name="okcancelbuttons" notext="Я очищу корзину позже" yestext="Очистить корзину сейчас"/>
|
||||
</notification>
|
||||
<notification name="InventoryLimitReachedAIS">
|
||||
В вашем инвентаре возникли проблемы. Пожалуйста, обратитесь в службу поддержки вашей сетки.
|
||||
</notification>
|
||||
<notification name="ConfirmClearBrowserCache">
|
||||
Вы действительно хотите удалить журнал своих перемещений, веб-страниц и поиска?
|
||||
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="Да"/>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,13 @@
|
|||
<string name="status_online">В сети</string>
|
||||
<string name="status_offline">Не в сети</string>
|
||||
<string name="status_unknown">Неизвестно</string>
|
||||
<string name="BadgeBeta" value="Оригинальный бета-тестер" />
|
||||
<string name="BadgeBetaLifetime" value="Участник бета-версии пожизненно" />
|
||||
<string name="BadgeLifetime" value="Член пожизненно" />
|
||||
<string name="BadgeLinden" value="Сотрудник лаборатории Линден" />
|
||||
<string name="BadgePremiumLifetime" value="Премиум пожизненно" />
|
||||
<string name="BadgePremiumPlusLifetime" value="Премиум Плюс пожизненно" />
|
||||
<string name="BadgeTeam" value="Член [APP_NAME]" />
|
||||
<string name="no_partner_text" value="Никто"/>
|
||||
<string name="no_group_text" value="Никто"/>
|
||||
<string name="FSDev" value=" Разработчик"/>
|
||||
|
|
@ -31,6 +38,11 @@
|
|||
<text name="label" value="Возраст:"/>
|
||||
<text_editor name="user_age" value="(загрузка...)"/>
|
||||
<text name="label2" value="Аккаунт:"/>
|
||||
<layout_stack name="badgepositioner">
|
||||
<layout_panel name="badge_layout">
|
||||
<icon name="badge_icon" tool_tip="Сотрудник лаборатории Линден"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<text name="partner_label" value="Партнер:"/>
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
<string name="BadgeLinden" value="Pracownik Linden Lab" />
|
||||
<string name="BadgePremiumLifetime" value="Dożywotni uczestnik Premium" />
|
||||
<string name="BadgePremiumPlusLifetime" value="Dożywotni uczestnik Premium Plus" />
|
||||
<string name="BadgeTeam" value="Zespół [APP_NAME]" />
|
||||
<string name="BadgeTeam" value="Zespół [APP_NAME]a" />
|
||||
<string name="no_partner_text" value="Brak" />
|
||||
<string name="no_group_text" value="Brak" />
|
||||
<string name="age_format">
|
||||
|
|
|
|||
|
|
@ -3,6 +3,13 @@
|
|||
<string name="status_online">В сети</string>
|
||||
<string name="status_offline">Не в сети</string>
|
||||
<string name="status_unknown">Неизвестно</string>
|
||||
<string name="BadgeBeta" value="Оригинальный бета-тестер" />
|
||||
<string name="BadgeBetaLifetime" value="Участник бета-версии пожизненно" />
|
||||
<string name="BadgeLifetime" value="Член пожизненно" />
|
||||
<string name="BadgeLinden" value="Сотрудник лаборатории Линден" />
|
||||
<string name="BadgePremiumLifetime" value="Премиум пожизненно" />
|
||||
<string name="BadgePremiumPlusLifetime" value="Премиум Плюс пожизненно" />
|
||||
<string name="BadgeTeam" value="Член [APP_NAME]" />
|
||||
<string name="no_partner_text" value="Нет" />
|
||||
<string name="no_group_text" value="Нет" />
|
||||
<string name="age_format">
|
||||
|
|
|
|||
Loading…
Reference in New Issue