diff --git a/indra/llinventory/llparcelflags.h b/indra/llinventory/llparcelflags.h
index 122468e91..343044727 100644
--- a/indra/llinventory/llparcelflags.h
+++ b/indra/llinventory/llparcelflags.h
@@ -59,6 +59,7 @@ const U32 PF_URL_WEB_PAGE = 1 << 19; // The "media URL" is an HTML page
const U32 PF_URL_RAW_HTML = 1 << 20; // The "media URL" is a raw HTML string like
Foo
const U32 PF_RESTRICT_PUSHOBJECT = 1 << 21; // Restrict push object to either on agent or on scripts owned by parcel owner
const U32 PF_DENY_ANONYMOUS = 1 << 22; // Deny all non identified/transacted accounts
+const U32 PF_GAMING = 1 << 23; // Denotes a gaming parcel on certain grids
// const U32 PF_DENY_IDENTIFIED = 1 << 23; // Deny identified accounts
// const U32 PF_DENY_TRANSACTED = 1 << 24; // Deny identified accounts
const U32 PF_ALLOW_GROUP_SCRIPTS = 1 << 25; // Allow scripts owned by group
diff --git a/indra/llmessage/aihttptimeoutpolicy.cpp b/indra/llmessage/aihttptimeoutpolicy.cpp
index a45b990e9..f5f9f4428 100644
--- a/indra/llmessage/aihttptimeoutpolicy.cpp
+++ b/indra/llmessage/aihttptimeoutpolicy.cpp
@@ -844,7 +844,12 @@ P(environmentRequestResponder);
P(estateChangeInfoResponder);
P(eventPollResponder);
P(fetchInventoryResponder);
+P(fetchScriptLimitsAttachmentInfoResponder);
+P(fetchScriptLimitsRegionDetailsResponder);
+P(fetchScriptLimitsRegionInfoResponder);
+P(fetchScriptLimitsRegionSummaryResponder);
P(fnPtrResponder);
+P2(gamingDataReceived, transfer_18s);
P2(groupMemberDataResponder, transfer_300s);
P2(groupProposalBallotResponder, transfer_300s);
P(homeLocationResponder);
diff --git a/indra/llmessage/llqueryflags.h b/indra/llmessage/llqueryflags.h
index 14a62de04..311c90000 100644
--- a/indra/llmessage/llqueryflags.h
+++ b/indra/llmessage/llqueryflags.h
@@ -66,6 +66,8 @@ const U32 DFQ_INC_NEW_VIEWER = (DFQ_INC_PG | DFQ_INC_MATURE | DFQ_INC_ADULT); //
const U32 DFQ_ADULT_SIMS_ONLY = 0x1 << 27;
+const U32 DFQ_FILTER_GAMING = 0x1 << 28;
+
// Sell Type flags
const U32 ST_AUCTION = 0x1 << 1;
const U32 ST_NEWBIE = 0x1 << 2;
diff --git a/indra/llmessage/llregionflags.h b/indra/llmessage/llregionflags.h
index 1cf940918..8d51207a9 100644
--- a/indra/llmessage/llregionflags.h
+++ b/indra/llmessage/llregionflags.h
@@ -51,6 +51,8 @@ const U64 REGION_FLAGS_BLOCK_LAND_RESELL = (1 << 7);
// All content wiped once per night
const U64 REGION_FLAGS_SANDBOX = (1 << 8);
+const U64 REGION_FLAGS_GAMING = (1 << 10); // Denotes a gaming region on certain grids
+const U64 REGION_FLAGS_HIDE_FROM_SEARCH = (1 << 11); // Hides region from search on certain grids
const U64 REGION_FLAGS_SKIP_COLLISIONS = (1 << 12); // Pin all non agent rigid bodies
const U64 REGION_FLAGS_SKIP_SCRIPTS = (1 << 13);
const U64 REGION_FLAGS_SKIP_PHYSICS = (1 << 14); // Skip all physics
@@ -96,6 +98,18 @@ const U64 REGION_FLAGS_ESTATE_MASK = REGION_FLAGS_EXTERNALLY_VISIBLE
| REGION_FLAGS_DENY_ANONYMOUS
| REGION_FLAGS_DENY_AGEUNVERIFIED;
+// 'Gaming' flags
+const U32 REGION_GAMING_PRESENT = (1 << 0);
+const U32 REGION_GAMING_HIDE_PARCEL = (1 << 1);
+const U32 REGION_GAMING_HIDE_FIND_ALL = (1 << 2);
+const U32 REGION_GAMING_HIDE_FIND_CLASSIFIEDS = (1 << 3);
+const U32 REGION_GAMING_HIDE_FIND_EVENTS = (1 << 4);
+const U32 REGION_GAMING_HIDE_FIND_LAND = (1 << 5);
+const U32 REGION_GAMING_HIDE_FIND_SIMS = (1 << 6);
+const U32 REGION_GAMING_HIDE_FIND_GROUPS = (1 << 7);
+const U32 REGION_GAMING_HIDE_FIND_ALL_CLASSIC = (1 << 8);
+const U32 REGION_GAMING_HIDE_GOD_FLOATER = (1 << 9);
+
inline BOOL is_prelude( U64 flags )
{
// definition of prelude does not depend on fixed-sun
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index cce9eb172..5c74462f1 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -1945,7 +1945,7 @@ void LLMenuGL::parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory
{
// SUBMENU
LLMenuGL *submenu = (LLMenuGL*)LLMenuGL::fromXML(child, parent, factory);
- appendMenu(submenu);
+ appendMenu(submenu, 0);
if (LLMenuGL::sMenuContainer != NULL)
{
submenu->updateParent(LLMenuGL::sMenuContainer);
@@ -2214,18 +2214,27 @@ void LLMenuGL::parseChildXML(LLXMLNodePtr child, LLView *parent, LLUICtrlFactory
}
}
+// This wrapper is needed because the virtual linkage causes errors if default parameters are used
bool LLMenuGL::addChild(LLView* view, S32 tab_group)
+{
+ return addChild(view, 0, tab_group);
+}
+
+bool LLMenuGL::addChild(LLView* view, LLView* insert_before, S32 tab_group)
{
if (LLMenuGL* menup = dynamic_cast(view))
{
lldebugs << "Adding menu " << menup->getName() << " to " << getName() << llendl;
- appendMenu(menup);
+ if (!insert_before)
+ appendMenu(menup);
+ else
+ appendMenu(menup, insert_before);
return true;
}
else if (LLMenuItemGL* itemp = dynamic_cast(view))
{
lldebugs << "Adding " << itemp->getName() << " to " << getName() << llendl;
- append(itemp);
+ append(itemp, insert_before);
return true;
}
lldebugs << "Error adding unknown child '"<<(view ? view->getName() : std::string("NULL")) << "' to " << getName() << llendl;
@@ -2712,10 +2721,29 @@ BOOL LLMenuGL::handleJumpKey(KEY key)
// Add the menu item to this menu.
+// This wrapper is needed because the virtual linkage causes errors if default parameters are used
BOOL LLMenuGL::append( LLMenuItemGL* item )
+{
+ return append(item, 0);
+}
+
+BOOL LLMenuGL::append(LLMenuItemGL* item, LLView* insert_before)
{
if (!item) return FALSE;
+ if (!insert_before)
+ {
mItems.push_back( item );
+ }
+ else
+ {
+ item_list_t::iterator i;
+
+ for (i = mItems.begin(); i != mItems.end(); ++i)
+ if (*i == insert_before)
+ break;
+ mItems.insert(i, item);
+ }
+
LLUICtrl::addChild(item);
needsArrange();
return TRUE;
@@ -2729,7 +2757,13 @@ BOOL LLMenuGL::addSeparator()
}
// add a menu - this will create a cascading menu
+// This wrapper is needed because the virtual linkage causes errors if default parameters are used
BOOL LLMenuGL::appendMenu( LLMenuGL* menu )
+{
+ return appendMenu(menu, 0);
+}
+
+BOOL LLMenuGL::appendMenu(LLMenuGL* menu, LLView* insert_before)
{
if( menu == this )
{
@@ -2741,7 +2775,7 @@ BOOL LLMenuGL::appendMenu( LLMenuGL* menu )
LLMenuItemBranchGL* branch = NULL;
branch = new LLMenuItemBranchGL( menu->getName(), menu->getLabel(), menu->getHandle() );
branch->setJumpKey(menu->getJumpKey());
- success &= append( branch );
+ success &= append( branch, insert_before );
// Inherit colors
menu->setBackgroundColor( mBackgroundColor );
diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h
index 581fcc1a5..07effab8d 100644
--- a/indra/llui/llmenugl.h
+++ b/indra/llui/llmenugl.h
@@ -476,6 +476,8 @@ public:
/*virtual*/ void removeChild( LLView* ctrl);
/*virtual*/ BOOL postBuild();
+ bool addChild(LLView* view, LLView* insert_before, S32 tab_group = 0);
+
virtual BOOL handleAcceleratorKey(KEY key, MASK mask);
LLMenuGL* getChildMenuByName(const std::string& name, BOOL recurse) const;
@@ -572,11 +574,14 @@ public:
protected:
void createSpilloverBranch();
void cleanupSpilloverBranch();
+
// Add the menu item to this menu.
virtual BOOL append( LLMenuItemGL* item );
+ BOOL append(LLMenuItemGL* item, LLView* insert_before);
// add a menu - this will create a cascading menu
virtual BOOL appendMenu( LLMenuGL* menu );
+ BOOL appendMenu(LLMenuGL* menu, LLView* insert_before);
// TODO: create accessor methods for these?
typedef std::list< LLMenuItemGL* > item_list_t;
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index c068de93a..a102126d9 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -244,6 +244,7 @@ set(viewer_SOURCE_FILES
llfloaterregioninfo.cpp
llfloaterreporter.cpp
llfloaterscriptdebug.cpp
+ llfloaterscriptlimits.cpp
llfloatersearchreplace.cpp
llfloatersellland.cpp
llfloatersettingsdebug.cpp
@@ -745,6 +746,7 @@ set(viewer_HEADER_FILES
llfloaterregioninfo.h
llfloaterreporter.h
llfloaterscriptdebug.h
+ llfloaterscriptlimits.h
llfloatersearchreplace.h
llfloatersellland.h
llfloatersettingsdebug.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index aef7f4e17..de8f149ce 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5768,6 +5768,84 @@ This should be as low as possible, but too low may break functionality
Value
10.0
+ FilterGamingSearchAll
+
+ Comment
+ Filter results flagged gaming in everything search
+ Persist
+ 1
+ HideFromEditor
+ 1
+ Type
+ Boolean
+ Value
+ 1
+
+ FilterGamingClassifieds
+
+ Comment
+ Filter results flagged gaming in classifieds search
+ Persist
+ 1
+ HideFromEditor
+ 1
+ Type
+ Boolean
+ Value
+ 1
+
+ FilterGamingEvents
+
+ Comment
+ Filter results flagged gaming in event search
+ Persist
+ 1
+ HideFromEditor
+ 1
+ Type
+ Boolean
+ Value
+ 1
+
+ FilterGamingGroups
+
+ Comment
+ Filter results flagged gaming in groups search
+ Persist
+ 1
+ HideFromEditor
+ 1
+ Type
+ Boolean
+ Value
+ 1
+
+ FilterGamingLand
+
+ Comment
+ Filter results flagged gaming in land search
+ Persist
+ 1
+ HideFromEditor
+ 1
+ Type
+ Boolean
+ Value
+ 1
+
+ FilterGamingSims
+
+ Comment
+ Filter results flagged gaming in sim search
+ Persist
+ 1
+ HideFromEditor
+ 1
+ Type
+ Boolean
+ Value
+ 1
+
FilterItemsPerFrame
Comment
@@ -7072,6 +7150,22 @@ This should be as low as possible, but too low may break functionality
0
+ FloaterScriptLimitsRect
+
+ Comment
+ Rectangle for Script Limits window
+ Persist
+ 1
+ Type
+ Rect
+ Value
+
+ 0
+ 500
+ 480
+ 0
+
+
FloaterSnapshotRect
Comment
diff --git a/indra/newview/hippogridmanager.cpp b/indra/newview/hippogridmanager.cpp
index 674206e79..18663b175 100644
--- a/indra/newview/hippogridmanager.cpp
+++ b/indra/newview/hippogridmanager.cpp
@@ -357,7 +357,7 @@ std::string HippoGridInfo::getSearchUrl(SearchType ty, bool is_web) const
}
else if (ty == SEARCH_ALL_TEMPLATE)
{
- return "lang=[LANG]&mat=[MATURITY]&t=[TEEN]®ion=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION]";
+ return "lang=[LANG]&mat=[MATURITY]&t=[TEEN]®ion=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION]&dice=[DICE]";
}
else
{
@@ -400,7 +400,7 @@ std::string HippoGridInfo::getSearchUrl(SearchType ty, bool is_web) const
}
else if (ty == SEARCH_ALL_TEMPLATE)
{
- return "lang=[LANG]&m=[MATURITY]&t=[TEEN]®ion=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION]";
+ return "lang=[LANG]&m=[MATURITY]&t=[TEEN]®ion=[REGION]&x=[X]&y=[Y]&z=[Z]&session=[SESSION]&dice=[DICE]";
}
else
{
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 8f412d0b8..2539c8f91 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -4459,9 +4459,9 @@ void LLAgent::sendAgentSetAppearance()
body_size.mV[VX] += x_off;
body_size.mV[VY] += y_off;
- body_size.mV[VZ] += z_off; // Offset by RLVa, but not overridden.
// [RLVa:KB] - Checked: 2010-10-11 (RLVa-1.2.0e) | Added: RLVa-1.2.0e
- body_size.mV[VZ] += RlvSettings::getAvatarOffsetZ();
+ F32 rlvz_off = RlvSettings::getAvatarOffsetZ();
+ body_size.mV[VZ] += fabs(rlvz_off) ? rlvz_off : z_off;
// [/RLVa:KB]
msg->addVector3Fast(_PREHASH_Size, body_size);
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index dd7255e21..cf0d063eb 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -243,7 +243,6 @@ const F32 DEFAULT_AFK_TIMEOUT = 5.f * 60.f; // time with no input before user fl
F32 gSimLastTime; // Used in LLAppViewer::init and send_stats()
F32 gSimFrames;
-BOOL gAllowIdleAFK = FALSE;
BOOL gAllowTapTapHoldRun = TRUE;
BOOL gShowObjectUpdates = FALSE;
BOOL gUseQuickTime = TRUE;
@@ -397,15 +396,16 @@ LLAppViewer::LLUpdaterInfo *LLAppViewer::sUpdaterInfo = NULL ;
void idle_afk_check()
{
+ static const LLCachedControl allow_idk_afk("AllowIdleAFK");
// check idle timers
static const LLCachedControl afk_timeout("AFKTimeout",0.f);
- //if (gAllowIdleAFK && (gAwayTriggerTimer.getElapsedTimeF32() > gSavedSettings.getF32("AFKTimeout")))
+ //if (allow_idk_afk && (gAwayTriggerTimer.getElapsedTimeF32() > gSavedSettings.getF32("AFKTimeout")))
// [RLVa:KB] - Checked: 2009-10-19 (RLVa-1.1.0g) | Added: RLVa-1.1.0g
#ifdef RLV_EXTENSION_CMD_ALLOWIDLE
- if ( (gAllowIdleAFK || gRlvHandler.hasBehaviour(RLV_BHVR_ALLOWIDLE)) &&
+ if ( (allow_idk_afk || gRlvHandler.hasBehaviour(RLV_BHVR_ALLOWIDLE)) &&
(gAwayTriggerTimer.getElapsedTimeF32() > afk_timeout) && (afk_timeout > 0))
#else
- if (gAllowIdleAFK && (gAwayTriggerTimer.getElapsedTimeF32() > afk_timeout) && (afk_timeout > 0))
+ if (allow_idk_afk && (gAwayTriggerTimer.getElapsedTimeF32() > afk_timeout) && (afk_timeout > 0))
#endif // RLV_EXTENSION_CMD_ALLOWIDLE
// [/RLVa:KB]
{
@@ -504,7 +504,6 @@ static void settings_to_globals()
gAgent.setHideGroupTitle(gSavedSettings.getBOOL("RenderHideGroupTitle"));
gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc");
- gAllowIdleAFK = gSavedSettings.getBOOL("AllowIdleAFK");
gAllowTapTapHoldRun = gSavedSettings.getBOOL("AllowTapTapHoldRun");
gShowObjectUpdates = gSavedSettings.getBOOL("ShowObjectUpdates");
LLWorldMapView::sMapScale = llmax(.1f,gSavedSettings.getF32("MapScale"));
@@ -2675,7 +2674,6 @@ void LLAppViewer::cleanupSavedSettings()
gSavedSettings.setBOOL("DebugWindowProc", gDebugWindowProc);
- gSavedSettings.setBOOL("AllowIdleAFK", gAllowIdleAFK);
gSavedSettings.setBOOL("AllowTapTapHoldRun", gAllowTapTapHoldRun);
gSavedSettings.setBOOL("ShowObjectUpdates", gShowObjectUpdates);
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 681cb505d..6facb1266 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -275,7 +275,6 @@ const S32 AGENT_UPDATES_PER_SECOND = 10;
extern LLSD gDebugInfo;
-extern BOOL gAllowIdleAFK;
extern BOOL gAllowTapTapHoldRun;
extern BOOL gShowObjectUpdates;
diff --git a/indra/newview/llfloateravatarlist.cpp b/indra/newview/llfloateravatarlist.cpp
index f410bd615..39c82ab77 100644
--- a/indra/newview/llfloateravatarlist.cpp
+++ b/indra/newview/llfloateravatarlist.cpp
@@ -876,7 +876,7 @@ void LLFloaterAvatarList::refreshAvatarList()
LLColor4 name_color = sDefaultListText;
//Lindens are always more Linden than your friend, make that take precedence
- if(LLMuteList::getInstance()->isLinden(av_name))
+ if(LLMuteList::getInstance()->isLinden(av_id))
{
static const LLCachedControl ascent_linden_color("AscentLindenColor",LLColor4(0.f,0.f,1.f,1.f));
name_color = ascent_linden_color;
diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp
index 4ab128f1b..873108ee0 100644
--- a/indra/newview/llfloatergodtools.cpp
+++ b/indra/newview/llfloatergodtools.cpp
@@ -461,6 +461,10 @@ BOOL LLPanelRegionTools::postBuild()
getChild("block terraform")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
getChild("allow transfer")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
getChild("is sandbox")->setCommitCallback( boost::bind(&LLPanelRegionTools::onChangeAnything, this));
+ getChild("is gaming")->setVisible((gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_GOD_FLOATER));
+ getChild("is gaming")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
+ getChild("hide from search")->setVisible(!gHippoGridManager->getConnectedGrid()->isSecondLife());
+ getChild("hide from search")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this));
childSetAction("Bake Terrain", boost::bind(&LLPanelRegionTools::onBakeTerrain, this));
childSetAction("Revert Terrain", boost::bind(&LLPanelRegionTools::onRevertTerrain, this));
@@ -670,6 +674,14 @@ U64 LLPanelRegionTools::getRegionFlags() const
{
flags |= REGION_FLAGS_SANDBOX;
}
+ if (getChild("is gaming")->getValue().asBoolean())
+ {
+ flags |= REGION_FLAGS_GAMING;
+ }
+ if (getChild("hide from search")->getValue().asBoolean())
+ {
+ flags |= REGION_FLAGS_HIDE_FROM_SEARCH;
+ }
return flags;
}
@@ -708,6 +720,14 @@ U64 LLPanelRegionTools::getRegionFlagsMask() const
{
flags &= ~REGION_FLAGS_SANDBOX;
}
+ if (!getChild("is gaming")->getValue().asBoolean())
+ {
+ flags &= ~REGION_FLAGS_GAMING;
+ }
+ if (!getChild("hide from search")->getValue().asBoolean())
+ {
+ flags &= ~REGION_FLAGS_HIDE_FROM_SEARCH;
+ }
return flags;
}
@@ -766,6 +786,8 @@ void LLPanelRegionTools::setCheckFlags(U64 flags)
getChild("block terraform")->setValue(flags & REGION_FLAGS_BLOCK_TERRAFORM ? TRUE : FALSE);
getChild("block dwell")->setValue(flags & REGION_FLAGS_BLOCK_DWELL ? TRUE : FALSE);
getChild("is sandbox")->setValue(flags & REGION_FLAGS_SANDBOX ? TRUE : FALSE );
+ getChild("is gaming")->setValue(flags & REGION_FLAGS_GAMING ? true : false);
+ getChild("hide from search")->setValue(flags & REGION_FLAGS_HIDE_FROM_SEARCH ? true : false);
}
void LLPanelRegionTools::setBillableFactor(F32 billable_factor)
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 37d795a49..154acc65e 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -48,15 +48,16 @@
#include "llagent.h"
#include "llagentaccess.h"
#include "llavatarconstants.h" //For new Online check - HgB
-#include "llfloateravatarpicker.h"
#include "llbutton.h"
#include "llcheckboxctrl.h"
#include "llradiogroup.h"
#include "llcombobox.h"
#include "llfloaterauction.h"
#include "llfloateravatarinfo.h"
+#include "llfloateravatarpicker.h"
#include "llfloatergroups.h"
#include "llfloatergroupinfo.h"
+#include "llfloaterscriptlimits.h"
#include "lllineeditor.h"
#include "llnamelistctrl.h"
#include "llnotify.h"
@@ -221,8 +222,6 @@ LLFloaterLand::LLFloaterLand(const LLSD& seed)
{
LLCallbackMap::map_t factory_map;
factory_map["land_general_panel"] = LLCallbackMap(createPanelLandGeneral, this);
-
-
factory_map["land_covenant_panel"] = LLCallbackMap(createPanelLandCovenant, this);
factory_map["land_objects_panel"] = LLCallbackMap(createPanelLandObjects, this);
factory_map["land_options_panel"] = LLCallbackMap(createPanelLandOptions, this);
@@ -344,16 +343,15 @@ LLPanelLandGeneral::LLPanelLandGeneral(LLParcelSelectionHandle& parcel)
BOOL LLPanelLandGeneral::postBuild()
{
mEditName = getChild("Name");
- mEditName->setCommitCallback(onCommitAny);
- childSetPrevalidate("Name", LLLineEditor::prevalidatePrintableNotPipe);
- childSetUserData("Name", this);
+ mEditName->setCommitCallback(onCommitAny, this);
+ getChild("Name")->setPrevalidate(LLLineEditor::prevalidatePrintableNotPipe);
mEditDesc = getChild("Description");
mEditDesc->setCommitOnFocusLost(TRUE);
- mEditDesc->setCommitCallback(onCommitAny);
- //childSetPrevalidate("Description", LLLineEditor::prevalidatePrintableNotPipe); Making Dummy View -HgB
- childSetUserData("Description", this);
-
+ mEditDesc->setCommitCallback(onCommitAny, this);
+ // No prevalidate function - historically the prevalidate function was broken,
+ // allowing residents to put in characters like U+2661 WHITE HEART SUIT, so
+ // preserve that ability.
mTextSalePending = getChild("SalePending");
mTextOwnerLabel = getChild("Owner:");
@@ -363,7 +361,7 @@ BOOL LLPanelLandGeneral::postBuild()
mLandType = getChild("LandTypeText");
mBtnProfile = getChild("Profile...");
- mBtnProfile->setClickedCallback(onClickProfile, this);
+ mBtnProfile->setClickedCallback(boost::bind(&LLPanelLandGeneral::onClickProfile, this));
mTextGroupLabel = getChild("Group:");
@@ -371,7 +369,7 @@ BOOL LLPanelLandGeneral::postBuild()
mBtnSetGroup = getChild("Set...");
- mBtnSetGroup->setClickedCallback(onClickSetGroup, this);
+ mBtnSetGroup->setCommitCallback(boost::bind(&LLPanelLandGeneral::onClickSetGroup, this));
getChild("group_profile")->setClickedCallback(onClickInfoGroup, this);
@@ -416,10 +414,30 @@ BOOL LLPanelLandGeneral::postBuild()
mTextDwell = getChild("DwellText");
-
mBtnBuyLand = getChild("Buy Land...");
mBtnBuyLand->setClickedCallback(onClickBuyLand, (void*)&BUY_PERSONAL_LAND);
+
+ // note: on region change this will not be re checked, should not matter on Agni as
+ // 99% of the time all regions will return the same caps. In case of an erroneous setting
+ // to enabled the floater will just throw an error when trying to get it's cap
+ std::string url = gAgent.getRegion()->getCapability("LandResources");
+ if (!url.empty())
+ {
+ mBtnScriptLimits = getChild("Scripts...");
+ if(mBtnScriptLimits)
+ {
+ mBtnScriptLimits->setClickedCallback(onClickScriptLimits, this);
+ }
+ }
+ else
+ {
+ mBtnScriptLimits = getChild("Scripts...");
+ if(mBtnScriptLimits)
+ {
+ mBtnScriptLimits->setVisible(false);
+ }
+ }
mBtnBuyGroupLand = getChild("Buy For Group...");
mBtnBuyGroupLand->setClickedCallback(onClickBuyLand, (void*)&BUY_GROUP_LAND);
@@ -508,6 +526,7 @@ void LLPanelLandGeneral::refresh()
mTextDwell->setText(LLStringUtil::null);
mBtnBuyLand->setEnabled(FALSE);
+ mBtnScriptLimits->setEnabled(FALSE);
mBtnBuyGroupLand->setEnabled(FALSE);
mBtnReleaseLand->setEnabled(FALSE);
mBtnReclaimLand->setEnabled(FALSE);
@@ -723,6 +742,7 @@ void LLPanelLandGeneral::refresh()
mBtnBuyLand->setEnabled(
LLViewerParcelMgr::getInstance()->canAgentBuyParcel(parcel, false));
+ mBtnScriptLimits->setEnabled(true);
mBtnBuyGroupLand->setEnabled(
LLViewerParcelMgr::getInstance()->canAgentBuyParcel(parcel, true));
@@ -741,7 +761,7 @@ void LLPanelLandGeneral::refresh()
mBtnReleaseLand->setEnabled( can_release );
}
- BOOL use_pass = parcel->getParcelFlag(PF_USE_PASS_LIST) && !LLViewerParcelMgr::getInstance()->isCollisionBanned();;
+ BOOL use_pass = parcel->getOwnerID()!= gAgent.getID() && parcel->getParcelFlag(PF_USE_PASS_LIST) && !LLViewerParcelMgr::getInstance()->isCollisionBanned();;
mBtnBuyPass->setEnabled(use_pass);
}
}
@@ -805,22 +825,20 @@ void LLPanelLandGeneral::draw()
LLPanel::draw();
}
-// static
-void LLPanelLandGeneral::onClickSetGroup(void* userdata)
+void LLPanelLandGeneral::onClickSetGroup()
{
- LLPanelLandGeneral* panelp = (LLPanelLandGeneral*)userdata;
- LLFloaterGroupPicker* fg;
+ LLFloater* parent_floater = gFloaterView->getParentFloater(this);
- LLFloater* parent_floater = gFloaterView->getParentFloater(panelp);
-
- fg = LLFloaterGroupPicker::showInstance(LLSD(gAgent.getID()));
- fg->setSelectCallback( cbGroupID, userdata );
-
- if (parent_floater)
+ LLFloaterGroupPicker* fg = LLFloaterGroupPicker::showInstance(LLSD(gAgent.getID()));
+ if (fg)
{
- LLRect new_rect = gFloaterView->findNeighboringPosition(parent_floater, fg);
- fg->setOrigin(new_rect.mLeft, new_rect.mBottom);
- parent_floater->addDependentFloater(fg);
+ fg->setSelectCallback( cbGroupID, this);
+ if (parent_floater)
+ {
+ LLRect new_rect = gFloaterView->findNeighboringPosition(parent_floater, fg);
+ fg->setOrigin(new_rect.mLeft, new_rect.mBottom);
+ parent_floater->addDependentFloater(fg);
+ }
}
}
@@ -834,11 +852,9 @@ void LLPanelLandGeneral::onClickInfoGroup(void* userdata)
if(id.notNull())LLFloaterGroupInfo::showFromUUID(parcel->getGroupID());
}
-// static
-void LLPanelLandGeneral::onClickProfile(void* data)
+void LLPanelLandGeneral::onClickProfile()
{
- LLPanelLandGeneral* panelp = (LLPanelLandGeneral*)data;
- LLParcel* parcel = panelp->mParcel->getParcel();
+ LLParcel* parcel = mParcel->getParcel();
if (!parcel) return;
if (parcel->getIsGroupOwned())
@@ -891,17 +907,15 @@ void LLPanelLandGeneral::onClickBuyLand(void* data)
LLViewerParcelMgr::getInstance()->startBuyLand(*for_group);
}
-
-
-
-
-
-
-BOOL LLPanelLandGeneral::enableDeedToGroup(void* data)
+// static
+void LLPanelLandGeneral::onClickScriptLimits(void* data)
{
LLPanelLandGeneral* panelp = (LLPanelLandGeneral*)data;
LLParcel* parcel = panelp->mParcel->getParcel();
- return (parcel != NULL) && (parcel->getParcelFlag(PF_ALLOW_DEED_TO_GROUP));
+ if(parcel != NULL)
+ {
+ LLFloaterScriptLimits::showInstance();
+ }
}
// static
@@ -954,6 +968,7 @@ void LLPanelLandGeneral::onClickBuyPass(void* data)
LLSD args;
args["COST"] = cost;
+ args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
args["PARCEL_NAME"] = parcel_name;
args["TIME"] = time;
@@ -1844,6 +1859,7 @@ LLPanelLandOptions::LLPanelLandOptions(LLParcelSelectionHandle& parcel)
mSetBtn(NULL),
mClearBtn(NULL),
mMatureCtrl(NULL),
+ mGamingCtrl(NULL),
mPushRestrictionCtrl(NULL),
mSeeAvatarsCtrl(NULL),
mParcel(parcel),
@@ -1869,9 +1885,9 @@ BOOL LLPanelLandOptions::postBuild()
mCheckEditLand = getChild( "edit land check");
childSetCommitCallback("edit land check", onCommitAny, this);
-
mCheckLandmark = getChild( "check landmark");
childSetCommitCallback("check landmark", onCommitAny, this);
+ mCheckLandmark->setVisible(!gHippoGridManager->getConnectedGrid()->isSecondLife());
mCheckGroupScripts = getChild( "check group scripts");
@@ -1921,6 +1937,11 @@ BOOL LLPanelLandOptions::postBuild()
mMatureCtrl = getChild( "MatureCheck");
childSetCommitCallback("MatureCheck", onCommitAny, this);
+
+ mGamingCtrl = getChild( "GamingCheck");
+ childSetCommitCallback("GamingCheck", onCommitAny, this);
+ mGamingCtrl->setVisible((gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_PARCEL));
+ mGamingCtrl->setEnabled(false);
mPublishHelpButton = getChild("?");
mPublishHelpButton->setClickedCallback(onClickPublishHelp, this);
@@ -1938,8 +1959,7 @@ BOOL LLPanelLandOptions::postBuild()
mSnapshotCtrl = getChild("snapshot_ctrl");
if (mSnapshotCtrl)
{
- mSnapshotCtrl->setCommitCallback( onCommitAny );
- mSnapshotCtrl->setCallbackUserData( this );
+ mSnapshotCtrl->setCommitCallback( onCommitAny, this );
mSnapshotCtrl->setAllowNoTexture ( TRUE );
mSnapshotCtrl->setImmediateFilterPermMask(PERM_COPY | PERM_TRANSFER);
mSnapshotCtrl->setNonImmediateFilterPermMask(PERM_COPY | PERM_TRANSFER);
@@ -2029,6 +2049,7 @@ void LLPanelLandOptions::refresh()
mClearBtn->setEnabled(FALSE);
mMatureCtrl->setEnabled(FALSE);
+ mGamingCtrl->setEnabled(false);
mPublishHelpButton->setEnabled(FALSE);
}
else
@@ -2152,6 +2173,8 @@ void LLPanelLandOptions::refresh()
}
}
}
+ mGamingCtrl->set(parcel->getParcelFlag(PF_GAMING));
+ mGamingCtrl->setEnabled(can_change_options);
}
}
@@ -2288,6 +2311,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
BOOL mature_publish = self->mMatureCtrl->get();
BOOL push_restriction = self->mPushRestrictionCtrl->get();
BOOL see_avs = self->mSeeAvatarsCtrl->get();
+ bool gaming = self->mGamingCtrl->get();
BOOL show_directory = self->mCheckShowDirectory->get();
// we have to get the index from a lookup, not from the position in the dropdown!
S32 category_index = LLParcel::getCategoryFromString(self->mCategoryCombo->getSelectedValue());
@@ -2296,11 +2320,16 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
LLViewerRegion* region;
region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
- if (!allow_other_scripts && region && region->getAllowDamage())
- {
-
- LLNotificationsUtil::add("UnableToDisableOutsideScripts");
- return;
+ if (region && region->getAllowDamage())
+ { // Damage is allowed on the region - server will always allow scripts
+ if ( (!allow_other_scripts && parcel->getParcelFlag(PF_ALLOW_OTHER_SCRIPTS)) ||
+ (!allow_group_scripts && parcel->getParcelFlag(PF_ALLOW_GROUP_SCRIPTS)) )
+ { // Don't allow turning off "Run Scripts" if damage is allowed in the region
+ self->mCheckOtherScripts->set(parcel->getParcelFlag(PF_ALLOW_OTHER_SCRIPTS)); // Restore UI to actual settings
+ self->mCheckGroupScripts->set(parcel->getParcelFlag(PF_ALLOW_GROUP_SCRIPTS));
+ LLNotificationsUtil::add("UnableToDisableOutsideScripts");
+ return;
+ }
}
// Push data into current parcel
@@ -2317,6 +2346,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
parcel->setParcelFlag(PF_SHOW_DIRECTORY, show_directory);
parcel->setParcelFlag(PF_ALLOW_PUBLISH, allow_publish);
parcel->setParcelFlag(PF_MATURE_PUBLISH, mature_publish);
+ parcel->setParcelFlag(PF_GAMING, gaming);
parcel->setParcelFlag(PF_RESTRICT_PUSHOBJECT, push_restriction);
parcel->setCategory((LLParcel::ECategory)category_index);
parcel->setLandingType((LLParcel::ELandingType)landing_type_index);
@@ -2419,9 +2449,9 @@ BOOL LLPanelLandAccess::postBuild()
childSetCommitCallback("PriceSpin", onCommitAny, this);
childSetCommitCallback("HoursSpin", onCommitAny, this);
- childSetAction("add_allowed", onClickAddAccess, this);
+ childSetAction("add_allowed", boost::bind(&LLPanelLandAccess::onClickAddAccess, this));
childSetAction("remove_allowed", onClickRemoveAccess, this);
- childSetAction("add_banned", onClickAddBanned, this);
+ childSetAction("add_banned", boost::bind(&LLPanelLandAccess::onClickAddBanned, this));
childSetAction("remove_banned", onClickRemoveBanned, this);
mListAccess = getChild("AccessList");
@@ -2456,12 +2486,12 @@ void LLPanelLandAccess::refresh()
BOOL use_group = parcel->getParcelFlag(PF_USE_ACCESS_GROUP);
BOOL public_access = !use_access_list && !use_group;
- childSetValue("public_access", public_access );
- childSetValue("GroupCheck", use_group );
+ getChild("public_access")->setValue(public_access );
+ getChild("GroupCheck")->setValue(use_group );
std::string group_name;
gCacheName->getGroupName(parcel->getGroupID(), group_name);
- childSetLabelArg("GroupCheck", "[GROUP]", group_name );
+ getChild("GroupCheck")->setLabelArg("[GROUP]", group_name );
// Allow list
if (mListAccess)
@@ -2470,8 +2500,8 @@ void LLPanelLandAccess::refresh()
mListAccess->clearSortOrder();
mListAccess->deleteAllItems();
S32 count = parcel->mAccessList.size();
- childSetToolTipArg("AccessList", "[LISTED]", llformat("%d",count));
- childSetToolTipArg("AccessList", "[MAX]", llformat("%d",PARCEL_MAX_ACCESS_LIST));
+ getChild("AccessList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count));
+ getChild("AccessList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST));
for (access_map_const_iterator cit = parcel->mAccessList.begin();
cit != parcel->mAccessList.end(); ++cit)
@@ -2517,8 +2547,8 @@ void LLPanelLandAccess::refresh()
mListBanned->deleteAllItems();
S32 count = parcel->mBanList.size();
- childSetToolTipArg("BannedList", "[LISTED]", llformat("%d",count));
- childSetToolTipArg("BannedList", "[MAX]", llformat("%d",PARCEL_MAX_ACCESS_LIST));
+ getChild("BannedList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",count));
+ getChild("BannedList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",PARCEL_MAX_ACCESS_LIST));
for (access_map_const_iterator cit = parcel->mBanList.begin();
cit != parcel->mBanList.end(); ++cit)
@@ -2558,23 +2588,23 @@ void LLPanelLandAccess::refresh()
if(parcel->getRegionDenyAnonymousOverride())
{
- childSetValue("limit_payment", TRUE);
+ getChild("limit_payment")->setValue(TRUE);
}
else
{
- childSetValue("limit_payment", (parcel->getParcelFlag(PF_DENY_ANONYMOUS)));
+ getChild("limit_payment")->setValue((parcel->getParcelFlag(PF_DENY_ANONYMOUS)));
}
if(parcel->getRegionDenyAgeUnverifiedOverride())
{
- childSetValue("limit_age_verified", TRUE);
+ getChild("limit_age_verified")->setValue(TRUE);
}
else
{
- childSetValue("limit_age_verified", (parcel->getParcelFlag(PF_DENY_AGEUNVERIFIED)));
+ getChild("limit_age_verified")->setValue((parcel->getParcelFlag(PF_DENY_AGEUNVERIFIED)));
}
BOOL use_pass = parcel->getParcelFlag(PF_USE_PASS_LIST);
- childSetValue("PassCheck", use_pass );
+ getChild("PassCheck")->setValue(use_pass );
LLCtrlSelectionInterface* passcombo = childGetSelectionInterface("pass_combo");
if (passcombo)
{
@@ -2585,41 +2615,41 @@ void LLPanelLandAccess::refresh()
}
S32 pass_price = parcel->getPassPrice();
- childSetValue( "PriceSpin", (F32)pass_price );
- childSetLabelArg("PriceSpin", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
+ getChild("PriceSpin")->setValue((F32)pass_price );
+ getChild("PriceSpin")->setLabelArg("[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
F32 pass_hours = parcel->getPassHours();
- childSetValue( "HoursSpin", pass_hours );
+ getChild("HoursSpin")->setValue(pass_hours );
}
else
{
- childSetValue("public_access", FALSE);
- childSetValue("limit_payment", FALSE);
- childSetValue("limit_age_verified", FALSE);
- childSetValue("GroupCheck", FALSE);
- childSetLabelArg("GroupCheck", "[GROUP]", LLStringUtil::null );
- childSetValue("PassCheck", FALSE);
- childSetValue("PriceSpin", (F32)PARCEL_PASS_PRICE_DEFAULT);
- childSetValue( "HoursSpin", PARCEL_PASS_HOURS_DEFAULT );
- childSetToolTipArg("AccessList", "[LISTED]", llformat("%d",0));
- childSetToolTipArg("AccessList", "[MAX]", llformat("%d",0));
- childSetToolTipArg("BannedList", "[LISTED]", llformat("%d",0));
- childSetToolTipArg("BannedList", "[MAX]", llformat("%d",0));
+ getChild("public_access")->setValue(FALSE);
+ getChild("limit_payment")->setValue(FALSE);
+ getChild("limit_age_verified")->setValue(FALSE);
+ getChild("GroupCheck")->setValue(FALSE);
+ getChild("GroupCheck")->setLabelArg("[GROUP]", LLStringUtil::null );
+ getChild("PassCheck")->setValue(FALSE);
+ getChild("PriceSpin")->setValue((F32)PARCEL_PASS_PRICE_DEFAULT);
+ getChild("HoursSpin")->setValue(PARCEL_PASS_HOURS_DEFAULT );
+ getChild("AccessList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",0));
+ getChild("AccessList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",0));
+ getChild("BannedList")->setToolTipArg(LLStringExplicit("[LISTED]"), llformat("%d",0));
+ getChild("BannedList")->setToolTipArg(LLStringExplicit("[MAX]"), llformat("%d",0));
}
}
void LLPanelLandAccess::refresh_ui()
{
- childSetEnabled("public_access", FALSE);
- childSetEnabled("limit_payment", FALSE);
- childSetEnabled("limit_age_verified", FALSE);
- childSetEnabled("GroupCheck", FALSE);
- childSetEnabled("PassCheck", FALSE);
- childSetEnabled("pass_combo", FALSE);
- childSetEnabled("PriceSpin", FALSE);
- childSetEnabled("HoursSpin", FALSE);
- childSetEnabled("AccessList", FALSE);
- childSetEnabled("BannedList", FALSE);
+ getChildView("public_access")->setEnabled(FALSE);
+ getChildView("limit_payment")->setEnabled(FALSE);
+ getChildView("limit_age_verified")->setEnabled(FALSE);
+ getChildView("GroupCheck")->setEnabled(FALSE);
+ getChildView("PassCheck")->setEnabled(FALSE);
+ getChildView("pass_combo")->setEnabled(FALSE);
+ getChildView("PriceSpin")->setEnabled(FALSE);
+ getChildView("HoursSpin")->setEnabled(FALSE);
+ getChildView("AccessList")->setEnabled(FALSE);
+ getChildView("BannedList")->setEnabled(FALSE);
LLParcel *parcel = mParcel->getParcel();
if (parcel)
@@ -2627,73 +2657,73 @@ void LLPanelLandAccess::refresh_ui()
BOOL can_manage_allowed = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_ALLOWED);
BOOL can_manage_banned = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_BANNED);
- childSetEnabled("public_access", can_manage_allowed);
- BOOL public_access = childGetValue("public_access").asBoolean();
+ getChildView("public_access")->setEnabled(can_manage_allowed);
+ BOOL public_access = getChild("public_access")->getValue().asBoolean();
if (public_access)
{
bool override = false;
if(parcel->getRegionDenyAnonymousOverride())
{
override = true;
- childSetEnabled("limit_payment", FALSE);
+ getChildView("limit_payment")->setEnabled(FALSE);
}
else
{
- childSetEnabled("limit_payment", can_manage_allowed);
+ getChildView("limit_payment")->setEnabled(can_manage_allowed);
}
if(parcel->getRegionDenyAgeUnverifiedOverride())
{
override = true;
- childSetEnabled("limit_age_verified", FALSE);
+ getChildView("limit_age_verified")->setEnabled(FALSE);
}
else
{
- childSetEnabled("limit_age_verified", can_manage_allowed);
+ getChildView("limit_age_verified")->setEnabled(can_manage_allowed);
}
if (override)
{
- childSetToolTip("Only Allow", getString("estate_override"));
+ getChildView("Only Allow")->setToolTip(getString("estate_override"));
}
else
{
- childSetToolTip("Only Allow", std::string());
+ getChildView("Only Allow")->setToolTip(std::string());
}
- childSetEnabled("GroupCheck", FALSE);
- childSetEnabled("PassCheck", FALSE);
- childSetEnabled("pass_combo", FALSE);
- childSetEnabled("AccessList", FALSE);
+ getChildView("GroupCheck")->setEnabled(FALSE);
+ getChildView("PassCheck")->setEnabled(FALSE);
+ getChildView("pass_combo")->setEnabled(FALSE);
+ getChildView("AccessList")->setEnabled(FALSE);
}
else
{
- childSetEnabled("limit_payment", FALSE);
- childSetEnabled("limit_age_verified", FALSE);
+ getChildView("limit_payment")->setEnabled(FALSE);
+ getChildView("limit_age_verified")->setEnabled(FALSE);
std::string group_name;
if (gCacheName->getGroupName(parcel->getGroupID(), group_name))
{
- childSetEnabled("GroupCheck", can_manage_allowed);
+ getChildView("GroupCheck")->setEnabled(can_manage_allowed);
}
- BOOL group_access = childGetValue("GroupCheck").asBoolean();
- BOOL sell_passes = childGetValue("PassCheck").asBoolean();
- childSetEnabled("PassCheck", can_manage_allowed);
+ BOOL group_access = getChild("GroupCheck")->getValue().asBoolean();
+ BOOL sell_passes = getChild("PassCheck")->getValue().asBoolean();
+ getChildView("PassCheck")->setEnabled(can_manage_allowed);
if (sell_passes)
{
- childSetEnabled("pass_combo", group_access && can_manage_allowed);
- childSetEnabled("PriceSpin", can_manage_allowed);
- childSetEnabled("HoursSpin", can_manage_allowed);
+ getChildView("pass_combo")->setEnabled(group_access && can_manage_allowed);
+ getChildView("PriceSpin")->setEnabled(can_manage_allowed);
+ getChildView("HoursSpin")->setEnabled(can_manage_allowed);
}
}
- childSetEnabled("AccessList", can_manage_allowed);
+ getChildView("AccessList")->setEnabled(can_manage_allowed);
S32 allowed_list_count = parcel->mAccessList.size();
- childSetEnabled("add_allowed", can_manage_allowed && allowed_list_count < PARCEL_MAX_ACCESS_LIST);
- BOOL has_selected = mListAccess->getSelectionInterface()->getFirstSelectedIndex() >= 0;
- childSetEnabled("remove_allowed", can_manage_allowed && has_selected);
+ getChildView("add_allowed")->setEnabled(can_manage_allowed && allowed_list_count < PARCEL_MAX_ACCESS_LIST);
+ BOOL has_selected = (mListAccess && mListAccess->getSelectionInterface()->getFirstSelectedIndex() >= 0);
+ getChildView("remove_allowed")->setEnabled(can_manage_allowed && has_selected);
- childSetEnabled("BannedList", can_manage_banned);
+ getChildView("BannedList")->setEnabled(can_manage_banned);
S32 banned_list_count = parcel->mBanList.size();
- childSetEnabled("add_banned", can_manage_banned && banned_list_count < PARCEL_MAX_ACCESS_LIST);
- has_selected = mListBanned->getSelectionInterface()->getFirstSelectedIndex() >= 0;
- childSetEnabled("remove_banned", can_manage_banned && has_selected);
+ getChildView("add_banned")->setEnabled(can_manage_banned && banned_list_count < PARCEL_MAX_ACCESS_LIST);
+ has_selected = (mListBanned && mListBanned->getSelectionInterface()->getFirstSelectedIndex() >= 0);
+ getChildView("remove_banned")->setEnabled(can_manage_banned && has_selected);
}
}
@@ -2707,7 +2737,7 @@ void LLPanelLandAccess::refreshNames()
{
gCacheName->getGroupName(parcel->getGroupID(), group_name);
}
- childSetLabelArg("GroupCheck", "[GROUP]", group_name);
+ getChild("GroupCheck")->setLabelArg("[GROUP]", group_name);
}
@@ -2730,13 +2760,13 @@ void LLPanelLandAccess::onCommitPublicAccess(LLUICtrl *ctrl, void *userdata)
}
// If we disabled public access, enable group access by default (if applicable)
- BOOL public_access = self->childGetValue("public_access").asBoolean();
+ BOOL public_access = self->getChild("public_access")->getValue().asBoolean();
if (public_access == FALSE)
{
std::string group_name;
if (gCacheName->getGroupName(parcel->getGroupID(), group_name))
{
- self->childSetValue("GroupCheck", public_access ? FALSE : TRUE);
+ self->getChild("GroupCheck")->setValue(public_access ? FALSE : TRUE);
}
}
@@ -2755,8 +2785,8 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)
}
// Extract data from UI
- BOOL public_access = self->childGetValue("public_access").asBoolean();
- BOOL use_access_group = self->childGetValue("GroupCheck").asBoolean();
+ BOOL public_access = self->getChild("public_access")->getValue().asBoolean();
+ BOOL use_access_group = self->getChild("GroupCheck")->getValue().asBoolean();
if (use_access_group)
{
std::string group_name;
@@ -2774,13 +2804,13 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)
{
use_access_list = FALSE;
use_access_group = FALSE;
- limit_payment = self->childGetValue("limit_payment").asBoolean();
- limit_age_verified = self->childGetValue("limit_age_verified").asBoolean();
+ limit_payment = self->getChild("limit_payment")->getValue().asBoolean();
+ limit_age_verified = self->getChild("limit_age_verified")->getValue().asBoolean();
}
else
{
use_access_list = TRUE;
- use_pass_list = self->childGetValue("PassCheck").asBoolean();
+ use_pass_list = self->getChild("PassCheck")->getValue().asBoolean();
if (use_access_group && use_pass_list)
{
LLCtrlSelectionInterface* passcombo = self->childGetSelectionInterface("pass_combo");
@@ -2794,8 +2824,8 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)
}
}
- S32 pass_price = llfloor((F32)self->childGetValue("PriceSpin").asReal());
- F32 pass_hours = (F32)self->childGetValue("HoursSpin").asReal();
+ S32 pass_price = llfloor((F32)self->getChild("PriceSpin")->getValue().asReal());
+ F32 pass_hours = (F32)self->getChild("HoursSpin")->getValue().asReal();
// Push data into current parcel
parcel->setParcelFlag(PF_USE_ACCESS_GROUP, use_access_group);
@@ -2815,13 +2845,13 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)
self->refresh();
}
-// static
-void LLPanelLandAccess::onClickAddAccess(void* data)
+void LLPanelLandAccess::onClickAddAccess()
{
- LLPanelLandAccess* panelp = (LLPanelLandAccess*)data;
- if (panelp)
+ LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(
+ boost::bind(&LLPanelLandAccess::callbackAvatarCBAccess, this, _1));
+ if (picker)
{
- gFloaterView->getParentFloater(panelp)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelLandAccess::callbackAvatarCBAccess, panelp, _1)));
+ gFloaterView->getParentFloater(this)->addDependentFloater(picker);
}
}
@@ -2863,11 +2893,14 @@ void LLPanelLandAccess::onClickRemoveAccess(void* data)
}
}
-// static
-void LLPanelLandAccess::onClickAddBanned(void* data)
+void LLPanelLandAccess::onClickAddBanned()
{
- LLPanelLandAccess* panelp = (LLPanelLandAccess*)data;
- gFloaterView->getParentFloater(panelp)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, panelp, _1)));
+ LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(
+ boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, this, _1));
+ if (picker)
+ {
+ gFloaterView->getParentFloater(this)->addDependentFloater(picker);
+ }
}
void LLPanelLandAccess::callbackAvatarCBBanned(const uuid_vec_t& ids)
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
index d7c0cfeef..4dd7b962b 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -49,11 +49,11 @@ class LLButton;
class LLCheckBoxCtrl;
class LLRadioGroup;
class LLComboBox;
-class LLNameListCtrl;
-class LLSpinCtrl;
class LLLineEditor;
+class LLNameListCtrl;
class LLRadioGroup;
class LLParcelSelectionObserver;
+class LLSpinCtrl;
class LLTabContainer;
class LLTextBox;
class LLTextEditor;
@@ -149,13 +149,13 @@ public:
virtual void draw();
void setGroup(const LLUUID& group_id);
- static void onClickProfile(void*);
- static void onClickSetGroup(void*);
+ void onClickProfile();
+ void onClickSetGroup();
static void onClickInfoGroup(void*);
static void cbGroupID(LLUUID group_id, void* userdata);
- static BOOL enableDeedToGroup(void*);
static void onClickDeed(void*);
static void onClickBuyLand(void* data);
+ static void onClickScriptLimits(void* data);
static void onClickRelease(void*);
static void onClickReclaim(void*);
static void onClickBuyPass(void* deselect_when_done);
@@ -225,6 +225,7 @@ protected:
LLTextBox* mTextDwell;
LLButton* mBtnBuyLand;
+ LLButton* mBtnScriptLimits;
LLButton* mBtnBuyGroupLand;
// these buttons share the same location, but
@@ -361,6 +362,7 @@ private:
LLButton* mClearBtn;
LLCheckBoxCtrl *mMatureCtrl;
+ LLCheckBoxCtrl *mGamingCtrl;
LLCheckBoxCtrl *mPushRestrictionCtrl;
LLCheckBoxCtrl *mSeeAvatarsCtrl;
LLButton *mPublishHelpButton;
@@ -382,15 +384,16 @@ public:
static void onCommitPublicAccess(LLUICtrl* ctrl, void *userdata);
static void onCommitAny(LLUICtrl* ctrl, void *userdata);
- static void onClickAddAccess(void*);
- void callbackAvatarCBAccess(const uuid_vec_t& ids);
static void onClickRemoveAccess(void*);
- static void onClickAddBanned(void*);
- void callbackAvatarCBBanned(const uuid_vec_t& ids);
static void onClickRemoveBanned(void*);
virtual BOOL postBuild();
+ void onClickAddAccess();
+ void onClickAddBanned();
+ void callbackAvatarCBBanned(const uuid_vec_t& ids);
+ void callbackAvatarCBAccess(const uuid_vec_t& ids);
+
protected:
LLNameListCtrl* mListAccess;
LLNameListCtrl* mListBanned;
diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
new file mode 100644
index 000000000..70022a6e2
--- /dev/null
+++ b/indra/newview/llfloaterscriptlimits.cpp
@@ -0,0 +1,1352 @@
+/**
+ * @file llfloaterscriptlimits.cpp
+ * @author Gabriel Lee
+ * @brief Implementation of the region info and controls floater and panels.
+ *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llhttpclient.h"
+#include "llfloaterscriptlimits.h"
+
+// library includes
+#include "llavatarnamecache.h"
+#include "llsdutil.h"
+#include "llsdutil_math.h"
+#include "message.h"
+
+#include "llagent.h"
+#include "llfloateravatarpicker.h"
+#include "llfloaterland.h"
+#include "llregionhandle.h"
+#include "llscrolllistctrl.h"
+#include "llparcel.h"
+#include "lltabcontainer.h"
+#include "lltracker.h"
+#include "lltrans.h"
+#include "llviewercontrol.h"
+#include "lluictrlfactory.h"
+#include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
+#include "llviewerwindow.h"
+
+///----------------------------------------------------------------------------
+/// LLFloaterScriptLimits
+///----------------------------------------------------------------------------
+
+// debug switches, won't work in release
+#ifndef LL_RELEASE_FOR_DOWNLOAD
+
+// dump responder replies to llinfos for debugging
+//#define DUMP_REPLIES_TO_LLINFOS
+
+#ifdef DUMP_REPLIES_TO_LLINFOS
+#include "llsdserialize.h"
+#include "llwindow.h"
+#endif
+
+// use fake LLSD responses to check the viewer side is working correctly
+// I'm syncing this with the server side efforts so hopfully we can keep
+// the to-ing and fro-ing between the two teams to a minimum
+//#define USE_FAKE_RESPONSES
+
+#ifdef USE_FAKE_RESPONSES
+const S32 FAKE_NUMBER_OF_URLS = 329;
+const S32 FAKE_AVAILABLE_URLS = 731;
+const S32 FAKE_AMOUNT_OF_MEMORY = 66741;
+const S32 FAKE_AVAILABLE_MEMORY = 895577;
+#endif
+
+#endif
+
+const S32 SIZE_OF_ONE_KB = 1024;
+
+LLFloaterScriptLimits::LLFloaterScriptLimits(const LLSD& seed)
+ : LLFloater(/*seed*/)
+{
+ LLUICtrlFactory::getInstance()->buildFloater(this, "floater_script_limits.xml");
+}
+
+BOOL LLFloaterScriptLimits::postBuild()
+{
+ // a little cheap and cheerful - if there's an about land panel open default to showing parcel info,
+ // otherwise default to showing attachments (avatar appearance)
+ bool selectParcelPanel = false;
+
+ LLFloaterLand* instance = LLFloaterLand::getInstance();
+ if(instance)
+ {
+ if(instance->instanceVisible())
+ {
+ selectParcelPanel = true;
+ }
+ }
+
+ mTab = getChild("scriptlimits_panels");
+
+ if(!mTab)
+ {
+ llwarns << "Error! couldn't get scriptlimits_panels, aborting Script Information setup" << llendl;
+ return FALSE;
+ }
+
+ // contruct the panels
+ std::string land_url = gAgent.getRegion()->getCapability("LandResources");
+ if (!land_url.empty())
+ {
+ LLPanelScriptLimitsRegionMemory* panel_memory;
+ panel_memory = new LLPanelScriptLimitsRegionMemory;
+ mInfoPanels.push_back(panel_memory);
+ LLUICtrlFactory::getInstance()->buildPanel(panel_memory, "panel_script_limits_region_memory.xml");
+ mTab->addTabPanel(panel_memory, "Region Memory");
+ }
+
+ std::string attachment_url = gAgent.getRegion()->getCapability("AttachmentResources");
+ if (!attachment_url.empty())
+ {
+ LLPanelScriptLimitsAttachment* panel_attachments = new LLPanelScriptLimitsAttachment;
+ mInfoPanels.push_back(panel_attachments);
+ LLUICtrlFactory::getInstance()->buildPanel(panel_attachments, "panel_script_limits_my_avatar.xml");
+ mTab->addTabPanel(panel_attachments, "My Avatar");
+ }
+
+ if(mInfoPanels.size() > 0)
+ {
+ mTab->selectTab(0);
+ }
+
+ if(!selectParcelPanel && (mInfoPanels.size() > 1))
+ {
+ mTab->selectTab(1);
+ }
+
+ return TRUE;
+}
+
+LLFloaterScriptLimits::~LLFloaterScriptLimits()
+{
+}
+
+// public
+void LLFloaterScriptLimits::refresh()
+{
+ for(info_panels_t::iterator iter = mInfoPanels.begin();
+ iter != mInfoPanels.end(); ++iter)
+ {
+ (*iter)->refresh();
+ }
+}
+
+///----------------------------------------------------------------------------
+// Base class for panels
+///----------------------------------------------------------------------------
+
+LLPanelScriptLimitsInfo::LLPanelScriptLimitsInfo()
+ : LLPanel()
+{
+}
+
+
+// virtual
+BOOL LLPanelScriptLimitsInfo::postBuild()
+{
+ refresh();
+ return TRUE;
+}
+
+// virtual
+void LLPanelScriptLimitsInfo::updateChild(LLUICtrl* child_ctr)
+{
+}
+
+///----------------------------------------------------------------------------
+// Responders
+///----------------------------------------------------------------------------
+
+void fetchScriptLimitsRegionInfoResponder::result(const LLSD& content)
+{
+ //we don't need to test with a fake response here (shouldn't anyway)
+
+#ifdef DUMP_REPLIES_TO_LLINFOS
+
+ LLSDNotationStreamer notation_streamer(content);
+ std::ostringstream nice_llsd;
+ nice_llsd << notation_streamer;
+
+ OSMessageBox(nice_llsd.str(), "main cap response:", 0);
+
+ llinfos << "main cap response:" << content << llendl;
+
+#endif
+
+ // at this point we have an llsd which should contain ether one or two urls to the services we want.
+ // first we look for the details service:
+ if(content.has("ScriptResourceDetails"))
+ {
+ LLHTTPClient::get(content["ScriptResourceDetails"], new fetchScriptLimitsRegionDetailsResponder(mInfo));
+ }
+ else
+ {
+ LLFloaterScriptLimits* instance = LLFloaterScriptLimits::getInstance();
+ if(!instance)
+ {
+ llwarns << "Failed to get llfloaterscriptlimits instance" << llendl;
+ }
+ }
+
+ // then the summary service:
+ if(content.has("ScriptResourceSummary"))
+ {
+ LLHTTPClient::get(content["ScriptResourceSummary"], new fetchScriptLimitsRegionSummaryResponder(mInfo));
+ }
+}
+
+void fetchScriptLimitsRegionInfoResponder::error(U32 status, const std::string& reason)
+{
+ llwarns << "Error from responder " << reason << llendl;
+}
+
+void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content_ref)
+{
+#ifdef USE_FAKE_RESPONSES
+
+ LLSD fake_content;
+ LLSD summary = LLSD::emptyMap();
+ LLSD available = LLSD::emptyArray();
+ LLSD available_urls = LLSD::emptyMap();
+ LLSD available_memory = LLSD::emptyMap();
+ LLSD used = LLSD::emptyArray();
+ LLSD used_urls = LLSD::emptyMap();
+ LLSD used_memory = LLSD::emptyMap();
+
+ used_urls["type"] = "urls";
+ used_urls["amount"] = FAKE_NUMBER_OF_URLS;
+ available_urls["type"] = "urls";
+ available_urls["amount"] = FAKE_AVAILABLE_URLS;
+ used_memory["type"] = "memory";
+ used_memory["amount"] = FAKE_AMOUNT_OF_MEMORY;
+ available_memory["type"] = "memory";
+ available_memory["amount"] = FAKE_AVAILABLE_MEMORY;
+
+//summary response:{'summary':{'available':[{'amount':i731,'type':'urls'},{'amount':i895577,'type':'memory'},{'amount':i731,'type':'urls'},{'amount':i895577,'type':'memory'}],'used':[{'amount':i329,'type':'urls'},{'amount':i66741,'type':'memory'}]}}
+
+ used.append(used_urls);
+ used.append(used_memory);
+ available.append(available_urls);
+ available.append(available_memory);
+
+ summary["available"] = available;
+ summary["used"] = used;
+
+ fake_content["summary"] = summary;
+
+ const LLSD& content = fake_content;
+
+#else
+
+ const LLSD& content = content_ref;
+
+#endif
+
+
+#ifdef DUMP_REPLIES_TO_LLINFOS
+
+ LLSDNotationStreamer notation_streamer(content);
+ std::ostringstream nice_llsd;
+ nice_llsd << notation_streamer;
+
+ OSMessageBox(nice_llsd.str(), "summary response:", 0);
+
+ llwarns << "summary response:" << *content << llendl;
+
+#endif
+
+ LLFloaterScriptLimits* instance = LLFloaterScriptLimits::getInstance();
+ if(!instance)
+ {
+ llwarns << "Failed to get llfloaterscriptlimits instance" << llendl;
+ }
+ else
+ {
+ LLTabContainer* tab = instance->getChild("scriptlimits_panels");
+ if(tab)
+ {
+ LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild("script_limits_region_memory_panel");
+ if(panel_memory)
+ {
+ panel_memory->getChild("loading_text")->setValue(LLSD(std::string("")));
+
+ LLButton* btn = panel_memory->getChild("refresh_list_btn");
+ if(btn)
+ {
+ btn->setEnabled(true);
+ }
+
+ panel_memory->setRegionSummary(content);
+ }
+ }
+ }
+}
+
+void fetchScriptLimitsRegionSummaryResponder::error(U32 status, const std::string& reason)
+{
+ llwarns << "Error from responder " << reason << llendl;
+}
+
+void fetchScriptLimitsRegionDetailsResponder::result(const LLSD& content_ref)
+{
+#ifdef USE_FAKE_RESPONSES
+/*
+Updated detail service, ** denotes field added:
+
+result (map)
++-parcels (array of maps)
+ +-id (uuid)
+ +-local_id (S32)**
+ +-name (string)
+ +-owner_id (uuid) (in ERS as owner, but owner_id in code)
+ +-objects (array of maps)
+ +-id (uuid)
+ +-name (string)
+ +-owner_id (uuid) (in ERS as owner, in code as owner_id)
+ +-owner_name (sting)**
+ +-location (map)**
+ +-x (float)
+ +-y (float)
+ +-z (float)
+ +-resources (map) (this is wrong in the ERS but right in code)
+ +-type (string)
+ +-amount (int)
+*/
+ LLSD fake_content;
+ LLSD resource = LLSD::emptyMap();
+ LLSD location = LLSD::emptyMap();
+ LLSD object = LLSD::emptyMap();
+ LLSD objects = LLSD::emptyArray();
+ LLSD parcel = LLSD::emptyMap();
+ LLSD parcels = LLSD::emptyArray();
+
+ resource["urls"] = FAKE_NUMBER_OF_URLS;
+ resource["memory"] = FAKE_AMOUNT_OF_MEMORY;
+
+ location["x"] = 128.0f;
+ location["y"] = 128.0f;
+ location["z"] = 0.0f;
+
+ object["id"] = LLUUID("d574a375-0c6c-fe3d-5733-da669465afc7");
+ object["name"] = "Gabs fake Object!";
+ object["owner_id"] = LLUUID("8dbf2d41-69a0-4e5e-9787-0c9d297bc570");
+ object["owner_name"] = "Gabs Linden";
+ object["location"] = location;
+ object["resources"] = resource;
+
+ objects.append(object);
+
+ parcel["id"] = LLUUID("da05fb28-0d20-e593-2728-bddb42dd0160");
+ parcel["local_id"] = 42;
+ parcel["name"] = "Gabriel Linden\'s Sub Plot";
+ parcel["objects"] = objects;
+ parcels.append(parcel);
+
+ fake_content["parcels"] = parcels;
+ const LLSD& content = fake_content;
+
+#else
+
+ const LLSD& content = content_ref;
+
+#endif
+
+#ifdef DUMP_REPLIES_TO_LLINFOS
+
+ LLSDNotationStreamer notation_streamer(content);
+ std::ostringstream nice_llsd;
+ nice_llsd << notation_streamer;
+
+ OSMessageBox(nice_llsd.str(), "details response:", 0);
+
+ llinfos << "details response:" << content << llendl;
+
+#endif
+
+ LLFloaterScriptLimits* instance = LLFloaterScriptLimits::getInstance();
+
+ if(!instance)
+ {
+ llwarns << "Failed to get llfloaterscriptlimits instance" << llendl;
+ }
+ else
+ {
+ LLTabContainer* tab = instance->getChild("scriptlimits_panels");
+ if(tab)
+ {
+ LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild("script_limits_region_memory_panel");
+ if(panel_memory)
+ {
+ panel_memory->setRegionDetails(content);
+ }
+ else
+ {
+ llwarns << "Failed to get scriptlimits memory panel" << llendl;
+ }
+ }
+ else
+ {
+ llwarns << "Failed to get scriptlimits_panels" << llendl;
+ }
+ }
+}
+
+void fetchScriptLimitsRegionDetailsResponder::error(U32 status, const std::string& reason)
+{
+ llwarns << "Error from responder " << reason << llendl;
+}
+
+void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref)
+{
+
+#ifdef USE_FAKE_RESPONSES
+
+ // just add the summary, as that's all I'm testing currently!
+ LLSD fake_content = LLSD::emptyMap();
+ LLSD summary = LLSD::emptyMap();
+ LLSD available = LLSD::emptyArray();
+ LLSD available_urls = LLSD::emptyMap();
+ LLSD available_memory = LLSD::emptyMap();
+ LLSD used = LLSD::emptyArray();
+ LLSD used_urls = LLSD::emptyMap();
+ LLSD used_memory = LLSD::emptyMap();
+
+ used_urls["type"] = "urls";
+ used_urls["amount"] = FAKE_NUMBER_OF_URLS;
+ available_urls["type"] = "urls";
+ available_urls["amount"] = FAKE_AVAILABLE_URLS;
+ used_memory["type"] = "memory";
+ used_memory["amount"] = FAKE_AMOUNT_OF_MEMORY;
+ available_memory["type"] = "memory";
+ available_memory["amount"] = FAKE_AVAILABLE_MEMORY;
+
+ used.append(used_urls);
+ used.append(used_memory);
+ available.append(available_urls);
+ available.append(available_memory);
+
+ summary["available"] = available;
+ summary["used"] = used;
+
+ fake_content["summary"] = summary;
+ fake_content["attachments"] = content_ref["attachments"];
+
+ const LLSD& content = fake_content;
+
+#else
+
+ const LLSD& content = content_ref;
+
+#endif
+
+#ifdef DUMP_REPLIES_TO_LLINFOS
+
+ LLSDNotationStreamer notation_streamer(content);
+ std::ostringstream nice_llsd;
+ nice_llsd << notation_streamer;
+
+ OSMessageBox(nice_llsd.str(), "attachment response:", 0);
+
+ llinfos << "attachment response:" << content << llendl;
+
+#endif
+
+ LLFloaterScriptLimits* instance = LLFloaterScriptLimits::getInstance();
+
+ if(!instance)
+ {
+ llwarns << "Failed to get llfloaterscriptlimits instance" << llendl;
+ }
+ else
+ {
+ LLTabContainer* tab = instance->getChild("scriptlimits_panels");
+ if(tab)
+ {
+ LLPanelScriptLimitsAttachment* panel = (LLPanelScriptLimitsAttachment*)tab->getChild("script_limits_my_avatar_panel");
+ if(panel)
+ {
+ panel->getChild("loading_text")->setValue(LLSD(std::string("")));
+
+ LLButton* btn = panel->getChild("refresh_list_btn");
+ if(btn)
+ {
+ btn->setEnabled(true);
+ }
+
+ panel->setAttachmentDetails(content);
+ }
+ else
+ {
+ llwarns << "Failed to get script_limits_my_avatar_panel" << llendl;
+ }
+ }
+ else
+ {
+ llwarns << "Failed to get scriptlimits_panels" << llendl;
+ }
+ }
+}
+
+void fetchScriptLimitsAttachmentInfoResponder::error(U32 status, const std::string& reason)
+{
+ llwarns << "Error from responder " << reason << llendl;
+}
+
+///----------------------------------------------------------------------------
+// Memory Panel
+///----------------------------------------------------------------------------
+
+LLPanelScriptLimitsRegionMemory::~LLPanelScriptLimitsRegionMemory()
+{
+ if(!mParcelId.isNull())
+ {
+ LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this);
+ mParcelId.setNull();
+ }
+};
+
+BOOL LLPanelScriptLimitsRegionMemory::getLandScriptResources()
+{
+ LLSD body;
+ std::string url = gAgent.getRegion()->getCapability("LandResources");
+ if (!url.empty())
+ {
+ body["parcel_id"] = mParcelId;
+
+ LLSD info;
+ info["parcel_id"] = mParcelId;
+ LLHTTPClient::post(url, body, new fetchScriptLimitsRegionInfoResponder(info));
+
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+void LLPanelScriptLimitsRegionMemory::processParcelInfo(const LLParcelData& parcel_data)
+{
+ if(!getLandScriptResources())
+ {
+ std::string msg_error = LLTrans::getString("ScriptLimitsRequestError");
+ getChild("loading_text")->setValue(LLSD(msg_error));
+ }
+ else
+ {
+ std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");
+ getChild("loading_text")->setValue(LLSD(msg_waiting));
+ }
+}
+
+void LLPanelScriptLimitsRegionMemory::setParcelID(const LLUUID& parcel_id)
+{
+ if (!parcel_id.isNull())
+ {
+ if(!mParcelId.isNull())
+ {
+ LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this);
+ mParcelId.setNull();
+ }
+ mParcelId = parcel_id;
+ LLRemoteParcelInfoProcessor::getInstance()->addObserver(parcel_id, this);
+ LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(parcel_id);
+ }
+ else
+ {
+ std::string msg_error = LLTrans::getString("ScriptLimitsRequestError");
+ getChild("loading_text")->setValue(LLSD(msg_error));
+ }
+}
+
+// virtual
+void LLPanelScriptLimitsRegionMemory::setErrorStatus(U32 status, const std::string& reason)
+{
+ llwarns << "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<("scripts_list");
+ if(!list)
+ {
+ return;
+ }
+
+ std::string name;
+ if (LLAvatarNameCache::useDisplayNames())
+ {
+ name = LLCacheName::buildUsername(full_name);
+ }
+ else
+ {
+ name = full_name;
+ }
+
+ std::vector::iterator id_itor;
+ for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor)
+ {
+ LLSD element = *id_itor;
+ if(element["owner_id"].asUUID() == id)
+ {
+ LLScrollListItem* item = list->getItem(element["id"].asUUID());
+
+ if(item)
+ {
+ item->getColumn(3)->setValue(LLSD(name));
+ element["columns"][3]["value"] = name;
+ }
+ }
+ }
+}
+
+void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content)
+{
+ LLScrollListCtrl *list = getChild("scripts_list");
+
+ if(!list)
+ {
+ llwarns << "Error getting the scripts_list control" << llendl;
+ return;
+ }
+
+ S32 number_parcels = content["parcels"].size();
+
+ LLStringUtil::format_map_t args_parcels;
+ args_parcels["[PARCELS]"] = llformat ("%d", number_parcels);
+ std::string msg_parcels = LLTrans::getString("ScriptLimitsParcelsOwned", args_parcels);
+ getChild("parcels_listed")->setValue(LLSD(msg_parcels));
+
+ uuid_vec_t names_requested;
+
+ // This makes the assumption that all objects will have the same set
+ // of attributes, ie they will all have, or none will have locations
+ // This is a pretty safe assumption as it's reliant on server version.
+ bool has_locations = false;
+ bool has_local_ids = false;
+
+ for(S32 i = 0; i < number_parcels; i++)
+ {
+ std::string parcel_name = content["parcels"][i]["name"].asString();
+ LLUUID parcel_id = content["parcels"][i]["id"].asUUID();
+ S32 number_objects = content["parcels"][i]["objects"].size();
+
+ S32 local_id = 0;
+ if(content["parcels"][i].has("local_id"))
+ {
+ // if any locations are found flag that we can use them and turn on the highlight button
+ has_local_ids = true;
+ local_id = content["parcels"][i]["local_id"].asInteger();
+ }
+
+ for(S32 j = 0; j < number_objects; j++)
+ {
+ S32 size = content["parcels"][i]["objects"][j]["resources"]["memory"].asInteger() / SIZE_OF_ONE_KB;
+
+ S32 urls = content["parcels"][i]["objects"][j]["resources"]["urls"].asInteger();
+
+ std::string name_buf = content["parcels"][i]["objects"][j]["name"].asString();
+ LLUUID task_id = content["parcels"][i]["objects"][j]["id"].asUUID();
+ LLUUID owner_id = content["parcels"][i]["objects"][j]["owner_id"].asUUID();
+ // This field may not be sent by all server versions, but it's OK if
+ // it uses the LLSD default of false
+ bool is_group_owned = content["parcels"][i]["objects"][j]["is_group_owned"].asBoolean();
+
+ F32 location_x = 0.0f;
+ F32 location_y = 0.0f;
+ F32 location_z = 0.0f;
+
+ if(content["parcels"][i]["objects"][j].has("location"))
+ {
+ // if any locations are found flag that we can use them and turn on the highlight button
+ LLVector3 vec = ll_vector3_from_sd(content["parcels"][i]["objects"][j]["location"]);
+ has_locations = true;
+ location_x = vec.mV[0];
+ location_y = vec.mV[1];
+ location_z = vec.mV[2];
+ }
+
+ std::string owner_buf;
+
+ // in the future the server will give us owner names, so see if we're there yet:
+ if(content["parcels"][i]["objects"][j].has("owner_name"))
+ {
+ owner_buf = content["parcels"][i]["objects"][j]["owner_name"].asString();
+ }
+ // ...and if not use the slightly more painful method of disovery:
+ else
+ {
+ BOOL name_is_cached;
+ if (is_group_owned)
+ {
+ name_is_cached = gCacheName->getGroupName(owner_id, owner_buf);
+ }
+ else
+ {
+ name_is_cached = LLAvatarNameCache::getPNSName(owner_id, owner_buf); // username
+ }
+ if(!name_is_cached)
+ {
+ if(std::find(names_requested.begin(), names_requested.end(), owner_id) == names_requested.end())
+ {
+ names_requested.push_back(owner_id);
+ gCacheName->get(owner_id, is_group_owned, // username
+ boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache,
+ this, _1, _2));
+ }
+ }
+ }
+
+ LLSD item_params;
+ item_params["id"] = task_id;
+
+ item_params["columns"][0]["column"] = "size";
+ item_params["columns"][0]["value"] = size;
+
+ item_params["columns"][1]["column"] = "urls";
+ item_params["columns"][1]["value"] = urls;
+
+ item_params["columns"][2]["column"] = "name";
+ item_params["columns"][2]["value"] = name_buf;
+
+ item_params["columns"][3]["column"] = "owner";
+ item_params["columns"][3]["value"] = owner_buf;
+
+ item_params["columns"][4]["column"] = "parcel";
+ item_params["columns"][4]["value"] = parcel_name;
+
+ item_params["columns"][5]["column"] = "location";
+ item_params["columns"][5]["value"] = has_locations
+ ? llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z)
+ : "";
+
+ list->addElement(item_params);
+
+ LLSD element;
+ element["owner_id"] = owner_id;
+
+ element["id"] = task_id;
+ element["local_id"] = local_id;
+ mObjectListItems.push_back(element);
+ }
+ }
+
+ if (has_locations)
+ {
+ LLButton* btn = getChild("highlight_btn");
+ if(btn)
+ {
+ btn->setVisible(true);
+ }
+ }
+
+ if (has_local_ids)
+ {
+ LLButton* btn = getChild("return_btn");
+ if(btn)
+ {
+ btn->setVisible(true);
+ }
+ }
+
+ // save the structure to make object return easier
+ mContent = content;
+}
+
+void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content)
+{
+ if(content["summary"]["used"][0]["type"].asString() == std::string("memory"))
+ {
+ mParcelMemoryUsed = content["summary"]["used"][0]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mParcelMemoryMax = content["summary"]["available"][0]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mGotParcelMemoryUsed = true;
+ }
+ else if(content["summary"]["used"][1]["type"].asString() == std::string("memory"))
+ {
+ mParcelMemoryUsed = content["summary"]["used"][1]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mParcelMemoryMax = content["summary"]["available"][1]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mGotParcelMemoryUsed = true;
+ }
+ else
+ {
+ llwarns << "summary doesn't contain memory info" << llendl;
+ return;
+ }
+
+ if(content["summary"]["used"][0]["type"].asString() == std::string("urls"))
+ {
+ mParcelURLsUsed = content["summary"]["used"][0]["amount"].asInteger();
+ mParcelURLsMax = content["summary"]["available"][0]["amount"].asInteger();
+ mGotParcelURLsUsed = true;
+ }
+ else if(content["summary"]["used"][1]["type"].asString() == std::string("urls"))
+ {
+ mParcelURLsUsed = content["summary"]["used"][1]["amount"].asInteger();
+ mParcelURLsMax = content["summary"]["available"][1]["amount"].asInteger();
+ mGotParcelURLsUsed = true;
+ }
+ else
+ {
+ llwarns << "summary doesn't contain urls info" << llendl;
+ return;
+ }
+
+ if((mParcelMemoryUsed >= 0) && (mParcelMemoryMax >= 0))
+ {
+ S32 parcel_memory_available = mParcelMemoryMax - mParcelMemoryUsed;
+
+ LLStringUtil::format_map_t args_parcel_memory;
+ args_parcel_memory["[COUNT]"] = llformat ("%d", mParcelMemoryUsed);
+ args_parcel_memory["[MAX]"] = llformat ("%d", mParcelMemoryMax);
+ args_parcel_memory["[AVAILABLE]"] = llformat ("%d", parcel_memory_available);
+ std::string msg_parcel_memory = LLTrans::getString("ScriptLimitsMemoryUsed", args_parcel_memory);
+ getChild("memory_used")->setValue(LLSD(msg_parcel_memory));
+ }
+
+ if((mParcelURLsUsed >= 0) && (mParcelURLsMax >= 0))
+ {
+ S32 parcel_urls_available = mParcelURLsMax - mParcelURLsUsed;
+
+ LLStringUtil::format_map_t args_parcel_urls;
+ args_parcel_urls["[COUNT]"] = llformat ("%d", mParcelURLsUsed);
+ args_parcel_urls["[MAX]"] = llformat ("%d", mParcelURLsMax);
+ args_parcel_urls["[AVAILABLE]"] = llformat ("%d", parcel_urls_available);
+ std::string msg_parcel_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_parcel_urls);
+ getChild("urls_used")->setValue(LLSD(msg_parcel_urls));
+ }
+}
+
+BOOL LLPanelScriptLimitsRegionMemory::postBuild()
+{
+ childSetAction("refresh_list_btn", onClickRefresh, this);
+ childSetAction("highlight_btn", onClickHighlight, this);
+ childSetAction("return_btn", onClickReturn, this);
+
+ std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");
+ getChild("loading_text")->setValue(LLSD(msg_waiting));
+
+ LLScrollListCtrl *list = getChild("scripts_list");
+ if(!list)
+ {
+ return FALSE;
+ }
+
+ //set all columns to resizable mode even if some columns will be empty
+ for(S32 column = 0; column < list->getNumColumns(); column++)
+ {
+ LLScrollListColumn* columnp = list->getColumn(column);
+ columnp->mHeader->setHasResizableElement(TRUE);
+ }
+
+ return StartRequestChain();
+}
+
+BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain()
+{
+ LLUUID region_id;
+
+ LLFloaterLand* instance = LLFloaterLand::getInstance();
+ if(!instance)
+ {
+ getChild("loading_text")->setValue(LLSD(std::string("")));
+ //might have to do parent post build here
+ //if not logic below could use early outs
+ return FALSE;
+ }
+ LLParcel* parcel = instance->getCurrentSelectedParcel();
+ LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
+ if (!parcel) //Pretend we have the parcel we're on selected.
+ {
+ parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
+ region = gAgent.getRegion();
+ }
+
+ LLUUID current_region_id = gAgent.getRegion()->getRegionID();
+
+ if ((region) && (parcel))
+ {
+ LLVector3 parcel_center = parcel->getCenterpoint();
+
+ region_id = region->getRegionID();
+
+ if(region_id != current_region_id)
+ {
+ std::string msg_wrong_region = LLTrans::getString("ScriptLimitsRequestWrongRegion");
+ getChild("loading_text")->setValue(LLSD(msg_wrong_region));
+ return FALSE;
+ }
+
+ LLVector3d pos_global = region->getCenterGlobal();
+
+ LLSD body;
+ std::string url = region->getCapability("RemoteParcelRequest");
+ if (!url.empty())
+ {
+ body["location"] = ll_sd_from_vector3(parcel_center);
+ if (!region_id.isNull())
+ {
+ body["region_id"] = region_id;
+ }
+ if (!pos_global.isExactlyZero())
+ {
+ U64 region_handle = to_region_handle(pos_global);
+ body["region_handle"] = ll_sd_from_U64(region_handle);
+ }
+ LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(getObserverHandle()));
+ }
+ else
+ {
+ llwarns << "Can't get parcel info for script information request" << region_id
+ << ". Region: " << region->getName()
+ << " does not support RemoteParcelRequest" << llendl;
+
+ std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError");
+ getChild("loading_text")->setValue(LLSD(msg_waiting));
+ }
+ }
+ else
+ {
+ std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestNoParcelSelected");
+ getChild("loading_text")->setValue(LLSD(msg_waiting));
+ }
+
+ return LLPanelScriptLimitsInfo::postBuild();
+}
+
+void LLPanelScriptLimitsRegionMemory::clearList()
+{
+ LLCtrlListInterface *list = childGetListInterface("scripts_list");
+
+ if (list)
+ {
+ list->operateOnAll(LLCtrlListInterface::OP_DELETE);
+ }
+
+ mGotParcelMemoryUsed = false;
+ mGotParcelMemoryMax = false;
+ mGotParcelURLsUsed = false;
+ mGotParcelURLsMax = false;
+
+ std::string msg_empty_string("");
+ getChild("memory_used")->setValue(LLSD(msg_empty_string));
+ getChild("urls_used")->setValue(LLSD(msg_empty_string));
+ getChild("parcels_listed")->setValue(LLSD(msg_empty_string));
+
+ mObjectListItems.clear();
+}
+
+// static
+void LLPanelScriptLimitsRegionMemory::onClickRefresh(void* userdata)
+{
+ LLFloaterScriptLimits* instance = LLFloaterScriptLimits::getInstance();
+ if(instance)
+ {
+ LLTabContainer* tab = instance->getChild("scriptlimits_panels");
+ if(tab)
+ {
+ LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild("script_limits_region_memory_panel");
+ if(panel_memory)
+ {
+ //To stop people from hammering the refesh button and accidentally dosing themselves - enough requests can crash the viewer!
+ //turn the button off, then turn it on when we get a response
+ LLButton* btn = panel_memory->getChild("refresh_list_btn");
+ if(btn)
+ {
+ btn->setEnabled(false);
+ }
+ panel_memory->clearList();
+
+ panel_memory->StartRequestChain();
+ }
+ }
+ return;
+ }
+ else
+ {
+ llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after refresh button clicked" << llendl;
+ return;
+ }
+}
+
+void LLPanelScriptLimitsRegionMemory::showBeacon()
+{
+ LLScrollListCtrl* list = getChild("scripts_list");
+ if (!list) return;
+
+ LLScrollListItem* first_selected = list->getFirstSelected();
+ if (!first_selected) return;
+
+ std::string name = first_selected->getColumn(2)->getValue().asString();
+ std::string pos_string = first_selected->getColumn(5)->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);
+ LLVector3d pos_global = gAgent.getPosGlobalFromAgent(pos_agent);
+
+ std::string tooltip("");
+ LLTracker::trackLocation(pos_global, name, tooltip, LLTracker::LOCATION_ITEM);
+}
+
+// static
+void LLPanelScriptLimitsRegionMemory::onClickHighlight(void* userdata)
+{
+ LLFloaterScriptLimits* instance = LLFloaterScriptLimits::getInstance();
+ if(instance)
+ {
+ LLTabContainer* tab = instance->getChild("scriptlimits_panels");
+ if(tab)
+ {
+ LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild("script_limits_region_memory_panel");
+ if(panel)
+ {
+ panel->showBeacon();
+ }
+ }
+ return;
+ }
+ else
+ {
+ llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << llendl;
+ return;
+ }
+}
+
+void LLPanelScriptLimitsRegionMemory::returnObjectsFromParcel(S32 local_id)
+{
+ LLMessageSystem *msg = gMessageSystem;
+
+ LLViewerRegion* region = gAgent.getRegion();
+ if (!region) return;
+
+ LLCtrlListInterface *list = childGetListInterface("scripts_list");
+ if (!list || list->getItemCount() == 0) return;
+
+ std::vector::iterator id_itor;
+
+ bool start_message = true;
+
+ for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor)
+ {
+ LLSD element = *id_itor;
+ if (!list->isSelected(element["id"].asUUID()))
+ {
+ // Selected only
+ continue;
+ }
+
+ if(element["local_id"].asInteger() != local_id)
+ {
+ // Not the parcel we are looking for
+ continue;
+ }
+
+ if (start_message)
+ {
+ msg->newMessageFast(_PREHASH_ParcelReturnObjects);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID());
+ msg->nextBlockFast(_PREHASH_ParcelData);
+ msg->addS32Fast(_PREHASH_LocalID, element["local_id"].asInteger());
+ msg->addU32Fast(_PREHASH_ReturnType, RT_LIST);
+ start_message = false;
+ }
+
+ msg->nextBlockFast(_PREHASH_TaskIDs);
+ msg->addUUIDFast(_PREHASH_TaskID, element["id"].asUUID());
+
+ if (msg->isSendFullFast(_PREHASH_TaskIDs))
+ {
+ msg->sendReliable(region->getHost());
+ start_message = true;
+ }
+ }
+
+ if (!start_message)
+ {
+ msg->sendReliable(region->getHost());
+ }
+}
+
+void LLPanelScriptLimitsRegionMemory::returnObjects()
+{
+ if(!mContent.has("parcels"))
+ {
+ return;
+ }
+
+ S32 number_parcels = mContent["parcels"].size();
+
+ // a message per parcel containing all objects to be returned from that parcel
+ for(S32 i = 0; i < number_parcels; i++)
+ {
+ S32 local_id = 0;
+ if(mContent["parcels"][i].has("local_id"))
+ {
+ local_id = mContent["parcels"][i]["local_id"].asInteger();
+ returnObjectsFromParcel(local_id);
+ }
+ }
+
+ onClickRefresh(NULL);
+}
+
+
+// static
+void LLPanelScriptLimitsRegionMemory::onClickReturn(void* userdata)
+{
+ LLFloaterScriptLimits* instance = LLFloaterScriptLimits::getInstance();
+ if(instance)
+ {
+ LLTabContainer* tab = instance->getChild("scriptlimits_panels");
+ if(tab)
+ {
+ LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild("script_limits_region_memory_panel");
+ if(panel)
+ {
+ panel->returnObjects();
+ }
+ }
+ return;
+ }
+ else
+ {
+ llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << llendl;
+ return;
+ }
+}
+
+///----------------------------------------------------------------------------
+// Attachment Panel
+///----------------------------------------------------------------------------
+
+BOOL LLPanelScriptLimitsAttachment::requestAttachmentDetails()
+{
+ LLSD body;
+ std::string url = gAgent.getRegion()->getCapability("AttachmentResources");
+ if (!url.empty())
+ {
+ LLHTTPClient::get(url, body, new fetchScriptLimitsAttachmentInfoResponder());
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+void LLPanelScriptLimitsAttachment::setAttachmentDetails(LLSD content)
+{
+ LLScrollListCtrl *list = getChild("scripts_list");
+
+ if(!list)
+ {
+ return;
+ }
+
+ S32 number_attachments = content["attachments"].size();
+
+ for(int i = 0; i < number_attachments; i++)
+ {
+ std::string humanReadableLocation = "";
+ if(content["attachments"][i].has("location"))
+ {
+ std::string actualLocation = content["attachments"][i]["location"];
+ humanReadableLocation = LLTrans::getString(actualLocation.c_str());
+ }
+
+ S32 number_objects = content["attachments"][i]["objects"].size();
+ for(int j = 0; j < number_objects; j++)
+ {
+ LLUUID task_id = content["attachments"][i]["objects"][j]["id"].asUUID();
+ S32 size = 0;
+ if(content["attachments"][i]["objects"][j]["resources"].has("memory"))
+ {
+ size = content["attachments"][i]["objects"][j]["resources"]["memory"].asInteger() / SIZE_OF_ONE_KB;
+ }
+ S32 urls = 0;
+ if(content["attachments"][i]["objects"][j]["resources"].has("urls"))
+ {
+ urls = content["attachments"][i]["objects"][j]["resources"]["urls"].asInteger();
+ }
+ std::string name = content["attachments"][i]["objects"][j]["name"].asString();
+
+ LLSD element;
+
+ element["id"] = task_id;
+ element["columns"][0]["column"] = "size";
+ element["columns"][0]["value"] = llformat("%d", size);
+ element["columns"][0]["font"] = "SANSSERIF";
+
+ element["columns"][1]["column"] = "urls";
+ element["columns"][1]["value"] = llformat("%d", urls);
+ element["columns"][1]["font"] = "SANSSERIF";
+
+ element["columns"][2]["column"] = "name";
+ element["columns"][2]["value"] = name;
+ element["columns"][2]["font"] = "SANSSERIF";
+
+ element["columns"][3]["column"] = "location";
+ element["columns"][3]["value"] = humanReadableLocation;
+ element["columns"][3]["font"] = "SANSSERIF";
+
+ list->addElement(element);
+ }
+ }
+
+ setAttachmentSummary(content);
+
+ getChild("loading_text")->setValue(LLSD(std::string("")));
+
+ LLButton* btn = getChild("refresh_list_btn");
+ if(btn)
+ {
+ btn->setEnabled(true);
+ }
+}
+
+BOOL LLPanelScriptLimitsAttachment::postBuild()
+{
+ childSetAction("refresh_list_btn", onClickRefresh, this);
+
+ std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");
+ getChild("loading_text")->setValue(LLSD(msg_waiting));
+ return requestAttachmentDetails();
+}
+
+void LLPanelScriptLimitsAttachment::clearList()
+{
+ LLCtrlListInterface *list = childGetListInterface("scripts_list");
+
+ if (list)
+ {
+ list->operateOnAll(LLCtrlListInterface::OP_DELETE);
+ }
+
+ std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");
+ getChild("loading_text")->setValue(LLSD(msg_waiting));
+}
+
+void LLPanelScriptLimitsAttachment::setAttachmentSummary(LLSD content)
+{
+ if(content["summary"]["used"][0]["type"].asString() == std::string("memory"))
+ {
+ mAttachmentMemoryUsed = content["summary"]["used"][0]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mAttachmentMemoryMax = content["summary"]["available"][0]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mGotAttachmentMemoryUsed = true;
+ }
+ else if(content["summary"]["used"][1]["type"].asString() == std::string("memory"))
+ {
+ mAttachmentMemoryUsed = content["summary"]["used"][1]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mAttachmentMemoryMax = content["summary"]["available"][1]["amount"].asInteger() / SIZE_OF_ONE_KB;
+ mGotAttachmentMemoryUsed = true;
+ }
+ else
+ {
+ llwarns << "attachment details don't contain memory summary info" << llendl;
+ return;
+ }
+
+ if(content["summary"]["used"][0]["type"].asString() == std::string("urls"))
+ {
+ mAttachmentURLsUsed = content["summary"]["used"][0]["amount"].asInteger();
+ mAttachmentURLsMax = content["summary"]["available"][0]["amount"].asInteger();
+ mGotAttachmentURLsUsed = true;
+ }
+ else if(content["summary"]["used"][1]["type"].asString() == std::string("urls"))
+ {
+ mAttachmentURLsUsed = content["summary"]["used"][1]["amount"].asInteger();
+ mAttachmentURLsMax = content["summary"]["available"][1]["amount"].asInteger();
+ mGotAttachmentURLsUsed = true;
+ }
+ else
+ {
+ llwarns << "attachment details don't contain urls summary info" << llendl;
+ return;
+ }
+
+ if((mAttachmentMemoryUsed >= 0) && (mAttachmentMemoryMax >= 0))
+ {
+ S32 attachment_memory_available = mAttachmentMemoryMax - mAttachmentMemoryUsed;
+
+ LLStringUtil::format_map_t args_attachment_memory;
+ args_attachment_memory["[COUNT]"] = llformat ("%d", mAttachmentMemoryUsed);
+ args_attachment_memory["[MAX]"] = llformat ("%d", mAttachmentMemoryMax);
+ args_attachment_memory["[AVAILABLE]"] = llformat ("%d", attachment_memory_available);
+ std::string msg_attachment_memory = LLTrans::getString("ScriptLimitsMemoryUsed", args_attachment_memory);
+ getChild("memory_used")->setValue(LLSD(msg_attachment_memory));
+ }
+
+ if((mAttachmentURLsUsed >= 0) && (mAttachmentURLsMax >= 0))
+ {
+ S32 attachment_urls_available = mAttachmentURLsMax - mAttachmentURLsUsed;
+
+ LLStringUtil::format_map_t args_attachment_urls;
+ args_attachment_urls["[COUNT]"] = llformat ("%d", mAttachmentURLsUsed);
+ args_attachment_urls["[MAX]"] = llformat ("%d", mAttachmentURLsMax);
+ args_attachment_urls["[AVAILABLE]"] = llformat ("%d", attachment_urls_available);
+ std::string msg_attachment_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_attachment_urls);
+ getChild("urls_used")->setValue(LLSD(msg_attachment_urls));
+ }
+}
+
+// static
+void LLPanelScriptLimitsAttachment::onClickRefresh(void* userdata)
+{
+ LLFloaterScriptLimits* instance = LLFloaterScriptLimits::getInstance();
+ if(instance)
+ {
+ LLTabContainer* tab = instance->getChild("scriptlimits_panels");
+ LLPanelScriptLimitsAttachment* panel_attachments = (LLPanelScriptLimitsAttachment*)tab->getChild("script_limits_my_avatar_panel");
+ LLButton* btn = panel_attachments->getChild("refresh_list_btn");
+
+ //To stop people from hammering the refesh button and accidentally dosing themselves - enough requests can crash the viewer!
+ //turn the button off, then turn it on when we get a response
+ if(btn)
+ {
+ btn->setEnabled(false);
+ }
+ panel_attachments->clearList();
+ panel_attachments->requestAttachmentDetails();
+
+ return;
+ }
+ else
+ {
+ llwarns << "could not find LLPanelScriptLimitsRegionMemory instance after refresh button clicked" << llendl;
+ return;
+ }
+}
+
diff --git a/indra/newview/llfloaterscriptlimits.h b/indra/newview/llfloaterscriptlimits.h
new file mode 100644
index 000000000..a31d49629
--- /dev/null
+++ b/indra/newview/llfloaterscriptlimits.h
@@ -0,0 +1,271 @@
+/**
+ * @file llfloaterscriptlimits.h
+ * @author Gabriel Lee
+ * @brief Declaration of the region info and controls floater and panels.
+ *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFLOATERSCRIPTLIMITS_H
+#define LL_LLFLOATERSCRIPTLIMITS_H
+
+#include
+#include "llfloater.h"
+#include "llhost.h"
+#include "llpanel.h"
+#include "llremoteparcelrequest.h"
+
+class LLPanelScriptLimitsInfo;
+class LLTabContainer;
+
+class LLPanelScriptLimitsRegionMemory;
+
+class LLFloaterScriptLimits : public LLFloater, public LLFloaterSingleton
+{
+ friend class LLUISingleton >;
+public:
+
+ /*virtual*/ BOOL postBuild();
+
+ // from LLPanel
+ virtual void refresh();
+
+private:
+
+ LLFloaterScriptLimits(const LLSD& seed);
+ ~LLFloaterScriptLimits();
+
+protected:
+
+ LLTabContainer* mTab;
+ typedef std::vector info_panels_t;
+ info_panels_t mInfoPanels;
+};
+
+
+// Base class for all script limits information panels.
+class LLPanelScriptLimitsInfo : public LLPanel
+{
+public:
+ LLPanelScriptLimitsInfo();
+
+ virtual BOOL postBuild();
+ virtual void updateChild(LLUICtrl* child_ctrl);
+
+protected:
+ void initCtrl(const std::string& name);
+
+ typedef std::vector strings_t;
+
+ LLHost mHost;
+};
+
+/////////////////////////////////////////////////////////////////////////////
+// Responders
+/////////////////////////////////////////////////////////////////////////////
+class AIHTTPTimeoutPolicy;
+
+extern AIHTTPTimeoutPolicy fetchScriptLimitsRegionInfoResponder_timeout;
+class fetchScriptLimitsRegionInfoResponder: public LLHTTPClient::ResponderWithResult
+{
+ public:
+ fetchScriptLimitsRegionInfoResponder(const LLSD& info) : mInfo(info) {};
+
+ void result(const LLSD& content);
+ void error(U32 status, const std::string& reason);
+ public:
+ /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return fetchScriptLimitsRegionInfoResponder_timeout; }
+ /*virtual*/ char const* getName(void) const { return "fetchScriptLimitsRegionInfoResponder"; }
+ protected:
+ LLSD mInfo;
+};
+
+extern AIHTTPTimeoutPolicy fetchScriptLimitsRegionSummaryResponder_timeout;
+class fetchScriptLimitsRegionSummaryResponder: public LLHTTPClient::ResponderWithResult
+{
+ public:
+ fetchScriptLimitsRegionSummaryResponder(const LLSD& info) : mInfo(info) {};
+
+ void result(const LLSD& content);
+ void error(U32 status, const std::string& reason);
+ public:
+ /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return fetchScriptLimitsRegionSummaryResponder_timeout; }
+ /*virtual*/ char const* getName(void) const { return "fetchScriptLimitsRegionSummaryResponder"; }
+ protected:
+ LLSD mInfo;
+};
+
+extern AIHTTPTimeoutPolicy fetchScriptLimitsRegionDetailsResponder_timeout;
+class fetchScriptLimitsRegionDetailsResponder: public LLHTTPClient::ResponderWithResult
+{
+ public:
+ fetchScriptLimitsRegionDetailsResponder(const LLSD& info) : mInfo(info) {};
+
+ void result(const LLSD& content);
+ void error(U32 status, const std::string& reason);
+ public:
+ /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return fetchScriptLimitsRegionDetailsResponder_timeout; }
+ /*virtual*/ char const* getName(void) const { return "fetchScriptLimitsRegionDetailsResponder"; }
+ protected:
+ LLSD mInfo;
+};
+
+extern AIHTTPTimeoutPolicy fetchScriptLimitsAttachmentInfoResponder_timeout;
+class fetchScriptLimitsAttachmentInfoResponder: public LLHTTPClient::ResponderWithResult
+{
+ public:
+ fetchScriptLimitsAttachmentInfoResponder() {};
+
+ void result(const LLSD& content);
+ void error(U32 status, const std::string& reason);
+ public:
+ /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return fetchScriptLimitsAttachmentInfoResponder_timeout; }
+ /*virtual*/ char const* getName(void) const { return "fetchScriptLimitsAttachmentInfoResponder"; }
+ protected:
+};
+
+/////////////////////////////////////////////////////////////////////////////
+// Memory panel
+/////////////////////////////////////////////////////////////////////////////
+
+class LLPanelScriptLimitsRegionMemory : public LLPanelScriptLimitsInfo, LLRemoteParcelInfoObserver
+{
+
+public:
+ LLPanelScriptLimitsRegionMemory()
+ : LLPanelScriptLimitsInfo(), LLRemoteParcelInfoObserver(),
+
+ mParcelId(LLUUID()),
+ mGotParcelMemoryUsed(false),
+ mGotParcelMemoryMax(false),
+ mParcelMemoryMax(0),
+ mParcelMemoryUsed(0) {};
+
+ ~LLPanelScriptLimitsRegionMemory();
+
+ // LLPanel
+ virtual BOOL postBuild();
+
+ void setRegionDetails(LLSD content);
+ void setRegionSummary(LLSD content);
+
+ BOOL StartRequestChain();
+
+ BOOL getLandScriptResources();
+ void clearList();
+ void showBeacon();
+ void returnObjectsFromParcel(S32 local_id);
+ void returnObjects();
+
+private:
+ void onNameCache(const LLUUID& id,
+ const std::string& name);
+
+ LLSD mContent;
+ LLUUID mParcelId;
+ bool mGotParcelMemoryUsed;
+ bool mGotParcelMemoryUsedDetails;
+ bool mGotParcelMemoryMax;
+ S32 mParcelMemoryMax;
+ S32 mParcelMemoryUsed;
+ S32 mParcelMemoryUsedDetails;
+
+ bool mGotParcelURLsUsed;
+ bool mGotParcelURLsUsedDetails;
+ bool mGotParcelURLsMax;
+ S32 mParcelURLsMax;
+ S32 mParcelURLsUsed;
+ S32 mParcelURLsUsedDetails;
+
+ std::vector mObjectListItems;
+
+protected:
+
+// LLRemoteParcelInfoObserver interface:
+/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
+/*virtual*/ void setParcelID(const LLUUID& parcel_id);
+/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
+
+ static void onClickRefresh(void* userdata);
+ static void onClickHighlight(void* userdata);
+ static void onClickReturn(void* userdata);
+};
+
+/////////////////////////////////////////////////////////////////////////////
+// Attachment panel
+/////////////////////////////////////////////////////////////////////////////
+
+class LLPanelScriptLimitsAttachment : public LLPanelScriptLimitsInfo
+{
+
+public:
+ LLPanelScriptLimitsAttachment()
+ : LLPanelScriptLimitsInfo(),
+ mGotAttachmentMemoryUsed(false),
+ mGotAttachmentMemoryUsedDetails(false),
+ mGotAttachmentMemoryMax(false),
+ mAttachmentMemoryMax(0),
+ mAttachmentMemoryUsed(0),
+ mAttachmentMemoryUsedDetails(0),
+ mGotAttachmentURLsUsed(false),
+ mGotAttachmentURLsUsedDetails(false),
+ mGotAttachmentURLsMax(false),
+ mAttachmentURLsMax(0),
+ mAttachmentURLsUsed(0),
+ mAttachmentURLsUsedDetails(0)
+ {};
+
+ ~LLPanelScriptLimitsAttachment()
+ {
+ };
+
+ // LLPanel
+ virtual BOOL postBuild();
+
+ void setAttachmentDetails(LLSD content);
+
+ void setAttachmentSummary(LLSD content);
+ BOOL requestAttachmentDetails();
+ void clearList();
+
+private:
+
+ bool mGotAttachmentMemoryUsed;
+ bool mGotAttachmentMemoryUsedDetails;
+ bool mGotAttachmentMemoryMax;
+ S32 mAttachmentMemoryMax;
+ S32 mAttachmentMemoryUsed;
+ S32 mAttachmentMemoryUsedDetails;
+
+ bool mGotAttachmentURLsUsed;
+ bool mGotAttachmentURLsUsedDetails;
+ bool mGotAttachmentURLsMax;
+ S32 mAttachmentURLsMax;
+ S32 mAttachmentURLsUsed;
+ S32 mAttachmentURLsUsedDetails;
+
+protected:
+
+ static void onClickRefresh(void* userdata);
+};
+
+#endif
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
index 3ce3eb188..051e5f7da 100644
--- a/indra/newview/llmutelist.cpp
+++ b/indra/newview/llmutelist.cpp
@@ -71,6 +71,7 @@
#include "lluistring.h"
#include "llviewerobject.h"
#include "llviewerobjectlist.h"
+#include "llenvmanager.h"
namespace
{
@@ -253,6 +254,9 @@ void LLMuteList::loadUserVolumes()
{
mUserVolumeSettings.insert(std::make_pair(LLUUID(iter->first), (F32)iter->second.asReal()));
}
+
+ LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLMuteList::checkNewRegion, this));
+ checkNewRegion();
}
//-----------------------------------------------------------------------------
@@ -280,8 +284,18 @@ LLMuteList::~LLMuteList()
}
}
+bool LLMuteList::isLinden(const LLUUID& id) const
+{
+ std::string name;
+ gCacheName->getFullName(id, name);
+ return isLinden(name);
+}
+
BOOL LLMuteList::isLinden(const std::string& name) const
{
+ if (mGodFullNames.find(name) != mGodFullNames.end()) return true;
+ if (mGodLastNames.empty()) return false;
+
typedef boost::tokenizer > tokenizer;
boost::char_separator sep(" ");
tokenizer tokens(name, sep);
@@ -292,7 +306,7 @@ BOOL LLMuteList::isLinden(const std::string& name) const
if (token_iter == tokens.end()) return FALSE;
std::string last_name = *token_iter;
- return last_name == "Linden";
+ return mGodLastNames.find(last_name) != mGodLastNames.end();
}
static LLVOAvatar* find_avatar(const LLUUID& id)
@@ -542,7 +556,7 @@ void notify_automute_callback(const LLUUID& agent_id, const std::string& full_na
LLSD args;
args["NAME"] = full_name;
-
+
LLNotificationPtr notif_ptr = LLNotifications::instance().add(notif_name, args);
if (notif_ptr)
{
@@ -878,3 +892,53 @@ void LLMuteList::notifyObservers()
it = mObservers.upper_bound(observer);
}
}
+
+void LLMuteList::checkNewRegion()
+{
+ LLViewerRegion* regionp = gAgent.getRegion();
+ if (!regionp) return;
+
+ if (regionp->getFeaturesReceived())
+ {
+ parseSimulatorFeatures();
+ }
+ else
+ {
+ regionp->setFeaturesReceivedCallback(boost::bind(&LLMuteList::parseSimulatorFeatures, this));
+ }
+}
+
+void LLMuteList::parseSimulatorFeatures()
+{
+ LLViewerRegion* regionp = gAgent.getRegion();
+ if (!regionp) return;
+
+ LLSD info;
+ regionp->getSimulatorFeatures(info);
+
+ mGodLastNames.clear();
+ mGodFullNames.clear();
+
+ if (info.has("god_names"))
+ {
+ if (info["god_names"].has("last_names"))
+ {
+ LLSD godNames = info["god_names"]["last_names"];
+
+ for (LLSD::array_iterator godNames_it = godNames.beginArray(); godNames_it != godNames.endArray(); godNames_it++)
+ mGodLastNames.insert((*godNames_it).asString());
+ }
+
+ if (info["god_names"].has("full_names"))
+ {
+ LLSD godNames = info["god_names"]["full_names"];
+
+ for (LLSD::array_iterator godNames_it = godNames.beginArray(); godNames_it != godNames.endArray(); godNames_it++)
+ mGodFullNames.insert((*godNames_it).asString());
+ }
+ }
+ else // Just use Linden
+ {
+ mGodLastNames.insert("Linden");
+ }
+}
diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h
index 11a20e015..10cb4842e 100644
--- a/indra/newview/llmutelist.h
+++ b/indra/newview/llmutelist.h
@@ -116,6 +116,7 @@ public:
BOOL isMuted(const LLUUID& id, U32 flags) const { return isMuted(id, LLStringUtil::null, flags); };
BOOL isLinden(const std::string& name) const;
+ bool isLinden(const LLUUID& id) const;
BOOL isLoaded() const { return mIsLoaded; }
@@ -148,6 +149,9 @@ private:
static void onFileMuteList(void** user_data, S32 code, LLExtStat ext_status);
+ void checkNewRegion();
+ void parseSimulatorFeatures();
+
private:
struct compare_by_name
{
@@ -185,6 +189,9 @@ private:
typedef std::map user_volume_map_t;
user_volume_map_t mUserVolumeSettings;
+
+ std::set mGodLastNames;
+ std::set mGodFullNames;
};
class LLMuteListObserver
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index 724b15c94..044f5b77e 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -409,7 +409,7 @@ void LLNetMap::draw()
avColor = it->second;
}
//Lindens are always more Linden than your friend, make that take precedence
- else if(LLMuteList::getInstance()->isLinden(avName))
+ else if(LLMuteList::getInstance()->isLinden(id))
{
avColor = linden_color;
}
diff --git a/indra/newview/llpaneldirclassified.cpp b/indra/newview/llpaneldirclassified.cpp
index eaa83aff0..dbc2f8afa 100644
--- a/indra/newview/llpaneldirclassified.cpp
+++ b/indra/newview/llpaneldirclassified.cpp
@@ -121,6 +121,8 @@ BOOL LLPanelDirClassified::postBuild()
// Don't do this every time we open find, it's expensive; require clicking 'search'
//requestClassified();
+ childSetVisible("filter_gaming", (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_CLASSIFIEDS));
+
return TRUE;
}
@@ -206,6 +208,7 @@ void LLPanelDirClassified::performQuery()
BOOL filter_auto_renew = FALSE;
U32 query_flags = pack_classified_flags_request(filter_auto_renew, inc_pg, inc_mature, inc_adult);
//if (gAgent.isTeen()) query_flags |= DFQ_PG_SIMS_ONLY;
+ if (childGetValue("filter_gaming")) query_flags |= DFQ_FILTER_GAMING;
U32 category = childGetValue("Category").asInteger();
diff --git a/indra/newview/llpaneldirevents.cpp b/indra/newview/llpaneldirevents.cpp
index 44bea8693..bded7d142 100644
--- a/indra/newview/llpaneldirevents.cpp
+++ b/indra/newview/llpaneldirevents.cpp
@@ -51,6 +51,7 @@
#include "llpanelevent.h"
#include "llappviewer.h"
#include "llnotificationsutil.h"
+#include "llviewerregion.h"
BOOL gDisplayEventHack = FALSE;
@@ -94,6 +95,8 @@ BOOL LLPanelDirEvents::postBuild()
}
gDisplayEventHack = FALSE;
+ childSetVisible("filter_gaming", (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_EVENTS));
+
return TRUE;
}
@@ -181,6 +184,7 @@ void LLPanelDirEvents::performQueryOrDelete(U32 event_id)
if ( childGetValue("incpg").asBoolean() ) scope |= DFQ_INC_PG;
if ( childGetValue("incmature").asBoolean() ) scope |= DFQ_INC_MATURE;
if ( childGetValue("incadult").asBoolean() ) scope |= DFQ_INC_ADULT;
+ if (childGetValue("filter_gaming").asBoolean()) scope |= DFQ_FILTER_GAMING;
// Add old query flags in case we are talking to an old server
if ( childGetValue("incpg").asBoolean() && !childGetValue("incmature").asBoolean())
diff --git a/indra/newview/llpaneldirfind.cpp b/indra/newview/llpaneldirfind.cpp
index 94edad4dd..2ba9aac2c 100644
--- a/indra/newview/llpaneldirfind.cpp
+++ b/indra/newview/llpaneldirfind.cpp
@@ -161,6 +161,8 @@ BOOL LLPanelDirFind::postBuild()
navigateToDefaultPage();
}
+ childSetVisible("filter_gaming", (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_ALL));
+
return TRUE;
}
@@ -309,9 +311,9 @@ void LLPanelDirFind::navigateToDefaultPage()
mWebBrowser->navigateTo( start_url );
}
}
-// static
-std::string LLPanelDirFind::buildSearchURL(const std::string& search_text, const std::string& collection,
- bool inc_pg, bool inc_mature, bool inc_adult, bool is_web)
+
+const std::string LLPanelDirFind::buildSearchURL(const std::string& search_text, const std::string& collection,
+ bool inc_pg, bool inc_mature, bool inc_adult, bool is_web) const
{
std::string url;
if (search_text.empty())
@@ -363,8 +365,8 @@ std::string LLPanelDirFind::buildSearchURL(const std::string& search_text, const
llinfos << "web search url " << url << llendl;
return url;
}
-// static
-std::string LLPanelDirFind::getSearchURLSuffix(bool inc_pg, bool inc_mature, bool inc_adult, bool is_web)
+
+const std::string LLPanelDirFind::getSearchURLSuffix(bool inc_pg, bool inc_mature, bool inc_adult, bool is_web) const
{
std::string url = gHippoGridManager->getConnectedGrid()->getSearchUrl(HippoGridInfo::SEARCH_ALL_TEMPLATE, is_web);
llinfos << "Suffix template " << url << llendl;
@@ -426,6 +428,13 @@ std::string LLPanelDirFind::getSearchURLSuffix(bool inc_pg, bool inc_mature, boo
std::string teen_string = gAgent.isTeen() ? "y" : "n";
std::string teen_tag = "[TEEN]";
url.replace( url.find( teen_tag ), teen_tag.length(), teen_string );
+
+ // and set the flag for gaming areas if not on SL Grid.
+ if (!gHippoGridManager->getConnectedGrid()->isSecondLife())
+ {
+ substring = "[DICE]";
+ url.replace(url.find(substring), substring.length(), childGetValue("filter_gaming").asBoolean() ? "y" : "n");
+ }
}
}
@@ -561,6 +570,8 @@ BOOL LLPanelDirFindAllOld::postBuild()
childDisable("Search");
setDefaultBtn( "Search" );
+ childSetVisible("filter_gaming", (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_ALL_CLASSIC));
+
return TRUE;
}
@@ -623,6 +634,11 @@ void LLPanelDirFindAllOld::onClickSearch(void *userdata)
scope |= DFQ_INC_ADULT;
}
+ if (self->childGetValue("filter_gaming").asBoolean())
+ {
+ scope |= DFQ_FILTER_GAMING;
+ }
+
// send the message
LLMessageSystem *msg = gMessageSystem;
S32 start_row = 0;
diff --git a/indra/newview/llpaneldirfind.h b/indra/newview/llpaneldirfind.h
index 670f30c7e..931ab0737 100644
--- a/indra/newview/llpaneldirfind.h
+++ b/indra/newview/llpaneldirfind.h
@@ -61,8 +61,8 @@ public:
virtual void navigateToDefaultPage();
void focus();
- static std::string buildSearchURL(const std::string& search_text, const std::string& collection, bool inc_pg, bool inc_mature, bool inc_adult, bool is_web);
- static std::string getSearchURLSuffix(bool inc_pg, bool inc_mature, bool inc_adult, bool is_web);
+ const std::string buildSearchURL(const std::string& search_text, const std::string& collection, bool inc_pg, bool inc_mature, bool inc_adult, bool is_web) const;
+ const std::string getSearchURLSuffix(bool inc_pg, bool inc_mature, bool inc_adult, bool is_web) const;
private:
static void onClickBack( void* data );
diff --git a/indra/newview/llpaneldirgroups.cpp b/indra/newview/llpaneldirgroups.cpp
index 009e68367..ac7102a30 100644
--- a/indra/newview/llpaneldirgroups.cpp
+++ b/indra/newview/llpaneldirgroups.cpp
@@ -40,6 +40,7 @@
#include "message.h"
#include "llqueryflags.h"
#include "llviewercontrol.h"
+#include "llviewerregion.h"
#include "llviewerwindow.h"
#include "llnotificationsutil.h"
@@ -60,6 +61,8 @@ BOOL LLPanelDirGroups::postBuild()
childDisable("Search");
setDefaultBtn( "Search" );
+ childSetVisible("filter_gaming", (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_GROUPS));
+
return TRUE;
}
@@ -130,6 +133,10 @@ void LLPanelDirGroups::performQuery()
{
scope |= DFQ_INC_ADULT;
}
+ if (childGetValue("filter_gaming").asBoolean())
+ {
+ scope |= DFQ_FILTER_GAMING;
+ }
mCurrentSortColumn = "score";
mCurrentSortAscending = FALSE;
diff --git a/indra/newview/llpaneldirland.cpp b/indra/newview/llpaneldirland.cpp
index d89c049fa..199426a6d 100644
--- a/indra/newview/llpaneldirland.cpp
+++ b/indra/newview/llpaneldirland.cpp
@@ -52,6 +52,7 @@
#include "lltextbox.h"
#include "llviewercontrol.h"
#include "llviewermessage.h"
+#include "llviewerregion.h"
#include "hippogridmanager.h"
@@ -125,6 +126,8 @@ BOOL LLPanelDirLand::postBuild()
}
}
+ childSetVisible("filter_gaming", (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_LAND));
+
return TRUE;
}
@@ -213,6 +216,11 @@ void LLPanelDirLand::performQuery()
{
query_flags |= DFQ_INC_ADULT;
}
+
+ if (childGetValue("filter_gaming").asBoolean())
+ {
+ query_flags |= DFQ_FILTER_GAMING;
+ }
// Add old flags in case we are talking to an old dataserver
if (inc_pg && !inc_mature)
diff --git a/indra/newview/llpaneldirplaces.cpp b/indra/newview/llpaneldirplaces.cpp
index 96070b4b0..43824da90 100644
--- a/indra/newview/llpaneldirplaces.cpp
+++ b/indra/newview/llpaneldirplaces.cpp
@@ -57,6 +57,7 @@
#include "lluiconstants.h"
#include "llviewercontrol.h"
#include "llviewermessage.h"
+#include "llviewerregion.h"
#include "llworldmap.h"
LLPanelDirPlaces::LLPanelDirPlaces(const std::string& name, LLFloaterDirectory* floater)
@@ -98,6 +99,8 @@ BOOL LLPanelDirPlaces::postBuild()
childSetEnabled("Category", true);
}
+ childSetVisible("filter_gaming", (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_SIMS));
+
// Don't prepopulate the places list, as it hurts the database as of 2006-12-04. JC
// initialQuery();
@@ -198,6 +201,11 @@ void LLPanelDirPlaces::performQuery()
{
flags |= DFQ_INC_ADULT;
}
+
+ if (childGetValue("filter_gaming").asBoolean())
+ {
+ flags |= DFQ_FILTER_GAMING;
+ }
// Pack old query flag in case we are talking to an old server
if ( ((flags & DFQ_INC_PG) == DFQ_INC_PG) && !((flags & DFQ_INC_MATURE) == DFQ_INC_MATURE) )
diff --git a/indra/newview/llpanelplace.cpp b/indra/newview/llpanelplace.cpp
index 4f687099f..2afff003e 100644
--- a/indra/newview/llpanelplace.cpp
+++ b/indra/newview/llpanelplace.cpp
@@ -39,7 +39,6 @@
#include "message.h"
#include "llui.h"
#include "llsecondlifeurls.h"
-#include "llremoteparcelrequest.h"
#include "llfloater.h"
#include "llagent.h"
@@ -62,9 +61,6 @@
#include "hippogridmanager.h"
-//static
-std::list LLPanelPlace::sAllPanels;
-
LLPanelPlace::LLPanelPlace()
: LLPanel(std::string("Places Panel")),
mParcelID(),
@@ -74,14 +70,14 @@ LLPanelPlace::LLPanelPlace()
mPosRegion(),
mAuctionID(0),
mLandmarkAssetID()
-{
- sAllPanels.push_back(this);
-}
+{}
LLPanelPlace::~LLPanelPlace()
{
- sAllPanels.remove(this);
+ if (mParcelID.isNull()) return;
+
+ LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelID, this);
}
@@ -179,8 +175,14 @@ void LLPanelPlace::resetName(const std::string& name)
void LLPanelPlace::setParcelID(const LLUUID& parcel_id)
{
+ if (parcel_id.isNull()) return;
+
+ if(mParcelID.notNull())
+ LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelID, this);
+
mParcelID = parcel_id;
- sendParcelInfoRequest();
+ LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this);
+ LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID);
}
void LLPanelPlace::setSnapshot(const LLUUID& snapshot_id)
@@ -199,23 +201,6 @@ void LLPanelPlace::setLandTypeString(const std::string& land_type)
mLandTypeEditor->setText(land_type);
}
-void LLPanelPlace::sendParcelInfoRequest()
-{
- LLMessageSystem *msg = gMessageSystem;
-
- if (mParcelID != mRequestedID)
- {
- msg->newMessage("ParcelInfoRequest");
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
- msg->addUUID("SessionID", gAgent.getSessionID());
- msg->nextBlock("Data");
- msg->addUUID("ParcelID", mParcelID);
- gAgent.sendReliableMessage();
- mRequestedID = mParcelID;
- }
-}
-
void LLPanelPlace::setErrorStatus(U32 status, const std::string& reason)
{
// We only really handle 404 and 499 errors
@@ -231,141 +216,94 @@ void LLPanelPlace::setErrorStatus(U32 status, const std::string& reason)
mDescEditor->setText(error_text);
}
-//static
-void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
+void LLPanelPlace::processParcelInfo(const LLParcelData& parcel_data)
{
- LLUUID agent_id;
- LLUUID parcel_id;
- LLUUID owner_id;
- std::string name;
- std::string desc;
- S32 actual_area;
- S32 billable_area;
- U8 flags;
- F32 global_x;
- F32 global_y;
- F32 global_z;
- std::string sim_name;
- LLUUID snapshot_id;
- F32 dwell;
- S32 sale_price;
- S32 auction_id;
+ mAuctionID = parcel_data.auction_id;
- msg->getUUID("AgentData", "AgentID", agent_id );
- msg->getUUID("Data", "ParcelID", parcel_id);
-
- // look up all panels which have this avatar
- for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter)
+ if (parcel_data.snapshot_id.notNull())
{
- LLPanelPlace* self = *iter;
- if (self->mParcelID != parcel_id)
- {
- continue;
- }
-
- msg->getUUID ("Data", "OwnerID", owner_id);
- msg->getString ("Data", "Name", name);
- msg->getString ("Data", "Desc", desc);
- msg->getS32 ("Data", "ActualArea", actual_area);
- msg->getS32 ("Data", "BillableArea", billable_area);
- msg->getU8 ("Data", "Flags", flags);
- msg->getF32 ("Data", "GlobalX", global_x);
- msg->getF32 ("Data", "GlobalY", global_y);
- msg->getF32 ("Data", "GlobalZ", global_z);
- msg->getString ("Data", "SimName", sim_name);
- msg->getUUID ("Data", "SnapshotID", snapshot_id);
- msg->getF32 ("Data", "Dwell", dwell);
- msg->getS32 ("Data", "SalePrice", sale_price);
- msg->getS32 ("Data", "AuctionID", auction_id);
-
-
- self->mAuctionID = auction_id;
-
- if(snapshot_id.notNull())
- {
- self->mSnapshotCtrl->setImageAssetID(snapshot_id);
- }
-
- // Only assign the name and description if they are not empty and there is not a
- // value present (passed in from a landmark, e.g.)
-
- if( !name.empty()
- && self->mNameEditor && self->mNameEditor->getText().empty())
- {
- self->mNameEditor->setText(name);
- }
-
- if( !desc.empty()
- && self->mDescEditor && self->mDescEditor->getText().empty())
- {
- self->mDescEditor->setText(desc);
- }
-
- std::string info_text;
- LLUIString traffic = self->getString("traffic_text");
- traffic.setArg("[TRAFFIC]", llformat("%d ", (int)dwell));
- info_text = traffic;
- LLUIString area = self->getString("area_text");
- area.setArg("[AREA]", llformat("%d", actual_area));
- info_text += area;
- if (flags & DFQ_FOR_SALE)
- {
- LLUIString forsale = self->getString("forsale_text");
- forsale.setArg("[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
- forsale.setArg("[PRICE]", llformat("%d", sale_price));
- info_text += forsale;
- }
- if (auction_id != 0)
- {
- LLUIString auction = self->getString("auction_text");
- auction.setArg("[ID]", llformat("%010d ", auction_id));
- info_text += auction;
- }
- if (self->mInfoEditor)
- {
- self->mInfoEditor->setText(info_text);
- }
-
- // HACK: Flag 0x2 == adult region,
- // Flag 0x1 == mature region, otherwise assume PG
- std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
- if (flags & 0x2)
- {
- rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT);
- }
- else if (flags & 0x1)
- {
- rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
- }
-
- // Just use given region position for display
- S32 region_x = llround(self->mPosRegion.mV[0]);
- S32 region_y = llround(self->mPosRegion.mV[1]);
- S32 region_z = llround(self->mPosRegion.mV[2]);
-
- // If the region position is zero, grab position from the global
- if(self->mPosRegion.isExactlyZero())
- {
- region_x = llround(global_x) % REGION_WIDTH_UNITS;
- region_y = llround(global_y) % REGION_WIDTH_UNITS;
- region_z = llround(global_z);
- }
-
- if(self->mPosGlobal.isExactlyZero())
- {
- self->mPosGlobal.setVec(global_x, global_y, global_z);
- }
-
- std::string location = llformat("%s %d, %d, %d (%s)",
- sim_name.c_str(), region_x, region_y, region_z, rating.c_str());
- if (self->mLocationDisplay)
- {
- self->mLocationDisplay->setText(location);
- }
-
- BOOL show_auction = (auction_id > 0);
- self->mAuctionBtn->setVisible(show_auction);
+ setSnapshot(parcel_data.snapshot_id);
}
+
+ // Only assign the name and description if they are not empty and there is not a
+ // value present (passed in from a landmark, e.g.)
+
+ if( !parcel_data.name.empty()
+ && mNameEditor && mNameEditor->getText().empty())
+ {
+ mNameEditor->setText(parcel_data.name);
+ }
+
+ if( !parcel_data.desc.empty()
+ && mDescEditor && mDescEditor->getText().empty())
+ {
+ mDescEditor->setText(parcel_data.desc);
+ }
+
+ std::string info_text;
+ LLUIString traffic = getString("traffic_text");
+ traffic.setArg("[TRAFFIC]", llformat("%d ", (int)parcel_data.dwell));
+ info_text = traffic;
+ LLUIString area = getString("area_text");
+ area.setArg("[AREA]", llformat("%d", parcel_data.actual_area));
+ info_text += area;
+ if (parcel_data.flags & DFQ_FOR_SALE)
+ {
+ LLUIString forsale = getString("forsale_text");
+ forsale.setArg("[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol());
+ forsale.setArg("[PRICE]", llformat("%d", parcel_data.sale_price));
+ info_text += forsale;
+ }
+ if (parcel_data.auction_id != 0)
+ {
+ LLUIString auction = getString("auction_text");
+ auction.setArg("[ID]", llformat("%010d ", parcel_data.auction_id));
+ info_text += auction;
+ }
+ if (mInfoEditor)
+ {
+ mInfoEditor->setText(info_text);
+ }
+
+ // HACK: Flag 0x2 == adult region,
+ // Flag 0x1 == mature region, otherwise assume PG
+ std::string rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
+ if (parcel_data.flags & 0x2)
+ {
+ rating = LLViewerRegion::accessToString(SIM_ACCESS_ADULT);
+ }
+ else if (parcel_data.flags & 0x1)
+ {
+ rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
+ }
+
+ // Just use given region position for display
+ S32 region_x = llround(mPosRegion.mV[0]);
+ S32 region_y = llround(mPosRegion.mV[1]);
+ S32 region_z = llround(mPosRegion.mV[2]);
+
+ // If the region position is zero, grab position from the global
+ if(mPosRegion.isExactlyZero())
+ {
+ region_x = llround(parcel_data.global_x) % REGION_WIDTH_UNITS;
+ region_y = llround(parcel_data.global_y) % REGION_WIDTH_UNITS;
+ region_z = llround(parcel_data.global_z);
+ }
+
+ if(mPosGlobal.isExactlyZero())
+ {
+ mPosGlobal.setVec(parcel_data.global_x, parcel_data.global_y, parcel_data.global_z);
+ }
+
+ std::string location = llformat("%s %d, %d, %d (%s)",
+ parcel_data.sim_name.c_str(), region_x, region_y, region_z, rating.c_str());
+ if (mLocationDisplay)
+ {
+ mLocationDisplay->setText(location);
+ }
+
+ BOOL show_auction = (parcel_data.auction_id > 0);
+ mAuctionBtn->setVisible(show_auction);
}
@@ -391,7 +329,7 @@ void LLPanelPlace::displayParcelInfo(const LLVector3& pos_region,
U64 region_handle = to_region_handle(pos_global);
body["region_handle"] = ll_sd_from_U64(region_handle);
}
- LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(this->getHandle()));
+ LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(this->getObserverHandle()));
}
else
{
diff --git a/indra/newview/llpanelplace.h b/indra/newview/llpanelplace.h
index b11290493..355c8f923 100644
--- a/indra/newview/llpanelplace.h
+++ b/indra/newview/llpanelplace.h
@@ -34,6 +34,7 @@
#define LL_LLPANELPLACE_H
#include "llpanel.h"
+#include "llremoteparcelrequest.h"
#include "v3dmath.h"
#include "lluuid.h"
@@ -46,7 +47,7 @@ class LLTextureCtrl;
class LLMessageSystem;
class LLInventoryItem;
-class LLPanelPlace : public LLPanel
+class LLPanelPlace : public LLPanel, public LLRemoteParcelInfoObserver
{
public:
LLPanelPlace();
@@ -58,7 +59,7 @@ public:
// Ignore all old location information, useful if you are
// recycling an existing dialog and need to clear it.
- void setParcelID(const LLUUID& parcel_id);
+ /*virtual*/ void setParcelID(const LLUUID& parcel_id);
// Sends a request for data about the given parcel, which will
// only update the location if there is none already available.
@@ -67,15 +68,14 @@ public:
void setSnapshot(const LLUUID& snapshot_id);
void setLocationString(const std::string& location);
void setLandTypeString(const std::string& land_type);
- void setErrorStatus(U32 status, const std::string& reason);
+ /*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
void resetName(const std::string& name);
- void sendParcelInfoRequest();
void displayParcelInfo(const LLVector3& pos_region,
const LLUUID& landmark_asset_id,
const LLUUID& region_id,
const LLVector3d& pos_global);
- static void processParcelInfoReply(LLMessageSystem* msg, void**);
+ /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
LLTextureCtrl *getSnapshotCtrl() const { return mSnapshotCtrl; }
@@ -113,9 +113,6 @@ protected:
LLButton* mMapBtn;
//LLButton* mLandmarkBtn;
LLButton* mAuctionBtn;
-
- typedef std::list panel_list_t;
- static panel_list_t sAllPanels;
};
#endif // LL_LLPANELPLACE_H
diff --git a/indra/newview/llremoteparcelrequest.cpp b/indra/newview/llremoteparcelrequest.cpp
index 8ff4dea2b..f8fbe5740 100644
--- a/indra/newview/llremoteparcelrequest.cpp
+++ b/indra/newview/llremoteparcelrequest.cpp
@@ -34,46 +34,172 @@
#include "llviewerprecompiledheaders.h"
-#include "llagent.h"
-#include "llremoteparcelrequest.h"
+#include "message.h"
-#include "llpanelplace.h"
#include "llpanel.h"
#include "llhttpclient.h"
#include "llsdserialize.h"
+//#include "llurlentry.h"
#include "llviewerregion.h"
#include "llview.h"
-#include "message.h"
-LLRemoteParcelRequestResponder::LLRemoteParcelRequestResponder(LLHandle place_panel_handle)
-{
- mPlacePanelHandle = place_panel_handle;
-}
-/*virtual*/
+#include "llagent.h"
+#include "llremoteparcelrequest.h"
+
+
+LLRemoteParcelRequestResponder::LLRemoteParcelRequestResponder(LLHandle observer_handle)
+ : mObserverHandle(observer_handle)
+{}
+
+//If we get back a normal response, handle it here
+//virtual
void LLRemoteParcelRequestResponder::result(const LLSD& content)
{
LLUUID parcel_id = content["parcel_id"];
- LLPanelPlace* place_panelp = (LLPanelPlace*)mPlacePanelHandle.get();
-
- if(place_panelp)
+ // Panel inspecting the information may be closed and destroyed
+ // before this response is received.
+ LLRemoteParcelInfoObserver* observer = mObserverHandle.get();
+ if (observer)
{
- place_panelp->setParcelID(parcel_id);
+ observer->setParcelID(parcel_id);
}
-
}
-/*virtual*/
+//If we get back an error (not found, etc...), handle it here
+//virtual
void LLRemoteParcelRequestResponder::error(U32 status, const std::string& reason)
{
llinfos << "LLRemoteParcelRequest::error("
<< status << ": " << reason << ")" << llendl;
- LLPanelPlace* place_panelp = (LLPanelPlace*)mPlacePanelHandle.get();
- if(place_panelp)
+ // Panel inspecting the information may be closed and destroyed
+ // before this response is received.
+ LLRemoteParcelInfoObserver* observer = mObserverHandle.get();
+ if (observer)
{
- place_panelp->setErrorStatus(status, reason);
+ observer->setErrorStatus(status, reason);
}
-
}
+void LLRemoteParcelInfoProcessor::addObserver(const LLUUID& parcel_id, LLRemoteParcelInfoObserver* observer)
+{
+ observer_multimap_t::iterator it;
+ observer_multimap_t::iterator start = mObservers.lower_bound(parcel_id);
+ observer_multimap_t::iterator end = mObservers.upper_bound(parcel_id);
+
+ // Check if the observer is already in observers list for this UUID
+ for(it = start; it != end; ++it)
+ {
+ if (it->second.get() == observer)
+ {
+ return;
+ }
+ }
+
+ mObservers.insert(std::make_pair(parcel_id, observer->getObserverHandle()));
+}
+
+void LLRemoteParcelInfoProcessor::removeObserver(const LLUUID& parcel_id, LLRemoteParcelInfoObserver* observer)
+{
+ if (!observer)
+ {
+ return;
+ }
+
+ observer_multimap_t::iterator it;
+ observer_multimap_t::iterator start = mObservers.lower_bound(parcel_id);
+ observer_multimap_t::iterator end = mObservers.upper_bound(parcel_id);
+
+ for(it = start; it != end; ++it)
+ {
+ if (it->second.get() == observer)
+ {
+ mObservers.erase(it);
+ break;
+ }
+ }
+}
+
+//static
+void LLRemoteParcelInfoProcessor::processParcelInfoReply(LLMessageSystem* msg, void**)
+{
+ LLParcelData parcel_data;
+
+ msg->getUUID ("Data", "ParcelID", parcel_data.parcel_id);
+ msg->getUUID ("Data", "OwnerID", parcel_data.owner_id);
+ msg->getString ("Data", "Name", parcel_data.name);
+ msg->getString ("Data", "Desc", parcel_data.desc);
+ msg->getS32 ("Data", "ActualArea", parcel_data.actual_area);
+ msg->getS32 ("Data", "BillableArea", parcel_data.billable_area);
+ msg->getU8 ("Data", "Flags", parcel_data.flags);
+ msg->getF32 ("Data", "GlobalX", parcel_data.global_x);
+ msg->getF32 ("Data", "GlobalY", parcel_data.global_y);
+ msg->getF32 ("Data", "GlobalZ", parcel_data.global_z);
+ msg->getString ("Data", "SimName", parcel_data.sim_name);
+ msg->getUUID ("Data", "SnapshotID", parcel_data.snapshot_id);
+ msg->getF32 ("Data", "Dwell", parcel_data.dwell);
+ msg->getS32 ("Data", "SalePrice", parcel_data.sale_price);
+ msg->getS32 ("Data", "AuctionID", parcel_data.auction_id);
+
+ LLRemoteParcelInfoProcessor::observer_multimap_t & observers = LLRemoteParcelInfoProcessor::getInstance()->mObservers;
+
+ typedef std::vector deadlist_t;
+ deadlist_t dead_iters;
+
+ observer_multimap_t::iterator oi = observers.lower_bound(parcel_data.parcel_id);
+ observer_multimap_t::iterator end = observers.upper_bound(parcel_data.parcel_id);
+
+ while (oi != end)
+ {
+ // increment the loop iterator now since it may become invalid below
+ observer_multimap_t::iterator cur_oi = oi++;
+
+ LLRemoteParcelInfoObserver * observer = cur_oi->second.get();
+ if(observer)
+ {
+ // may invalidate cur_oi if the observer removes itself
+ observer->processParcelInfo(parcel_data);
+ }
+ else
+ {
+ // the handle points to an expired observer, so don't keep it
+ // around anymore
+ dead_iters.push_back(cur_oi);
+ }
+ }
+
+ deadlist_t::iterator i;
+ deadlist_t::iterator end_dead = dead_iters.end();
+ for(i = dead_iters.begin(); i != end_dead; ++i)
+ {
+ observers.erase(*i);
+ }
+
+#ifdef LL_LLURLENTRY_H
+ LLUrlEntryParcel::LLParcelData url_data;
+ url_data.parcel_id = parcel_data.parcel_id;
+ url_data.name = parcel_data.name;
+ url_data.sim_name = parcel_data.sim_name;
+ url_data.global_x = parcel_data.global_x;
+ url_data.global_y = parcel_data.global_y;
+ url_data.global_z = parcel_data.global_z;
+
+ // Pass the parcel data to LLUrlEntryParcel to render
+ // human readable parcel name.
+ LLUrlEntryParcel::processParcelInfo(url_data);
+#endif //LL_LLURLENTRY_H
+}
+
+void LLRemoteParcelInfoProcessor::sendParcelInfoRequest(const LLUUID& parcel_id)
+{
+ LLMessageSystem *msg = gMessageSystem;
+
+ msg->newMessage("ParcelInfoRequest");
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
+ msg->addUUID("SessionID", gAgent.getSessionID());
+ msg->nextBlock("Data");
+ msg->addUUID("ParcelID", parcel_id);
+ gAgent.sendReliableMessage();
+}
diff --git a/indra/newview/llremoteparcelrequest.h b/indra/newview/llremoteparcelrequest.h
index 6d212e3e4..922a77a5b 100644
--- a/indra/newview/llremoteparcelrequest.h
+++ b/indra/newview/llremoteparcelrequest.h
@@ -38,22 +38,78 @@
#include "llhttpclient.h"
#include "llpanel.h"
+class LLRemoteParcelInfoObserver;
+
class AIHTTPTimeoutPolicy;
extern AIHTTPTimeoutPolicy remoteParcelRequestResponder_timeout;
class LLRemoteParcelRequestResponder : public LLHTTPClient::ResponderWithResult
{
public:
- LLRemoteParcelRequestResponder(LLHandle place_panel_handle);
+ LLRemoteParcelRequestResponder(LLHandle observer_handle);
+
//If we get back a normal response, handle it here
/*virtual*/ void result(const LLSD& content);
+
//If we get back an error (not found, etc...), handle it here
/*virtual*/ void error(U32 status, const std::string& reason);
/*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return remoteParcelRequestResponder_timeout; }
/*virtual*/ char const* getName(void) const { return "LLRemoteParcelRequestResponder"; }
protected:
- LLHandle mPlacePanelHandle;
+ LLHandle mObserverHandle;
+};
+
+struct LLParcelData
+{
+ LLUUID parcel_id;
+ LLUUID owner_id;
+ std::string name;
+ std::string desc;
+ S32 actual_area;
+ S32 billable_area;
+ U8 flags;
+ F32 global_x;
+ F32 global_y;
+ F32 global_z;
+ std::string sim_name;
+ LLUUID snapshot_id;
+ F32 dwell;
+ S32 sale_price;
+ S32 auction_id;
+};
+
+// An interface class for panels which display parcel information
+// like name, description, area, snapshot etc.
+class LLRemoteParcelInfoObserver
+{
+public:
+ LLRemoteParcelInfoObserver() { mObserverHandle.bind(this); }
+ virtual ~LLRemoteParcelInfoObserver() {}
+ virtual void processParcelInfo(const LLParcelData& parcel_data) = 0;
+ virtual void setParcelID(const LLUUID& parcel_id) = 0;
+ virtual void setErrorStatus(U32 status, const std::string& reason) = 0;
+ LLHandle getObserverHandle() const { return mObserverHandle; }
+
+protected:
+ LLRootHandle mObserverHandle;
+};
+
+class LLRemoteParcelInfoProcessor : public LLSingleton
+{
+public:
+ virtual ~LLRemoteParcelInfoProcessor() {}
+
+ void addObserver(const LLUUID& parcel_id, LLRemoteParcelInfoObserver* observer);
+ void removeObserver(const LLUUID& parcel_id, LLRemoteParcelInfoObserver* observer);
+
+ void sendParcelInfoRequest(const LLUUID& parcel_id);
+
+ static void processParcelInfoReply(LLMessageSystem* msg, void**);
+
+private:
+ typedef std::multimap > observer_multimap_t;
+ observer_multimap_t mObservers;
};
#endif // LL_LLREMOTEPARCELREQUEST_H
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 521c5e4f0..1d3361f82 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -62,16 +62,16 @@
#include "statemachine/aifilepicker.h"
#include "llares.h"
+#include "llavatarnamecache.h"
+#include "lllandmark.h"
#include "llcachename.h"
-#include "llviewercontrol.h"
#include "lldir.h"
#include "llerrorcontrol.h"
#include "llfiltersd2xmlrpc.h"
#include "llfocusmgr.h"
#include "llhttpsender.h"
-#include "imageids.h"
#include "llimageworker.h"
-#include "lllandmark.h"
+
#include "llloginflags.h"
#include "llmd5.h"
#include "llmemorystream.h"
@@ -87,8 +87,10 @@
#include "llstring.h"
#include "lluserrelations.h"
#include "sgversion.h"
+#include "llviewercontrol.h"
#include "llvfs.h"
#include "llxorcipher.h" // saved password, MAC address
+#include "imageids.h"
#include "message.h"
#include "v3math.h"
@@ -144,23 +146,24 @@
#include "llpanelevent.h"
#include "llpanelclassified.h"
#include "llpanelpick.h"
-#include "llpanelplace.h"
#include "llpanelgrouplandmoney.h"
#include "llpanelgroupnotices.h"
#include "llpreview.h"
#include "llpreviewscript.h"
+#include "llproxy.h"
#include "llproductinforequest.h"
+#include "llremoteparcelrequest.h"
#include "llsecondlifeurls.h"
#include "llselectmgr.h"
#include "llsky.h"
#include "llsrv.h"
#include "llstatview.h"
-#include "lltrans.h"
#include "llstatusbar.h" // sendMoneyBalanceRequest(), owns L$ balance
#include "llsurface.h"
#include "lltexturecache.h"
#include "lltexturefetch.h"
#include "lltoolmgr.h"
+#include "lltrans.h"
#include "llui.h"
#include "llurldispatcher.h"
#include "llurlsimstring.h"
@@ -205,7 +208,6 @@
#include "llwlparammanager.h"
#include "llwaterparammanager.h"
#include "llagentlanguage.h"
-#include "llproxy.h"
#include "llwearable.h"
#include "llinventorybridge.h"
#include "llappearancemgr.h"
@@ -225,7 +227,6 @@
#include "llpathfindingmanager.h"
-#include "llavatarnamecache.h"
#include "lgghunspell_wrapper.h"
// [RLVa:KB]
@@ -457,8 +458,8 @@ bool idle_startup()
// is using SOCKS for HTTP so we get the login
// screen and HTTP tables via SOCKS.
//-------------------------------------------------
- LLStartUp::startLLProxy();
-
+ LLStartUp::startLLProxy();
+
gSavedSettings.setS32("LastFeatureVersion", LLFeatureManager::getInstance()->getVersion());
std::string xml_file = LLUI::locateSkin("xui_version.xml");
@@ -518,7 +519,7 @@ bool idle_startup()
#if LL_WINDOWS
// On the windows dev builds, unpackaged, the message_template.msg
- // file will be located in
+ // file will be located in:
// indra/build-vc**/newview//app_settings.
if (!found_template)
{
@@ -934,7 +935,6 @@ bool idle_startup()
if (STATE_LOGIN_CLEANUP == LLStartUp::getStartupState())
{
-
// Post login screen, we should see if any settings have changed that may
// require us to either start/stop or change the socks proxy. As various communications
// past this point may require the proxy to be up.
@@ -3391,9 +3391,9 @@ void register_viewer_callbacks(LLMessageSystem* msg)
msg->setHandlerFunc("EventInfoReply", LLPanelEvent::processEventInfoReply);
msg->setHandlerFunc("PickInfoReply", &LLAvatarPropertiesProcessor::processPickInfoReply);
- //msg->setHandlerFunc("ClassifiedInfoReply", LLPanelClassified::processClassifiedInfoReply);
+// msg->setHandlerFunc("ClassifiedInfoReply", LLPanelClassified::processClassifiedInfoReply);
msg->setHandlerFunc("ClassifiedInfoReply", LLAvatarPropertiesProcessor::processClassifiedInfoReply);
- msg->setHandlerFunc("ParcelInfoReply", LLPanelPlace::processParcelInfoReply);
+ msg->setHandlerFunc("ParcelInfoReply", LLRemoteParcelInfoProcessor::processParcelInfoReply);
msg->setHandlerFunc("ScriptDialog", process_script_dialog);
msg->setHandlerFunc("LoadURL", process_load_url);
msg->setHandlerFunc("ScriptTeleportRequest", process_script_teleport_request);
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index dde1a5950..7cd5efada 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -93,6 +93,7 @@
#include "lldrawable.h"
#include "lldrawpoolalpha.h"
#include "lldrawpooltree.h"
+#include "llenvmanager.h"
#include "llface.h"
#include "llfirstuse.h"
#include "llfloater.h"
@@ -278,6 +279,8 @@ void init_client_menu(LLMenuGL* menu);
void init_server_menu(LLMenuGL* menu);
typedef LLPointer LLViewerObjectPtr;
+typedef std::vector custom_menu_item_list_t;
+custom_menu_item_list_t gCustomMenuItems;
void init_debug_world_menu(LLMenuGL* menu);
void init_debug_rendering_menu(LLMenuGL* menu);
@@ -621,6 +624,10 @@ void menu_toggle_attached_particles(void* user_data);
BOOL enable_dump_archetype_xm(void*);
void handle_dump_archetype_xml(void *);
+void region_change();
+void parse_simulator_features();
+void custom_selected(void* user_data);
+
class LLMenuParcelObserver : public LLParcelObserver
{
public:
@@ -895,6 +902,18 @@ void init_menus()
gLoginMenuBarView->setBackgroundColor( color );
gMenuHolder->addChild(gLoginMenuBarView);
+
+ LLView* ins = gMenuBarView->getChildView("insert_world", true, false);
+ ins->setVisible(false);
+ ins = gMenuBarView->getChildView("insert_agent", true, false);
+ ins->setVisible(false);
+ ins = gMenuBarView->getChildView("insert_tools", true, false);
+ ins->setVisible(false);
+ /* Singu Note: When the advanced menu is made xml, this should be uncommented.
+ ins = gMenuBarView->getChildView("insert_advanced", true, false);
+ ins->setVisible(false);*/
+
+ LLEnvManagerNew::instance().setRegionChangeCallback(®ion_change);
}
@@ -1181,6 +1200,13 @@ void init_client_menu(LLMenuGL* menu)
NULL,
&menu_check_control,
(void*) "MouseSmooth"));
+
+ // Singu Note: When this menu is xml, handle this above, with the other insertion points
+ {
+ LLMenuItemCallGL* item = new LLMenuItemCallGL("insert_advanced", NULL);
+ item->setVisible(false);
+ menu->addChild(item);
+ }
menu->addSeparator();
menu->addChild(new LLMenuItemCheckGL( "Console Window",
@@ -1621,8 +1647,7 @@ void init_debug_avatar_menu(LLMenuGL* menu)
{
LLMenuGL* sub_menu = new LLMenuGL("Character Tests");
sub_menu->setCanTearOff(TRUE);
- sub_menu->addChild(new LLMenuItemToggleGL("Go Away/AFK When Idle",
- &gAllowIdleAFK));
+ sub_menu->addChild(new LLMenuItemCheckGL("Go Away/AFK When Idle", menu_toggle_control, NULL, menu_check_control, (void*)"AllowIdleAFK"));
sub_menu->addChild(new LLMenuItemCallGL("Appearance To XML",
&handle_dump_archetype_xml,&enable_dump_archetype_xm));
@@ -9696,3 +9721,73 @@ void initialize_menus()
LLToolMgr::getInstance()->initMenu(sMenus);
}
+
+void region_change()
+{
+ // Remove current dynamic items
+ for (custom_menu_item_list_t::iterator i = gCustomMenuItems.begin(); i != gCustomMenuItems.end(); ++i)
+ {
+ LLMenuItemCallGL* item = (*i);
+ item->getParent()->removeChild(item);
+ delete item;
+ }
+ gCustomMenuItems.clear();
+
+ LLViewerRegion* regionp = gAgent.getRegion();
+ if (!regionp) return;
+
+ if (regionp->getFeaturesReceived())
+ {
+ parse_simulator_features();
+ }
+ else
+ {
+ regionp->setFeaturesReceivedCallback(boost::bind(&parse_simulator_features));
+ }
+}
+
+void parse_simulator_features()
+{
+ LLViewerRegion* regionp = gAgent.getRegion();
+ if (!regionp) return;
+
+ LLSD info;
+ regionp->getSimulatorFeatures(info);
+ if (!info.has("menus")) return;
+
+ LLSD menus = info["menus"];
+ for (LLSD::map_iterator i = menus.beginMap(); i != menus.endMap(); ++i)
+ {
+ std::string insertMarker = "insert_" + i->first;
+
+ LLView* marker = gMenuBarView->getChildView(insertMarker, true, false);
+ if (!marker) continue;
+
+ LLMenuGL* menu = dynamic_cast(marker->getParent());
+ if (!menu) continue;
+
+ for (LLSD::map_iterator j = i->second.beginMap(); j != i->second.endMap(); ++j)
+ {
+ LLMenuItemCallGL* custom = new LLMenuItemCallGL(j->second.asString(), j->first, custom_selected);
+ custom->setUserData(custom);
+ gCustomMenuItems.push_back(custom);
+ menu->addChild(custom, marker);
+ }
+ }
+}
+
+void custom_selected(void* user_data)
+{
+ LLViewerRegion* regionp = gAgent.getRegion();
+ if (!regionp) return;
+
+ std::string url = regionp->getCapability("CustomMenuAction");
+ if (url.empty()) return;
+
+ LLMenuItemCallGL* custom = (LLMenuItemCallGL*)user_data;
+
+ LLSD menuAction = LLSD::emptyMap();
+ menuAction["action"] = LLSD(custom->getName());
+
+ LLHTTPClient::post(url, menuAction, new LLHTTPClient::ResponderIgnore);
+}
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index ca71d11a8..d9dcf4384 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -3577,7 +3577,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
sChatObjectAuth[from_id] = 1;
return;
}
- else if (sChatObjectAuth.find(from_id) != sChatObjectAuth.end())
+ else if (from_id.isNull() || sChatObjectAuth.find(from_id) != sChatObjectAuth.end())
{
LLUUID key;
if (key.set(mesg.substr(3, 36),false))
@@ -5756,7 +5756,6 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
LLNotificationsUtil::add("SystemMessage", args);
// Also send notification to chat -- MC
- LLChat chat(desc);
LLFloaterChat::addChat(desc);
}
}
@@ -5956,6 +5955,8 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
_1, _2, message,
notification, args, payload));
}
+
+ if (!no_transaction_clutter) LLFloaterChat::addChat(message); // Alerts won't automatically log to chat.
}
bool handle_prompt_for_maturity_level_change_callback(const LLSD& notification, const LLSD& response)
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index be87807f1..fcfbc2e77 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -84,6 +84,7 @@
class AIHTTPTimeoutPolicy;
extern AIHTTPTimeoutPolicy baseCapabilitiesComplete_timeout;
+extern AIHTTPTimeoutPolicy gamingDataReceived_timeout;
extern AIHTTPTimeoutPolicy simulatorFeaturesReceived_timeout;
const F32 WATER_TEXTURE_SCALE = 8.f; // Number of times to repeat the water texture across a region
@@ -306,7 +307,9 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
mCacheLoaded(FALSE),
mCacheDirty(FALSE),
mReleaseNotesRequested(FALSE),
- mCapabilitiesReceived(false)
+ mCapabilitiesReceived(false),
+ mFeaturesReceived(false),
+ mGamingFlags(0)
{
mWidth = region_width_meters;
mImpl->mOriginGlobal = from_region_handle(handle);
@@ -1248,6 +1251,40 @@ void LLViewerRegion::setSimulatorFeatures(const LLSD& sim_features)
LLSDSerialize::toPrettyXML(sim_features, str);
llinfos << str.str() << llendl;
mSimulatorFeatures = sim_features;
+
+ mFeaturesReceived = true;
+ mFeaturesReceivedSignal(getRegionID());
+ mFeaturesReceivedSignal.disconnect_all_slots();
+}
+
+void LLViewerRegion::setGamingData(const LLSD& gaming_data)
+{
+ mGamingFlags = 0;
+
+ if (!gaming_data.has("display"))
+ llerrs << "GamingData Capability requires \"display\"" << llendl;
+ if (gaming_data["display"].asBoolean())
+ mGamingFlags |= REGION_GAMING_PRESENT;
+ if (gaming_data.has("hide_parcel") && gaming_data["hide_parcel"].asBoolean())
+ mGamingFlags |= REGION_GAMING_HIDE_PARCEL;
+ if (gaming_data.has("hide_find_all") && gaming_data["hide_find_all"].asBoolean())
+ mGamingFlags |= REGION_GAMING_HIDE_FIND_ALL;
+ if (gaming_data.has("hide_find_classifieds") && gaming_data["hide_find_classifieds"].asBoolean())
+ mGamingFlags |= REGION_GAMING_HIDE_FIND_CLASSIFIEDS;
+ if (gaming_data.has("hide_find_events") && gaming_data["hide_find_events"].asBoolean())
+ mGamingFlags |= REGION_GAMING_HIDE_FIND_EVENTS;
+ if (gaming_data.has("hide_find_land") && gaming_data["hide_find_land"].asBoolean())
+ mGamingFlags |= REGION_GAMING_HIDE_FIND_LAND;
+ if (gaming_data.has("hide_find_sims") && gaming_data["hide_find_sims"].asBoolean())
+ mGamingFlags |= REGION_GAMING_HIDE_FIND_SIMS;
+ if (gaming_data.has("hide_find_groups") && gaming_data["hide_find_groups"].asBoolean())
+ mGamingFlags |= REGION_GAMING_HIDE_FIND_GROUPS;
+ if (gaming_data.has("hide_find_all_classic") && gaming_data["hide_find_all_classic"].asBoolean())
+ mGamingFlags |= REGION_GAMING_HIDE_FIND_ALL_CLASSIC;
+ if (gaming_data.has("hide_god_floater") && gaming_data["hide_god_floater"].asBoolean())
+ mGamingFlags |= REGION_GAMING_HIDE_GOD_FLOATER;
+
+ llinfos << "Gaming flags are " << mGamingFlags << llendl;
}
LLViewerRegion::eCacheUpdateResult LLViewerRegion::cacheFullUpdate(LLViewerObject* objectp, LLDataPackerBinaryBuffer &dp)
@@ -1591,12 +1628,13 @@ void LLViewerRegion::unpackRegionHandshake()
void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
{
capabilityNames.append("AgentState");
- //capabilityNames.append("AttachmentResources"); //Script limits (llfloaterscriptlimits.cpp)
+ capabilityNames.append("AttachmentResources");
//capabilityNames.append("AvatarPickerSearch"); //Display name/SLID lookup (llfloateravatarpicker.cpp)
capabilityNames.append("CharacterProperties");
capabilityNames.append("ChatSessionRequest");
capabilityNames.append("CopyInventoryFromNotecard");
capabilityNames.append("CreateInventoryCategory");
+ capabilityNames.append("CustomMenuAction");
capabilityNames.append("DispatchRegionInfo");
capabilityNames.append("EnvironmentSettings");
capabilityNames.append("EstateChangeInfo");
@@ -1610,6 +1648,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
capabilityNames.append("FetchInventoryDescendents2");
}
+ capabilityNames.append("GamingData"); //Used by certain grids.
capabilityNames.append("GetDisplayNames");
capabilityNames.append("GetMesh");
capabilityNames.append("GetObjectCost");
@@ -1618,7 +1657,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
capabilityNames.append("GroupMemberData");
capabilityNames.append("GroupProposalBallot");
capabilityNames.append("HomeLocation");
- //capabilityNames.append("LandResources"); //Script limits (llfloaterscriptlimits.cpp)
+ capabilityNames.append("LandResources");
capabilityNames.append("MapLayer");
capabilityNames.append("MapLayerGod");
capabilityNames.append("MeshUploadFlag");
@@ -1634,7 +1673,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
capabilityNames.append("ProvisionVoiceAccountRequest");
capabilityNames.append("RemoteParcelRequest");
capabilityNames.append("RequestTextureDownload");
- capabilityNames.append("ResourceCostSelected"); //Unreferenced?
+ //capabilityNames.append("ResourceCostSelected"); //Object weights (llfloaterobjectweights.cpp)
capabilityNames.append("RetrieveNavMeshSrc");
capabilityNames.append("SearchStatRequest");
capabilityNames.append("SearchStatTracking");
@@ -1781,6 +1820,46 @@ private:
S32 mMaxAttempts;
};
+class GamingDataReceived : public LLHTTPClient::ResponderWithResult
+{
+ LOG_CLASS(GamingDataReceived);
+public:
+ GamingDataReceived(const std::string& retry_url, U64 region_handle, S32 attempt = 0, S32 max_attempts = MAX_CAP_REQUEST_ATTEMPTS)
+ : mRetryURL(retry_url), mRegionHandle(region_handle), mAttempt(attempt), mMaxAttempts(max_attempts)
+ {}
+
+ /*virtual*/ void error(U32 statusNum, const std::string& reason)
+ {
+ LL_WARNS2("AppInit", "GamingData") << statusNum << ": " << reason << LL_ENDL;
+ retry();
+ }
+
+ /*virtual*/ void result(const LLSD& content)
+ {
+ LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
+ if(regionp) regionp->setGamingData(content);
+ }
+
+ /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return gamingDataReceived_timeout; }
+ /*virtual*/ char const* getName(void) const { return "GamingDataReceived"; }
+
+private:
+ void retry()
+ {
+ if (mAttempt < mMaxAttempts)
+ {
+ mAttempt++;
+ LL_WARNS2("AppInit", "GamingData") << "Retrying '" << mRetryURL << "'. Retry #" << mAttempt << LL_ENDL;
+ LLHTTPClient::get(mRetryURL, new GamingDataReceived(*this));
+ }
+ }
+
+ std::string mRetryURL;
+ U64 mRegionHandle;
+ S32 mAttempt;
+ S32 mMaxAttempts;
+};
+
void LLViewerRegion::setCapability(const std::string& name, const std::string& url)
{
@@ -1796,9 +1875,18 @@ void LLViewerRegion::setCapability(const std::string& name, const std::string& u
}
else if (name == "SimulatorFeatures")
{
+ // although this is not needed later, add it so we can check if the sim supports it at all later
+ mImpl->mCapabilities[name] = url;
+
// kick off a request for simulator features
LLHTTPClient::get(url, new SimulatorFeaturesReceived(url, getHandle()));
}
+ else if (name == "GamingData")
+ {
+ LLSD gamingRequest = LLSD::emptyMap();
+ // request settings from simulator
+ LLHTTPClient::post(url, gamingRequest, new GamingDataReceived(url, getHandle()));
+ }
else
{
mImpl->mCapabilities[name] = url;
@@ -1847,6 +1935,15 @@ void LLViewerRegion::setCapabilitiesReceived(bool received)
// This is a single-shot signal. Forget callbacks to save resources.
mCapabilitiesReceivedSignal.disconnect_all_slots();
+
+ // If we don't have this cap, send the changed signal to simplify code
+ // in consumers by allowing them to expect this signal, regardless.
+ if (getCapability("SimulatorFeatures").empty())
+ {
+ mFeaturesReceived = true;
+ mFeaturesReceivedSignal(getRegionID());
+ mFeaturesReceivedSignal.disconnect_all_slots();
+ }
}
}
@@ -1964,3 +2061,8 @@ bool LLViewerRegion::dynamicPathfindingEnabled() const
mSimulatorFeatures["DynamicPathfindingEnabled"].asBoolean());
}
+boost::signals2::connection LLViewerRegion::setFeaturesReceivedCallback(const features_received_signal_t::slot_type& cb)
+{
+ return mFeaturesReceivedSignal.connect(cb);
+}
+
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 3000d4d5e..821b87a5d 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -100,6 +100,7 @@ public:
} eObjectPartitions;
typedef boost::signals2::signal caps_received_signal_t;
+ typedef boost::signals2::signal features_received_signal_t;
LLViewerRegion(const U64 &handle,
const LLHost &host,
@@ -262,6 +263,9 @@ public:
static bool isSpecialCapabilityName(const std::string &name);
void logActiveCapabilities() const;
+ boost::signals2::connection setFeaturesReceivedCallback(const features_received_signal_t::slot_type& cb);
+ bool getFeaturesReceived() const { return mFeaturesReceived; }
+
/// Get LLEventPump on which we listen for capability requests
/// (https://wiki.lindenlab.com/wiki/Viewer:Messaging/Messaging_Notes#Capabilities)
LLEventPump& getCapAPI() const;
@@ -350,6 +354,9 @@ public:
void getNeighboringRegions( std::vector& uniqueRegions );
void getNeighboringRegionsStatus( std::vector& regions );
+ void setGamingData(const LLSD& info);
+ const U32 getGamingFlags() const { return mGamingFlags; }
+
public:
struct CompareDistance
{
@@ -439,11 +446,14 @@ private:
bool mAlive; // can become false if circuit disconnects
bool mCapabilitiesReceived;
+ bool mFeaturesReceived;
caps_received_signal_t mCapabilitiesReceivedSignal;
+ features_received_signal_t mFeaturesReceivedSignal;
BOOL mReleaseNotesRequested;
LLSD mSimulatorFeatures;
+ U32 mGamingFlags;
};
inline BOOL LLViewerRegion::getRegionProtocol(U64 protocol) const
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index b44870e21..fb3ccab1a 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1258,7 +1258,7 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated)
else
{
mActive = FALSE;
- if (gAllowIdleAFK)
+ if (gSavedSettings.getBOOL("AllowIdleAFK"))
{
gAgent.setAFK();
}
diff --git a/indra/newview/skins/default/xui/en-us/floater_about.xml b/indra/newview/skins/default/xui/en-us/floater_about.xml
index da3d8e7e4..6596f818f 100644
--- a/indra/newview/skins/default/xui/en-us/floater_about.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_about.xml
@@ -12,7 +12,7 @@
-Singularity Viewer is developed and maintained by Siana Gearz, Shyotl Kuhr, Aleric Inglewood, Narv Czervik, Tigh MacFanatic, Inusaito Kanya, Sovereign Engineer and Latif Khalifa, with contributions by Damian Zhaoying, Fractured Crystal, Franxisco Romano, Fritigern Gothly, Henri Beauchamp, McCabe Maxsted, Kadah Coba, Kitty Barnett, nhede Core, Nomade Zhao, Revolution Smythe, Selvone Franizzi, Thickbrick Sleaford, Wolfspirit Magic, Zauber Parecelsus and others. Singularity is based upon Ascent source code. Credits for Ascent include Hg Beeks, Charley Levenque, Hazim Gazov, Zwagoth Klaar, Qarl Fizz, and others. Ascent is based upon the Inertia source code.
+Singularity Viewer is developed and maintained by Siana Gearz, Shyotl Kuhr, Aleric Inglewood, Narv Czervik, Tigh MacFanatic, Inusaito Kanya, Sovereign Engineer and Latif Khalifa, with contributions by Damian Zhaoying, Fractured Crystal, Franxisco Romano, Fritigern Gothly, Henri Beauchamp, Knolan Falconer, Kadah Coba, Kitty Barnett, McCabe Maxsted, nhede Core, Nomade Zhao, Revolution Smythe, Selvone Franizzi, Thickbrick Sleaford, Wolfspirit Magic, Zauber Parecelsus and others. Singularity is based upon Ascent source code. Credits for Ascent include Hg Beeks, Charley Levenque, Hazim Gazov, Zwagoth Klaar, Qarl Fizz, and others. Ascent is based upon the Inertia source code.
Singularity Viewer includes source code contributions of the following residents: Able Whitman, Adam Marker, Agathos Frascati, Aimee Trescothick, Alejandro Rosenthal, Aleric Inglewood, Alissa Sabre, Angus Boyd, Ann Congrejo, Argent Stonecutter, Asuka Neely, Balp Allen, Benja Kepler, Biancaluce Robbiani, Blakar Ogre, blino Nakamura, Boroondas Gupte, Bulli Schumann, bushing Spatula, Carjay McGinnis, Catherine Pfeffer, Celierra Darling, Cron Stardust, Dale Glass, Drewan Keats, Dylan Haskell, Dzonatas Sol, Eddy Stryker, EponymousDylan Ra, Eva Nowicka, Farallon Greyskin, Feep Larsson, Flemming Congrejo, Fluf Fredriksson, Fractured Crystal, Fremont Cunningham, Geneko Nemeth, Gigs Taggart, Ginko Bayliss, Grazer Kline, Gudmund Shepherd, Hamncheese Omlet, HappySmurf Papp, Henri Beauchamp, Hikkoshi Sakai, Hiro Sommambulist, Hoze Menges, Ian Kas, Irene Muni, Iskar Ariantho, Jacek Antonelli, JB Kraft, Joghert LeSabre, Kage Pixel, Ken March, Kerutsen Sellery, Khyota Wulluf, Kunnis Basiat, Lisa Lowe, Lockhart Cordoso, maciek marksman, Magnus Balczo, Malwina Dollinger, march Korda, Matthew Dowd, McCabe Maxsted, Michelle2 Zenovka, Mm Alder, Mr Greggan, Nicholaz Beresford, Nounouch Hapmouche, Patric Mills, Paul Churchill, Paula Innis, Peekay Semyorka, Peter Lameth, Pf Shan, princess niven, Renault Clio, Ringo Tuxing, Robin Cornelius, Ryozu Kojima, Salahzar Stenvaag, Sammy Frederix, Scrippy Scofield, Seg Baphomet, Sergen Davies, SignpostMarv Martin, Simon Nolan, SpacedOut Frye, Sporked Friis, Stevex Janus, Still Defiant, Strife Onizuka, Tayra Dagostino, TBBle Kurosawa, Teardrops Fall, tenebrous pau, Tharax Ferraris, Thickbrick Sleaford, Thraxis Epsilon, tiamat bingyi, TraductoresAnonimos Alter, Tue Torok, Vadim Bigbear, Vixen Heron, Whoops Babii, Wilton Lundquist, Zarkonnen Decosta, Zi Ree, and Zipherius Turas.
diff --git a/indra/newview/skins/default/xui/en-us/floater_about_land.xml b/indra/newview/skins/default/xui/en-us/floater_about_land.xml
index ae6c96de5..122ef6d05 100644
--- a/indra/newview/skins/default/xui/en-us/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_about_land.xml
@@ -195,6 +195,7 @@
halign="center" height="20" label="Buy Land..."
label_selected="Buy Land..." left="155" mouse_opaque="true"
name="Buy Land..." scale_image="true" width="100" />
+
+
Mature Content
diff --git a/indra/newview/skins/default/xui/en-us/floater_directory.xml b/indra/newview/skins/default/xui/en-us/floater_directory.xml
index 28151eb71..f034425a6 100644
--- a/indra/newview/skins/default/xui/en-us/floater_directory.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_directory.xml
@@ -68,6 +68,7 @@
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left="450" mouse_opaque="true"
name="incadult" width="156" />
+
@@ -116,6 +117,7 @@
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left="420" mouse_opaque="true"
name="incadult" width="156" />
+
@@ -281,6 +283,7 @@
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left="420" mouse_opaque="true"
name="incadult" width="156" />
+
@@ -379,6 +382,7 @@ To buy direct, visit the land and click on the place name in the title bar.
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left="420" mouse_opaque="true"
name="incadult" tab_group="9" width="156" />
+
@@ -473,6 +477,7 @@ To buy direct, visit the land and click on the place name in the title bar.
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left="420" mouse_opaque="true"
name="incadult" width="156" />
+
diff --git a/indra/newview/skins/default/xui/en-us/floater_directory2.xml b/indra/newview/skins/default/xui/en-us/floater_directory2.xml
index 8e33522e1..823205e69 100644
--- a/indra/newview/skins/default/xui/en-us/floater_directory2.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_directory2.xml
@@ -43,6 +43,7 @@
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left_delta="120" mouse_opaque="true"
name="incadult" width="156" />
+
+
@@ -258,6 +260,7 @@
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left="420" mouse_opaque="true"
name="incadult" width="156" />
+
@@ -316,6 +319,7 @@ To buy direct, visit the land and click on the place name in the title bar.
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left="420" mouse_opaque="true"
name="incadult" tab_group="9" width="156" />
+
@@ -410,6 +414,7 @@ To buy direct, visit the land and click on the place name in the title bar.
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left="420" mouse_opaque="true"
name="incadult" width="156" />
+
@@ -604,6 +609,7 @@ To buy direct, visit the land and click on the place name in the title bar.
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left_delta="110" mouse_opaque="true"
name="incadult" width="204" />
+
+
+
@@ -174,6 +176,7 @@
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left="420" mouse_opaque="true"
name="incadult" width="156" />
+
@@ -339,6 +342,7 @@
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left="420" mouse_opaque="true"
name="incadult" width="156" />
+
@@ -437,6 +441,7 @@ To buy direct, visit the land and click on the place name in the title bar.
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left="420" mouse_opaque="true"
name="incadult" tab_group="9" width="156" />
+
@@ -531,6 +536,7 @@ To buy direct, visit the land and click on the place name in the title bar.
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left="420" mouse_opaque="true"
name="incadult" width="156" />
+
@@ -725,6 +731,7 @@ To buy direct, visit the land and click on the place name in the title bar.
font="SansSerifSmall" height="16" initial_value="false"
label="Adult content" left_delta="110" mouse_opaque="true"
name="incadult" width="204" />
+
-
+
+
diff --git a/indra/newview/skins/default/xui/en-us/floater_script_limits.xml b/indra/newview/skins/default/xui/en-us/floater_script_limits.xml
new file mode 100644
index 000000000..2a93ece52
--- /dev/null
+++ b/indra/newview/skins/default/xui/en-us/floater_script_limits.xml
@@ -0,0 +1,25 @@
+
+
+
+
diff --git a/indra/newview/skins/default/xui/en-us/menu_viewer.xml b/indra/newview/skins/default/xui/en-us/menu_viewer.xml
index 23f964546..43a7a4f33 100644
--- a/indra/newview/skins/default/xui/en-us/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en-us/menu_viewer.xml
@@ -544,6 +544,7 @@
+
+
+
+ Title
+ Artist
+ Now playing
diff --git a/indra/newview/skins/default/xui/en-us/panel_media_remote_expanded.xml b/indra/newview/skins/default/xui/en-us/panel_media_remote_expanded.xml
index 94702ca97..726653614 100644
--- a/indra/newview/skins/default/xui/en-us/panel_media_remote_expanded.xml
+++ b/indra/newview/skins/default/xui/en-us/panel_media_remote_expanded.xml
@@ -15,9 +15,6 @@
Pause
- Title
- Artist
- Now playing
No Media Specified
diff --git a/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml b/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
index 7892d77ea..281950bf6 100644
--- a/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
@@ -55,7 +55,7 @@
Magyar(Hungarian)*
Nederlands(Dutch)*
Polski(Polish)*
- Portugués(Portuguese)*
+ Portugués(Portuguese)
Русский(Russian)*
Türkçe(Turkish)*
Українська(Ukrainian)*
diff --git a/indra/newview/skins/default/xui/en-us/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/en-us/panel_script_limits_my_avatar.xml
new file mode 100644
index 000000000..f1ea6756e
--- /dev/null
+++ b/indra/newview/skins/default/xui/en-us/panel_script_limits_my_avatar.xml
@@ -0,0 +1,108 @@
+
+
+
+ Avatar Script Usage
+
+
+
+
+
+
+
+
+
+
+
+ Loading...
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/en-us/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/en-us/panel_script_limits_region_memory.xml
new file mode 100644
index 000000000..8a5d5b341
--- /dev/null
+++ b/indra/newview/skins/default/xui/en-us/panel_script_limits_region_memory.xml
@@ -0,0 +1,141 @@
+
+
+
+ Parcel Script Memory
+
+
+
+
+
+
+
+
+
+
+
+ Loading...
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/en-us/strings.xml b/indra/newview/skins/default/xui/en-us/strings.xml
index 3421f2c1a..b11c3a9e7 100644
--- a/indra/newview/skins/default/xui/en-us/strings.xml
+++ b/indra/newview/skins/default/xui/en-us/strings.xml
@@ -3169,6 +3169,60 @@ Drag folders to this area and click "Send to Marketplace" to list them for sale
Allowed Residents: ([ALLOWEDAGENTS], max [MAXACCESS])
Allowed groups: ([ALLOWEDGROUPS], max [MAXACCESS])
+
+ Parcel Script Memory
+ Parcels Listed: [PARCELS]
+ Memory used: [COUNT] kb out of [MAX] kb; [AVAILABLE] kb available
+ Memory used: [COUNT] kb
+ Parcel Script URLs
+ URLs used: [COUNT] out of [MAX]; [AVAILABLE] available
+ URLs used: [COUNT]
+ Error requesting information
+ No Parcel Selected
+ Error: script information is only available in your current region
+ Retrieving information...
+ You do not have permission to examine this parcel
+
+ Sitting On
+ Chest
+ Head
+ Left Shoulder
+ Right Shoulder
+ Left Hand
+ Right Hand
+ Left Foot
+ Right Foot
+ Back
+ Pelvis
+ Mouth
+ Chin
+ Left Ear
+ Right Ear
+ Left Eye
+ Right Eye
+ Nose
+ Right Upper Arm
+ Right Lower Arm
+ Left Upper Arm
+ Left Lower Arm
+ Right Hip
+ Right Upper Leg
+ Right Lower Leg
+ Left Hip
+ Left Upper Leg
+ Left Lower Leg
+ Belly
+ Right Pec
+ Left Pec
+ HUD Center 2
+ HUD Top Right
+ HUD Top Center
+ HUD Top Left
+ HUD Center 1
+ HUD Bottom Left
+ HUD Bottom
+ HUD Bottom Right
+
New Script
@@ -4069,6 +4123,9 @@ Try enclosing path to the editor with double quotes.
Error parsing the external editor command.
External editor failed to run.
+ Left
+ Right
+
http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
None
@@ -4076,9 +4133,6 @@ Try enclosing path to the editor with double quotes.
Character
(Multiple)
- Left
- Right
-
Teleport completed from
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_general.xml b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
index d168756c4..6174f3cea 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
@@ -115,7 +115,7 @@
Polski(Polaco)*
- Portugués(Portugués)*
+ Portugués(Portugués)
Русский(Ruso)*
diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
index 67f42b374..317a2935e 100644
--- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
@@ -4,6 +4,9 @@
Destination de la photo
+
+ Poster sur my.secondlife.com
+
Envoyez par e-mail
@@ -95,6 +98,22 @@
+ Ratio de l'image
+
+ Défaut
+
+
+ Défaut
+
+
+ Fenêtre actuelle
+
+
+ Defaut
+ Fenêtre actuelle
+ Personnaliser
+
+
Capturez:
@@ -116,9 +135,11 @@
+
+
@@ -131,9 +152,7 @@
-
+
inconnu
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 9520980c8..c8d33a2e4 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -4,6 +4,7 @@
+
@@ -135,6 +136,9 @@
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml b/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml
index e89a2a6b0..506c5b591 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml
@@ -1,211 +1,77 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-secondes
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ secondes
-
-
-Tp à travers la sim (usage: cmd x y z)
-
-
-
-Tp au sol (usage: cmd)
-
-
-
-Tp en altitude (usage: cmd z)
-
-
-
-Tp "ET, rentrer maison !" (usage: cmd)
-
-
-
-Rezzer une plateforme (usage: cmd 0 - 30)
-
-
-
-
-Calculette (usage: cmd 2 + 2)
-
-
-
-Vider l'historique du chat (usage: cmd)
-
-
+
+ Tp à travers la sim (usage: cmd x y z)
+
+ Tp au sol (usage: cmd)
+
+ Tp en altitude (usage: cmd z)
+
+ Tp "ET, rentrer maison !" (usage: cmd)
+
+ Rezzer une plateforme (usage: cmd 0 - 30)
+
+
+ Calculette (usage: cmd 2 + 2)
+
+ Vider l'historique du chat (usage: cmd)
+
-
-Changer le "Draw Distance" (usage: cmd metres)
-
-
-
-Tp à la position de la cam (usage: cmd)
-
-
-
-Avoir un nom avec la clef (usage: cmd clef)
-
-
-
-Tp un avatar avec la clef (usage: cmd clef)
-
-
-
-Tp sur une sim x (usage: cmd nomdelasim)
-
-
-
-
-Se tp vers un avatar (usage: cmd nom)
-
-
+ Changer le "Draw Distance" (usage: cmd metres)
+
+ Tp à la position de la cam (usage: cmd)
+
+ Avoir un nom avec la clef (usage: cmd clef)
+
+ Tp un avatar avec la clef (usage: cmd clef)
+
+ Tp sur une sim x (usage: cmd nomdelasim)
+
+
+ Se tp vers un avatar (usage: cmd nom)
+
Active/désactive le faux absent (usage: cmd)
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -213,7 +79,7 @@ Se tp vers un avatar (usage: cmd nom)
Point de Pivot
-
+
Permissions :
@@ -225,4 +91,4 @@ Se tp vers un avatar (usage: cmd nom)
-
+
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
index c7e04489f..58efc50f2 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
@@ -56,7 +56,7 @@ de sélection :
Magyar (Hongrois) - Bêta
Nederlands (Néerlandais) - Bêta
Polski (Polonais) - Bêta
- Portugués (Portugais) - Bêta
+ Portugués (Portugais)
Русский (Russe) - Bêta
Türkçe (Turc) - Bêta
Українська (Ukrainien) - Bêta
diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml
new file mode 100644
index 000000000..45aadf53a
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml
@@ -0,0 +1,523 @@
+
+
+
+
+
+ Nome:
+
+
+ Descrição:
+
+
+ Tipo:
+
+
+ Continente / Terra
+
+
+ Classificação:
+
+
+ Adult
+
+
+ Proprietário:
+
+
+ Leyla Linden
+
+
+
+ Grupo:
+
+
+
+
+
+
+ À Venda:
+
+
+ Não está à Venda.
+
+
+ Preço: [CURRENCY][PRICE] ([CURRENCY][PRICE_PER_SQM]/m²).
+
+
+
+ À venda para: [BUYER]
+
+
+ À venda (Objetos incluídos).
+
+
+ À venda (Objetos não incluídos).
+
+
+
+ Reclamado:
+
+
+ Ter Ago 15 13:47:25 2006
+
+
+ Área:
+
+
+ 4048 m²
+
+
+ Tráfego:
+
+
+ 0
+
+
+
+
+
+
+
+
+ Somente novos usuários
+
+
+ Qualquer um
+
+
+ Área
+
+
+ [AREA] m²
+
+
+ ID do Leilão: [ID]
+
+
+ Você deve ter sua compra aprovada para modificar este terreno.
+
+
+ (Possuído pelo Grupo)
+
+
+ Perfil...
+
+
+ Informação...
+
+
+ (público)
+
+
+ (nenhum)
+
+
+ (Venda Pendente)
+
+
+ Nenhum lote selecionado.
+Vá para o menu Mundo > Sobre a Terra ou selecione outro lote para mostrar seus detalhes.
+
+
+
+
+ Propriedade:
+
+
+ Nome:
+
+
+ mainland
+
+
+ Dono:
+
+
+ (nenhum)
+
+
+ Não há corretor para esta Propriedade.
+
+
+ Última Alteração: Qua, Dez 31 16:00:00 1969
+
+
+ Região:
+
+
+ Nome:
+
+
+ leyla
+
+
+ Tipo:
+
+
+ Continente / Terra
+
+
+ Classificação:
+
+
+ Adult
+
+
+ Revender:
+
+
+ Terra nesta região não pode ser revendida.
+
+
+ Subdividir:
+
+
+ Terra nesta região não pode ser unida/sub-dividida.
+
+
+ Terra comprada nesta região pode ser revendida.
+
+
+ Terra comprada nesta região não pode ser revendida.
+
+
+ Terra comprada nesta região pode ser compartilhada
+ou sub-dividida.
+
+
+ Terra comprada nesta região não pode ser compartilhada
+ou sub-dividida.
+
+
+
+
+ Fator de Bonus para Objetos na Região: [BONUS]
+
+
+ Uso do simulador de primitivas:
+
+
+ [COUNT] de [MAX] ([AVAILABLE] disponíveis)
+
+
+ [COUNT] de [MAX] ([AVAILABLE] disponíveis)
+
+
+ [COUNT] de [MAX] ([DELETED] serão deletados)
+
+
+ Primitivas suportadas pelo lote:
+
+
+ [COUNT]
+
+
+ Primitivas no Lote:
+
+
+ [COUNT]
+
+
+ Pertencentes ao dono do lote:
+
+
+ [COUNT]
+
+
+
+
+ Configurados ao grupo:
+
+
+ [COUNT]
+
+
+
+
+ Propriedade de Outros:
+
+
+ [COUNT]
+
+
+
+
+ Selecionado/Sentado:
+
+
+ [COUNT]
+
+
+ Auto-retornar objetos dos outros residentes (minutos, 0 para desligado):
+
+
+
+ Donos dos Objetos:
+
+
+
+
+
+
+
+
+
+
+
+
+ Permitir outros residentes a:
+
+
+
+
+
+ Criar Objetos:
+
+
+
+
+ Entrada do Objeto:
+
+
+
+
+ Executar Scripts:
+
+
+
+
+ Opções de Terra:
+
+
+
+
+
+ Permitir que as pessoas vejam este lote nos resultados de busca
+
+
+ Esta opção está desabilitada porque a área deste lote tem 128 m² ou menos.
+Apenas lotes maiores podem ser listados na busca.
+
+
+ Esta opção está desabilitada porque você não pode modificar as opções deste lote.
+
+
+
+ Qualquer Categoria
+
+
+ Local da Linden
+
+
+ Adult
+
+
+ Artes & Cultura
+
+
+ Negócios
+
+
+ Educacional
+
+
+ Jogos
+
+
+ Moradia
+
+
+ Amigável a Novos Usuários
+
+
+ Parques & Natureza
+
+
+ Residencial
+
+
+ Shopping
+
+
+ Outros
+
+
+
+
+ Qualquer Categoria
+
+
+ Locação Linden
+
+
+ Artes e Cultura
+
+
+ Negócios
+
+
+ Educacional
+
+
+ Jogo
+
+
+ Lazer
+
+
+ Amigável para novatos
+
+
+ Parques e Natureza
+
+
+ Residencial
+
+
+ Compras
+
+
+ Outros
+
+
+
+
+
+ Conteúdo Mature
+
+
+ Conteúdo Adult
+
+
+ A informação do seu lote ou seu conteúdo são considerados mature.
+
+
+ A informação do seu lote ou seu conteúdo são considerados adult.
+
+
+ Foto:
+
+
+
+ Ponto de Aterrissagem: [LANDING]
+
+
+ (nenhum)
+
+
+
+
+ Rota de Tele-transporte:
+
+
+
+ Bloqueado
+
+
+ Ponto de Aterrissagem
+
+
+ Qualquer lugar
+
+
+
+ Sem Empurrar
+
+
+ Sem Empurrar (Imposição na Região)
+
+
+
+
+ Tipo de Mídia:
+
+
+
+ URL da Mídia:
+
+
+
+
+ Descrição:
+
+
+
+ Substituir
+Textura:
+
+
+
+ (Objetos usando esta textura, mostrarão o filme ou
+a página web depois que você clicar na seta de
+reproduzir.)
+
+
+ Opções de
+Mídia:
+
+
+
+
+ Tamanho da mídia:
+
+
+
+
+ pixels
+
+
+ URL da Música:
+
+
+
+ Som:
+
+
+
+
+ Voz:
+
+
+
+
+
+
+
+ Acesso a Este Lote
+
+
+
+ Bloquear Acesso por:
+
+
+
+
+ Uma ou mais destas opções está definida no nível de propriedade.
+
+
+
+
+
+ Qualquer um
+
+
+ Grupo
+
+
+
+
+
+ Residentes Permitidos
+
+
+
+
+
+ Residentes Banidos
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_active_speakers.xml b/indra/newview/skins/default/xui/pt/floater_active_speakers.xml
new file mode 100644
index 000000000..728320bbb
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_active_speakers.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_animation_preview.xml b/indra/newview/skins/default/xui/pt/floater_animation_preview.xml
new file mode 100644
index 000000000..8c902e848
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_animation_preview.xml
@@ -0,0 +1,164 @@
+
+
+
+ Nome:
+
+
+ Descrição:
+
+
+
+
+
+
+ Pose de Mão
+
+
+
+ Espreguiçar
+
+
+ Relaxado
+
+
+ Apontar Ambos
+
+
+ Punho
+
+
+ Relaxado para Esquerda
+
+
+ Apontar à Esquerda
+
+
+ Punho Esquerdo
+
+
+ Relaxado para Direita
+
+
+ Apontar à Direita
+
+
+ Punho Direito
+
+
+ Saudar à Direita
+
+
+ Digitando
+
+
+ Pacífico à Direita
+
+
+
+ Expressão
+
+
+
+ [None]
+
+
+ Aaaaah
+
+
+ Temeroso
+
+
+ Raivoso
+
+
+ Sorrisão
+
+
+ Entediado
+
+
+ Chorar
+
+
+ Desprezar
+
+
+ Envergonhado
+
+
+ Franzir a testa
+
+
+ Beijar
+
+
+ Rir
+
+
+ Plllppt
+
+
+ Enojado
+
+
+ Triste
+
+
+ Indiferença
+
+
+ Sorriso
+
+
+ Surpreso
+
+
+ Piscar
+
+
+ Preocupado
+
+
+
+ Prever enquanto
+
+
+
+ Parado
+
+
+ Andando
+
+
+ Sentando
+
+
+ Voando
+
+
+
+
+
+
+
+ Incapaz de ler o arquivo de animação.
+
+Nós recomendamos exportar arquivos BVH do
+Poser 4.
+
+
+
+
+ Não foi possível iniciar o movimento
+
+
+ O arquivo de animação tem [LENGTH] segundos de duração.
+
+A duração máxima de animação permitida é de [MAX_LENGTH] segundos.
+
+
+ Não foi possível ler o arquivo de animação.
+
+[STATUS]
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_auction.xml b/indra/newview/skins/default/xui/pt/floater_auction.xml
new file mode 100644
index 000000000..48e0b9240
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_auction.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+ Você não pode leiloar terrenos que já estão configurados para venda.
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_audio_volume.xml b/indra/newview/skins/default/xui/pt/floater_audio_volume.xml
new file mode 100644
index 000000000..abe9c6b7c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_audio_volume.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
new file mode 100644
index 000000000..9f6e8dc51
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+ Digite parte do nome do Residente:
+
+
+
+
+
+ Selecione um cartão de visita:
+
+
+
+
+ Selecione residente
+próximo:
+
+
+
+
+ Metros
+
+
+
+
+
+
+
+ '[TEXT]' não encontrado
+
+
+ Ninguém proximo
+
+
+ Nenhum resultado
+
+
+ Buscando...
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
new file mode 100644
index 000000000..db0023d74
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
@@ -0,0 +1,30 @@
+
+
+
+ Texturas sobrepostas
+
+
+ Texturas compostas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_beacons.xml b/indra/newview/skins/default/xui/pt/floater_beacons.xml
new file mode 100644
index 000000000..edd1e0809
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_beacons.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+ Largura da Baliza
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_build_options.xml b/indra/newview/skins/default/xui/pt/floater_build_options.xml
new file mode 100644
index 000000000..ebc9d0f0c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_build_options.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
new file mode 100644
index 000000000..c064d24f9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
@@ -0,0 +1,44 @@
+
+
+
+ Tipos de Conteúdo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Novas Permissões
+
+
+
+
+ O próximo dono pode:
+
+
+
+
+
+
+
+
+ A seleção não contém nenhum conteúdo editável.
+
+
+ Definindo permissões em [NAME]
+
+
+ Iniciando solicitação de mudança de permissão...
+
+
+ Solicitação de mudança de permissão concluída.
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_bumps.xml b/indra/newview/skins/default/xui/pt/floater_bumps.xml
new file mode 100644
index 000000000..0bc254627
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_bumps.xml
@@ -0,0 +1,21 @@
+
+
+
+ Nada detectado
+
+
+ [TIME] [FIRST] [LAST] conflitou com você
+
+
+ [TIME] [FIRST] [LAST] empurrou você com um script
+
+
+ [TIME] [FIRST] [LAST] o atingiu com um objeto
+
+
+ [TIME] [FIRST] [LAST] o atingiu com um objeto programado
+
+
+ [TIME] [FIRST] [LAST] o atingiu com um objeto físico
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_contents.xml b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml
new file mode 100644
index 000000000..c2144d48d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml
@@ -0,0 +1,21 @@
+
+
+
+ [NAME] contém:
+
+
+ Comprar por [CURRENCY][AMOUNT] de(a) [NAME]?
+
+
+
+
+
+ (sem copiar)
+
+
+ (sem modificar)
+
+
+ (sem transferir)
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
new file mode 100644
index 000000000..f7a35ac43
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
@@ -0,0 +1,68 @@
+
+
+
+ Comprando Dinheiro:
+
+
+ Não pode comprar agora:
+
+
+ Você precisa de mais dinheiro:
+
+
+ Algo não está certo.
+
+
+
+ Contatando LindeX...
+
+
+ Comprar [CURRENCY] no câmbio atual da LindeX
+
+
+ [NAME] [CURRENCY] [PRICE]
+
+
+ Comprar [CURRENCY]
+
+
+ 1234
+
+
+ por aproxim. US$ [USD]
+
+
+ Obtendo dados...
+
+
+ Você tem atualmente
+
+
+ [CURRENCY] [AMT]
+
+
+ Você está comprando
+
+
+ [CURRENCY] [AMT]
+
+
+ Seu saldo será
+
+
+ [CURRENCY] [AMT]
+
+
+ Confirmando esta compra só compra a moeda.
+Você precisará tentar novamente a operação.
+
+
+ Você não está comprando moeda suficiente.
+Aumente a quantidade de compra.
+
+
+
+
+ Comprar [CURRENCY] [LINDENS] por aproximadamente US$ [USD]
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_land.xml b/indra/newview/skins/default/xui/pt/floater_buy_land.xml
new file mode 100644
index 000000000..95b75b4fc
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_buy_land.xml
@@ -0,0 +1,242 @@
+
+
+
+ Região:
+
+
+ (desconhecido)
+
+
+ Tipo:
+
+
+ (desconhecido)
+
+
+ Propriedade:
+
+
+ (desconhecido)
+
+
+ Dono da propriedade:
+
+
+ (desconhecido)
+
+
+ Adquiriu um terreno nesta região:
+
+
+ Pode ou não ser revendida.
+
+
+ Pode ou não ser unida ou sub-dividida.
+
+
+ Você deve concordar com o Corretor da Propriedade:
+
+
+
+ Carregando...
+
+
+
+ Lote:
+
+
+ Scotopteryx 138,204
+
+
+ Tamanho:
+
+
+ 1024 m²
+
+
+ Preço:
+
+
+ [CURRENCY] 1500
+([CURRENCY] 1.1/m²)
+vendido com os objetos
+
+
+ Comprar este lote irá:
+
+
+ Algo ainda não está correto.
+
+
+
+ Evoluir sua conta para membro Premium
+
+
+ Somente membros Premium podem possuir terra.
+
+
+
+ US$9.95/mês, debitado mensalmente
+
+
+ US$7.50/mês, debitado trimestralmente
+
+
+ US$6.00/mês, debitado anualmente
+
+
+
+ Aumente sua taxa de locação de terra para US$ 40/mês.
+
+
+ Você possui 1309 m² de terra.
+Este lote tem 512 m² de terra.
+
+
+ Pagar ao Residente Joe [CURRENCY]4000 pela terra
+
+
+ Você tem [CURRENCY]2,100.
+
+
+ Compre [CURRENCY] adicionais
+
+
+ 1000
+
+
+ por aproxim. US$ [AMOUNT2]
+
+
+ Você tem [CURRENCY]2,100.
+
+
+
+
+
+ Pode ser revendida.
+
+
+ Não pode ser revendida.
+
+
+ Pode ser unida ou subdivida.
+
+
+ Não pode ser unida ou subdividida.
+
+
+ Você não tem permissão para comprar terra para seu grupo ativo.
+
+
+ Nenhuma terra selecionada.
+
+
+ Múltiplos e diferentes lotes selecionados. Tente selecionar uma área menor.
+
+
+ Você não tem permissão para comprar uma terra para seu grupo ativo.
+
+
+ O lote selecionado não está a venda.
+
+
+ O grupo já possui o lote.
+
+
+ Você já possui o lote.
+
+
+ O lote selecionado está configurado para ser vendido para outro grupo.
+
+
+ A área selecionada não tem terras públicas.
+
+
+ Está selecionada uma terra pertencente a outro usuário. Tente selecionar uma área menor.
+
+
+ Processando sua compra...
+
+(Isso pode levar um minuto.)
+
+
+ Houve um erro ao buscar informações sobre compra de terras.
+
+
+ Comprar esta terra irá:
+
+
+ Ao comprar terra para o grupo:
+
+
+ Não foi possível comprar agora:
+
+
+ Não disponível para venda:
+
+
+ nada necessário
+
+
+ Sua conta deve ser evoluída para adquirir um lote.
+
+
+ Sua conta pode possuir uma terra.
+
+
+ Você possui [BUYER] m² de terra.
+
+
+ Pagar [CURRENCY] [AMOUNT] para [SELLER] por esta terra
+
+
+ Comprar [CURRENCY] [AMOUNT] por aprox. US$ [AMOUNT2],
+
+
+ Este lote tem [AMOUNT] m².
+
+
+ Esta terra é premium e será taxada como [AMOUNT] m².
+
+
+ Esta terra tem desconto e será taxada como [AMOUNT] m².
+
+
+ [AMOUNT] m²
+aceita [AMOUNT2] objetos
+
+
+ vendido com objetos
+
+
+ objetos não incluídos
+
+
+ [CURRENCY] [PRICE]
+([CURRENCY] [PRICE_PER_SQM]/m²)
+[SOLD_WITH_OBJECTS]
+
+
+ O grupo [GROUP] precisará de fundos suficientes de terras
+contribuídas para cobrir este lote antes da aquisição se completar.
+
+
+ Você tem [CURRENCY] [AMOUNT], suficiente para comprar este lote.
+
+
+ Você tem somente [CURRENCY] [AMOUNT], e precisa de mais [CURRENCY] [AMOUNT2].
+
+
+ Após a compra, restará [CURRENCY] [AMOUNT].
+
+
+ Você precisa comprar pelo menos [CURRENCY] [AMOUNT] para ter recursos para este lote.
+
+
+ (nenhum lote selecionado)
+
+
+ Comprar [CURRENCY] [LINDENS] por aproxim. US$ [USD]
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_object.xml b/indra/newview/skins/default/xui/pt/floater_buy_object.xml
new file mode 100644
index 000000000..8baab4182
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_buy_object.xml
@@ -0,0 +1,26 @@
+
+
+
+ e seus conteúdos:
+
+
+ Comprar por [CURRENCY][AMOUNT] de(a) [NAME]?
+
+
+
+
+ Comprar
+
+
+ Comprar uma cópia de
+
+
+ (sem copiar)
+
+
+ (sem modificar)
+
+
+ (sem transferir)
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_camera.xml b/indra/newview/skins/default/xui/pt/floater_camera.xml
new file mode 100644
index 000000000..4dc699760
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_camera.xml
@@ -0,0 +1,12 @@
+
+
+
+ Girar a Câmera ao redor do Foco
+
+
+ Aproximar a Câmera in direção ao Foco
+
+
+ Mover a Câmera Para Cima e Para Baixo, Para a Esquerda e Para a Direita
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_chat_history.xml b/indra/newview/skins/default/xui/pt/floater_chat_history.xml
new file mode 100644
index 000000000..63689eb4c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_chat_history.xml
@@ -0,0 +1,91 @@
+
+
+
+ Conectando à conversa de Voz no mundo
+
+
+ Conectado
+
+
+ Voz não disponível na sua localização atual
+
+
+ Desconectado da conversa de Voz no mundo
+
+
+ icn_voice-localchat.tga
+
+
+ -- log ativado de Mensagem Instantânea --
+
+
+ -- Fim do Log --
+
+
+ '[OBJECTNAME]', um objeto de '[OWNERNAME]', localizado em [REGIONNAME] a [REGIONPOS], obteve permissão para: [PERMISSIONS].
+
+
+ '[OBJECTNAME]', um objeto de '[OWNERNAME]', localizado em [REGIONNAME] a [REGIONPOS], teve permissão negada para: [PERMISSIONS].
+
+
+ Tomar linden dólares ([CURRENCY]) de você
+
+
+ Atue nas suas entradas de controle
+
+
+ Remapeie suas entradas de controle
+
+
+ Faça uma animação para o seu avatar
+
+
+ Anexe ao seu avatar
+
+
+ Libere a propriedade e torne-a pública
+
+
+ Una e desuna de outros objetos
+
+
+ Adicione e remova junções com outros objetos
+
+
+ Modifique as permissões
+
+
+ Acompanhe sua câmera
+
+
+ Controle sua camera
+
+
+
+
+
+ Gestos
+
+
+
+
+
+
+ Gestos
+
+
+
+
+ Gritar
+
+
+ Falar
+
+
+ Sussurrar
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_chatterbox.xml b/indra/newview/skins/default/xui/pt/floater_chatterbox.xml
new file mode 100644
index 000000000..d9714d341
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_chatterbox.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_choose_group.xml b/indra/newview/skins/default/xui/pt/floater_choose_group.xml
new file mode 100644
index 000000000..449d57871
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_choose_group.xml
@@ -0,0 +1,8 @@
+
+
+
+ Escolha um grupo:
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_color_picker.xml b/indra/newview/skins/default/xui/pt/floater_color_picker.xml
new file mode 100644
index 000000000..95dd53ccd
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_color_picker.xml
@@ -0,0 +1,32 @@
+
+
+
+ Vermelho:
+
+
+ Verde:
+
+
+ Azul:
+
+
+ Matiz:
+
+
+ Sat:
+
+
+ Lum:
+
+
+
+
+
+
+ Cor atual:
+
+
+ (Arraste abaixo
+ para salvar.)
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_critical.xml b/indra/newview/skins/default/xui/pt/floater_critical.xml
new file mode 100644
index 000000000..5d7fe0142
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_critical.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+ Por favor, leia a mensagem a seguir cuidadosamente.
+
+
+ TOS_TEXT
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_customize.xml b/indra/newview/skins/default/xui/pt/floater_customize.xml
new file mode 100644
index 000000000..779f1d884
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_customize.xml
@@ -0,0 +1,483 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Feminino
+
+
+ Masculino
+
+
+
+ [DESC]
+
+
+ [DESC]: não foi possível modificar
+
+
+ [DESC]: carregando...
+
+
+ [DESC]: não vestido
+
+
+ Localizado em [PATH]
+
+
+ Coloque uma nova forma arrastando uma do seu inventário para seu avatar.
+Alternativamente, você pode criar uma nova de um esboço e usá-la.
+
+
+ Você não tem permissão para modificar esta vestimenta.
+
+
+ Forma:
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: não foi possível modificar
+
+
+ [DESC]: carregando..
+
+
+ [DESC]: não vestido
+
+
+ Localizada em [PATH]
+
+
+ Coloque uma nova pele arrastando uma de seu inventário para seu avatar.
+Alternativamente, você pode criar uma nova forma a partir de um esboço
+e usá-la.
+
+
+ Você não tem permissão para modificar esta vestimenta.
+
+
+ Pele:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: não foi possível modificar
+
+
+ [DESC]: carregando...
+
+
+ [DESC]: não vestido
+
+
+ Localizado em [PATH]
+
+
+ Ponha um novo cabelo em seu avatar arrastando um do seu inventário.
+Alternativamente, você pode criar um novo modelo a partir de um esboço
+e usá-lo.
+
+
+ Você não ter permissão para modificar essa vestimenta.
+
+
+ Cabelo:
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: não foi possível modificar
+
+
+ [DESC]: carregando...
+
+
+ [DESC]: não vestido
+
+
+ Localizado em [PATH]
+
+
+ Para colocar novos olhos, arraste um do seu inventário para seu avatar.
+Alternativamente, você pode criar um novo modelo de um esboço e usá-lo.
+
+
+ Você não tem permissão para alterar esta vestimenta.
+
+
+ Olhos:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: não foi possível modificar
+
+
+ [DESC]: carregando...
+
+
+ [DESC]: não vestido
+
+
+ Localizado em [PATH]
+
+
+ Para por uma nova camisa em seu avatar, arraste uma do seu inventário para
+seu avatar. Alternativamente, você pode criar um novo modelo a partir de
+um esboço e usá-lo.
+
+
+ Você não ter permissão para modificar esta vestimenta.
+
+
+ Camisa:
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: não foi possível modificar
+
+
+ [DESC]: carregando...
+
+
+ [DESC]: não vestindo
+
+
+ Localizado em [PATH]
+
+
+ Para por uma nova calça em seu avatar, basta arrastar uma outra do seu
+inventário. Alternativamente, você pode criar um novo modelo a partir
+de um esboço e usá-lo.
+
+
+ Você não tem permissão para modificar esta vestimenta.
+
+
+ Calças:
+
+
+
+
+ [DESC]
+
+
+ [DESC]: não foi possível modificar
+
+
+ [DESC]: carregando...
+
+
+ [DESC]: não vestido
+
+
+ Localizado em [PATH]
+
+
+ Para por novos sapatos em seu avatar, basta arrastar um novo do seu
+inventário. Alternativamente, você pode criar um novo modelo a partir
+de um esboço e usá-lo.
+
+
+ Você não tem permissão para modificar esta vestimenta.
+
+
+ Sapatos:
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: não foi possível modificar
+
+
+ [DESC]: carregando...
+
+
+ [DESC]: não vestido.
+
+
+ Localizado em [PATH]
+
+
+ Para por novas meias em seu avatar, basta arrastar uma nova do seu
+inventário. Alternativamente, você pode criar novas meias a partir de
+um esboço e usá-las.
+
+
+ Você não tem permissão para modificar essa vestimenta.
+
+
+ Meias:
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: Não foi possível modificar
+
+
+ [DESC]: carregando...
+
+
+ [DESC]: não vestido
+
+
+ Localizado em [PATH]
+
+
+ Para por uma nova jaqueta em seu avatar, basta arrastar um novo modelo
+do seu inventário. Alternativamente, você pode criar um novo modelo a
+partir de um esboço e usá-lo.
+
+
+ Você não tem permissão para modificar esta vestimenta.
+
+
+ Jaqueta:
+
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: não foi possível modificar
+
+
+ [DESC]: carregando....
+
+
+ [DESC]: não vestido
+
+
+ Localizado em [PATH]
+
+
+ Para colocar uma nova jaqueta em seu avatar, basta arrastar um novo modelo
+do seu inventário. Alternativamente, você pode criar uma novo modelo a
+partir de um esboço e usá-lo.
+
+
+ Você não tem permissão para modificar essa vestimenta.
+
+
+ Luvas:
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: não foi possível modificar
+
+
+ [DESC]: carregando...
+
+
+ [DESC]: não vestido
+
+
+ Localizado em [PATH]
+
+
+ Para por uma nova Camiseta em seu avatar, basta arrastar um novo modelo
+de seu inventário. Alternativamente, você pode criar um novo modelo a
+partir de um esboço e usá-lo.
+
+
+ Você não ter permissão para modificar essa vestimenta.
+
+
+ Camiseta:
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: não foi possível modificar
+
+
+ [DESC]: carregando...
+
+
+ [DESC]: não vestido
+
+
+ Localizado em [PATH]
+
+
+ Para por novas roupas de baixo em seu avatar, basta arrastar um novo
+modelo do seu inventário. Alternativamente, você pode criar um novo
+modelo a partir de um esboço e usá-lo.
+
+
+ Você não tem permissão para modificar essa vestimenta.
+
+
+ Roupas de Baixo:
+
+
+
+
+
+
+
+
+
+
+
+ [DESC]
+
+
+ [DESC]: não foi possível modificar
+
+
+ [DESC]: carregando...
+
+
+ [DESC]: não vestido
+
+
+ Localizado em [PATH]
+
+
+ Para por uma nova saia em seu avatar, basta arrastar um novo modelo
+do seu inventário. Alternativamente, você pode criar um novo modelo a
+partir de um esboço e usá-lo.
+
+
+ Você não tem permissão para modificar esta vestimenta.
+
+
+ Saia:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
new file mode 100644
index 000000000..f02cca9c2
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+ 0:00
+
+
+ 3:00
+
+
+ 6:00
+
+
+ 9:00
+
+
+ 12:00
+
+
+ 15:00
+
+
+ 18:00
+
+
+ 21:00
+
+
+ 24:00
+
+
+
+
+ Configurações de Quadro-chave:
+
+
+ Tempo-chave:
+
+
+
+
+ Ajuste-chave:
+
+
+
+ Grudar:
+
+
+
+ Duração do Ciclo:
+
+
+
+
+
+ Prévia:
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_device_settings.xml b/indra/newview/skins/default/xui/pt/floater_device_settings.xml
new file mode 100644
index 000000000..9ce773116
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_device_settings.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_directory.xml b/indra/newview/skins/default/xui/pt/floater_directory.xml
new file mode 100644
index 000000000..e1144114e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_directory.xml
@@ -0,0 +1,396 @@
+
+
+
+
+
+ Buscando...
+
+
+ Nada foi encontrado.
+
+
+ Encontrar:
+
+
+
+
+
+ Qualquer categoria
+
+
+ Eventos
+
+
+ Grupos
+
+
+ Pessoas
+
+
+ Lugares
+
+
+ Wiki
+
+
+
+
+
+
+
+ Carregando...
+
+
+ Feito
+
+
+
+
+ Buscando...
+
+
+ Nada foi encontrado.
+
+
+ Encontrar:
+
+
+
+
+
+
+
+ Qualquer categoria
+
+
+ Shopping
+
+
+ Aluguél de Terras
+
+
+ Aluguél de Propriedades
+
+
+ Atração Especial
+
+
+ Novos Produtos
+
+
+ Emprego
+
+
+ Procura-se
+
+
+ Serviço
+
+
+ Pessoal
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Buscando...
+
+
+ Nada foi encontrado.
+
+
+ Encontrar:
+
+
+
+
+ Em progresso e processando
+
+
+ Data
+
+
+
+
+ 6/6
+
+
+
+
+ Categoria:
+
+
+
+ Qualquer categoria
+
+
+ Discussão
+
+
+ Esportes
+
+
+ Música ao Vivo
+
+
+ Comercial
+
+
+ Vida noturna/Entretenimento
+
+
+ Jogos/Campeonatos
+
+
+ Espetáculos
+
+
+ Educação
+
+
+ Arte e Cultura
+
+
+ Caridade/Grupos de Apoio
+
+
+ Variados
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Buscando...
+
+
+ Nada foi encontrado.
+
+
+
+
+ Carregando...
+
+
+ Feito
+
+
+
+
+ Buscando...
+
+
+ Nada foi encontrado.
+
+
+ Terra pode ser comprada direto por Linden dólares ([CURRENCY]) ou em leilão por ambos [CURRENCY] ou [REALCURRENCY].
+Para comprar direto, visite a terra e clique no nome do lugar, na barra de título.
+
+
+ Encontrar:
+
+
+
+
+
+
+ Todos os tipos
+
+
+ Leilão
+
+
+ À venda - Mainland
+
+
+ À venda - Propriedade
+
+
+
+
+ [CURRENCY]
+
+
+
+ m²
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Buscando...
+
+
+ Nada foi encontrado.
+
+
+ Encontrar:
+
+
+
+
+
+
+
+ Qualquer Categoria
+
+
+ Localidade da Linden
+
+
+ Artes & Cultura
+
+
+ Negócios
+
+
+ Educacional
+
+
+ Jogos
+
+
+ Recreação
+
+
+ Amigável a Iniciantes
+
+
+ Parques & Natureza
+
+
+ Residencial
+
+
+ Shopping
+
+
+ Outros
+
+
+
+
+ Qualquer Categoria
+
+
+ Local da Linden
+
+
+ Adult
+
+
+ Artes & Cultura
+
+
+ Negócios
+
+
+ Educacional
+
+
+ Jogos
+
+
+ Moradia
+
+
+ Amigável a Novos Usuários
+
+
+ Parques & Natureza
+
+
+ Residencial
+
+
+ Shopping
+
+
+ Outro
+
+
+
+
+
+
+
+
+
+
+
+
+ Buscando...
+
+
+ Nada foi encontrado.
+
+
+ Encontrar:
+
+
+
+
+
+
+
+
+
+
+
+ Buscando...
+
+
+ Nada foi encontrado.
+
+
+ Encontrar:
+
+
+
+
+
+
+
+
+
+ carregando...
+
+
+ Feito
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_env_settings.xml b/indra/newview/skins/default/xui/pt/floater_env_settings.xml
new file mode 100644
index 000000000..d3ed76055
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_env_settings.xml
@@ -0,0 +1,25 @@
+
+
+
+ Hora do Dia
+
+
+ 12:00 PM
+
+
+ Cobertura de
+Nuvens
+
+
+ Cor da água
+
+
+
+ Névoa da
+água
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_font_test.xml b/indra/newview/skins/default/xui/pt/floater_font_test.xml
new file mode 100644
index 000000000..eb52d3341
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_font_test.xml
@@ -0,0 +1,6 @@
+
+
+
+ OverrideTest, deveria aparecer aqui como Times. (De default/xui/en-us)
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_gesture.xml b/indra/newview/skins/default/xui/pt/floater_gesture.xml
new file mode 100644
index 000000000..ac50f32dd
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_gesture.xml
@@ -0,0 +1,15 @@
+
+
+
+ Clicar duas vezes no gesto para executar animações e sons.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_god_tools.xml b/indra/newview/skins/default/xui/pt/floater_god_tools.xml
new file mode 100644
index 000000000..5dcd87dd0
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_god_tools.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+ Nome do Simulador:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ID da Propriedade:
+
+
+ ID do Pai:
+
+
+
+ Posição da Grade:
+
+
+
+
+ Redirecionar para a Grade:
+
+
+ Fator cobrança:
+
+
+ [CURRENCY] por metros quadrados
+
+
+
+
+
+
+
+
+ Sim Nome:
+
+
+ Welsh
+
+
+
+
+
+
+
+ (sem alvo)
+
+
+
+
+
+
+
+
+
+
+ Destino:
+
+
+
+ Seleção
+
+
+ Região do Agente
+
+
+
+ Requisição:
+
+
+
+ Passos de Colisão
+
+
+ Contagem de scripts, padrão opcional
+
+
+ Padrão de Objetos
+
+
+ rez <asset_id>
+
+
+
+ Parametro:
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_html.xml b/indra/newview/skins/default/xui/pt/floater_html.xml
new file mode 100644
index 000000000..fbcdbfdfd
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_html.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+ http://www.secondlife.com
+
+
+ http://wiki.secondlife.com/wiki/Knowledge_Base/pt
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_hud.xml b/indra/newview/skins/default/xui/pt/floater_hud.xml
new file mode 100644
index 000000000..d31bcedf0
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_hud.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_im.xml b/indra/newview/skins/default/xui/pt/floater_im.xml
new file mode 100644
index 000000000..75c340933
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_im.xml
@@ -0,0 +1,45 @@
+
+
+
+ Você é o único usuário desta sessão.
+
+
+ [FIRST] [LAST] está offline.
+
+
+ Clique no botão [BUTTON NAME] para aceitar/ conectar a este bate-papo em voz.
+
+
+ Você emudeceu este residente. Enviar uma mensagem vai automaticamente reativá-lo novamente.
+
+
+ Erro na requisição, por favor, tente novamente.
+
+
+ Você não tem permissões suficientes.
+
+
+ A sessão deixou de existir
+
+
+ Você não possui esta habilidade.
+
+
+ Você não é um moderador de sessão.
+
+
+ Um moderador do grupo desabilitou seu bate-papo em texto.
+
+
+ Não foi possível adicionar usuários na sessão de bate-papo com [RECIPIENT].
+
+
+ Não foi possível enviar sua mensagem na sessão de bate- papo com [RECIPIENT].
+
+
+ Você foi removido do grupo.
+
+
+ Você não possui mais a habilidade de estar na sessão de bate-papo.
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_image_preview.xml b/indra/newview/skins/default/xui/pt/floater_image_preview.xml
new file mode 100644
index 000000000..9bfce1a68
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_image_preview.xml
@@ -0,0 +1,53 @@
+
+
+
+ Nome:
+
+
+ Descrição:
+
+
+ Prévia da
+imagem como:
+
+
+
+ Imagem
+
+
+ Cabelo
+
+
+ Cabeça Feminina
+
+
+ Parte Superior do Corpo Feminino
+
+
+ Parte Inferior do Corpo Feminino
+
+
+ Cabeça Masculina
+
+
+ Parte Superior do Corpo Masculino
+
+
+ Parte Inferiro do Corpo Masculino
+
+
+ Saia
+
+
+ Primitiva Esculpida
+
+
+
+ Incapaz de ler a imagem.
+
+Tente salvar a imagem como 24 bit Targa (.tga).
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_inspect.xml b/indra/newview/skins/default/xui/pt/floater_inspect.xml
new file mode 100644
index 000000000..f3c23f008
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_inspect.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_instant_message.xml b/indra/newview/skins/default/xui/pt/floater_instant_message.xml
new file mode 100644
index 000000000..91fb06dca
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_instant_message.xml
@@ -0,0 +1,50 @@
+
+
+
+ Chamando...
+
+
+ Conectando...
+
+
+ Conectado, clique Finalizar Chamada para deixar em espera
+
+
+ Chamada encerrada
+
+
+ Oferecido um item de Inventário
+
+
+ icn_voice-pvtfocus.tga
+
+
+ Mensagem Instantânea com [NAME]
+
+
+ [NAME] está digitando...
+
+
+ Iniciando uma sessão com [NAME]. Por favor, aguarde.
+
+
+ Clique aqui para uma mensagem instantânea.
+
+
+ Conversa por texto não está disponível para esta chamada.
+
+
+
+
+
+
+
+
+
+
+ *** Bem Vindo a Solicitação de Ajuda ***
+Por favor, cheque primeiro nossas páginas de ajuda, pressionando F1 ou acessando a Base de Conhecimento em
+http://secondlife.com/knowledgebase/ . Se sua resposta não está ali, por favor entre com sua pergunta e aguarde que um Ajudante responda.
+-=-=- O tempo de resposta pode variar, especialmente em horários de pico -=-=-
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_instant_message_ad_hoc.xml b/indra/newview/skins/default/xui/pt/floater_instant_message_ad_hoc.xml
new file mode 100644
index 000000000..6964406d2
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_instant_message_ad_hoc.xml
@@ -0,0 +1,39 @@
+
+
+
+ Juntar-se à Conversa por Voz...
+
+
+ Conectado, clique Encerrar Chamada para deixar em espera
+
+
+ Deixar a Conversa por Voz
+
+
+ icn_voice-groupfocus.tga
+
+
+ Mensagem Instantânea com [NAME]
+
+
+ [NAME] está digitando...
+
+
+ Iniciando uma sessão com [NAME]. Por favor, aguarde.
+
+
+ Clique aqui para mensagem instantânea.
+
+
+
+
+
+
+
+
+
+
+
+ *** Bem Vindo à Solicitação de Ajuda *** Por favor, verifique primeiro nossas páginas de Ajuda do Second Life pressionando F1 ou acessando a Base de Conhecimento em http://secondlife.com/knowledgebase/. Se suas respostas não estiverem ali, por favor entre com sua pergunta para iniciar e aguarde alguns minutos para que algum Ajudante responda.-=-=- O tempo de resposta pode variar, especialmente em horários de pico -=-=-
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_instant_message_group.xml b/indra/newview/skins/default/xui/pt/floater_instant_message_group.xml
new file mode 100644
index 000000000..bbebbb78d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_instant_message_group.xml
@@ -0,0 +1,42 @@
+
+
+
+ Entrando em bate-papo de Voz...
+
+
+ Conectado, clique em Terminar Chamada para finalizar
+
+
+ Deixou o bate-papo de voz
+
+
+ icn_voice-groupfocus.tga
+
+
+ Mensagem Instantânea com [NAME]
+
+
+ [NAME] está digitando...
+
+
+ Iniciando sessão com [NAME], por favor aguarde.
+
+
+ (Moderado: Vozes desligadas por default)
+
+
+ Clique aqui para mensagem instantânea.
+
+
+ Sua conversa de texto foi desabilitada por um Moderador do Grupo.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_inventory.xml b/indra/newview/skins/default/xui/pt/floater_inventory.xml
new file mode 100644
index 000000000..8a06fefe3
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_inventory.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml
new file mode 100644
index 000000000..3d9055e89
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml
@@ -0,0 +1,85 @@
+
+
+
+ Nome:
+
+
+ Descrição:
+
+
+ Criador:
+
+
+ Nicole Linden
+
+
+
+ Dono:
+
+
+ Thrax Linden
+
+
+
+ Adquirido:
+
+
+ Qua Mai 24 12:50:46 2006
+
+
+ Você pode:
+
+
+
+
+
+ B:
+
+
+ O:
+
+
+ G:
+
+
+ E:
+
+
+ N:
+
+
+
+
+ Próximo dono pode:
+
+
+
+
+
+ Marcar Item:
+
+
+
+
+ Original
+
+
+ Cópia
+
+
+
+ Price: [CURRENCY]
+
+
+ (desconhecido)
+
+
+ (público)
+
+
+ Você pode:
+
+
+ Proprietário pode :
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml
new file mode 100644
index 000000000..83df449ae
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - OU -
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_joystick.xml b/indra/newview/skins/default/xui/pt/floater_joystick.xml
new file mode 100644
index 000000000..0bc392871
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_joystick.xml
@@ -0,0 +1,86 @@
+
+
+
+ Habilitar Joystick:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Modos de Controle:
+
+
+ Avatar
+
+
+ Construir
+
+
+ Camera aérea
+
+
+ Escala X
+
+
+ Escala Y
+
+
+ Escala Z
+
+
+ Escala de Elevação
+
+
+ Escala da Guinada
+
+
+ Escala de Rolagem
+
+
+ Zona Morta X
+
+
+ Zona Morta Y
+
+
+ Zona Morta Z
+
+
+ Zona Morta: Elevação
+
+
+ Zona Morta: Guinada
+
+
+ Zona Morta: Rolagem
+
+
+ Alisar
+
+
+ Escala de Zoom
+
+
+ Zona Morta de Zoom
+
+
+
+
+
+ Monitor do Joystick
+
+
+ Eixo [NUM]
+
+
+ nenhum dispositivo detectado
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
new file mode 100644
index 000000000..6519081ba
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
+ Cliente:
+
+
+ Normal
+
+
+
+ Rede:
+
+
+ Normal
+
+
+
+ Servidor:
+
+
+ Normal
+
+
+
+
+ Medidor de Atraso
+
+
+ 360
+
+
+ Atraso
+
+
+ 90
+
+
+ Cliente
+
+
+ 10
+
+
+ 15
+
+
+ Normal, janela por baixo
+
+
+ Taxa de quadros do Cliente abaixo de [CLIENT_FRAME_RATE_CRITICAL]
+
+
+ Taxa de quadros do Cliente entre [CLIENT_FRAME_RATE_CRITICAL] e [CLIENT_FRAME_RATE_WARNING]
+
+
+ Normal
+
+
+ Causa possível: Distância de desenho ajustada muito alta
+
+
+ Causa possível: Carregamento de Imagens
+
+
+ Causa possível: Muitas imagens na memória
+
+
+ Causa possível: Muitos objetos complexos na cena
+
+
+ Rede
+
+
+ 10
+
+
+ 5
+
+
+ Conexão está caindo para cerca de [NETWORK_PACKET_LOSS_CRITICAL]% de pacotes
+
+
+ Conexão está caindo [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% de pacotes
+
+
+ Normal
+
+
+ 600
+
+
+ 300
+
+
+ Tempo de conexão de ping é cerca de [NETWORK_PING_CRITICAL] ms
+
+
+ Tempo de conexão de ping é [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms
+
+
+ Possível conexão ruim ou 'Largura de Banda' escolhida muito alta.
+
+
+ Possível conexão ruim ou aplicativos compartilhando arquivos.
+
+
+ Servidor
+
+
+ 20
+
+
+ 30
+
+
+ 20
+
+
+ Taxa de quadros abaixo de [SERVER_FRAME_RATE_CRITICAL]
+
+
+ Taxa de quadros entre [SERVER_FRAME_RATE_CRITICAL] e [SERVER_FRAME_RATE_WARNING]
+
+
+ Normal
+
+
+ Causa possível: Muitos objetos físicos
+
+
+ Causa possível: Muitos objetos com scripts
+
+
+ Causa possível: Muito tráfego na rede
+
+
+ Causa possível: Muitas pessoas se movendo na região
+
+
+ Causa possível: Muitos cálculos de imagem
+
+
+ Causa possível: Carga no simulador muito pesada
+
+
+ >>
+
+
+ <<
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_land_holdings.xml b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml
new file mode 100644
index 000000000..4734d665e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+ Contribuições para os seus grupos:
+
+
+
+
+
+
+ Propriedades de terreno permitidas com o plano de pagamento atual:
+
+
+ [AREA] m²
+
+
+ Propriedades de terrenos atuais:
+
+
+ [AREA] m²
+
+
+ Disponível para compra de terras:
+
+
+ [AREA] m²
+
+
+ [AREA] m²
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_landmark_ctrl.xml b/indra/newview/skins/default/xui/pt/floater_landmark_ctrl.xml
new file mode 100644
index 000000000..daaf4ce49
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_landmark_ctrl.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
new file mode 100644
index 000000000..d2654de58
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ Você não tem permissão para visualizar este script.
+
+
+ Executando
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml b/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
new file mode 100644
index 000000000..4f60ef23a
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_media_browser.xml b/indra/newview/skins/default/xui/pt/floater_media_browser.xml
new file mode 100644
index 000000000..cfaec5b41
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_media_browser.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml b/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml
new file mode 100644
index 000000000..374592f0e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ Memória perdida atualmente: [SIZE] KB
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_mini_map.xml b/indra/newview/skins/default/xui/pt/floater_mini_map.xml
new file mode 100644
index 000000000..c6391921d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_mini_map.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_moveview.xml b/indra/newview/skins/default/xui/pt/floater_moveview.xml
new file mode 100644
index 000000000..fde1c1645
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_moveview.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_mute.xml b/indra/newview/skins/default/xui/pt/floater_mute.xml
new file mode 100644
index 000000000..e8cc955a8
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_mute.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_mute_object.xml b/indra/newview/skins/default/xui/pt/floater_mute_object.xml
new file mode 100644
index 000000000..7ec0051a7
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_mute_object.xml
@@ -0,0 +1,12 @@
+
+
+
+ Silenciar pelo nome afeta apenas conversa de objeto e MI,
+não sons. Você deve digitar o nome exato do objeto.
+
+
+ Nome do objeto
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_my_friends.xml b/indra/newview/skins/default/xui/pt/floater_my_friends.xml
new file mode 100644
index 000000000..a78b255f8
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_my_friends.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_name_description.xml b/indra/newview/skins/default/xui/pt/floater_name_description.xml
new file mode 100644
index 000000000..325a298a9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_name_description.xml
@@ -0,0 +1,11 @@
+
+
+
+ Nome:
+
+
+ Descrição:
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_new_im.xml b/indra/newview/skins/default/xui/pt/floater_new_im.xml
new file mode 100644
index 000000000..4ac7aa81f
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_new_im.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+ [FIRST] [LAST]
+
+
+ (online)
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_new_outfit_dialog.xml b/indra/newview/skins/default/xui/pt/floater_new_outfit_dialog.xml
new file mode 100644
index 000000000..fcb13b111
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_new_outfit_dialog.xml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Fazer Nova Aparencia
+
+
+ Aparências são pastas que contém roupas e partes do corpo.
+Arraste uma Aparencia até seu avatar para vestí-la.
+
+Fazer Nova Aparencia cria uma nova pasta e salva cópias dos itens que você está vestindo
+no momento.
+
+
+ Nome da Pasta:
+
+
+ Itens que compõem a Aparência:
+
+
+ Partes do Corpo:
+
+
+ Roupas:
+
+
+ Acessórios:
+
+
+ Opções:
+
+
+ Nova Vestimenta
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_object_im_info.xml b/indra/newview/skins/default/xui/pt/floater_object_im_info.xml
new file mode 100644
index 000000000..a52612db6
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_object_im_info.xml
@@ -0,0 +1,16 @@
+
+
+
+ Objeto:
+
+
+ Local:
+
+
+ (Info do Local Não Disponível)
+
+
+ Dono:
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_openobject.xml b/indra/newview/skins/default/xui/pt/floater_openobject.xml
new file mode 100644
index 000000000..d3b72b4b1
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_openobject.xml
@@ -0,0 +1,8 @@
+
+
+
+ [DESC]:
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_pay.xml b/indra/newview/skins/default/xui/pt/floater_pay.xml
new file mode 100644
index 000000000..affa095bc
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_pay.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+ Pagar residente:
+
+
+ [NAME]
+
+
+ Pagamento rápido:
+
+
+ Quantia:
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_pay_object.xml b/indra/newview/skins/default/xui/pt/floater_pay_object.xml
new file mode 100644
index 000000000..5018c2b0b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_pay_object.xml
@@ -0,0 +1,31 @@
+
+
+
+ Pagar Grupo:
+
+
+ Pagar residente:
+
+
+ [NAME]
+
+
+ Via objeto:
+
+
+ ...
+
+
+ Pagamento Rápido:
+
+
+ Quantia:
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml
new file mode 100644
index 000000000..9bb7f0425
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+ O próximo dono pode:
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_post_process.xml b/indra/newview/skins/default/xui/pt/floater_post_process.xml
new file mode 100644
index 000000000..8f5f5db74
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_post_process.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+ Brilho
+
+
+ Saturação
+
+
+ Contraste
+
+
+ Cor Base do Contraste
+
+
+
+
+
+
+
+
+
+ Múltiplo de Amplificação de Luz
+
+
+ Tamanho de Ruído
+
+
+ Intensidade de Ruído
+
+
+
+
+
+ Extração de Luminosidade
+
+
+ Tamanho da florescência
+
+
+ Inensidade da florescência
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_postcard.xml b/indra/newview/skins/default/xui/pt/floater_postcard.xml
new file mode 100644
index 000000000..60d3d1829
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_postcard.xml
@@ -0,0 +1,40 @@
+
+
+
+ Email do Destinatário:
+
+
+
+ Seu Email:
+
+
+
+ Seu nome:
+
+
+
+ Assunto:
+
+
+
+
+ Mensagem:
+
+
+ Digite sua mensagem aqui.
+
+
+ Se seu indicado entrar no Second Life, você receberá um bônus pela indicação.
+
+
+
+
+ Cartão postal do Second Life.
+
+
+ Dá uma olhada nisto!
+
+
+ "Enviando..."
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_preferences.xml b/indra/newview/skins/default/xui/pt/floater_preferences.xml
new file mode 100644
index 000000000..0e9ef768b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_preferences.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_animation.xml b/indra/newview/skins/default/xui/pt/floater_preview_animation.xml
new file mode 100644
index 000000000..26ca8f87e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_preview_animation.xml
@@ -0,0 +1,8 @@
+
+
+
+ Descrição:
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_classified.xml b/indra/newview/skins/default/xui/pt/floater_preview_classified.xml
new file mode 100644
index 000000000..4c583c28f
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_preview_classified.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_event.xml b/indra/newview/skins/default/xui/pt/floater_preview_event.xml
new file mode 100644
index 000000000..3c8ebcf95
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_preview_event.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_existing_landmark.xml b/indra/newview/skins/default/xui/pt/floater_preview_existing_landmark.xml
new file mode 100644
index 000000000..19412bf91
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_preview_existing_landmark.xml
@@ -0,0 +1,8 @@
+
+
+
+ Descrição:
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml
new file mode 100644
index 000000000..1645efc3e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml
@@ -0,0 +1,63 @@
+
+
+
+ Parar
+
+
+ Prévia
+
+
+ -- Nenhum --
+
+
+ Descrição:
+
+
+ Gatilho:
+
+
+ Substituir por:
+
+
+
+ Tecla de Atalho:
+
+
+
+
+ Biblioteca:
+
+
+ Passos:
+
+
+ Animação
+Som
+Bate Papo
+Esperar
+
+
+
+
+
+
+
+ Todos os passos acontecem
+simultaneamente, a menos que
+você inclua passos de espera.
+
+
+
+ Iniciar
+
+
+ Parar
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
new file mode 100644
index 000000000..e0a133d8a
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Descrição:
+
+
+ Carregando...
+
+
+ Não foi possível encontrar o objeto que contém esta nota.
+
+
+ Você não tem permissão de visualizar esta nota.
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_notecard_keep_discard.xml b/indra/newview/skins/default/xui/pt/floater_preview_notecard_keep_discard.xml
new file mode 100644
index 000000000..e64c98d71
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_preview_notecard_keep_discard.xml
@@ -0,0 +1,17 @@
+
+
+
+ Carregando...
+
+
+ Descrição:
+
+
+
+
+ Não foi possível encontrar o objeto que contém esta nota:
+
+
+ Você não tem permissão para ler esta nota.
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_sound.xml b/indra/newview/skins/default/xui/pt/floater_preview_sound.xml
new file mode 100644
index 000000000..3dd2f84f9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_preview_sound.xml
@@ -0,0 +1,8 @@
+
+
+
+ Descrição:
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_texture.xml b/indra/newview/skins/default/xui/pt/floater_preview_texture.xml
new file mode 100644
index 000000000..d9d58a746
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_preview_texture.xml
@@ -0,0 +1,12 @@
+
+
+
+ Descrição:
+
+
+
+
+
+ Dimensões: [WIDTH] x [HEIGHT]
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_url.xml b/indra/newview/skins/default/xui/pt/floater_preview_url.xml
new file mode 100644
index 000000000..dc2f6002d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_preview_url.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_price_for_listing.xml b/indra/newview/skins/default/xui/pt/floater_price_for_listing.xml
new file mode 100644
index 000000000..f346d7c37
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_price_for_listing.xml
@@ -0,0 +1,17 @@
+
+
+
+ Seu anúncio classificado irá rodar por uma semana
+a partir da data de publicação.
+
+A posição do seu anúncio nas listas classificadas é
+determinada por quando você escolheu pagar.
+O anúncio de maior valor pago aparecerá no topo da
+lista e aparece em primeiro nas buscas.
+
+
+ Preço por Anúncio ([CURRENCY]):
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_profile.xml b/indra/newview/skins/default/xui/pt/floater_profile.xml
new file mode 100644
index 000000000..d26a03200
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_profile.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_region_info.xml b/indra/newview/skins/default/xui/pt/floater_region_info.xml
new file mode 100644
index 000000000..fe228ab40
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_region_info.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
new file mode 100644
index 000000000..964b164cd
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
@@ -0,0 +1,181 @@
+
+
+
+
+ Denunciador:
+
+
+ Loremipsum Dolorsitamut
+
+
+ Região:
+
+
+ Nome da Região
+
+
+ Posição:
+
+
+ {128.1, 128.1, 15.4}
+
+
+ Clique no botão e em seguida no objeto:
+
+
+
+ Nome:
+
+
+ Consetetur Sadipscing
+
+
+ Proprietário:
+
+
+ Hendrerit Vulputate
+
+
+
+ Selecionar categoria
+
+
+ Idade > Idade no jogo
+
+
+ Idade > Residente adulto no Second Life Jovem
+
+
+ Idade > Residente menor de idade fora do Second Life Teen
+
+
+ Assalto > Sandbox de combate / área não segura
+
+
+ Assalto > Área segura
+
+
+ Assalto > Testando armas em sandbox
+
+
+ Comércio > Falha em enviar produto ou serviço
+
+
+ Revelar > Informação do mundo real
+
+
+ Revelar > Conversa monitorada remotamente
+
+
+ Revelar > Informação do Second Life/conversa/MIs
+
+
+ Distúrbio da paz > Uso injusto dos recursos da região
+
+
+ Distúrbio da paz > Objetos com excesso de scripts
+
+
+ Distúrbio da paz > Objeto despejando lixo
+
+
+ Distúrbio da paz > Spam repetitivo
+
+
+ Distúrbio da paz > Spam de anúncio indesejado
+
+
+ Fraude > L$
+
+
+ Fraude > Terra
+
+
+ Fraude > Esquema de pirâmide ou cartas encadeadas
+
+
+ Fraude > R$
+
+
+ Perturbação > Fazendas de Anúncios / spam visual
+
+
+ Perturbação > Difamação de indivíduos ou grupos
+
+
+ Perturbação > Impedindo movimentos
+
+
+ Perturbação > Perturbação sexual
+
+
+ Perturbação > Solicitando/incitando outros a violarem o ToS
+
+
+ Perturbação > Abuso verbal
+
+
+ Indecência > Conteúdo ou conduta amplamente ofensivos
+
+
+ Indecência > Nome de avatar inapropriado
+
+
+ Indecência > Conduta ou conteúdo inapropriados numa região PG
+
+
+ Indecência > Conduta ou conteúdo inapropriados numa região Mature
+
+
+ Violação de propriedade intelectual > Remoção de Conteúdo
+
+
+ Violação de Propriedade intelectual > Cópia Ilegal ou Aproveitar-se de Permissões
+
+
+ Intolerância
+
+
+ Terra > Abuso dos recursos da sandbox
+
+
+ Terra > Invasão > Objetos/texturas
+
+
+ Terra > Invasão > Partículas
+
+
+ Terra > Violação > Árvores/plantas
+
+
+ Apostas/jogos de azar
+
+
+ Outro
+
+
+
+ Nome do Denunciado:
+
+
+
+
+ Local do Abuso:
+
+
+ Resumo:
+
+
+ Detalhes:
+
+
+ Por favor, seja específico(a) sobre data, localidade,
+natureza do abuso, texto relevante de conversa/MI e
+selecione o objeto, se possível.
+
+
+ Nota: Relatos incompletos não serão investigados.
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_report_bug.xml b/indra/newview/skins/default/xui/pt/floater_report_bug.xml
new file mode 100644
index 000000000..7ecb8c180
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_report_bug.xml
@@ -0,0 +1,10 @@
+
+
+
+ Região:
+
+
+ Clique no botão e depois no objeto:
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_script_debug.xml b/indra/newview/skins/default/xui/pt/floater_script_debug.xml
new file mode 100644
index 000000000..48c73b93a
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_script_debug.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_script_ed_panel.xml b/indra/newview/skins/default/xui/pt/floater_script_ed_panel.xml
new file mode 100644
index 000000000..5b98f1464
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_script_ed_panel.xml
@@ -0,0 +1,43 @@
+
+
+
+ Loading...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Carregando...
+
+
+ Você não tem permissão de visualizar este script.
+
+
+ Objetos públicos não podem rodar scripts
+
+
+ Funcionando
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_script_preview.xml b/indra/newview/skins/default/xui/pt/floater_script_preview.xml
new file mode 100644
index 000000000..2a7680565
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_script_preview.xml
@@ -0,0 +1,6 @@
+
+
+
+ Descrição:
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_script_queue.xml b/indra/newview/skins/default/xui/pt/floater_script_queue.xml
new file mode 100644
index 000000000..7b35226bd
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_script_queue.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_search_replace.xml b/indra/newview/skins/default/xui/pt/floater_search_replace.xml
new file mode 100644
index 000000000..0eac6bc04
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_search_replace.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+ Buscar
+
+
+ Substituir
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_select_key.xml b/indra/newview/skins/default/xui/pt/floater_select_key.xml
new file mode 100644
index 000000000..e41a565d1
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_select_key.xml
@@ -0,0 +1,7 @@
+
+
+
+
+ Aperte uma tecla para selecionar
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_sell_land.xml b/indra/newview/skins/default/xui/pt/floater_sell_land.xml
new file mode 100644
index 000000000..2e7200103
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_sell_land.xml
@@ -0,0 +1,70 @@
+
+
+
+ Lote:
+
+
+ Nome do Lote
+
+
+ Tamanho:
+
+
+ [AREA] m²
+
+
+ Para vender este lote:
+
+
+ Defina um preço:
+
+
+ Escolha um preço apropriado para esta terra.
+
+
+ [CURRENCY]
+
+
+ ([CURRENCY][PER_METER] por m²)
+
+
+ Vender esta terra para:
+
+
+ Escolha se venderá para qualquer um ou para um comprador em
+particular.
+
+
+
+ -- Selecione um --
+
+
+ Qualquer um
+
+
+ Usuário Específico:
+
+
+
+
+ Vender os objetos com a terra?
+
+
+ Os objetos tranferíveis do proprietário do terreno que estão neste
+lote irão mudar de propriedade.
+
+
+
+ Não, manter a propriedade sobre os objetos
+
+
+ Sim, vender objetos com a terra
+
+
+
+
+ LEMBRE-SE: Todas as vendas são finais.
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
new file mode 100644
index 000000000..2109c311e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ VERDADEIRO
+
+
+ FALSO
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_sim_release_message.xml b/indra/newview/skins/default/xui/pt/floater_sim_release_message.xml
new file mode 100644
index 000000000..c4b5e9182
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_sim_release_message.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Ajuda no mundo
+
+
+ http://www.secondlife.com/app/support/inworld.html
+
+
+ Ajuda adicional
+
+
+ http://www.secondlife.com/app/support/support.html
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_skin_preview_template.xml b/indra/newview/skins/default/xui/pt/floater_skin_preview_template.xml
new file mode 100644
index 000000000..3df393069
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_skin_preview_template.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+ Desfocado
+
+
+
+ Texto
+
+
+
+
+ Focado
+
+
+
+
+
+
+
+ Texto de Conversa
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
new file mode 100644
index 000000000..200a4c721
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
@@ -0,0 +1,137 @@
+
+
+
+ Destino da foto
+
+
+
+ Enviar por email
+
+
+ Salvar no seu inventário ([UPLOADFEE])
+
+
+ Salvar no seu disco rígido
+
+
+
+ Tamanho do arquivo: [SIZE] KB
+
+
+
+
+
+
+ Salvar
+
+
+ Salvar como...
+
+
+
+
+
+
+ Tamanho
+
+
+ Formato
+
+
+
+ Janela Atual
+
+
+ 640x480
+
+
+ 800x600
+
+
+ 1024x768
+
+
+ Customizado
+
+
+
+
+ Janela Atual
+
+
+ Pequeno (128x128)
+
+
+ Médio (256x256)
+
+
+ Grande (512x512)
+
+
+ Customizado
+
+
+
+
+ Janela Atual
+
+
+ 320x240
+
+
+ 640x480
+
+
+ 800x600
+
+
+ 1024x768
+
+
+ 1280x1024
+
+
+ 1600x1200
+
+
+ Customizado
+
+
+
+
+ PNG
+
+
+ JPEG
+
+
+ BMP
+
+
+
+
+
+
+
+ Capturar:
+
+
+
+ Cores
+
+
+ Formato
+
+
+ Decoração do Objeto
+
+
+
+
+
+
+
+
+ desconhecido
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_sound_preview.xml b/indra/newview/skins/default/xui/pt/floater_sound_preview.xml
new file mode 100644
index 000000000..9a023b909
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_sound_preview.xml
@@ -0,0 +1,11 @@
+
+
+
+ Nome:
+
+
+ Descrição:
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_statistics.xml b/indra/newview/skins/default/xui/pt/floater_statistics.xml
new file mode 100644
index 000000000..d26c7081c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_statistics.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_telehub.xml b/indra/newview/skins/default/xui/pt/floater_telehub.xml
new file mode 100644
index 000000000..11886c7ca
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_telehub.xml
@@ -0,0 +1,32 @@
+
+
+
+ Telehub conectado ao objeto [OBJECT]
+
+
+ Sem telehub conectado.
+
+
+ Para remover, clique em Desconectar.
+
+
+ Selecione um objeto e clique em Conectar Telehub.
+
+
+
+
+ Pontos de Nascimento (posições, não objetos):
+
+
+
+
+
+ Selecione um objeto e clique Adicionar para
+especificar a posição.
+Em seguida, você pode mover ou apagar o objeto.
+As posições são relativas ao centro do telehub.
+
+Selecione um item na lista para mostrar a posição
+in-world.
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
new file mode 100644
index 000000000..784540a48
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
@@ -0,0 +1,23 @@
+
+
+
+ Clique para escolher uma imagem
+
+
+ Multiplo
+
+
+ Dimensões: [DIMENSIONS]
+
+
+
+
+
+
+
+
+
+
+ Pegar:
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
new file mode 100644
index 000000000..c3bd9b67d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -0,0 +1,658 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Régua:
+
+
+
+ Mundo
+
+
+ Local
+
+
+ Referência
+
+
+
+
+
+
+
+
+
+
+ Arraste para mover, shift+Arrastar para Copiar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Escavadeira:
+
+
+ Tamanho
+
+
+ Força
+
+
+ [DESC] [NUM]
+
+
+
+
+
+
+
+ Nome:
+
+
+ Descrição:
+
+
+ Criador:
+
+
+ Thrax Linden
+
+
+
+ Proprietário:
+
+
+ Thrax Linden
+
+
+
+ Grupo:
+
+
+ The Lindens
+
+
+
+ Permissões:
+
+
+ Você pode modificar este objeto.
+
+
+
+ Doar...
+
+
+ Doar
+
+
+
+
+
+
+
+ Preço: [CURRENCY]
+
+
+
+ Original
+
+
+ Cópia
+
+
+ Conteúdo
+
+
+
+ Próximo Proprietário pode:
+
+
+
+
+
+ Quando clicado com o botão esquerdo:
+
+
+
+ Tocar/Pegar (padrão)
+
+
+ Sentar no objeto
+
+
+ Comprar objeto
+
+
+ Pagar Objeto
+
+
+ Abrir
+
+
+ Executar a mídia do lote
+
+
+ Abrir a mídia do lote
+
+
+
+ B:
+
+
+ O:
+
+
+ G:
+
+
+ E:
+
+
+ N:
+
+
+ F:
+
+
+ Você pode modificar este objeto.
+
+
+ Você pode modificar estes objetos.
+
+
+ Você não pode modificar este objeto.
+
+
+ Você não pode modificar estes objetos.
+
+
+ Você precisa selecionar o objeto todo para ajustar as permissões.
+
+
+ Preço: [CURRENCY]
+
+
+ Preço Total: [CURRENCY]
+
+
+ Preço Por: [CURRENCY]
+
+
+ Preço Misturado
+
+
+ Venda Misturada
+
+
+
+
+
+
+
+ Selecione apenas uma primitiva para editar os parâmetros.
+
+
+ Editar os parâmetros do Objeto:
+
+
+
+
+
+
+ Posição (metros)
+
+
+
+
+
+ Tamanho (metros)
+
+
+
+
+
+ Rotação (graus)
+
+
+
+
+
+ Material
+
+
+
+ Pedra
+
+
+ Metal
+
+
+ Vidro
+
+
+ Madeira
+
+
+ Carne
+
+
+ Plástico
+
+
+ Couro
+
+
+
+ Forma básica
+
+
+
+ Caixa
+
+
+ Cilindro
+
+
+ Prisma
+
+
+ Esfera
+
+
+ Toróide
+
+
+ Tubo
+
+
+ Anel
+
+
+ Esculpida
+
+
+
+ Recorte Início e final
+
+
+
+
+ Vazio
+
+
+ Torcer
+
+
+ Forma Vazia
+
+
+
+ Padrão
+
+
+ Circulo
+
+
+ Quadrado
+
+
+ Triâgulo
+
+
+
+ Torcer no Início e final
+
+
+
+
+ Afinar
+
+
+ Tamanho do Buraco
+
+
+
+
+ Inclinar
+
+
+
+
+ Perfil Recortado no Início e fim
+
+
+ Cova Início e final
+
+
+ Pedaço Início e fim
+
+
+
+
+ Afinar
+
+
+
+
+ Raio
+
+
+ Revoluções
+
+
+
+
+
+ Tipo costura
+
+
+
+ (nenhum)
+
+
+ Esfera
+
+
+ Toróide
+
+
+ Plano
+
+
+ Cilindro
+
+
+
+
+
+
+
+
+ Selecione apenas uma primitiva para editar suas características.
+
+
+ Editar características do Objeto:
+
+
+
+
+
+
+
+
+
+
+
+
+ Cor
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Transparência %
+
+
+ Brilho
+
+
+
+ Mapeamento
+
+
+
+ Padrão
+
+
+ Planar
+
+
+
+ Brilho
+
+
+
+ Nenhum
+
+
+ Baixo
+
+
+ Médio
+
+
+ Alto
+
+
+
+ Ondulação
+
+
+
+ Nenhum
+
+
+ Claridade
+
+
+ Escuridão
+
+
+ Granulação
+
+
+ Casca
+
+
+ Tijolos
+
+
+ Caixa
+
+
+ Concreto
+
+
+ Encaroçado
+
+
+ Pedra Cortante
+
+
+ Discos
+
+
+ Cascalho
+
+
+ Pedrisco
+
+
+ Revestimento
+
+
+ Empedrado
+
+
+ Grafiato
+
+
+ Sulcos
+
+
+ Weave
+
+
+
+ Repetir por Face
+
+
+
+
+
+
+ Rotação (graus)
+
+
+ Repetir por Metro
+
+
+ Repetir por Face
+
+
+ Repetir por Metro
+
+
+
+ Deslocamento
+
+
+
+
+ Alinhar Texturas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Informações do Lote
+
+
+ Preço: [CURRENCY][PRICE] por [AREA] m².
+
+
+ Área: [AREA] m².
+
+
+
+
+
+ Modificar Lote
+
+
+
+
+
+ Transações com a Terra
+
+
+
+
+
+ Arrastar as bandas coloridas para girar o objeto
+
+
+ Clicar e arrastar para esticar o lado selecionado
+
+
+ Arrastar para mover, Shift-arrastar para copiar
+
+
+ Clicar e reter para modificar a terra
+
+
+ Clicar e arrastar para mudar a vista
+
+
+ Arrastar para mover, Ctrl para levantar, Ctrl-Shift para rotacionar
+
+
+ Clique no mundo para construir
+
+
+ Clicar e arrastar para selecionar a terra
+
+
+ Tela
+
+
+ Local
+
+
+ Mundo
+
+
+ Referência
+
+
+ Anexo
+
+
+ primitivas: [COUNT][PE_STRING]
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_top_objects.xml b/indra/newview/skins/default/xui/pt/floater_top_objects.xml
new file mode 100644
index 000000000..cd94b51b1
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_top_objects.xml
@@ -0,0 +1,58 @@
+
+
+
+ Carregando...
+
+
+
+
+
+
+
+
+
+
+ ID do Objeto:
+
+
+
+ Nome do Objeto:
+
+
+
+ Nome do Proprietário:
+
+
+
+
+
+
+
+
+
+
+
+ Principais Scripts
+
+
+ [COUNT] scripts tomando um total de [TIME] ms
+
+
+ Tempo
+
+
+ Hora Mono
+
+
+ Principais Colidentes
+
+
+ [COUNT] objetos principais experimentando muitas potenciais colisões
+
+
+ Placar
+
+
+ Nenhum encontrado.
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_tos.xml b/indra/newview/skins/default/xui/pt/floater_tos.xml
new file mode 100644
index 000000000..4bb4539b8
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_tos.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+ Por favor, leia os seguintes Termos de Serviço cuidadosamente. Para continuar acessando o
+Second Life, você precisa aceitar o acordo.
+
+
+ TOS_TEXT
+
+
+ http://secondlife.com/app/tos/
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_url_entry.xml b/indra/newview/skins/default/xui/pt/floater_url_entry.xml
new file mode 100644
index 000000000..48af8de36
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_url_entry.xml
@@ -0,0 +1,13 @@
+
+
+
+ URL da Mídia:
+
+
+
+
+
+
+ Carregando..
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_water.xml b/indra/newview/skins/default/xui/pt/floater_water.xml
new file mode 100644
index 000000000..ceb441405
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_water.xml
@@ -0,0 +1,86 @@
+
+
+
+ Pré-configurações da Água:
+
+
+
+
+
+
+
+
+ Cor da névoa da Água
+
+
+
+
+ Expoente da Densidade de névoa
+
+
+
+ Modificador da névoa Subaquática
+
+
+
+ Escala da Marola de Reflexão
+
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+ Escala de Fresnel
+
+
+
+ Deslocamento de Fresnel
+
+
+
+ Refratar a Escala para Cima
+
+
+
+ Refratar a Escala para Baixo
+
+
+
+ Multiplicador de Difusão
+
+
+
+
+
+ Direção da Onda Maior
+
+
+
+ X
+
+
+ Y
+
+
+ Direção da Onda Pequena
+
+
+
+ X
+
+
+ Y
+
+
+ Mapa Normal
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml b/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml
new file mode 100644
index 000000000..2b2c669a1
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+ Salvar item como:
+
+
+ Novo [DESC]
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
new file mode 100644
index 000000000..0de8bd22f
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
@@ -0,0 +1,187 @@
+
+
+
+ Pré-definições de Céu:
+
+
+
+
+
+
+
+
+
+ Horizonte Azul
+
+
+
+ R
+
+
+ G
+
+
+ B
+
+
+ I
+
+
+ Horizonte da Neblina
+
+
+
+ Densidade de Azul
+
+
+
+ R
+
+
+ G
+
+
+ B
+
+
+ I
+
+
+ Densidade da Neblina
+
+
+
+ Multiplicador de Densidade
+
+
+
+ Multiplicador de Distância
+
+
+
+ Altitude Máxima
+
+
+
+
+
+ Cor do Sol/Lua
+
+
+
+ R
+
+
+ G
+
+
+ B
+
+
+ I
+
+
+ Posição do Sol/Lua
+
+
+
+ Ambiente
+
+
+
+ R
+
+
+ G
+
+
+ B
+
+
+ I
+
+
+ Ângulo Leste
+
+
+
+ Brilho do Sol
+
+
+
+
+
+ Gamma da Cena
+
+
+
+ Brilho da Estrela
+
+
+
+
+
+ Cor da Nuvem
+
+
+
+ R
+
+
+ G
+
+
+ B
+
+
+ I
+
+
+ Densidade/ XY da Nuvem
+
+
+
+ X
+
+
+ Y
+
+
+ D
+
+
+ Cobertura da Nuvem
+
+
+
+ Escala da Nuvem
+
+
+
+ Detalhe da Nuvem (XY/Densidade)
+
+
+
+ X
+
+
+ Y
+
+
+ D
+
+
+ Rolagem X da Nuvem
+
+
+
+
+ Rolagem Y da Nuvem
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_world_map.xml b/indra/newview/skins/default/xui/pt/floater_world_map.xml
new file mode 100644
index 000000000..a6dc6358c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_world_map.xml
@@ -0,0 +1,53 @@
+
+
+
+ Você
+
+
+ Casa
+
+
+ Leilão
+
+
+ Terra à venda
+
+
+
+
+
+
+
+ Eventos:
+
+
+
+
+
+
+ Amigos Conectados
+
+
+
+
+ Landmarks
+
+
+
+
+
+ Resultados da Procura:
+
+
+ Localização:
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/menu_inventory.xml b/indra/newview/skins/default/xui/pt/menu_inventory.xml
new file mode 100644
index 000000000..486588158
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_inventory.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/menu_login.xml b/indra/newview/skins/default/xui/pt/menu_login.xml
new file mode 100644
index 000000000..3513a704c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_login.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/menu_mini_map.xml b/indra/newview/skins/default/xui/pt/menu_mini_map.xml
new file mode 100644
index 000000000..1293f4e17
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_mini_map.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/menu_pie_attachment.xml b/indra/newview/skins/default/xui/pt/menu_pie_attachment.xml
new file mode 100644
index 000000000..0fcfb67b7
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_pie_attachment.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/menu_pie_avatar.xml b/indra/newview/skins/default/xui/pt/menu_pie_avatar.xml
new file mode 100644
index 000000000..2773fde7f
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_pie_avatar.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/menu_pie_land.xml b/indra/newview/skins/default/xui/pt/menu_pie_land.xml
new file mode 100644
index 000000000..a458ff464
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_pie_land.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/menu_pie_object.xml b/indra/newview/skins/default/xui/pt/menu_pie_object.xml
new file mode 100644
index 000000000..6be6063b6
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_pie_object.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/menu_pie_self.xml b/indra/newview/skins/default/xui/pt/menu_pie_self.xml
new file mode 100644
index 000000000..75bf9367e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_pie_self.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/menu_slurl.xml b/indra/newview/skins/default/xui/pt/menu_slurl.xml
new file mode 100644
index 000000000..67a4b51b6
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_slurl.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
new file mode 100644
index 000000000..49d4bf512
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
new file mode 100644
index 000000000..db7ae40a4
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -0,0 +1,3546 @@
+
+
+
+ Não exibir isto novamente
+
+
+ Sempre escolher esta opção
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sua versão do [APP_NAME] não sabe como mostrar a mensagem de alerta que acabou de receber.
+
+Detalhes do erro: O alerta chamado '[_NAME]' não foi encontrado em notifications.xml.
+
+
+
+
+ Floater error: Não foram encontrados os seguintes controles:
+
+[CONTROLS]
+
+
+
+
+ Nenhum tutorial está disponível no momento.
+
+
+
+
+ [MESSAGE]
+
+
+
+ [MESSAGE]
+
+
+
+ Ocorreu um erro atualizando o [APP_NAME]. Por favor, faça o download da última versão em www.singularityviewer.org.
+
+
+
+
+ Erro de Rede: Não conseguiu estabelecer uma conexão.
+'[DIAGNOSTIC]'
+Por favor, verifique sua conexão de rede.
+
+
+
+
+ Modelo de Mensagem [PATH] não encontrado.
+
+
+
+
+ Salvar modificações?
+
+
+
+
+ Houve um problema com o carregamento do texto para um script devido à seguinte razão: [REASON]. Por favor, tente novamente mais tarde.
+
+
+
+ Houve um problema durante o carregamento do script compilado devido à seguinte razão: [REASON]. Por favor, tente novamente mais tarde.
+
+
+
+ Falha nos dados de inscrição de animação. Por favor, tente mais tarde.
+
+
+
+ Houve um problema com o carregamento da foto do leilão devido à seguinte razão: [REASON]
+
+
+
+ Não é possível visualizar os conteúdos de mais de um item ao mesmo tempo. Por favor, selecione apenas um objeto e tente novamente.
+
+
+
+ Salvar todas as mudanças de roupas/ partes do corpo?
+
+
+
+
+ Conceder direitos de modificar a outros residentes lhes permite trocar, deletar ou pegar QUAISQUER objetos que você possa ter no mundo.
+Seja MUITO cuidadoso(a) quando passar esta permissão.
+Você deseja conceder direitos de modificar para [NAME]?
+
+
+
+
+ Conceder direitos para modificar seus objetos a outro residente permite ele mudar QUAISQUER objetos que você possa ter no mundo. Tenha muito cuidado quando conceder essa permissão.
+Você deseja permitir que os residentes selecionados tenham direito de edição?
+
+
+
+
+ Você deseja cancelar os direitos de edição de [NAME]?
+
+
+
+
+ Você quer revogar os direitos de edição para os residentes selecionados?
+
+
+
+
+ Não foi possível criar um grupo.
+[MESSAGE]
+
+
+
+
+ [NEEDS_APPLY_MESSAGE]
+[WANT_APPLY_MESSAGE]
+
+
+
+
+ Você deve especificar um assunto para enviar uma notícia para o grupo.
+
+
+
+
+ Você está para adicionar membros do grupo na função de [ROLE_NAME].
+Membros não podem ser removidos dessa função.
+Os membros podem, eles próprios, recusar a função.
+Deseja continuar?
+
+
+
+
+ Você está prestes a adicionar a habilidade '[ACTION_NAME]' para a função '[ROLE_NAME]'
+
+*AVISO*
+Qualquer membro com esta Habilidade pode atribuir a si mesmo -- e a outro membro -- funções que têm mais poderes que os que possuem atualmente, potencialmente elevando-os aos níveis próximos ao Proprietário. Certifique-se sobre esta decisão antes de atribuir esta habilidade.
+
+Adicionar esta habilidade ao '[ROLE_NAME]'?
+
+
+
+
+ Você está prestes a adicionar a habilidade '[ACTION_NAME]' à função '[ROLE_NAME]'.
+
+*AVISO*
+Qualquer membro numa função com esta habilidade, pode atribuir a sí mesmo -- e a qualquer outro -- todas as habilidades, elevando seus níveis próximos ao poder do Proprietário.
+
+Adicionar esta habilidade a '[ROLE_NAME]'?
+
+
+
+
+ Selecionando "Publicar na Busca"
+Clicando neste Box, será mostrado:
+- este lote nos resultados de busca
+- os objetos públicos deste lote
+- este lote na busca da web
+
+
+
+ Mídia e Música podem apenas ser utilizadas dentro deste lote. As opções de Som e Voz podem ser restritas ao lote ou serão ouvidas por residentes fora do lote, dependendo de suas Classificações de maturidade. Ir para o Banco de Conhecimento para saber mais sobre como definir essas opções?
+
+ https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=5046
+
+
+
+
+
+ Os resultados de busca são organizados com base na aba em que você se encontra, sua Classificação de maturidade, a categoria escolhida e outros fatores. Para mais detalhes, por favor veja o Banco de Conhecimento.
+
+ https://support.secondlife.com/ics/support/default.asp?deptID=4417&task=knowledge&questionID=4722
+
+
+
+
+
+ Você não pode fazer este lote visível na busca porque ele está localizado numa região que proíbe isso.
+
+
+
+ Selecionando "Mostrar na Busca" será mostrado:
+- meu perfil nos resultados de busca
+- um link para meu perfil nas páginas de grupos públicos
+
+
+
+ Você pode propor a outro Residente ou dissolver uma parceria existente através do website [SECOND_LIFE].
+
+Ir para o site do [SECOND_LIFE] para mais informações sobre parceria?
+
+
+
+
+ Suas permissões padrão podem não funcionar em regiões antigas.
+
+
+
+ Se este Residente definiu uma URL de perfil na web, então você pode:
+ * Clicar em 'Carregar' para ver a página na aba Web.
+ * Clicar Carregar > 'Em navegador externo' para ver a página no seu navegador de web padrão.
+ * Clicar Carregar > 'URL de Casa' para voltar ao perfil do Residente na web se você navegou adiante.
+
+Quando você está vendo seu próprio perfil, você pode entrar com qualquer URL como sendo seu perfil na web e clicar OK para definí-la.
+Outros residentes podem visitar a URL que você definiu, quando eles olharem seu perfil.
+
+
+
+ Unir-se a esse grupo custa [CURRENCY][COST].
+Deseja prosseguir?
+
+
+
+ Associar-se a este grupo custa [CURRENCY][COST].
+Você não tem [CURRENCY] suficientes para associar-se a este grupo.
+
+
+
+ Por [CURRENCY][COST] você pode ingressar no terreno ('[PARCEL_NAME]') por [TIME] horas. Comprar um passe de acesso?
+
+
+
+
+ O preço de venda deve ser ajustado para mais que 0 [CURRENCY], se desejar vender para qualquer um.
+Por favor, selecione um indivíduo para realizar a venda se o valor for 0 [CURRENCY].
+
+
+
+ [LAND_SIZE] m² selecionados de terra estão sendo configurados para venda.
+Seu preço de venda será [CURRENCY][SALE_PRICE] e está autorizado para venda para [NAME]. Gostaria de continuar a fazer essa alteração?
+
+
+
+
+ ATENÇÃO: Ao clicar em 'vender para qualquer um' torna a sua terra disponível para toda a comunidade [SECOND_LIFE], mesmo aqueles que não estão nesta região.
+
+A área de [LAND_SIZE] m² de terra selecionada está posta para venda.
+Seu preço de venda será [CURRENCY] [SALE_PRICE] e está autorizado para [NAME].
+
+
+
+
+ Você tem certeza de que quer retornar todos os objetos compartilhados com o grupo '[NAME]' neste lote de terra, para o inventário do seu antigo Proprietário?
+
+*AVISO* Isso irá deletar os objetos não transferíveis doados ao grupo!
+
+Objetos: [N]
+
+
+
+
+ Você tem certeza de que deseja retornar todos os objetos do residente '[NAME]' neste lote para o inventário dele?
+
+Objetos: [N]
+
+
+
+
+ Você tem certeza de que deseja retornar todos os objetos de sua propriedade neste lote para seu inventário?
+
+Objetos: [N]
+
+
+
+
+ Você tem certeza de que deseja retornar todos os objetos que NÃO são seus para o inventário de seus proprietários?
+Objetos transferíveis doados ao grupo retornarão para seu proprietários.
+
+*AVISO* Isso fará com que os objetos não-transferíveis sejam deletados!
+
+Objetos: [N]
+
+
+
+
+ Você tem certeza de que deseja retornar todos os objetos deste lote NÃO pertencentes a [NAME] para o inventário do proprietário?
+
+*AVISO* Esta ação irá apagar os objetos não transferíveis doados ao grupo!
+
+Objetos: [N]
+
+
+
+
+ Você tem certeza de que deseja enviar todos os objetos listados de volta aos inventários de seus proprietários?
+
+
+
+
+ Você tem certeza que deseja desativar todos os objetos desta região?
+
+
+
+
+ Retornar os objetos deste lote que NÃO são compartilhados com o grupo [NAME] de volta para seus proprietários?
+
+Objetos: [N]
+
+
+
+
+ Não é possível desabilitar scripts externos.
+Toda esta região possui dano habilitado.
+Scripts devem ser permitidos para fazer as armas funcionarem.
+
+
+
+ Você deve permanecer dentro do lote para definir o ponto de aterrissagem.
+
+
+
+ Por favor, digite um endereço de email válido para o(s) destinatário(s).
+
+
+
+ Por favor, insira seu endereço de e-mail.
+
+
+
+ Enviar por email uma foto com o assunto ou mensagem padrão?
+
+
+
+
+ Erro processando dados da foto.
+
+
+
+ Erro ao codificar a foto.
+
+
+
+ Houve um problema ao enviar a foto devido à seguinte razão: [REASON]
+
+
+
+ Houve um problema ao carregar a foto da reportagem devido à seguinte razão: [REASON]
+
+
+
+ Você deve concordar com os Termos de Serviço para continuar a entrar no [SECOND_LIFE].
+
+
+
+ Não foi possível vestir o conjunto. A pasta do conjunto não contém roupas, partes do corpo ou acessórios.
+
+
+
+ Não é possível usar roupas ou partes do corpo que estão no lixo.
+
+
+
+ Você não pode vestir este item porque ele ainda não carregou. Por favor, tente novamente em um minuto.
+
+
+
+ Oops! Alguma coisa foi deixada em branco.
+Você precisa entrar com ambos os Nome e Sobrenome do seu avatar.
+
+Você precisa de uma conta para entrar no [SECOND_LIFE]. Você gostaria de criar uma conta agora?
+
+
+
+
+ Anúncios classificados aparecem na seção 'Classificados' do diretório de Busca e no www.secondlife.com por uma semana.
+Preencha seu anúncio e então clique 'Publicar...' para adicioná-lo ao diretório.
+Será solicitado a você um preço a ser pago, quando você clicar Publicar.
+Pagando mais, faz com que seu anúncio apareça em posição mais alta na lista e também em posição mais alta, quando as pessoas buscarem por palavras-chave.
+
+
+
+
+ Apagar classificado'[NAME]'?
+Não há reembolso por taxas já pagas.
+
+
+
+
+ Salvar as mudanças no classificado [NAME]?
+
+
+
+
+ Apagar pegar [PICK]?
+
+
+
+
+ Ir até a página web de enventos [SECOND_LIFE] ?
+
+
+
+
+ Por favor, selecione uma proposta para visualizar.
+
+
+
+ Por favor, selecione um item do histórico para exibí-lo.
+
+
+
+ Você gostaria de reabilitar todas estas pop ups que você indicou previamente como 'Não me mostrar novamente'?
+
+
+
+
+ Você gostaria de desabilitar todas as popups que podem ser puladas?
+
+
+
+
+ O cache será limpo quando você reiniciar [APP_NAME].
+
+
+
+ O Cache será removido após reiniciar [APP_NAME].
+Nota: Isto limpará o cache.
+
+
+
+ Configuração de porta terá efeito após reiniciar [APP_NAME].
+
+
+
+ A nova pele será exibida após reiniciar [APP_NAME].
+
+
+
+ Ir para a página do [SECOND_LIFE] para ver os detalhes do leilão ou fazer um lance?
+
+
+
+
+ Salvar alterações?
+
+
+
+
+ Falha ao salvar Gesto.
+Este gesto possui muitos passos.
+Tente remover alguns passos e salve-o novamente.
+
+
+
+ Falha ao salvar Gesto. Por favor, tente em uma minuto.
+
+
+
+ Não foi possível salvar o gesto pois o objeto ou o inventário associado ao objeto não foi encontrado.
+O objeto pode estar fora de alcance ou foi deletado.
+
+
+
+ Houve um problema em salvar um gesto devido à seguinte razão: [REASON]. Por favor, tente salvar o Gesto depois.
+
+
+
+ Não foi possível salvar uma nota pois o objeto ou o inventário associado ao objeto não foi encontrado.
+O objeto pode estar fora de alcance ou foi deletado.
+
+
+
+ Houve um problema em salvar uma nota devido a seguinte razão: [REASON]. Por favor, tente salvar a nota novamente mais tarde.
+
+
+
+ Não foi possível desfazer todas as mudanças na sua versão de script.
+Gostaria de carregar a última versão salva?
+(**Aviso** Esta operação não pode ser desfeita).
+
+
+
+
+ Houve um problema em salvar um script devido à seguinte razão: [REASON]. Por favor, tente salvar novamente o script mais tarde.
+
+
+
+ Não foi possível salvar o script pois o objeto em que ele está não pôde ser encontrado.
+O objeto pode estar fora de alcance ou ter sido deletado.
+
+
+
+ Houve um problema em salvar uma compilação de script devido a seguinte razão: [REASON]. Por favor, tente salvar novamente o script mais tarde.
+
+
+
+ Não foi possível iniciar ou parar o script pois o objeto em que ele está não pôde ser encontrado.
+O objeto pode estar fora de alcance ou ter sido deletado.
+
+
+
+ Não foi possível baixar o arquivo.
+
+
+
+ Não foi possível escrever o arquivo [[FILE]]
+
+
+
+ Aviso: Seu sistema não é compatível com os requisitos mínimos exigidos pelo [APP_NAME]. Se você continuar usando o [APP_NAME] pode experimentar uma performance ruim. Infelizmente não podemos oferecer suporte técnico para configurações de sistema não suportado.
+
+MINSPECS
+Você deseja visitar [_URL] para maiores informações?
+
+ http://secondlife.com/support/sysreqs.php?lang=pt
+
+
+
+
+
+ Seu sistema possui uma placa gráfica que nos é desconhecido neste momento.
+Este é normalmente o caso de um novo hardware que nós não tivemos a chance de testar.
+[APP_NAME] vai muito provavelmente executar corretamente, mas talvez seja necessário ajustar suas configurações de gráficos para algo mais apropriado.
+(Menu Editar > Preferências > Gráficos).
+
+
+
+
+ [APP_NAME] travou quando inicializava os drivers gráficos.
+A Qualidade Gráfica será ajustada para baixa, para evitar alguns erros comuns de drivers.
+Isto irá desabilitar alguns atributos gráficos.
+Nós recomendamos a atualização dos drivers de sua placa gráfica.
+A Qualidade Gráfica pode ser aumentada no Preferências > Gráficos.
+
+
+
+ A região [REGION] não permite ser aplainada.
+
+
+
+ Você não tem permissão para copiar este item e irá perdê-lo do seu inventário se entregá-lo a alguém.
+[ITEMS]
+Quer realmente oferecer este item?
+
+
+
+
+ Não foi possível entregar o item de inventário.
+
+
+
+ Transação cancelada.
+
+
+
+ Não é possível passar mais que 42 itens em uma única transferência de inventário.
+
+
+
+ Você não tem permissão para transferir os itens selecionados.
+
+
+
+ Você não tem permissão para copiar [COUNT] dos
+itens selecionados. Você irá perdê-los do seu inventário.
+Deseja realmente entregar estes itens?
+
+
+
+
+ Você não tem permissão para transferir a pasta selecionada.
+
+
+
+ Congelar esse avatar?
+Ele ou ela estará temporáriamente incapacitado de mover-se, conversar ou interagir com mundo.
+
+
+
+
+ Congelar [AVATAR_NAME]?
+Ele ou ela vai ficar temporariamente incapaz de se mover, usar o bate-papo ou interagir com o mundo.
+
+
+
+
+ Ejetar [AVATAR_NAME] da sua terra?
+
+
+
+
+ Ejetar este avatar da sua terra?
+
+
+
+ Ejetar [AVATAR_NAME] da sua terra?
+
+
+
+
+ Erro de aquisição: Muitos objetos selecionados.
+
+
+
+ Erro de aquisição: Objetos criados em mais de uma região.
+Por favor, mova todos os objetos a serem adquiridos para uma mesma região.
+
+
+
+ [EXTRA]
+
+Vá para [URL] para informação sobre compra de dinheiro.
+
+
+
+
+ Não é possível unir estes [COUNT] objetos.
+Você pode unir um máximo de [MAX] objetos.
+
+
+
+ Você pode unir apenas conjuntos completos de objetos e deve selecionar mais que um objeto.
+
+
+
+ Impossibilitado de unir, porque você não tem permissão para modificar
+todos os objetos.
+
+Por favor, certifique-se de que nenhum deles está travado e que você é dono de todos eles.
+
+
+
+ Impossibilitado de unir porque nem todos os objetos são do mesmo dono.
+
+Por favor, certifique-se de que você é o dono de todos os objetos selecionados.
+
+
+
+ Nenhuma extensão para o arquivo: '[FILE]'
+
+Por favor, certifique-se de que o arquivo tem uma extensão de arquivo correta.
+
+
+
+ Extensão de arquivo inválida: [EXTENSION].
+Esperada [VALIDS]
+
+
+
+
+ Não é possível abrir para leitura o arquivo de som carregado:
+[FILE]
+
+
+
+ O arquivo não aparenta ser um arquivo do tipo RIFF WAVE:
+[FILE]
+
+
+
+ O arquivo não aparenta ser um arquivo de áudio PCM WAVE:
+[FILE]
+
+
+
+ O arquivo possui um número de canais inválido (deve ser mono ou estéreo):
+[FILE]
+
+
+
+ O arquivo não aparenta ter uma taxa de amostragem suportada (deve ser 44.1k):
+[FILE]
+
+
+
+ O arquivo não aparenta ter um tamanho de palavra suportada (deve ser 8 ou 16 bit):
+[FILE]
+
+
+
+ Não pode ser encontrado bloco de dados no cabeçalho WAV:
+[FILE]
+
+
+
+ Arquivo de áudio é muito longo (no máximo 10 segundos):
+[FILE]
+
+
+
+ Problemas com o arquivo [FILE]:
+
+[ERROR]
+
+
+
+ Não pode abrir o arquivo temporário de som comprimido, para leitura: [FILE]
+
+
+
+ Falha desconhecida de codificação vorbis em: [FILE]
+
+
+
+ Impossível codificar o arquivo: [FILE]
+
+
+
+ Fonte do arquivo corrompida: [FILE]
+
+
+
+ Versão desconhecida de arquivo de recursos da Linden no arquivo: [FILE]
+
+
+
+ Incapaz de criar arquivo de saída: [FILE]
+
+
+
+ Atualmente, não suportamos o envio de arquivos de animação em massa.
+
+
+
+ Incapaz de carregar [FILE] devido ao seguinte motivo: [REASON]
+Por favor tente novamente mais tarde.
+
+
+
+ Você não pode criar um ponto de referência porque o proprietário do terreno não permite. Tente novamente a alguns metros de distância.
+
+
+
+ Não é possível realizar uma recompilação.
+Selecione um objeto com um script.
+
+
+
+ Impossibilitado de executar uma 'recompilação'.
+
+Selecione objetos com scripts que você tem permissão para modificar.
+
+
+
+ Impossibilitado de executar 'redefinir'.
+
+Selecione objetos com scripts.
+
+
+
+ Impossibilitado de executar 'redefinir'.
+
+Selecione objetos com scripts que você tem permissão para modificar.
+
+
+
+ Impossibilitado de definir quaisquer scripts para 'rodando'.
+
+Selecione objetos com scripts.
+
+
+
+ Impossibilitado de definir quaisquer scripts para 'não rodando'.
+
+Selecione objetos com scripts.
+
+
+
+ Nenhuma janela flutuante mais à frente para salvar.
+
+
+
+ Sua consulta de pesquisa foi alterada e as palavras que eram demasiado curtas foram removidas.
+
+Pesquisava por: [FINALQUERY]
+
+
+
+ Os termos de sua pesquisa eram muito curtos então nenhuma pesquisa foi feita.
+
+
+
+ Não é possível teletransportar-se.
+[REASON]
+
+
+
+Problema encontrado ao processar seu pedido de Teletransporte. Você pode tentar reiniciar antes de tentar teletransportar-se. Se você continuar a receber esta mensagem, por favor verifique a FAQ do Suporte Técnico em:
+www.secondlife.com/support
+
+
+
+Problema encontrado ao processar a passagem de regiões. Você pode tentar reiniciar antes de tentar atravessar regiões novamente. Se você continuar a receber esta mensagem, por favor verifique a FAQ do Suporte Técnico em:
+www.secondlife.com/support
+
+
+
+Desculpe, teletransportes estão atualmente bloqueados. Tente novamente dentro de alguns instantes. Se você continuar com problemas de teletransporte, por favor tente deslogar e relogar para resolver o problema.
+
+
+
+Desculpe, mas o sistema não conseguiu localizar a landmark de destino.
+
+
+
+Desculpe, não foi possível para o sistema executar o teletransporte. Tente novamente dentro de alguns instantes.
+
+
+
+Desculpe, você não tem acesso ao destino deste teletransporte.
+
+
+
+Seu anexos ainda não chegaram. Tente esperar por alguns momentos ou deslogar e logar antes de tentar teleransportar-se novamente.
+
+
+
+Afluxo nesta região é atualmente tão alto que seu pedido de teletransporte não será possível em tempo oportuno. Por favor, tente novamente em alguns minutos ou vá a uma área menos ocupada.
+
+
+
+Desculpe, mas o sistema não conseguiu concluir o seu pedido de teletransporte em tempo hábil. Por favor, tente novamente em alguns minutos.
+
+
+
+Desculpe, mas o sistema não pôde concluir a sua travessia de região em tempo hábil. Por favor, tente novamente em alguns minutos.
+
+
+
+Não foi possível encontrar o destino do teletransporte. O destino pode estar temporariamente indisponível ou não existir mais. Por favor, tente novamente em poucos minutos.
+
+
+
+O sistema de inventário está indisponível no momento.
+
+
+
+ Incapaz de estabelecer o proprietário do terreno:
+Nenhum lote selecionado.
+
+
+
+ Não é possível exigir a posse do terreno porque a seleção alcançou múltiplas regiões. Por favor, selecione uma área menor e tente novamente.
+
+
+
+ Este lote está oferecido em leilão. Exigir a posse do terreno irá cancelar o leilão e possivelmente deixará alguns residentes infelizes, se os lances já começaram. Exigir posse?
+
+
+
+
+ Conteúdo não encontrado:
+Nenhum lote selecionado.
+
+
+
+ Conteúdo não encontrado:
+Nenhuma região selecionada.
+
+
+
+ Não é possível abandonar terreno:
+Nenhum lote selecionado.
+
+
+
+ Não é possível abandonar terreno:
+Não é possível encontrar a região.
+
+
+
+ Não é possível comprar terreno:
+Nenhum lote selecionado.
+
+
+
+ Não é possível comprar terreno:
+Não é possível achar a região em que este terreno se encontra.
+
+
+
+ Você não pode fechar a janela de Compra de Terreno até que o Second Life calcule o preço desta transação.
+
+
+
+ Não é possível transferir posse do terreno:
+Nenhum lote selecionado.
+
+
+
+ Não é possível transferir posse do terreno:
+Nenhum grupo selecionado.
+
+
+
+ Não é possível transferir posse do terreno:
+Não é possível se achar a região em que este terreno se encontra.
+Por favor, use Ferramentas > Reporte de Bug para reportar isto.
+
+
+
+ Impossibilitado de passar a propriedade da terra:
+Selecionados vários lotes.
+
+Tente selecionar um único lote.
+
+
+
+ Esta localidade pode executar fluxo de mídia.
+Fluxo de mídia necessita de uma conexão de Internet rápida.
+
+Executar fluxo de mídia quando disponível?
+(Você pode mudar esta opção mais tarde no Preferências > Áudio & Vídeo.)
+
+
+
+
+ Impossibilitado de passar a propriedade da terra:
+Esperando pelo servidor informar de quem é a propriedade.
+
+Por favor, tente novamente.
+
+
+
+ Não é possível transferir posse do terreno:
+A região [REGION] não permite transferência do terreno.
+
+
+
+ Impossibilitado de abandonar a terra:
+Esperando o servidor atualizar as informações do lote.
+
+Tente novamente em alguns segundos.
+
+
+
+ Impossibilitado de abandonar a terra:
+Você não é dono de todos os lotes selecionados.
+
+Por favor, selecione um único lote.
+
+
+
+ Não é possível abandonar terreno:
+Você não tem permissão de liberar este lote.
+Os lotes que você possui estão em verde.
+
+
+
+ Impossibilitado de abandonar a terra:
+Não consegue achar a região em que esta terra se encontra.
+
+Por favor, usar Ferramentas > Reportar Bug, para reportar este erro.
+
+
+
+ Não é possível abandonar terreno:
+A região [REGION] não permite transferência de terreno.
+
+
+
+ Impossibilitado de abandonar a terra:
+Você deve selecionar um lote inteiro para liberá-lo.
+
+Selecione um lote inteiro ou primeiro divida seu lote.
+
+
+
+ Você está para liberar [AREA] m² de terra.
+Liberando este terreno, o liberará de suas posses, mas não lhe concederá quaisquer [CURRENCY].
+
+Liberar esta terra?
+
+
+
+
+ Impossibilitado de dividir a terra:
+
+Nenhum lote selecionado.
+
+
+
+ Impossibilitado de dividir a terra:
+
+Você selecionou um lote inteiro.
+Tente selecionar uma parte do lote.
+
+
+
+ Dividir este terreno irá dividir este lote em dois e cada lote pode ter suas próprias configurações. Algumas configurações serão colocadas no padrão depois dessa operação.
+
+Quer dividir o terreno?
+
+
+
+
+ Impossibilitado de dividir a terra:
+Não consegue achar a região em que esta terra se encontra.
+
+Por favor, usar Ferramentas > Reportar Bug, para reportar este erro.
+
+
+
+ Impossibilitado de unir a terra:
+Não consegue achar a região em que esta terra se encontra.
+
+Por favor, usar Ferramentas > Reportar Bug, para reportar este erro.
+
+
+
+ Não é possível unir terreno:
+Nenhum lote selecionado.
+
+
+
+ Impossibilitado de unir a terra:
+Você selecionou apenas um lote.
+
+Selecione a terra através de ambos os lotes.
+
+
+
+ Impossibilitado de unir a terra:
+Você deve selecionar mais de um lote.
+
+Selecione a terra através de ambos os lotes.
+
+
+
+ Unir esta terra vai criar um grande lote que envolve todos os lotes que intersectam o retângulo selecionado.
+Você vai ter que redefinir nome e as opções do novo lote.
+
+Unir a terra?
+
+
+
+
+ Mostrar donos:
+Colorir os lotes para mostrar o tipo de dono.
+
+Green = Sua terra
+Aqua = Terra do seu Grupo
+Red = Possuída por outros
+Yellow = À venda
+Purple = A leilão
+Grey = Pública
+
+
+
+ Esta nota precisa ser salva antes do item ser copiado ou visualizado. Salvar nota?
+
+
+
+
+ Copiar este item para o seu inventário?
+
+
+
+
+ Falha ao trocar a resolução para [RESX] por [RESY]
+
+
+
+ Erro: Gramado indefinido; [SPECIES]
+
+
+
+ Erro: Árvores indefinidas: [SPECIES]
+
+
+
+ Não é possível salvar '[NAME]' para um arquivo de vestimenta. Você precisa liberar algum espaço no seu computador e salvar o arquivo novamente.
+
+
+ Impossibilitado de salvar [NAME] no armazenamento central de ativos.
+Isso é geralmente uma falha temporária. Por favor personalize e salve novamente a vestimenta em poucos minutos.
+
+Se o problema persistir, por favor clicar sobre 'Ferramentas > Bug Report' no menu superior e forneça detalhes sobre a configuração de sua rede.
+
+
+
+ Você foi deslogado do [SECOND_LIFE]:
+ [MESSAGE]
+Você ainda pode olhar o bate-papo e as mensagens instantâneas existentes, clicando em 'Exibir IM & bate-papo'. Caso contrário, clique em 'Sair' para sair do [APP_NAME] imediatamente.
+
+
+
+
+ Não é possível comprar o terreno para o grupo:
+Você não tem permissão para comprar o terreno para o seu grupo ativado.
+
+
+
+ Amigos podem dar permissões de rastrear um ao outro pelo mapa e receber atualizações de status online.
+
+Oferecer amizade para [NAME]?
+
+
+
+
+ Amigos podem dar permissões de rastrear um ao outro pelo mapa e receber atualizações de status online.
+
+Oferecer amizade para [NAME]?
+
+
+
+
+ Você quer remover [NAME] da sua lista de amigos?
+
+
+
+
+ Você quer remover vários amigos da sua lista?
+
+
+
+
+ Você tem certeza que deseja excluir todos os objetos programados de propriedade de
+** [AVATAR_NAME] **
+em todos os outros terrenos deste sim?
+
+
+
+
+ Você tem certeza que deseja excluir todos os objetos programados de propriedade de
+** [AVATAR_NAME] **
+em TODOS OS TERRENOS deste sim?
+
+
+
+
+ Você tem certeza que deseja excluir TODOS os objetos (programados ou não) de propriedade de
+** [AVATAR_NAME] **
+em TODOS OS TERRENOS deste sim?
+
+
+
+
+ Você deve especificar um nome para seu classificado.
+
+
+
+ Preço mínimo a pagar para incluir na listagem é de [CURRENCY][MIN_PRICE].
+
+Por favor, insira um valor maior.
+
+
+
+ Pelo menos um dos itens que você selecionou está trancado.
+
+Tem certeza de que deseja apagar estes itens?
+
+
+
+
+ Pelo menos um dos itens que você selecionou não é copiável.
+
+Tem certeza de que deseja apagar estes itens?
+
+
+
+
+ Você não é proprietário de pelo menos um dos itens selecionados.
+
+Tem certeza de que deseja apagar estes itens?
+
+
+
+
+ Pelo menos um dos objetos está trancado ou não é copiável.
+
+Tem certeza de que deseja apagar estes itens?
+
+
+
+
+ Pelo menos um dos objetos está trancado ou não é de sua posse.
+
+Tem certeza de que deseja apagar estes itens?
+
+
+
+
+ Pelo menos um dos objetos não é copiável ou não é de sua posse.
+
+Tem certeza de que deseja apagar estes itens?
+
+
+
+
+ Pelo menos um dos objetos está trancado, não é copiável ou você não o possui.
+
+Tem certeza de que deseja apagar estes itens?
+
+
+
+
+ Pelo menos um dos objetos está trancado.
+
+Tem certeza de que deseja pegar estes itens?
+
+
+
+
+ Você não possui todos os objetos que está pegando.
+Caso continue, as permissões do próximo proprietário serão aplicadas aos objetos e possivelmente restringirão sua habilidade em modificá-los ou copiá-los.
+
+Você tem certeza de que quer pegar estes itens?
+
+
+
+
+ Pelo menos um objeto está bloqueado.
+Você não possui todos os objetos que você está pegando.
+Se continuar, as permissões para o próximo proprietário serão aplicadas e possivelmente restringirão sua capacidade de modificar ou copiá-los.
+No entanto, você pode pegar a seleção atual.
+
+Tem certeza de que deseja pegar estes itens?
+
+
+
+
+ Não foi possível comprar terreno, pois a seleção abrange várias regiões.
+
+Por favor, selecione uma área menor e tente novamente.
+
+
+
+ Na transferência de propriedade deste lote, o grupo deverá ter e manter créditos suficientes de uso da terra.
+O preço de aquisição dos terrenos não é restituído ao o proprietário. Se uma parcela transferida é vendida, o preço de venda é dividido igualmente entre os membros do grupo.
+
+Transferir propriedade de [AREA] m² de terra ao grupo '[GROUP_NAME]'?
+
+
+
+
+ Na transferência de propriedade deste lote, o grupo deverá ter e manter créditos suficientes de uso da terra.
+A Transferência incluirá uma contribuição de terra simultanea para o grupo de '[NAME]'.
+O preço da compra não será restituído ao proprietário. Se um lote for vendido, o preço da venda será dividido igualmente entre os membros do grupo.
+
+Transferir propriedade destes [AREA] m² de terreno para o grupo '[GROUP_NAME]'?
+
+
+
+
+ Configurações de display foram ajustadas para níveis de segurança porque você especificou -- opção de segurança.
+
+
+
+ Configurações de display foram ajustadas para nível recomendado baseado na configuração do seu sistema.
+
+
+
+ [ERROR_MESSAGE]
+
+
+
+ Sua [TYPE] localização não está disponível no momento.
+ [HELP]
+Você foi movido para uma região vizinha.
+
+
+
+ Sua vestimenta ainda está baixando.
+Você pode usar o [SECOND_LIFE] normalmente e os outros o visualizarão corretamente.
+
+
+
+
+ A instalação do [APP_NAME] está completa.
+
+Se esta é a primeira vez usando o[SECOND_LIFE], será necessário que você crie uma conta antes de poder se logar.
+Retornar a www.secondlife.com para criar uma nova conta?
+
+
+
+
+ Estamos com problemas de conexão. Pode ser problema com a conexão de sua internet ou com os servidores do [SECOND_LIFE_GRID].
+
+Voce tanto pode checar a conexão de sua internet e tentar novamente em alguns minutos, ou clicar em Teletransporte para tentar teletransportar-se para sua casa.
+
+
+
+
+ Seu personagem irá aparecer num momento.
+
+Use as teclas de seta para andar.
+Pressione a tecla F1 para ajuda ou aprender mais sobre [SECOND_LIFE].
+Por favor, escolha se o seu avatar é feminino ou masculino. Você pode mudar de idéia depois.
+
+
+
+
+ [NAME] L$ [PRICE] Você não possui suficientes [CURRENCY] para fazer isso.
+
+
+
+ Foi garantido à você o privilégio de alterar o(s) objeto(s) de [NAME]'
+
+
+
+ Seu privilégio para alterar o(s) objeto(s) de [NAME]'s foi removido.
+
+
+
+ Isto irá descarregar os caches de mapa relativos a esta região.
+Isso é realmente útil apenas para depuração.
+(Na produção, aguarde 5 minutos e, então, o mapa de todos será atualizado depois que relogar.)
+
+
+
+
+ Impossível comprar mais de um objeto ao mesmo tempo. Por favor, selecione apenas um objeto e tente novamente.
+
+
+
+ Incapaz de copiar os conteúdos de mais de um item por vez. Por favor, selecione somente um objeto e tente novamente.
+
+
+
+
+ Teletransportar para casa todos os residentes nesta região?
+
+
+
+
+ Você tem certeza que deseja retornar os objetos pertencentes a
+[USER_NAME] ?
+
+
+
+
+ Não foi possível definir texturas da região:
+Textura do Terreno [TEXTURE_NUM] tem uma profundidade de bits inválidos [TEXTURE_BIT_DEPTH].
+
+Substitua textura [TEXTURE_NUM], com uma imagem de 24-bit 1024x1024 ou menor e em seguida, clique em 'Aplicar' novamente.
+
+
+
+ Não foi possível definir texturas da região:
+Textura do Terreno [TEXTURE_NUM] é muito grande em [TEXTURE_SIZE_X] x [TEXTURE_SIZE_Y].
+
+Substituir textura [TEXTURE_NUM], com uma imagem de 24-bit 1024x1024 ou menor e em seguida, clique em 'Aplicar' novamente.
+
+
+
+ Upload iniciado. Pode levar uns 2 minutos, dependendo da sua velocidade de conexão.
+
+
+
+ Você realmente deseja nivelar o terreno selecionado a partir do centro elevando/reduzindo os limites e o padrão para a ferramenta ´Reverter´?
+
+
+
+
+ Você pode ter somente [MAX_AGENTS] residentes permitidos.
+
+
+
+ Você pode ter apenas [MAX_BANNED] residentes banidos.
+
+
+
+ Falha ao adicionar [NUM_ADDED] agentes:
+Ultrapassa o limite de [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS].
+
+
+
+ Você pode ter somente [MAX_GROUPS] grupos permitidos.
+
+
+
+
+ Você pode ter apenas [MAX_MANAGER] gerentes da Propriedade.
+
+
+
+ Não é possível adicionar o dono da propriedade na lista de residentes banidos.
+
+
+
+ Não é possível alterar a aparência até que as roupas e formas estejam carregadas.
+
+
+
+ O título do seu Anúncio deve começar com uma letra entre A e Z ou número. Nenhuma pontuação é permitida.
+
+
+
+ Não é possível configurar Comprar Objeto, porque o objeto não está à venda.
+Por favor, ponha o objeto à venda e tente novamente.
+
+
+
+ Download do arquivo de terreno RAW concluído em:
+[DOWNLOAD_PATH]
+
+
+
+ Uma nova versão do [APP_NAME] está disponível.
+[MESSAGE]
+Você deve baixar essa atualização para utilizar o [APP_NAME].
+
+
+
+
+ Uma versão atualizada do [APP_NAME] está disponível.
+[MESSAGE]
+Essa atualização não é mandatória, mas sugerimos que você a instale para melhorar a performance e a estabilidade.
+
+
+
+
+ Uma versão atualizada do [APP_NAME] está disponível.
+[MESSAGE]
+Essa atualização não é mandatória, mas sugerimos que você a instale para melhorar a performance e a estabilidade.
+
+
+
+
+ Uma nova versão do [APP_NAME] está disponível.
+[MESSAGE]
+Você deve baixar esta atualização para utilizar o [APP_NAME].
+
+Baixar para sua pasta de Aplicativos?
+
+
+
+
+ Uma nova versão do [APP_NAME] está disponível.
+[MESSAGE]
+Essa atualização não é mandatória, mas sugerimos que você a instale para melhorar a performance e a estabilidade.
+
+Baixar para a sua pasta de Aplicativos?
+
+
+
+
+ Uma nova versão do [APP_NAME] está disponível.
+
+[MESSAGE]
+Essa atualização não é mandatória, mas sugerimos que você a instale para melhorar a performance e a estabilidade.
+
+Baixar para sua pasta de Aplicativos?
+
+
+
+
+ Delegar este objeto causará ao grupo:
+* Receber os [CURRENCY] pagos ao objeto
+
+
+
+
+ Abrir o navegador do seu sistema para ver este conteúdo?
+
+
+
+
+ Ir ao www.secondlife.com para gerenciar sua conta?
+
+
+
+
+ Visite a Wiki [SECOND_LIFE] para aprender como reportar bugs corretamente.
+
+
+
+
+ Visite a Wiki do [SECOND_LIFE] para detalhes de como Reportar um Problema de Segurança.
+
+
+
+
+ Visite o Wiki de QA do [SECOND_LIFE].
+
+
+
+
+ Visite o Rastreador Público de Problemas do [SECOND_LIFE], onde você poderá reportar Bugs e outros Problemas.
+
+
+
+
+ Visite a Wiki [SECOND_LIFE] para informações sobre como utilizar o Rastrador de Público de Problemas.
+
+
+
+
+ Ir até o Blog Oficial da Linden buscar pelas últimas notícias e informações.
+
+
+
+
+ Ir para a página guia do LSL para ajuda com script?
+
+
+
+
+ Ir para o portal LSL para ajuda com script?
+
+
+
+
+ Você tem certeza que deseja retornar os objetos selecionados para seus proprietários? Objetos transferíveis doados irão retornar aos proprietários anteriores.
+
+*AVISO* Objetos doados não – transferíveis serão deletados!
+
+
+
+
+ Você é atualmente um membro do grupo [GROUP].
+Deixar este grupo?
+
+
+
+
+ Você quer REALMENTE expulsar todos os usuários deste grid?
+
+
+
+
+ Desculpe, você não pode silenciar um [GRID_OWNER].
+
+
+
+
+ Você não pode começar um leilão com um lote que já foi colocado à venda. Desabilite a venda da terra se você tem certeza que deseja iniciar um leilão.
+
+
+
+ Você já silenciou este nome.
+
+
+
+
+ Embora seja permitido, deletar conteúdo pode danificar o objeto.
+Você quer excluir este item?
+
+
+
+
+ Não é possível oferecer um cartão de visitas neste momento. Por favor, tente novamente em breve.
+
+
+
+
+ Não é possível oferecer amizade neste momento. Por favor, tente novamente em breve.
+
+
+
+
+ Definido o Modo Ocupado.
+Bate-papo e mensagens instantâneas serão escondidas. Mensagens instantâneas irão receber a sua resposta de modo ocupado. Todas as ofertas de teletransporte serão recusadas. Todas as ofertas de inventário irão para a sua Lixeira.
+
+
+
+
+ Você já pertence a muitos grupos para entrar em outro. Por favor, deixe pelo menos um grupo antes de entrar neste. Para sair de um grupo, selecione o Menu Editar e a opção Meus 'Grupos...'
+[NAME] convidou você para entrar num grupo como membro.
+[INVITE]
+
+
+
+
+ Expulsar este usuário com qual mensagem?
+
+
+
+
+ Expulsar todo mundo atualmente do grid com qual mensagem?
+
+
+
+
+ Paralise este usuário com qual mensagem?
+
+
+
+
+ Liberar este usuário com qual mensagem?
+
+
+
+
+ Oferecer um teletransporte para sua localização com qual mensagem?
+
+
+
+
+ God user convocou para a sua localização?
+
+
+
+
+ Você tem certeza que quer se teletransportar?
+
+
+
+
+ Digite um breve anúncio que será enviado para todos que estejam atualmente na sua propriedade.
+
+
+
+
+ Você está prestes a mudar uma propriedade pertencente a Linden (continente, teen grid, orientação, etc.)
+
+Isto é EXTREMAMENTE PERIGOSO porque pode fundamentalmente afetar a experiência do usuário. No continente, vai mudar milhares de regiões e fazer o spaceserver soluçar.
+
+Proceder?
+
+
+
+
+ Você está prestes a mudar a lista de acessos de uma propriedade pertencente a Linden (continente, teen grid, orientação, etc.).
+
+Isto é PERIGOSO e deveria ser feito apenas para utilizar uma brecha que permita que objetos/L$ sejam transferidos para dentro/fora da grade.
+Isto mudará milhares de regiões e fará o spaceserver soluçar.
+
+
+
+
+ Adicionar à lista de permitidos somente para esta propriedade ou para [ALL_ESTATES]?
+
+
+
+
+ Remover da lista de permissão somente para esta propriedade ou para [ALL_ESTATES]?
+
+
+
+
+ Adicionar à lista de grupos permitidos somente para esta Região ou para [ALL_ESTATES]?
+
+
+
+
+ Remover da lista de grupos permitidos somente para esta propriedade ou de [ALL_ESTATES]?
+
+
+
+
+ Negar acesso a esta propriedade somente ou para [ALL_ESTATES]?
+
+
+
+
+ Remover este residente da lista de banidos para acesso a esta propriedade apenas ou para [ALL_ESTATES]?
+
+
+
+
+ Adicionar gerente da propriedade para esta propriedade somente ou para [ALL_ESTATES]?
+
+
+
+
+ Remover o gerente da propriedade desta propriedade apenas ou para [ALL_ESTATES]?
+
+
+
+
+ Expulsar [EVIL_USER] desta propriedade?
+
+
+
+
+ Tem certeza de que deseja mudar o Corretor da Propriedade?
+
+
+
+ Você não é permitido na Região devido à sua Classificação de maturidade. Isto pode ser o resultado da falta de informação de validação de sua idade.
+
+Por favor, verifique se você está com o último Visualizador instalado e vá ao Banco de Conhecimento para detalhes em como acessar áreas com esta classificação de maturidade.
+
+
+
+
+ Você não é permitido nesta região devido à sua Classificação de maturidade.
+
+
+ Você não é permitido nessa região devido à sua preferência de Classificação de maturidade.
+
+Você pode clicar em 'Mudar Preferência' para aumentar sua preferência de Classificação de maturidade agora e permitir sua entrada. Você estará habilitado a buscar e acessar conteúdo [REGIONMATURITY] a partir de agora. Se você desejar mais tarde voltar à configuração anterior, vá para Editar > Preferencias... > Geral.
+
+
+
+ Você não pode reclamar esta terra devido à sua Classificação de maturidade. Isto pode ser o resultado de falta de informação na validação de sua idade.
+
+Por favor, verifique se você tem o último Visualizador instalado e vá para o Banco de Conhecimento para detalhes sobre o acesso de áreas com esta Classificação de maturidade.
+
+
+
+ Você não pode reclamar esta terra devido à sua Classificação de maturidade.
+
+
+ Você não pode reclamar esta terra devido à sua preferência de Classsificação de maturidade.
+
+Você pode clicar em 'Mudar Preferência' para aumentar sua preferência de Classificação de maturidade agora e permitir sua entrada. Você estará habilitado a buscar e acessar conteúdo [REGIONMATURITY] a partir de agora. Se você desejar mais tarde voltar à configuração anterior, vá para Editar > Preferencias... > Geral.
+
+
+
+ Você não pode comprar esta terra devido à sua Classificação de maturidade. Isto pode ser o resultado de falta de informação na validação de sua idade. Por favor, verifique se você tem o último Visualizador instalado e vá para o Banco de Conhecimento para detalhes sobre o acesso de áreas com esta Classificação de maturidade.
+
+
+
+ Você não pode comprar esta terra devido à sua Classificação de maturidade.
+
+
+ Você não pode comprar esta terra devido à sua preferência de Classificação de maturidade. Você pode clicar em 'Mudar Preferência' para aumentar sua preferência de Classificação de maturidade agora e permitir sua entrada. Você estará habilitado a buscar e acessar conteúdo [REGIONMATURITY] a partir de agora. Se você desejar mais tarde voltar à configuração anterior, vá para Editar > Preferencias... > Geral.
+
+
+
+
+ "Muitos prims foram selecionados. Por favor, selecione [MAX_PRIM_COUNT] ou menos e tente novamente."
+
+
+
+
+ Problemas encontrados ao importar o Corretor da propriedade.
+
+
+
+
+ Problemas em adicionar um novo gerente da propriedade. Uma ou mais propriedades podem ter uma lista de gerentes cheia.
+
+
+
+ Problemas em adicionar a esta lista de propriedades. Uma ou mais propriedades podem ter uma lista cheia.
+
+
+
+ Impossível carregar o notecard da propriedade no momento.
+
+
+
+
+ Permissões insuficientes para visualizar notecard associado com o ID do ativo solicitado.
+
+
+
+
+ O ID do ativo do notecard não foi localizado no banco de dados.
+
+
+
+
+ Lembre-se: Taxas de Anúncios de Classificados não são reembolsáveis.
+
+Publicar este classificado agora por [CURRENCY] [AMOUNT]?
+
+
+
+
+ Este classificado contém conteúdo Mature?
+
+
+
+
+ Este grupo contém conteúdo Mature?
+
+
+
+
+ Você quer realmente reiniciar esta região em 2 minutos?
+
+
+
+
+ Digite um breve aviso que será enviado para todos nesta região.
+
+
+
+
+ Se esta opção for assinalada, donos de Terrenos não serão capazes de terraformar independentemente da configuração 'Editar Terreno' de suas terras por lote.
+
+Padrão: desligado
+
+
+
+ Se esta caixa estiver marcada, as pessoas não poderão voar nesta região independente das configurações por lote de 'Voar'.
+
+Padrão: desligado.
+
+
+
+ A ferramenta de Mudança Conjunta das Permissões lhe ajuda a mudar, rapidamente, as permissões de múltiplos itens que estão no conteúdo do(s) objeto(s) selecionado(s). Por favor observe que, no entanto, você está apenas definindo permissões para on itens que estão no conteúdo dos objetos selecionados -- não as permissões para o container dos próprios objetos.
+
+Também observe que as permissões não se aplicam aos conteúdos aninhados, contidos em quaisquer dos objetos. Sua solicitação opera apenas nos itens em exatamente um nível de profundidade.
+
+Você pode escolher seletivamente quais tipos de itens modificar, usando a lista de conferência aqui, abaixo de 'Tipos de Conteúdo'. Quando você seleciona Texturas, as fotos são incluídas.
+
+* Esta ferramenta apenas mudará as permissões em itens que você pode mudar.
+* Você não pode dar ao Próximo dono, as permissões que você já não tem.
+* As permissões ao Próximo dono são meramente solicitações. Se um dos itens não puder assumir todas as novas permissões, nenhuma delas mudará.
+
+Quando você estiver pronto para mudar as permissões globais, clique 'Aplicar' e aguarde os resultados na tela.
+
+Se você fechar a janela de Permissões Conjuntas enquanto elas estiverem sendo alteradas, a operação será suspensa.
+
+
+
+ Marcar essa caixa habilita o sistema de vitalidade em todos os lotes independente das configurações individuais. Se esta caixa ficar desmarcada, os proprietários de lotes individuais ainda estarão aptos a ativar o sistema de vitalidade de seus lotes.
+
+Padrão: desligado.
+
+
+
+ Define o número máximo de residentes permitidos nesta região.
+Quanto mais residentes existirem em sua região, pior pode ser a performance.
+
+Padrão: 40
+
+
+
+ O Bônus de objetos é um multiplicador para primitivas permitidas em qualquer lote. O intervalo permitido é de 1 a 10.
+Se fixado em '1 ', 512m² de cada lote permitem 117 objetos.
+Fixado em '2 ', 512m² cada lote permitem 234, ou o dobro, e assim por diante.
+O número máximo de objetos permitidos por região permanece 15000 não importa qual seja o Bônus de objeto. Uma vez estabelecido, esteja ciente de que a redução do Bônus de objetos pode retornar objetos ou apagá-los.
+
+Padrão: 1.0
+
+
+
+ Define a Classificação de Maturidade da região, como mostrado na barra de menu, no topo de qualquer visualizador do Residente e nas dicas no Mapa-Mundi, quando o cursor passa sobre esta Região. Esta definição também afeta o acesso a esta Região e aos resultados de busca. Outros Residentes podem apenas entrar em Regiões ou ver resultados de busca com a mesma Classificação de maturidade que eles escolheram em suas preferências.
+
+Pode levar algum tempo até que esta mudança se reflita no mapa.
+
+
+
+ Esta caixa de verificação Configura toda a região para permissões restritivas de empurrar.
+Quando habilitada, os agentes só podem empurrar a si mesmos ou serem empurrados pelo dono do lote.
+(Empurrar se refere à função LSL llPushObject().)
+
+Padrão: Desligado.
+
+
+
+ Configura se os lotes que não pertencem ao dono da propriedade podem ser unidos ou subdivididos.
+Se esta opção estiver desmarcada:
+ * Apenas os donos ou gerentes de propriedades podem unir ou dividir lotes.
+ * Eles podem unir ou subdividir lotes pertencentes ao dono ou ao grupo onde eles tem os poderes apropriados.
+Se esta opção estiver marcada:
+ * Todos os donos de lotes podem unir ou subdividir os lotes que eles possuem.
+ * Para lotes pertencentes a grupos, aqueles com os poderes apropriados podem unir ou subdividir lotes.
+
+Padrão: Marcado.
+
+
+
+ Ao marcar esta caixa irá bloquear os donos de lotes de listar seus lotes na busca
+
+Padrão: desligado
+
+
+
+ A classificação de maturidade para esta região foi atualizada.
+Pode levar algum tempo para que a mudança seja refletida no mapa.
+
+
+
+ Os gerentes e os donos de propriedades podem vender qualquer terreno pertencente ao dono da propriedade.
+Se esta opção estiver desmarcada, os compradores não podem revender seus terrenos nesta região.
+Se esta opção estiver marcada, compradores podem vender seus terrenos nesta região.
+
+Padrão: Desabilitada.
+
+
+
+ Quando a performance do simulador está ruim, um script pode ser o culpado. Abra a Barra de Estatísticas (Ctrl-Shift-1). Olhe no Simulador de Física FPS. Se estiver abaixo de 45, então abra o painel 'Tempo' localizado na parte de baixo da Barra de Estatísticas. Se o Tempo de Script indicar 25 ms ou mais, clique no botão 'Get Top CScripts'. Será dado o nome e a localização do script que pode estar causando uma performance ruim. Marque a caixa 'Desabilitar Scripts' e aperte o botão 'Aplicar'. Isto temporariamente desabilitará todos os scripts nesta região. Uma vez que você chegar ao local, investigue o script para determinar se ele está causando o problema. Você pode querer entrar em contato com o proprietário do script, excluir ou devolver o objeto. Desmarque a caixa 'Desabilitar Script' e então clique em 'Aplicar' para reativar os scripts na região. Padrão: desligado.
+
+
+
+ Quando a performance do simulador é pobre, os objetos físicos podem ser os culpados.Abra a a Barra de Estatísticas (Ctrl-Shift-1).
+Olhe a taxa de quadros por segundos (FPS) dos objetos físicos.
+
+Se ela estiver abaixo de 45, abra o painel de Tempo, localizado na parte inferior da Barra de Estatísticas. Se o Tempo (Físicos) do Simulador mostrar 20 ms ou mais, clique o botão 'Pegue os Maiores Colidentes'. Será fornecido a você o nome e a localidade dos objetos físicos que podem estar causando uma performance pobre.
+Ativando a caixa Desabilitar Colisões e então pressionando o botão Aplicar, as colisões objeto-objeto serão temporariamente desabilitadas. Você pode precisar fazer isso para que possa viajar até a localidade onde observou um 'colidente-mor'. Uma vez tendo chegado à localidade, investigue o objeto – ele está constantemente colidindo com outros objetos? Você pode desejar contatar o dono do objeto ou deletar ou retornar o objeto.
+Desative a caixa 'Desabilitar Colisões' e então use 'Aplicar' para reativar as colisões na região.
+
+Padrão: off
+
+
+
+ Desabilitar Física é similar a desabilitar Colisões, com exceção de que todas as simulações físicas serão desabilitadas. Isto significa que não só os objetos pararão de colidir, mas também que os avatares não poderão se mover.
+
+Isto só deve ser usado quando Desabilitar Colisões não trouxer performance suficiente à região para investigar um problema de Física ou do 'Colidente-Mor'.
+
+Esteja certo de reabilitar Física quando você terminar, ou os avatares não poderão se mover.
+
+Default: desligado
+
+
+
+ Mostra uma lista de objetos com o maior número de potenciais colisões objeto-objeto. Estes objetos podem diminuir a performance do simulador.
+Selecione Ver > Barra de Estatísticas e olhe em Simulador > Tempo > Tempo de Simulação (Física) para ver se mais de 20 ms são gastos em física.
+
+
+
+ Mostra uma lista dos objetos gastando mais tempo rodando scripts LSL. Estes objetos podem diminuir a performance do simulador.
+Selecione Ver > Barra de Estatísticas e olhe em Simulador > Tempo > Tempo de Script para ver se mais de 25 ms são gastos em scripts.
+
+
+
+ Reinicia o processo do servidor rodando esta região, após um aviso de dois minutos. Todos os residentes nesta região serão desconectados. A região salvará seus dados e deverá retornar em até 90 segundos.
+
+Reiniciar a região não consertará a maioria dos problemas de performance, e deveria ser utilizada somente quando solicitado.
+
+
+
+ Esta é a altura em metros onde a água aparece. Caso este ajuste seja diferente de 20 e você tenha águas adjacentes ao limite do seu terreno ou águas continentais, haverá uma abertura visível.
+
+Padrão: 20
+
+
+
+ Esta é a distância em metros que os donos de lotes podem elevar o terreno, a partir da altura nivelada do terreno.
+
+Padrão: 4
+
+
+
+ Esta é a distância em metros que os donos de lotes podem abaixar o terreno, a partir da altura nivelada do terreno.
+
+Padrão: -4
+
+
+
+ Este botão faz upload de um arquivo .RAW para a região em que você está.
+O arquivo precisa conter as dimensões/número de canais corretos: RGB, 256x256 e 13 canais. A melhor forma de criar um arquivo da região é baixando o arquivo .RAW existente. Um bom primeiro passo seria modificar o primeiro canal (altura da região) e fazer o upload do arquivo.
+
+O upload pode levar certa de 45 segundos. Note que fazer upload do arquivo da região *não* moverá os objetos que estão na região, apenas o terreno e as permissões associadas a ele. Isso pode fazer com que alguns objetos fiquem debaixo da terra.
+
+Para mais informações sobre edição dos campos de altura da região, consulte a ajuda F1.
+
+
+
+ Este botão faz download de um arquivo contendo dados de altura do campo, dimensões do lote, status de lotes à venda e algumas permissões de lote para este terreno. Ao abrir o arquivo em programas como o Photoshop, você precisa especificar as dimensões do documento, que são: RGB, 256x256 com 13 canais. Este arquivo de terras não pode ser aberto de outra forma.
+
+Para mais informações sobre edição dos campos de altura da região, consulte a Ajuda F1.
+
+
+
+ Esta caixa de opção faz com que a posição do sol nesta região seja a mesma que no resto da região.
+
+Padrão: ligada
+
+
+
+ Esta caixa de opção ajusta a posição do sol no equalizador de fuso e interrompe o movimento do sol.
+
+Padrão: desligada
+
+
+
+ Este botão salva a forma atual do terreno como o novo padrão para a região. Uma vez nivelado, o terreno pode reverter à forma que foi salva, sempre que você ou outros utilizarem a ferramenta 'Revert' na edição de terreno. O terreno nivelado é também o ponto médio entre os limites de elevação e redução de terreno.
+
+
+
+ Um gerente da propriedade é um residente a quem você delegou o controle das configurações da região. Ele pode alterar qualquer configuração da região, com exceção de elevar, abaixar ou nivelar o terreno. Em particular, eles podem permitir ou banir residentes da sua propriedade. Gerentes da propriedade só podem ser adicionados ou removidos pelo dono da propriedade.
+
+Um gerente não pode adicionar ou remover outro gerente. Por favor, escolha somente residentes em quem você confia para serem gerentes da propriedade, pois você poderá ser responsabilizado pelas ações deles.
+
+
+
+ Esta caixa de opção faz com que o Sol em sua propriedade siga a mesma posição do Sol nas propriedades da 'mainland' do Linden Lab.
+
+Padrão: ligado
+
+
+
+ Esta caixa de opção ajusta a posição do sol no equalizador de fuso e interrompe o movimento do sol.
+
+
+
+ Esta caixa de verificação define se os Residentes que estão em outras propriedades podem entrar nesta, sem estar em uma lista de acesso.
+
+Padrão: on
+
+
+ Quando marcada, permite que os residentes se teletransportem diretamente para qualquer ponto da sua propriedade. Quando desmarcada, os residentes serão teleportados para o telehub mais próximo.
+
+Padrão: desmarcada
+
+
+
+ Acesso a esta propriedade estará limitado aos Residentes listados aqui e em quaisquer grupos abaixo.
+Esta definição está disponível apenas quando o Acesso Público estiver desmarcado.
+
+
+
+ Acesso a esta propriedade estará limitado aos grupos listados aqui e a quaisquer Residentes acima.
+Esta definição está disponível apenas quando o Acesso Público estiver desmarcado.
+
+
+
+ Configurar isto para um endereço de email válido, fará com que relatos de abuso nesta propriedade sejam enviados para esse endereço.
+Definí-lo em branco fará com que os relatórios de abuso sejam enviados apenas para a Linden Lab.
+
+
+
+ Residentes desta lista estão proibidos de acessar a sua propriedade, independentemente de outras configurações.
+
+
+
+ Lotes nesta propriedade têm permissão para ter seus canais de voz próprios, nos quais os residentes podem ouvir e falar com os outros residentes próximos.
+
+Padrão: desligado
+
+
+
+ Esta versão do [APP_NAME] não é compatível com as características do Canal de Voz desta região. Para que a Conversa por Voz funcione corretamente, você precisará atualizar o [APP_NAME]
+
+
+
+ Definir um corretor da propriedade lhe permite vender lotes nesta propriedade. Se um corretor não for definido, você não pode vender terras. O cartão do seu corretor pode ficar vazio se você não desejar aplicar quaisquer regras ou avisar os compradores sobre qualquer coisa em relação ao lote antes da compra.
+
+Um corretor pode ser usado para comunicar regras, orientações, informações culturais ou simplesmente suas expectativas quanto ao futuro comprador. Isto pode incluir zoneamento, regulamentos para construções, opções de pagamento ou qualquer outra informação que você julgar importante que o novo proprietário veja e concorde antes da compra.
+
+O comprador precisa concordar com o corretor marcando a caixa de verificação antes de concluir a compra. Corretores são sempre visíveis na caixa de diálogo 'Sobre a Terra' para todos os lotes que têm corretores definidos.
+
+
+
+ Não é possível comprar objetos de diferentes proprietários ao mesmo tempo.
+Por favor, selecione apenas um objeto e tente novamente.
+
+
+
+ Não é possível comprar os conteúdos de mais de um objeto ao mesmo tempo.
+Por favor, selecione apenas um objeto e tente novamente.
+
+
+
+ Não é possível comprar objetos de diferentes proprietários ao mesmo tempo.
+Por favor, selecione apenas um objeto e tente novamente.
+
+
+
+ Comprar o objeto original de [OWNER] por [CURRENCY][PRICE]?
+Você se tornará o proprietário deste objeto.
+Você poderá:
+ Modificar: [MODIFYPERM]
+ Copiar: [COPYPERM]
+ Revender ou Doar: [RESELLPERM]
+
+
+
+
+ Comprar o objeto original por [CURRENCY][PRICE]?
+Você se tornará o proprietário deste objeto.
+Você poderá:
+ Modificar: [MODIFYPERM]
+ Copiar: [COPYPERM]
+ Revender ou Doar: [RESELLPERM]
+
+
+
+
+ Comprar uma cópia de [OWNER] por [CURRENCY][PRICE]?
+O objeto será copiado para o seu inventário.
+Você poderá:
+ Modificar: [MODIFYPERM]
+ Copiar: [COPYPERM]
+ Revender ou Doar: [RESELLPERM]
+
+
+
+
+ Comprar uma cópia por [CURRENCY][PRICE]?
+O objeto será copiado para o seu inventário.
+Você poderá:
+ Modificar: [MODIFYPERM]
+ Copiar: [COPYPERM]
+ Revender ou Doar: [RESELLPERM]
+
+
+
+
+ Comprar conteúdo de [OWNER] por [CURRENCY][PRICE]?
+Eles serão copiados para o seu inventário.
+
+
+
+
+ Comprar conteúdo por [CURRENCY][PRICE]?
+Eles serão copiados para o seu inventário.
+
+
+
+
+ Esta transação fará:
+[ACTION]
+
+Você tem certeza de que deseja prosseguir com esta compra?
+
+
+
+
+ Esta transação fará:
+[ACTION]
+
+Você tem certeza de que deseja prosseguir com esta compra?
+Por favor, re-insira sua senha e clique 'Confirmar Compra'.
+
+
+
+
+ Nota: Você atualizou a localidade desta pick mas os outros detalhes ficarão com seus valores originais.
+
+
+
+
+ Você selecionou itens 'no copy' do inventário.
+Estes itens serão movidos para o seu inventário, não copiados.
+
+Mover os itens do inventário?
+
+
+
+
+ Você selecionou itens de inventário não copiáveis.
+Estes itens serão movidos para seu inventário, não copiados. Pelo fato de o objeto ter scripts, mover estes itens ao inventário pode provocar um mal funcionamento do script.
+
+Mover para o inventário o(s) item(s)?
+
+
+
+
+ Aviso: A ação de Pagar ao Objeto com clique foi definida, mas funcionará apenas se for adicionado um script com o evento money().
+
+
+
+
+ Não há itens neste objeto que você está autorizado a copiar.
+
+
+
+ Ir para o site do Second Life para visualizar o histórico de sua conta?
+
+
+
+
+ Visitar o website de Suporte do [SECOND_LIFE]?
+
+
+
+
+ Tem certeza que deseja sair?
+
+
+
+
+ Use esta ferramenta para reportar violações aos Termos de Serviço e aos Padrões da Comunidade. Veja:
+
+http://secondlife.com/corporate/tos.php
+http://secondlife.com/corporate/cs.php
+
+Todos os abusos aos Termos de Serviço e aos Padrões da Comunidade reportados, são investigados e resolvidos. Você pode ver a resolução do incidente na Reportagem de Incidentes em:
+
+http://secondlife.com/support/incidentreport.php
+
+
+
+ IMPORTANTE: Esta reportagem irá para o dono da região em que você se encontra atualmente e não para a [GRID_OWNER].
+
+Como um serviço aos residentes e visitantes, o dono da região em que você se encontra foi eleito para receber e resolver todas as reportagens originadas nesta região. A [GRID_OWNER] não irá investigar reportagens que você envia desta localidade.
+
+O dono da região resolverá as reportagens baseado nas regras locais desta região, como definido na Declaração da propriedade.
+(Veja as declarações indo ao menu Mundo e selecionando Sobre a Terra.)
+
+A resolução desta reportagem se aplica apenas a esta região; o acesso de Residentes às outras áreas do [SECOND_LIFE_GRID] não será afetado pelas decisões desta reportagem. Apenas a [GRID_OWNER] pode restringir acesso a todo o [SECOND_LIFE_GRID].
+
+
+
+ Use esta ferramenta para reportar *apenas* características técnicas que não atuem como descrito ou esperado.
+Por favor, forneça tantos detalhes quanto possível. Você pode responder ao e-mail de resposta automática para adicionar mais detalhes à sua reportagem.
+
+Todas as reportagens de bugs são investigadas e avaliadas. Nenhum e-mail de resposta será enviado.
+
+Se você estiver tendo uma dificuldade técnica, por favor contate o Suporte em:
+
+http://secondlife.com/community/support.php
+
+Nota: reportagens incompletas não serão investigadas
+
+
+
+ Por favor, selecione uma categoria para a reportagem deste abuso.
+A seleção de uma categoria nos ajuda a arquivar e processar as reportagens de abuso.
+
+
+
+ Por favor, selecione uma categoria para este bug.
+A seleção de uma categoria nos ajuda a arquivar e processar as reportagens de bugs.
+
+
+
+ Por favor, entre com o nome do perturbador.
+Entrando com um valor preciso, nos ajuda a arquivar e processar as reportagens de abuso.
+
+
+
+ Por favor, entre com a localidade aonde o abuso aconteceu.
+Entrando com um valor preciso, nos ajuda a arquivar e processar as reportagens de abuso.
+
+
+
+ Por favor, digite um resumo de como ocorreu o abuso.
+Fazer um resumo detalhado nos ajuda a arquivar e processar as reportagens de abuso.
+
+
+
+ Por favor, digite um resumo do bug. Realizar um resumo detalhado nos ajuda a arquivar e processar as reportagens de abuso.
+
+
+
+ Por favor, digite uma descrição detalhada do abuso que ocorreu.
+Seja tão específico quanto você puder, incluindo nomes e os detalhes do incidente que está denunciando.
+Fazer uma descrição precisa nos ajuda a arquivar e processar as reportagens de abuso.
+
+
+
+ Por favor, digite uma descrição detalhada do bug.
+Seja tão específico quanto você puder, incluindo as etapas para reproduzir o bug, se possível.
+Fazer uma descrição precisa nos ajuda a arquivar e processar os relatórios de bugs.
+
+
+
+ Caro Residente,
+
+Você parece estar relatando violação de propriedade intelectual. Por favor, certifique-se de que está relatando corretamente:
+
+(1) O Processo de abuso. Você pode apresentar um relatório de abuso se você acredita que um Residente está infringindo o sistema de permissões do [SECOND_LIFE], por exemplo, utilizando ferramentas CopyBot para copiar ou similar, para violar os direitos de propriedade intelectual. A Equipe de Abuso investiga e divulga a ação disciplinar adequada para o comportamento que viola o Estatuto da Comunidade do [SECOND_LIFE] ou os Termos de Serviço. No entanto, a mesma não controla e não irá responder aos pedidos para remover o conteúdo do mundo [SECOND_LIFE].
+
+(2) O processo de remoção de conteúdo ou DMCA. Para solicitar a remoção de conteúdo do [SECOND_LIFE], você deve enviar uma notificação válida de infração, conforme previsto em nossa Política de DMCA em http://secondlife.com/corporate/dmca.php.
+
+Se você ainda deseja prosseguir com o processo de abuso, por favor, feche esta janela e termine de enviar seu relatório. Pode ser necessário selecionar a categoria específica 'CopyBot Infração de Permissões'.
+
+Obrigado,
+
+[GRID_OWNER]
+
+
+
+ Não foram encontrados os seguintes componentes requeridos de [FLOATER]:
+[COMPONENTS]
+
+
+
+ Já existe um objeto anexado a este ponto do seu corpo. Você deseja substituí-lo pelo objeto selecionado?
+
+
+
+
+ Você está no modo Ocupado, o que significa que você não receberá quaisquer itens oferecidos em troca deste pagamento.
+
+Você gostaria de deixar o modo Ocupado antes de completar esta transação?
+
+
+
+
+ Tem certeza de que deseja remover permanentemente o conteúdo da lixeira de seu inventário?
+
+
+
+
+ Você tem certeza que deseja limpar o cache do seu navegador?
+
+
+
+
+ Você tem certeza de que deseja limpar os cookies?
+
+
+
+
+ Você tem certeza de que deseja limpar toda sua lista de URLs?
+
+
+
+
+ Deseja realmente remover permanentemente o conteúdo da pasta achados e perdidos?
+
+
+
+
+ A seguinte SLURL foi copiada para o seu clipboard:
+ [SLURL]
+
+Coloque-a em uma página web para dar aos outros um fácil acesso a este local ou tente você, colando-a na barra de endereços do seu navegador.
+
+
+
+
+ Você deseja substituir a pré-configuração salva?
+
+
+
+
+ Você deseja apagar [SKY]?
+
+
+
+
+ Você não pode editar ou excluir um padrão predefinido.
+
+
+
+ Este arquivo de ciclo de dia se refere a um arquivo de céu faltando: [SKY].
+
+
+
+ Existe efeito de Pós-Processamento. Você deseja substituí-lo?
+
+
+
+
+ Editar os controles graduais do WindLight para configurar e salvar um conjunto de céus.
+
+
+
+ Definir quais céus colocar durante todo o dia.
+
+
+
+ Essas configurações ajustam a forma como o ambiente parece localmente no seu computador. Sua placa de vídeo precisa suportar o sombreador atmosférico, a fim de ter acesso a todas as definições.
+
+Ajuste o controle gradual "Hora do Dia" para alterar a fase do dia localmente no visualizador.
+
+Ajuste o controle gradual de "Cobertura das nuvens" para controlar quantas nuvens cobrem o céu.
+
+Pegue uma cor na paleta de cores de "Cor da Água" para mudar a cor desta.
+
+Ajuste o controle gradual de "Névoa de Água" para controlar o quão densa é a névoa dentro da água.
+
+Clique "Usar Horário da Propriedade" para redefinir a hora do dia para o horário atual do dia da região e permanecer atrelado a ela.
+
+Clique "Céu Avançado " para abrir um editor com configurações mais avançadas para o céu.
+
+Clique "Água Avançada " para abrir um editor com configurações mais avançadas para a água.
+
+
+
+ O editor de Ciclo do Dia dá a você o controle do céu durante um ciclo de dia/noite do [SECOND_LIFE]. Este é o ciclo usado pelo controle gradual da hora do dia do editor de ambiente básico.
+
+O editor do ciclo de dia trabalha configurando quadros-chave. Estes são pontos (representados pelos ícones cinza no gráfico de horário) que possuem um pré-ajuste de céu associado a eles. Conforme o dia passa, o céu do Windlight " anima " a interpolação entre esses quadros-chave.
+
+A seta amarela acima da linha de tempo representa a sua vista atual, baseada no horário do dia. Clique e arraste para ver como o seu dia será animado. Você pode adicionar ou deletar os quadros-chave pressionando os botões Adicionar Chave e Deletar chave ao lado direito da linha de tempo.
+
+Você pode configurar a posição do tempo de um quadro-chave arrastando-o pela linha do tempo, ou configurando manualmente no quadro de configurações do seu quadro-chave. Será possível a você associar o seu quadro-chave a este respectivo padrão WindLight.
+
+A duração do ciclo determina a duração geral do "dia". Configurá-la para um valor baixo (por exmplo, 2 min.) quer dizer que a linha do tempo de 24 horas será animada completamente em apenas dois minutos reais! Assim que estiver satisfeito com a linha do tempo e o ciclo dos quadros-chave, use os botões Play e Stop para uma prévia de como ficará o resultado. Lembre-se, você também pode utilizar a seta amarela indicadora do tempo acima da linha do tempo para ver o ciclo animado interativamente. Usando o botão do tempo da popriedade irá sincronizar a duração do seu dia ao ciclo diário da propriedade.
+
+Assim que estiver satisfeito com o seu ciclo diário, você pode salvá-lo ou carregá-lo através dos botões Salvar Dia Teste e Carregar Dia Teste. Note que, por enquanto, nós permitimos apenas um Ciclo de dia.
+
+
+
+ Use os cursores Vermelho/Verde/Azul ( Red/Green/Blue -RGB) para ajustar as cores do céu. Você também pode usar o controle de Intensidade (I) para mover os três controles RGB simultaneamente.
+
+
+
+ Haze Horizon é um dos parâmetros mais úteis para ajuste global de exposição de luz na cena. Ele é eficaz para simular diversas configurações de exposição, tais como configurações para super-exposição do sol e escuros halos de Iris.
+
+
+
+ A densidade global azul afeta a saturação da cor do céu e nevoeiro. Se você mover o controle gradual de intensidade (I) para a direita, as cores vão se tornar mais brilhantes e vibrantes. Se você movê-lo totalmente para a esquerda, as cores perdem intensidade e cor, eventualmente chegando a preto e branco. Se pretende um ajuste fino do equilíbrio de cor do céu, você pode controlar os diversos elementos da saturação, utilizando os controles graduais para vermelho / verde / azul (RGB).
+
+
+
+ Densidade de Poeira controla o nível de fumaça, poeira cinza na atmosfera. Eficaz para simular cenas com altos níveis de poeira e poluentes. É também efetivo em simular névoa e nevoeiro.
+
+
+
+ O Multiplicador de Densidade pode ser usado para afetar a densidade atmosférica global. Com definições mais baixas, ele cria uma sensação de "ar rarefeito" e em definições mais altas, ele cria um efeito mais denso, mais esfumaçado.
+
+
+
+ Ajusta como a distância no WindLight é percebida. Um valor zero efetivamente desativa a influência do WindLight sobre terrenos e objetos. Valores superiores a 1 simulam os efeitos atmosféricos mais espessos a maiores distâncias.
+
+
+
+ Max Altitude ajusta os cálculos de performance de altitude do WindLight, quando computa sua iluminação atmosférica. Em períodos vespertinos do dia, é útil para ajustar a "profundidade" de como o pôr-do-sol aparece.
+
+
+
+ Ajustar a cor e intensidade da luz direta na cena.
+
+
+
+ Ajusta a cor e a intensidade da luz ambiente atmosférica na cena.
+
+
+
+ O controle gradual de Tamanho controla o tamanho do sol.
+O controle gradual de Foco controla o quanto o sol aparecerá desfocado no céu.
+
+
+
+ Ajusta a distribuição na tela de luz e escuridão.
+
+
+
+ Ajusta o brilho das estrelas no céu.
+
+
+
+ Controla a localização do sol no céu. Semelhante a elevação.
+
+
+
+ Controla a localização do sol no céu. Similar ao azimute.
+
+
+ Edita as cores das nuvens, É normalmente recomendado manter o tom esbranquiçado, mas hey! Você pode se divertir se desejar.
+
+
+
+ Controla os detalhes da camada de imagem superior na imagem de nuvem principal. X e Y controla sua posição. D (Densidade) controla o quão cheio ou estratificada as nuvens devem aparecer.
+
+
+
+ Permite que você controle a posição das nuvens com os cursores X e Y e a densidade deles com o cursor D.
+
+
+
+ Controla o quanto as nuvens cobrem o céu.
+
+
+
+ Controla o dimensionamento da imagem de nuvens na cúpula celeste.
+
+
+
+ Controla a velocidade das nuvens que se movem na direção X.
+
+
+
+ Controla a velocidade que as núvens se movem na direção Y.
+
+
+
+ Marque esta check box para permitir a reprodução das nuvens clássicas mais velhas do Second Life, além das nuvens WindLight.
+
+
+
+ Escolhe a cor da neblina subaquática.
+
+
+
+ Controla a densidade da neblina da água e a distância de visibilidade debaixo d'água.
+
+
+
+ Modifica o efeito do expoente de densidade de Neblina para controlar até onde você pode ver quando o seu avatar está imerso.
+
+
+
+ Controla o quanto a superfície da água deve brilhar.
+
+
+
+ Controla o escalonamento das três marolas que compõem a água.
+
+
+
+ Controla o quanto de luz será refletido por ângulos diferentes.
+
+
+
+ Controla o quanto da intensidade da luz é refletida.
+
+
+
+ Controla o quanto de luz será refratado olhando acima da superfície da água.
+
+
+
+ Controla o quanto de luz sera refratado visto debaixo da superfície da água.
+
+
+
+ Controla como ondas e reflexos são misturados.
+
+
+
+ Controla o mapeamento normal em todos os níveis da água para determinar reflexões / refrações.
+
+
+
+ Controla aonde e com que velocidade a versão em escala maior do mapa normal se move nas direções X e Y .
+
+
+
+ Controla onde e a velocidade com que o mapa normal em escala menor se move nas direções X e Y.
+
+
+
+ Me dê o nome para o novo céu.
+
+
+
+
+ Este padrão já existe!
+
+
+
+ Dê o nome para o novo padrão de água.
+
+
+
+
+ Este padrão já existe!
+
+
+
+ Você não pode editar ou apagar um padrão predefinido.
+
+
+
+ Não foi possível iniciar uma nova sessão bate-papo com [RECIPIENT].
+[REASON]
+
+
+
+
+ [EVENT]
+[REASON]
+
+
+
+
+ Sua sessão de bate-papo com [NAME] tem que fechar.
+[REASON]
+
+
+
+
+ Os itens não podem ser comprados enquanto forem parte de um anexo.
+
+
+
+ Conceder esse pedido dá permissão ao script para tirar Linden dólares ([CURRENCY]) de sua conta. Para revogar esta permissão, o proprietário do objeto deve excluir o objeto ou resetar os scripts dele.
+
+
+
+
+ Você gostaria de vestir automaticamente o item de vestuário que você criar?
+
+
+
+
+ Você precisa ter a idade verificada para acessar este lote.
+Gostaria de visitar o site do [SECOND_LIFE] para verificação de idade?
+
+[_URL]
+
+ https://secondlife.com/account/verification.php?lang=pt
+
+
+
+
+ Este lote exige que você tenha informações de pagamento no arquivo antes de poder acessá-lo.
+Gostaria de visitar o site do Second Life para configurá-lo?
+
+[_URL]
+
+ https://secondlife.com/account/index.php?lang=pt
+
+
+
+
+
+ A sequência [STRING_NAME] está faltando do strings.xml
+
+
+
+ [MESSAGE]
+
+
+
+ Cancelado
+
+
+
+ Cancelada a ação de sentar
+
+
+
+ Cancelado Anexar
+
+
+
+ Substituindo partes de roupa/corpo perdidas com o padrão
+
+
+
+ Assunto: [SUBJECT], Mensagem: [MESSAGE]
+
+
+
+ [NAME] está Online
+
+
+
+ [NAME] está Offline
+
+
+
+ Você não pode adicionar a si mesmo como amigo
+
+
+
+ Fazendo o upload das fotos do site da web e do mundo...
+(Leva cerca de 5 minutos)
+
+
+
+ Você paga [CURRENCY][AMOUNT] para fazer o upload.
+
+
+
+ Concluído o upload da foto do site da web
+
+
+
+ O upload da foto foi realizado
+
+
+
+ Feito o download de Terrain.raw
+
+
+
+ O Gesto [NAME] não se encontra na base de dados
+
+
+
+ Impossível de carregar o gesto [NAME].
+Por favor, tente novamente.
+
+
+
+ O landmark foi perdido na base de dados
+
+
+
+ Impossível carregar o landmark. Por favor, tente de novo.
+
+
+
+ Seu botão CAPS LOCK está ativado.
+Como isto afeta a senha digitada, você provavelmente desejará desativá-lo.
+
+
+
+ Notecard foi perdido no banco de dados.
+
+
+
+ Permissões insuficientes para visualizar o notecard
+
+
+
+ Sem permissões suficientes para criar objetos.
+
+
+
+ Não é possível carregar notas neste momento.
+
+
+
+ O script foi perdido no banco de dados.
+
+
+
+ Permissões insuficientes para visualizar o script.
+
+
+
+ Impossível carregar o script. Por favor, tente novamente.
+
+
+
+ Os conteúdos completos que vocë está oferecendo, não estão ainda disponíveis localmente. Por favor, tente oferecê-los novamente em um minuto.
+
+
+
+
+ Você não pode modificar categorias protegidas.
+
+
+
+ Você não pode remover categorias protegidas.
+
+
+
+ Você ofereceu um cartão de visita a [FIRST] [LAST]
+
+
+
+ Impossível comprar o objeto enquanto ele está sendo carregado.
+Por favor, tente novamente.
+
+
+
+ Impossível unir o objeto enquanto ele está sendo carregado.
+Por favor, tente novamente.
+
+
+
+ Impossível comprar objetos de diferentes compradores ao mesmo tempo.
+Por favor, compre apenas um objeto.
+
+
+
+ Este objeto não está a venda.
+
+
+
+ Entrando em god mode, nível [LEVEL]
+
+
+
+ Saindo do god mode, nível [LEVEL]
+
+
+
+ A cópia falhou porque você não tem permissão para copiar.
+
+
+
+ [NAME] aceitou sua oferta de inventário.
+
+
+
+ [NAME] rejeitou sua oferta de inventário.
+
+
+
+ [NAME]: [MESSAGE]
+
+
+
+ Seu cartão de visita foi aceito
+
+
+
+ Seu cartão de visita foi negado.
+
+
+
+ Agora que você chegou à mainland, você pode se teletransportar para locais como '[NAME]' clicando no botão de Inventário, no canto direito inferior de sua tela, e selecionando a pasta Landmarks.
+Dê um duplo-clique na landmark e clique Teletransportar para viajar para o local desejado.
+
+
+
+ Agora que você chegou à mainland, você pode contatar residentes como '[NAME]' clicando no botão de Inventário, canto direito inferior de sua tela, e selecionando a pasta Cartões de Visita.
+Dê um duplo-clique num cartão de visita e em Mensagem Instantânea, digite sua mensagem.
+
+
+
+ Impossível selecionar terra nas fronteiras do servidor. Tente selecionar um pedaço menor de terra.
+
+
+
+ Alguns termos da sua busca foram excluídos, devido às restrições de conteúdo, como explicado nos Padrões da Comunidade.
+
+
+
+ Por favor, selecione ao menos um tipo de conteúdo para a busca (PG, Mature ou Adult).
+
+
+
+ [NAME] propõe que você vote:
+[MESSAGE]
+
+
+
+
+ [MESSAGE]
+
+
+ Notificação de evento:
+
+[NAME]
+[DATE]
+
+
+
+
+ Todos os objetos deste terreno que serão transferidos ao seu comprador, estão realçados agora.
+
+
+
+
+ Gestos desativados com o mesmo comando:
+[NAMES]
+
+
+
+ O software QuickTime da Apple parece não estar instalado em seu sistema.
+Se você deseja ver fluxo de mídia em terrenos que aceitem isso, você deverá ir ao site do QickTime (http://www.apple.com/quicktime) e instalar o player do QuickTime.
+
+
+
+
+ Os objetos que lhe pertencem no lote selecionado do terreno, voltaram ao seu inventário.
+
+
+
+ Os objetos no lote selecionado de terra que pertence a [NAME], voltaram ao seu inventário.
+
+
+
+ Os objetos no lote de terra selecionado que pertence ao residente '[NAME]', voltaram aos seus donos.
+
+
+
+ Os objetos no lote selecionado de terreno compartilhado pelo grupo [GROUPNAME], voltaram para os inventários de seus donos.
+Objetos trasnferíveis dados ao grupo, voltaram aos seus donos anteriores.
+Objetos não transferíveis dados ao grupo foram deletados.
+
+
+
+ Os objetos no lote selecionado que NÃO são seus, voltaram aos seus donos.
+
+
+
+ Esta terra permite que você sofra ataques.
+Você pode ser ferido aqui. Se você morrer, você será teletransportado à sua posição inicial.
+
+
+
+ Este terreno tem a opção Voar desabilitada.
+Ou seja, você não pode voar aqui.
+
+
+
+ Esta terra é “Não empurre”.
+Você não pode empurrar os outros, a não ser que seja o proprietário da terra.
+
+
+
+ O uso de voz está desabilitado nesta terra.
+
+
+
+ Este terreno tem a opção de construir desabilitada, ou seja, você não pode criar objetos aqui.
+
+
+
+ Um administrador não permitiu scripts temporariamente nesta região.
+
+
+
+ Esta região não roda nenhum script.
+
+
+
+ Neste terreno, nenhum script funcionará, a não ser os scripts do próprio dono da terra.
+
+
+
+ Pode apenas reclamar terreno público na região em que você está.
+
+
+
+ Você não é permitido na Região devido à sua Classificação de maturidade. Você precisa validar sua idade e/ou instalar o último Visualizador.
+
+Por favor, vá ao Banco de Conhecimento para detalhes sobre o acesso de áreas com esta Classificação de maturidade.
+
+
+
+ Você está banido da região.
+
+
+
+ Sua conta não pode conectar a esta região da grade teen.
+
+
+
+ Você não pode se tele-transportar de volta à Ilha de Ajuda.
+Vá para a Ilha de Ajuda Pública para repetir este tutorial.
+
+
+
+ Você não tem o status de pagamento adequado para entrar nesta região.
+
+
+
+ Você precisa ter sua idade verificada para entrar nesta região.
+
+
+
+ Você precisa ter a idade verificada para entrar neste lote.
+
+
+
+ Nenhuma região de destino encontrada.
+
+
+
+ Você não é permitido nesse destino.
+
+
+
+ Não consegue atravessar região com lote banido. Tente outra forma.
+
+
+
+ Você foi redirecionado para um telehub.
+
+
+
+ Não conseguiu tele-transportar próximo ao destino.
+
+
+
+ Tele-transporte cancelado.
+
+
+
+ A região que você está tentando entrar está no momento cheia.
+Por favor, tente novamente em alguns instantes.
+
+
+
+ Falha geral.
+
+
+
+ Direcionado para a região errada. Por favor, tente novamente.
+
+
+
+ ID do agente inválido.
+
+
+
+ ID de sessão inválido.
+
+
+
+ Código de circuito inválido.
+
+
+
+ Hora inválida.
+
+
+
+ Impossível criar a conexão pendente.
+
+
+
+ Um erro interno ocorreu enquanto se tentava direcioná-lo para seu destino de Tele-transporte. O Second Life pode estar passando por problemas no serviço, neste momento.
+
+
+
+ Impossível encontrar um bom destino para tele-transporte nesta região.
+
+
+
+ Um erro interno ocorreu enquanto tentava-se definir as coordenadas globais da sua solicitação de tele-transporte. O Second Life pode estar passando por problemas no serviço, no momento.
+
+
+
+ Não se achou um ponto de aterrissagem válido.
+
+
+
+ Nenhum lote válido foi encontrado.
+
+
+
+ Um objeto nomeado [OBJECTFROMNAME] do dono [NAME] deu a você [OBJECTTYPE] nomeado '[OBJECTNAME]'.
+
+
+
+
+ Um objeto nomeado [OBJECTFROMNAME], de dono desconhecido, deu a você um [OBJECTTYPE] nomeado [OBJECTNAME].
+
+
+
+
+ [NAME]deu a voce um [OBJECTTYPE] nomeado '[OBJECTNAME]'.
+
+
+
+
+ [NAME]
+
+[MESSAGE]
+
+
+
+ [MESSAGE]
+
+
+
+
+ [NAME] ofereceu um teletransporte para seu local:
+
+[MESSAGE]
+
+
+
+
+ [MESSAGE]
+[URL]
+
+
+
+
+ [NAME] está lhe oferecendo sua amizade
+
+[MESSAGE]
+
+(Por definição vocês serão capazes de ver um ao outro online)
+
+
+
+
+ [NAME] está lhe oferecendo sua amizade.
+
+(Por definição vocês serão capazes de ver um ao outro online)
+
+
+
+
+ [NAME] aceitou seu convite de amizade.
+
+
+
+ [NAME] recusou seu convite de amizade
+
+
+
+
+ [FIRST] [LAST] está oferecendo seu cartão de visita.
+Isto adicionará uma anotação em seu inventário, de modo que você possa mandar rapidamente uma IM para este residente.
+
+
+
+
+ A região será reiniciada em [MINUTES] minutos.
+Se permanecer nesta região, você será desconectado.
+
+
+
+ Região será reiniciada em [SECONDS] segundos.
+Se permanecer nesta região, você será desconectado.
+
+
+
+ Carregar página da web [URL]?
+
+[MESSAGE]
+
+Do objeto: [OBJECTNAME], dono: [NAME]?
+
+
+
+
+ Falhou ao procurar [TYPE] no banco de dados.
+
+
+
+ Falhou ao procurar [TYPE] nomeado [DESC] no banco de dados.
+
+
+
+ O item que você está tentando vestir usa uma característica que seu Visualizador não lê. Por favor, atualize sua versão do [APP_NAME] para vestir este item.
+
+
+
+ '[OBJECTNAME]', um objeto pertencente a '[NAME]', gostaria de:
+
+[QUESTIONS]
+Está OK?
+
+
+
+
+ '[OBJECTNAME]', um objeto de '[NAME]', gostaria de:
+
+[QUESTIONS]
+Se você não confia neste objeto ou em seu criador, você deveria negar o pedido. Para informações adicionais clique no botão Detalhes.
+
+Autorizar este pedido?
+
+
+
+
+ [NAME]'s '[TITLE]'
+[MESSAGE]
+
+
+
+ [GROUPNAME]'s '[TITLE]'
+[MESSAGE]
+
+
+
+
+
+ Você recebeu uma quantia de [CURRENCY][AMOUNT].
+Objetos e outros usuários podem dar [CURRENCY] a você.
+Seu saldo é mostrado no canto superior direito da tela.
+
+
+
+ Você pagou [CURRENCY][AMOUNT].
+O seu balanço de dinheiro está sendo mostrado no canto superior direito da tela.
+
+
+
+ Você está sentado.
+Use as setas (ou AWSD) para mudar a visão.
+Clique em 'Levantar' para levantar.
+
+
+
+ Clique e arraste para movimentar o mapa.
+Dê um duplo clique para teletransportar-se.
+Use os controles à direita para achar coisas e mostrar fundos diferentes.
+
+
+
+ Você pode construir novos objetos em algumas áreas do [SECOND_LIFE].
+Use as ferramentas acima, à esquerda para construir e tente manter apertadas as teclas Ctrl ou Alt para mudar rapidamente as ferramentas.
+Aperte ESC para parar de construir.
+
+
+
+ Clicando com esquerdo, você interage com os objetos especiais.
+Se o ponteiro do mouse mudar a uma mão, você pode interagir com o objeto.
+Clique com o direito que será mostrado sempre um menu das ações que você pode fazer.
+
+
+
+ Esta região não permite teletransporte ponto-a-ponto. Assim, você foi teletransportado para o telehub mais próximo.
+Seu destino está assinalado com um farol alto.
+Siga a flecha vermelha até o farol, ou clique nela para apagar o farol.
+
+
+
+ Suas chaves do movimento estão sendo seguras agora por um objeto.
+Tente as teclas de setas ou AWSD para ver o que elas fazem.
+Alguns objetos (como armas) requerem que você passe para mouselook para usá-los.
+Pressione 'M' para fazer isto.
+
+
+
+ Você está editando sua aparência.
+Para girar e ver em zoom, use as teclas de setas.
+Quando terminar, aperte 'Salvar Tudo' para salvar sua aparência e sair.
+Você pode editar sua aparência quantas vezes quiser.
+
+
+
+ Este é o seu inventário, que contém objetos, notecards, roupas e outras coisas suas.
+* Para vestir um objeto ou uma pasta completa, arraste-o para si mesmo(a).
+* Para trzer um objeto ao mundo, arraste-o ao chão.
+* Para ler um notecard, dê um duplo-click nele.
+
+
+
+ Esta é a região conhecida como sandbox.
+Os objetos que você constrói aqui podem ser deletados depois que você deixa a área. As sandboxes são limpas de forma periódica. Por favor, veja a informação no alto da tela, próxima ao nome da região.
+
+As regiões de sandbox não são comuns e são marcadas com símbolos.
+
+
+
+ Este objeto tem a propriedade flexível.
+Objetos flexíveis não podem ser físicos e devem ser fantasmas até que a caixa de verificação seja desmarcada.
+
+
+
+ Você ativou o menu Avançado.
+Este menu contém funcionalidades úteis para desenvolvedores debugarem o [APP_NAME].
+Para mostrar esse menu no Windows pressione Ctrl-Alt-D. No Mac pressione Cmd-Opt-Shift-D.
+
+
+
+ Você está editando uma primitiva esculpida.
+Primitivas esculpidas requerem uma textura especial para especificar suas formas.
+Você encontrará exemplos dessas texturas na Biblioteca do Inventário.
+
+
+
+ Você começou a tocar uma mídia. Mídias podem ser autorizadas a iniciar automaticamente se você assim escolher na janela de Preferências, sob Áudio/Vídeo. Atente para o risco de segurança que pode haver ao acessar websites de mídia que você não confia.
+
+
+
+
+ Você pode selecionar até [MAX_SELECT] itens desta lista.
+
+
+
+ [NAME] está lhe convidando para uma conversa com voz.
+Clique Aceitar para atender, ou Recusar para recusar o convite. Clique Mudo para calar quem está chamando.
+
+
+
+
+ [NAME] recebeu uma Mensagem Instantânea sua e automaticamente não está mais no modo mudo.
+
+
+
+ [NAME] recebeu pagamento seu e automaticamente não está mais no modo mudo.
+
+
+
+ [NAME] recebeu inventário seu e automaticamente não está mais mudo.
+
+
+
+ [NAME] juntou-se a uma conversa com voz do grupo [GROUP].
+Clique Aceitar para atender, ou Recusar para recusar o convite. Clique Mudo para calar quem está chamando.
+
+
+
+
+ [NAME] juntou-se a uma chamada de Conferência com voz...
+Clique Aceitar para juntar-se à chamada ou Recusar para recusar o convite. Clique Mudo para calar este usuário.
+
+
+
+
+ [NAME] está lhe convidando para uma conversa em conferência...
+ Clique Aceitar para se juntar à conversa, ou Recusar para recusar o convite. Clique Mudo para calar este usuário.
+
+
+
+
+ A chamada de voz a qual você está tentando juntar-se, [VOICE_CHANNEL_NAME], atingiu sua máxima capacidade. Favor tentar novamente mais tarde.
+
+
+
+ Desculpe-nos. Esta área atingiu seu limite de capacidade para conversas com voz. Favor tentar usar voz em outra área.
+
+
+
+ Você foi desconectado de [VOICE_CHANNEL_NAME]. Voce será reconectado agora à Conversa com voz local.
+
+
+
+ [VOICE_CHANNEL_NAME] desligou a chamada. Voce será reconectado agora à Conversa com voz local.
+
+
+ [VOICE_CHANNEL_NAME] recusou sua chamada. Voce será reconectado agora à Conversa com voz local.
+
+
+
+ [VOICE_CHANNEL_NAME] não está disponível para aceitar sua chamada. Voce será reconectado agora à Conversa com voz local.
+
+
+
+ Falha na conexão com [VOICE_CHANNEL_NAME], tente novamente mais tarde. Voce será reconectado agora à Conversa com voz local.
+
+
+
+ Estamos criando uma canal de voz para você. Isto pode levar até um minuto.
+
+
+
+ Você não pode entrar nessa terra, você não é membro do grupo autorizado.
+
+
+
+ Você não pode entrar nessa terra, você foi banido.
+
+
+
+ Você não pode entrar nessa terra, você não está na lista de acesso.
+
+
+
+ Você não tem permissão para se conectar à conversa com voz de [VOICE_CHANNEL_NAME].
+
+
+
+ Ocorreu um erro enquanto você tentava se conectar à conversa de voz de [VOICE_CHANNEL_NAME]. Favor tentar novamente mais tarde.
+
+
+
+ A região em que você entrou está rodando uma versão diferente de simulador.
+
+
+
+ A URL que vocÊ clicou não pode ser aberta no navegador web.
+
+
+
+
+ Você não parece ter os requisitos de hardware recomendados para rodar o [APP_NAME]. O [APP_NAME] exige uma placa gráfica OpenGL que tem apoio a multi- texturas. Se este for o caso, você pode se certificar de que tem os drivers mais recentes para sua placa gráfica, e os patches e pacotes de serviços para seu sistema operacional.
+
+Se continuar com problemas, por favor visite: http://www.secondlife.com/support
+
+
+
+ 796
+
+
+
+ 510
+
+
+
+ - A velocidade da sua CPU não suporta os requisitos mínimos exigidos.
+
+
+
+ - A sua placa de vídeo não atende os requisitos mínimos exigidos.
+
+
+ - A memória do seu sistema não suporta os requisitos mínimos exigidos.
+
+
+ Sim
+
+
+ Não
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_audio.xml b/indra/newview/skins/default/xui/pt/panel_audio.xml
new file mode 100644
index 000000000..92cfe7653
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_audio.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_audio_device.xml b/indra/newview/skins/default/xui/pt/panel_audio_device.xml
new file mode 100644
index 000000000..967dc2707
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_audio_device.xml
@@ -0,0 +1,25 @@
+
+
+
+ Dispositivos de Áudio
+
+
+ Dispositivo de entrada (microfone):
+
+
+ Dispositivo de saída (falantes):
+
+
+ Nível de Entrada
+
+
+ Ajuste a barra para controlar o volume de som para os outros residentes. Para testar o nível de entrada, basta falar em seu microfone.
+
+
+
+ Por Favor aguarde
+
+
+ Padrão
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_avatar.xml b/indra/newview/skins/default/xui/pt/panel_avatar.xml
new file mode 100644
index 000000000..72a6a1112
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_avatar.xml
@@ -0,0 +1,207 @@
+
+
+
+
+
+ Residente
+
+
+ Teste
+
+
+ Estatuto do membro
+
+
+ Contratado da Linden Lab.
+
+
+ Infor. de pagamento utilizadas
+
+
+ Infor. de pagamento no arquivo.
+
+
+ Sem infor. de pagamento no arquivo
+
+
+ Idade Verificada
+
+
+ Idade não Verificada
+
+
+ Nome:
+
+
+ Atualmente Online
+
+
+ Nascido:
+
+
+
+ Conta:
+
+
+
+
+ Parceiro:
+
+
+
+
+ [NAME]
+
+
+ Foto:
+
+
+
+ Grupos:
+
+
+
+ Sobre:
+
+
+ (500 chars)
+
+
+
+ Doar item:
+
+
+
+
+ Arraste e solte o item de inventário aqui.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No navegador externo
+
+
+ URL de Casa
+
+
+
+
+
+
+
+
+ Eu quero:
+
+
+
+
+
+
+
+
+
+
+
+ Habilidades:
+
+
+
+
+
+
+
+
+
+ Línguas:
+
+
+
+
+
+
+ Diga a todos os seus lugares favoritos em Second Life.
+
+
+
+
+ Carregando...
+
+
+
+
+
+ Coloque um anúncio nas listas de classificados do Second Life.
+
+
+
+
+ Carregando...
+
+
+
+
+
+ Foto:
+
+
+
+ Sobre:
+
+
+ (250
+caracteres)
+
+
+
+
+
+ Carregando...
+
+
+ Use este espaço para falar sobre essa pessoa.Coloque aqui o que desejar, projetos,
+lembretes e etc. Somente você poderá ver essa anotação. Nem esta nem
+outras pessoas podem ver as anotações.
+
+
+
+
+
+
+
+
+
+
+ Mostra a localização no mapa.
+Desativado porque ainda não é amigo desse residente.
+
+
+ Mostrar a localidade no mapa.
+ Desabilitar porque eles não estão conectados.
+
+
+ Mostra localização no mapa.
+
+
+ Força teletransporte até a sua localidade.
+
+
+ Oferece teletransporte para a sua localidade.
+Desativado até que você saia da Ilha da Orientação.
+
+
+ Oferece teletransporte para a sua localidade.
+
+
+ Carregando...
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_avatar_classified.xml b/indra/newview/skins/default/xui/pt/panel_avatar_classified.xml
new file mode 100644
index 000000000..b9e89c772
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_avatar_classified.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+ - Selecionar Maturidade -
+
+
+ Conteúdo Mature
+
+
+ Conteúdo PG
+
+
+
+ Lugar do Anúncio: Ainda não publicado
+
+
+ Cliques:
+
+
+
+
+ Anúncio colocado em: [DATE], Pago [CURRENCY][AMT] para listar.
+
+
+ Atualizar
+
+
+ Publicar…
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_avatar_pick.xml b/indra/newview/skins/default/xui/pt/panel_avatar_pick.xml
new file mode 100644
index 000000000..b9d5eda81
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_avatar_pick.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+ Sorte
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_chat_bar.xml b/indra/newview/skins/default/xui/pt/panel_chat_bar.xml
new file mode 100644
index 000000000..3a6fbf9a9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_chat_bar.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+ Gritar
+
+
+ Falar
+
+
+ Sussurrar
+
+
+
+
+ Gestos
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_classified.xml b/indra/newview/skins/default/xui/pt/panel_classified.xml
new file mode 100644
index 000000000..9647f3fe4
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_classified.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+ - Selecionar Maturidade -
+
+
+ Conteúdo Mature
+
+
+ Conteúdo PG
+
+
+
+
+ Anúncio colocado: [DATE], Pagos [CURRENCY][AMT] para constar na lista.
+
+
+ Atualizar
+
+
+ Publicar...
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_event.xml b/indra/newview/skins/default/xui/pt/panel_event.xml
new file mode 100644
index 000000000..5956acf07
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_event.xml
@@ -0,0 +1,70 @@
+
+
+
+ Nome:
+
+
+ (nenhum)
+
+
+ Tipo:
+
+
+ (nenhum)
+
+
+ Conteúdo Mature:
+
+
+ Sim
+
+
+ Não
+
+
+ Data:
+
+
+ (nenhum)
+
+
+ Duração do evento:
+
+
+ (nenhum)
+
+
+ Executado por:
+
+
+ (nenhum)
+
+
+ Localização:
+
+
+ (nenhum)
+
+
+ Taxa de Cobertura:
+
+
+ (nenhum)
+
+
+ Descrição:
+
+
+
+
+
+
+ nenhum
+
+
+ Avisar
+
+
+ Não avisar
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_friends.xml b/indra/newview/skins/default/xui/pt/panel_friends.xml
new file mode 100644
index 000000000..16c7696d9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_friends.xml
@@ -0,0 +1,20 @@
+
+
+
+ Múltiplos amigos...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_group.xml b/indra/newview/skins/default/xui/pt/panel_group.xml
new file mode 100644
index 000000000..8ec35b95b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_group.xml
@@ -0,0 +1,13 @@
+
+
+
+ Existem mudanças não aplicadas na aba atual.
+
+
+ Deseja fazer as mudanças?
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_group_finder.xml b/indra/newview/skins/default/xui/pt/panel_group_finder.xml
new file mode 100644
index 000000000..051db51ff
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_group_finder.xml
@@ -0,0 +1,9 @@
+
+
+
+ Existem mudanças não concluídas na aba atual
+
+
+ Deseja aplicar as mudanças?
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_group_general.xml b/indra/newview/skins/default/xui/pt/panel_group_general.xml
new file mode 100644
index 000000000..11e21d394
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_group_general.xml
@@ -0,0 +1,76 @@
+
+
+
+ A aba Geral contém informações gerais sobre este grupo, a lista dos donos e membros visíveis, preferências gerais do grupo e opções dos membros. Passe o mouse sobre as opções para mais ajuda.
+
+
+ Informações gerais do grupo foram modificadas
+
+
+
+
+ Digite o nome do seu novo grupo aqui
+
+
+ Fundado por:
+
+
+ (espera)
+
+
+ Declaração do Grupo
+
+
+
+ Declaração do grupo
+
+
+
+
+ Proprietários & Membros visíveis
+
+
+ (Proprietários são mostrados em negrito )
+
+
+
+
+
+
+
+ Preferências do Grupo
+
+
+
+
+
+
+
+
+ - Selecionar Maturidade -
+
+
+ Conteúdo Mature
+
+
+ Conteúdo PG
+
+
+
+
+ Meu título ativo
+
+
+
+
+
+
+
+ Recuperando dados do membro
+
+
+ Criar este grupo irá custar [CURRENCY]100.
+Você está realmente, realmente, REALMENTE seguro que deseja gastar [CURRENCY]100 para criar este grupo?
+Esteja consciente de que se ninguém mais se juntar a este grupo dentro de 48 horas, este será dissolvido e o nome não estará disponível para uso futuro.
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_group_invite.xml b/indra/newview/skins/default/xui/pt/panel_group_invite.xml
new file mode 100644
index 000000000..4d32f00f9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_group_invite.xml
@@ -0,0 +1,23 @@
+
+
+
+ Voce pode selecionar vários residentes
+para convidar ao seu grupo. Clique
+'Abrir Seletor de Residente' para iniciar.
+
+
+
+
+
+ Escolha que Função atribuir a eles:
+
+
+
+
+
+ Você tem certeza de que deseja convidar novo(s) proprietário(s)? Esta ação é permanente!
+
+
+ (carregando...)
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_group_land_money.xml b/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
new file mode 100644
index 000000000..1887aa5cf
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
@@ -0,0 +1,81 @@
+
+
+
+ Lotes pertencentes ao grupo são listados adiante, com os detalhes de contribuição. Um aviso aparece até que o Total de Terra em Uso seja menor ou igual à Contribuição Total. As abas de Planejamento, Detalhes e Vendas fornecem informações sobre as finanças do grupo.
+
+
+
+ Você não tem permissão para ver as terras pertencentes ao grupo.
+
+
+ Você não tem permissão para ver as informações sobre as contas do grupo.
+
+
+ Carregando...
+
+
+ Terra percentente ao grupo
+
+
+
+
+
+
+
+
+
+ Contribuição Total:
+
+
+ [AREA] m²
+
+
+ Total de Terra em Uso:
+
+
+ [AREA] m²
+
+
+ Terra Disponível:
+
+
+ [AREA] m²
+
+
+ Sua Contribuição:
+
+
+ Não é possível definir sua contribuição para o terreno.
+
+
+ m² ([AMOUNT] máxima)
+
+
+ Membros do grupo precisam contribuir com mais créditos de Terra para
+garantir a terra em uso.
+
+
+ Grupo [CURRENCY]
+
+
+
+
+ Computando..
+
+
+
+
+ Computando...
+
+
+
+
+
+
+ Computando...
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_group_notices.xml b/indra/newview/skins/default/xui/pt/panel_group_notices.xml
new file mode 100644
index 000000000..c4d523dd5
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_group_notices.xml
@@ -0,0 +1,69 @@
+
+
+
+ As notícias são uma maneira rápida de comunicar-se através de um grupo transmitindo uma mensagem e entregando um item anexo, opcionalmente. As notícias vão apenas a membros do grupo que têm a função habilitada para receber notícias. Você pode desligar Notícias na aba Geral.
+
+
+ Não existem notícias anteriores.
+
+
+
+ Arquivo de notícias do grupo
+
+
+ As notícias são mantidas por 14 dias. Clique na notícia abaixo que você deseja
+ver. Clique no botão “Atualizar” para verificar se novas notícias foram
+recebidas. Listas de aviso estão limitadas a 200 por grupo, diariamente.
+
+
+
+
+
+
+
+ Nenhum encontrado.
+
+
+
+
+
+ Criar uma notícia
+
+
+ Você deve colocar um assunto para enviar uma notícia. Você pode
+adicionar um item simples à notícia, arrastando-o do seu
+Inventário para o painel. Itens anexados devem ser copiáveis
+e transferíveis e você não pode mandar uma pasta.
+
+
+ Assunto:
+
+
+
+ Mensagem:
+
+
+
+ Anexo:
+
+
+
+
+
+
+
+
+ Notícia arquivada
+
+
+ Para enviar uma notícia nova, clique no botão 'Criar Nova Notícia' acima.
+
+
+ Asunto:
+
+
+ Mensagem:
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_group_roles.xml b/indra/newview/skins/default/xui/pt/panel_group_roles.xml
new file mode 100644
index 000000000..902d138db
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_group_roles.xml
@@ -0,0 +1,146 @@
+
+
+
+ Existem alterações não aplicadas na sub-aba atual.
+
+
+ Você quer submeter essas alterações?
+
+
+
+
+ Membros e Funções
+
+
+ São atribuídas funções com habilidades aos membros do grupo.
+Estes ajustes podem ser facilmente customizados para uma flexibilidade
+e organização maiores.
+
+
+
+
+ Funções
+
+
+ Selecionar uma função abaixo. Você pode modificar o nome, a descrição
+e o título do membro.
+
+
+ Selecione uma função abaixo para ver suas propriedades, membros e
+habilidades permitidas.
+
+
+ Você também pode atribuir habilidades à função.
+
+
+ Você pode ver, mas não pode alterar habilidades atribuídas.
+
+
+
+
+ Habilidades
+
+
+ Você pode ver a descrição de uma habilidade e quais funções e membros
+podem executar essa habilidade.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Você pode adicionar ou remover as funções designadas aos membros. Selecione vários membros, segurando a tecla Ctrl e clicando em seus nomes.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ As funções têm um título e uma lista de habilidades
+permitidas que os membros podem executar. Os membros poderão ter um ou mais funções.
+ Um grupo poderá ter até 10 funções, incluíndo as funções dos membros e do dono do grupo.
+
+
+ As funções 'todos' e 'donos' são especiais e não podem ser deletadas.
+
+
+
+
+
+
+
+
+ As habilidades permitem que os membros nas funções façam coisas específicas dentro do grupo.
+Há uma grande variedade de habilidades.
+
+
+
+
+
+ Funções atribuídas
+
+
+ Habilidades permitidas
+
+
+
+
+
+ Nome
+
+
+ Descrição
+
+
+ Empregados
+
+
+ Título
+
+
+ (esperando)
+
+
+ (esperando)
+
+
+ Membros atribuídos
+
+
+ Habilidades permitidas
+
+
+
+
+
+
+ Descrição
+
+
+ Essa habilidade permite tirar alguem do grupo. Somente o dono do grupo poderá retirar outro dono do grupo.
+
+
+ Funções com habilidades
+
+
+ Membros com habilidades
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_group_voting.xml b/indra/newview/skins/default/xui/pt/panel_group_voting.xml
new file mode 100644
index 000000000..dd87a99a0
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_group_voting.xml
@@ -0,0 +1,113 @@
+
+
+
+ As Propostas ao Grupo podem ser usadas para se ter noção do que o grupo quer fazer ou como o grupo se manifesta sobre alguma coisa. Se você tem as credenciais corretas, você pode criar propostas, votar em propostas abertas e ver propostas antigas.
+
+
+
+ Abrir propostas ao grupo
+
+
+ Clique duas vezes sobre a proposta que desejar votar ou
+pressione Criar Proposta para criar uma proposta nova.
+
+
+ Descrição da Proposta
+
+
+ Proposta Término da votação Votado?
+
+
+
+
+
+ Quantidade:
+
+
+
+ do [MEMBERS] membros precisam votar.
+
+
+ Duração:
+
+
+
+ dias
+
+
+ Maioria simples
+Maioria de 2/3
+Unânime
+
+
+ inicia:
+
+
+ termina:
+
+
+
+
+
+
+
+ Histórico de votos do grupo
+
+
+ Duplo clique num Voto Feito ou selecione um e clique Visualizar Item para ver
+os resultados.
+
+
+ Após o voto Voto finalizado
+
+
+
+ Resultado:
+
+
+
+ Abrir propostas do grupo
+
+
+ Dê um duplo click na proposta a qual você gostaria de votar ou
+pressione Criar Proposta para criar uma nova proposta.
+
+
+ Criar proposta
+
+
+ Digite a descrição de proposta para a nova proposta. Você pode alterar
+o quórum, duração e maioria necessária para passar a proposta.
+
+
+ Votar na proposta
+
+
+ Pressione o botão Sim ou Não para votar na proposta,
+ou escolha abster-se nesta proposta.
+
+
+ Você já votou: [VOTE]
+
+
+ A proposta que você está tentando criar encontra-se vazia. Por favor, preencha a proposta antes de criá-la.
+
+
+ Submeter Sim à proposta...
+
+
+ Submeter Não à proposta...
+
+
+ Submetendo Abster da Proposta...
+
+
+ Submetendo nova proposta...
+
+
+ Seu voto foi recebido.
+
+
+ Você já votou antes. Você só pode votar uma vez durante uma eleição.
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_groups.xml b/indra/newview/skins/default/xui/pt/panel_groups.xml
new file mode 100644
index 000000000..2cf52bf8f
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_groups.xml
@@ -0,0 +1,15 @@
+
+
+
+ Seu grupo ativo atual es'ta mostrado em negrito.
+
+
+ Você pertence a [COUNT] grupos (de no máximo [MAX]).
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_land_covenant.xml b/indra/newview/skins/default/xui/pt/panel_land_covenant.xml
new file mode 100644
index 000000000..a063cfc99
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_land_covenant.xml
@@ -0,0 +1,39 @@
+
+
+
+ Região:
+
+
+ (desconhecido)
+
+
+ Propriedade:
+
+
+ (desconhecido)
+
+
+ Dono da propriedade:
+
+
+ (desconhecido)
+
+
+ Terras compradas nesta região poderão ou não ser revendidas.
+
+
+ Terras compradas nesta região poderão ou não ser compartilhadas ou subdivididas.
+
+
+ Terras compradas nesta região poderão ser revendidas.
+
+
+ Terras compradas nesta região não poderão ser revendidas.
+
+
+ Terras compradas nesta região poderão ser compartilhadas ou subdivididas.
+
+
+ Terras compradas nesta região não poderão ser compartilhadas ou subdivididas.
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_login.xml b/indra/newview/skins/default/xui/pt/panel_login.xml
new file mode 100644
index 000000000..ce1b1b172
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_login.xml
@@ -0,0 +1,34 @@
+
+
+
+ Primeiro nome:
+
+
+ Sobrenome:
+
+
+ Senha:
+
+
+ Posição inicial:
+
+
+
+ Minha casa
+
+
+ Minha última localização
+
+
+ <Digite o nome da região>
+
+
+
+
+
+ Registrar-se para uma conta
+
+
+ Esqueceu seu nome de usuário ou senha?
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_master_volume.xml b/indra/newview/skins/default/xui/pt/panel_master_volume.xml
new file mode 100644
index 000000000..3c152b6da
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_master_volume.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_media_controls.xml b/indra/newview/skins/default/xui/pt/panel_media_controls.xml
new file mode 100644
index 000000000..5ee273fa6
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_media_controls.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Executar
+
+
+ Parar
+
+
+ Pausar
+
+
+ Nenhuma Mídia Especificada
+
+
+ (URL escondida pelo dono do terreno)
+
+
+ Esta localidade mostra conteúdo da World Wide Web. Clique no botão Play para mostrar conteúdo da web.
+
+
+ Esta localidade mostra conteúdo de Vídeo. Clique no botão Play para executar o vídeo.
+
+
+ Mostra conteúdo da Web nesta localidade.
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_media_remote.xml b/indra/newview/skins/default/xui/pt/panel_media_remote.xml
new file mode 100644
index 000000000..f27e84321
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_media_remote.xml
@@ -0,0 +1,10 @@
+
+
+
+ Filmes
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_media_remote_expanded.xml b/indra/newview/skins/default/xui/pt/panel_media_remote_expanded.xml
new file mode 100644
index 000000000..109e54bbc
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_media_remote_expanded.xml
@@ -0,0 +1,28 @@
+
+
+
+
+ Executar
+
+
+ Parar
+
+
+ Pausar
+
+
+ Nenhuma Mídia Especificada
+
+
+ (URL escondida pelo dono do terreno)
+
+
+ Esta localidade mostra conteúdo da World Wide Web. Clique no botão Executar para mostrar o conteúdo Web.
+
+
+ Esta localidade mostra conteúdo de Vídeo. Clique no botão Executar para executar o vídeo.
+
+
+ Mostra conteúdo Web nesta localidade.
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_mini_map.xml b/indra/newview/skins/default/xui/pt/panel_mini_map.xml
new file mode 100644
index 000000000..1fa6b11f2
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_mini_map.xml
@@ -0,0 +1,27 @@
+
+
+
+ N
+
+
+ L
+
+
+ S
+
+
+ O
+
+
+ NE
+
+
+ SE
+
+
+ SO
+
+
+ NO
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_overlaybar.xml b/indra/newview/skins/default/xui/pt/panel_overlaybar.xml
new file mode 100644
index 000000000..f74d678ff
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_overlaybar.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_place.xml b/indra/newview/skins/default/xui/pt/panel_place.xml
new file mode 100644
index 000000000..7fcfd67d9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_place.xml
@@ -0,0 +1,39 @@
+
+
+
+ Nome:
+
+
+ Descrição:
+
+
+ Informação:
+
+
+ Localidade:
+
+
+
+
+
+ Tráfego: [TRAFFIC]
+
+
+ Área: [AREA] m².
+
+
+ À venda por [CURRENCY][PRICE]
+
+
+ ID do leilão [ID].
+
+
+ Informação do local indisponível sem a atualização do servidor.
+
+
+ A informação sobre esta localidade está indisponível no momento, por favor tente novamente mais tarde.
+
+
+ Informações sobre esta localidade estão indisponíveis devido a restrições de acesso. Por favor, verifique suas permissões com o dono do lote.
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_place_small.xml b/indra/newview/skins/default/xui/pt/panel_place_small.xml
new file mode 100644
index 000000000..10a78f3f5
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_place_small.xml
@@ -0,0 +1,42 @@
+
+
+
+ Nome:
+
+
+ Descrição:
+
+
+ Informações:
+
+
+ Tipo de Terra:
+
+
+ Localidade:
+
+
+
+
+
+ Tráfego: [TRAFFIC]
+
+
+ Área: [AREA] m².
+
+
+ À venda por [CURRENCY][PRICE]
+
+
+ ID do Leilão [ID].
+
+
+ Informação do local indisponível sem a atualização do servidor.
+
+
+ Informações sobre esta localidade estão indisponíveis no momento, por favor tente novamente mais tarde.
+
+
+ Informações sobre esta localidade estão indisponíveis. Por favor, verifique suas permissões com o dono do lote.
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_audio.xml b/indra/newview/skins/default/xui/pt/panel_preferences_audio.xml
new file mode 100644
index 000000000..f2521520d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_audio.xml
@@ -0,0 +1,22 @@
+
+
+
+ Volume:
+
+
+ Preferências de Streaming:
+
+
+ Preferências de Áudio:
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
new file mode 100644
index 000000000..be93f67d8
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
@@ -0,0 +1,117 @@
+
+
+
+ Tamanho da Fonte
+do Chat:
+
+
+
+ Pequeno
+
+
+ Médio
+
+
+ Grande
+
+
+
+ Cor do Chat:
+
+
+
+
+
+
+
+
+
+
+
+ Erros de Script:
+
+
+
+ Console do Chat:
+
+
+
+ (segundos)
+
+
+
+ (# linhas)
+
+
+
+
+ Opções do Chat:
+
+
+
+
+
+
+ Chat com bolha:
+
+
+
+
+
+ Padrão do Sistema
+
+
+ English (Inglês)
+
+
+ Dansk (Dinamarquês) - Beta
+
+
+ Deutsch (Alemão) - Beta
+
+
+ Español (Espanhol) - Beta
+
+
+ Français (Francês) - Beta
+
+
+ Italiano - Beta
+
+
+ Magyar (Húngaro) - Beta
+
+
+ Nederlands (Holandês) - Beta
+
+
+ Polski (Polonês) - Beta
+
+
+ Português - Beta
+
+
+ Русский (Russo) - Beta
+
+
+ Türkçe (Turco) - Beta
+
+
+ Українська (Ucraniano) - Beta
+
+
+ 中文 (简体) (Chinês) - Beta
+
+
+ 日本語 (Japonês) - Beta
+
+
+ 한국어 (Coreano) - Beta
+
+
+
+ Chat Língua:
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
new file mode 100644
index 000000000..0a6e10a61
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
@@ -0,0 +1,147 @@
+
+
+
+
+ Minha Casa
+
+
+ Minha Última Localidade
+
+
+
+
+
+ Nunca
+
+
+ Mostrar Temporariamente
+
+
+ Sempre
+
+
+
+
+
+ Títulos dos Grupos:
+
+
+
+
+
+ Tamanho da UI:
+
+
+
+
+
+ Classificação:
+
+
+ Eu quero acessar
+conteúdo classificado:
+
+
+
+ PG, Mature e Adult
+
+
+ PG e Mature
+
+
+ apenas PG
+
+
+
+ apenas PG
+
+
+ Posição Inicial:
+
+
+ Mostrar Nomes:
+
+
+ Cores para Meus Efeitos:
+
+
+ segundos
+
+
+ Relatórios de Falhas:
+
+
+ Linguagem:
+
+
+ (Precisa de reinício para efetivar)
+
+
+ Digite o nome da Região
+
+
+
+ Perguntar antes de enviar
+
+
+ Sempre enviar
+
+
+ Nunca Enviar
+
+
+
+
+ Padrão do Sistema
+
+
+ English (Inglês)
+
+
+ Dansk (Dinamarquês)*
+
+
+ Deutsch (Alemão)*
+
+
+ Español (Espanhol)
+
+
+ Français (Francês)
+
+
+ Italiano*
+
+
+ Magyar (Húngaro)*
+
+
+ Nederlands (Holandês)*
+
+
+ Polski (Polonês)*
+
+
+ Português
+
+
+ Русский (Russo)*
+
+
+ Türkçe (Turco)*
+
+
+ Українська (Ucraniano)*
+
+
+ 中文 (简体) (Chinês)*
+
+
+ 日本語 (Japonês)*
+
+
+ 한국어 (Coreano)*
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
new file mode 100644
index 000000000..5b68de75b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
@@ -0,0 +1,177 @@
+
+
+
+
+
+ Se desmarcado, o visualizador irá exibir em tela inteira quando fizer o acesso.
+
+
+ Tamanho da Janela:
+
+
+
+ 640x480
+
+
+ 800x600
+
+
+ 720x480 (NTSC)
+
+
+ 768x576 (PAL)
+
+
+ 1024x768
+
+
+
+ Resolução de Display:
+
+
+ Relação de Aspecto:
+
+
+
+ 4:3 (CRT Padrão)
+
+
+ 5:4 (1280x1024 LCD)
+
+
+ 8:5 (tela ampla)
+
+
+ 16:9 (tela ampla)
+
+
+
+
+ Qualidade e
+
+
+ Performance:
+
+
+ Mais
+rápido
+
+
+ Baixo
+
+
+ Meio
+
+
+ Alto
+
+
+ Ultra
+
+
+ Mais alto
+
+
+ Qualidade
+
+
+
+ Sombreadores:
+
+
+
+
+
+
+ Detalhes de Reflexão:
+
+
+
+ Terreno e Árvores
+
+
+ Todos os objetos estáticos
+
+
+ Todos os avatares e Objetos
+
+
+ Tudo
+
+
+
+ Renderização de Avatar:
+
+
+
+
+
+ m
+
+
+ m
+
+
+
+
+
+ Detalhes de Malha:
+
+
+
+
+
+
+
+
+ Baixo
+
+
+ Baixo
+
+
+ Baixo
+
+
+ Baixo
+
+
+ Baixo
+
+
+ Baixo
+
+
+ Baixo
+
+
+ Detalhes de Iluminação:
+
+
+
+ Sol e Lua apenas
+
+
+ Luzes locais nas proximidades
+
+
+
+ Detalhe do Terreno:
+
+
+
+ Baixo
+
+
+ Alto
+
+
+
+
+
+ [RES_X] x [RES_Y]
+
+
+ [NUM]:[DEN]
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_im.xml b/indra/newview/skins/default/xui/pt/panel_preferences_im.xml
new file mode 100644
index 000000000..84c6c934c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_im.xml
@@ -0,0 +1,33 @@
+
+
+
+ Minha situação online:
+
+
+
+ Opções MI:
+
+
+ Logar para Alterar
+
+
+
+
+
+
+ Resposta no Modo
+Ocupado:
+
+
+ Opções de Registro:
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_input.xml b/indra/newview/skins/default/xui/pt/panel_preferences_input.xml
new file mode 100644
index 000000000..3c9409013
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_input.xml
@@ -0,0 +1,33 @@
+
+
+
+ Mouselook:
+
+
+ Sensibilidade do Mouse:
+
+
+
+ Vôo Automático:
+
+
+
+ Opções de Câmera:
+
+
+ Angulo de Visão da Câmera:
+
+
+
+ Distância de Acompanhamento da Camêra:
+
+
+
+
+
+ Opções de Exibição
+do Avatar:
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_network.xml b/indra/newview/skins/default/xui/pt/panel_preferences_network.xml
new file mode 100644
index 000000000..b6f3a833b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_network.xml
@@ -0,0 +1,35 @@
+
+
+
+ Banda Máxima:
+
+
+
+ kbps (kilobits por segundo)
+
+
+ Tamanho do Cachê de Disco:
+
+
+
+ MB
+
+
+ Local do Cache em Disco:
+
+
+
+
+
+
+
+
+ (Não pode alterar)
+
+
+ (Não pode alterar)
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_popups.xml b/indra/newview/skins/default/xui/pt/panel_preferences_popups.xml
new file mode 100644
index 000000000..e060d784d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_popups.xml
@@ -0,0 +1,18 @@
+
+
+
+ Não mostrar estas popups:
+
+
+
+
+ Mostrar estas popups:
+
+
+
+ Ofertas de notecards, texturas e landmarks:
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_skins.xml b/indra/newview/skins/default/xui/pt/panel_preferences_skins.xml
new file mode 100644
index 000000000..c3f2f5149
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_skins.xml
@@ -0,0 +1,14 @@
+
+
+
+ Selecione uma pele (necessita reiniciar):
+
+
+
+ Padrão
+
+
+ Prata
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_voice.xml b/indra/newview/skins/default/xui/pt/panel_preferences_voice.xml
new file mode 100644
index 000000000..6fda7cd27
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_voice.xml
@@ -0,0 +1,36 @@
+
+
+
+ Bate-papo de Voz nâo está disponível
+
+
+
+
+ Ouvir o bate-papo de voz pela posição de câmera.
+
+
+ Ouvir o bate-papo de voz pela posição do avatar.
+
+
+
+ Pressione para falar
+
+
+ O modo Pressione-para-falar permite que você controle quando a sua voz é transmitida. Quando quiser alternar o modo, pressione e solte o botão pressione-para-falar para mudar o seu microfone de ligado para desligado. Quando não estiver em modo alternado, o microfone estará ativo apenas quando o botão estiver mantido para baixo.
+
+
+
+ Gatilho do Pressione-para-Falar:
+
+
+
+
+ Opções de privacidade
+
+
+
+
+
+ NOTA: Executar as configurações do dispositivo vai desligá-lo temporariamente do Bate- papo de voz e as mudanças que você fizer serão imediatamente aplicadas.
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_web.xml b/indra/newview/skins/default/xui/pt/panel_preferences_web.xml
new file mode 100644
index 000000000..40236a0c6
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_web.xml
@@ -0,0 +1,28 @@
+
+
+
+
+ Use navegador externo (Firefox, Safari, Internet Explorer)
+
+
+ Use navegador embutido
+
+
+
+ Cache do navegador:
+
+
+
+ Cookies:
+
+
+
+ Web Proxy:
+
+
+
+ Endereço:
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_region_covenant.xml b/indra/newview/skins/default/xui/pt/panel_region_covenant.xml
new file mode 100644
index 000000000..4977a1fac
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_region_covenant.xml
@@ -0,0 +1,84 @@
+
+
+
+ Propriedade:
+
+
+ Nome:
+
+
+ mainland
+
+
+ Dono:
+
+
+ (nenhum)
+
+
+ Corretagem:
+
+
+ Última modificação: Quarta, 31 de dezembro de 1969 às 16:00:00 horas
+
+
+
+ Não há nenhuma regra fornecida para esta Propriedade.
+
+
+
+ As mudanças das regras serão mostradas em todos os lotes
+ da propriedade.
+
+
+ Arraste e solte um notecard, para mudar as Regras desta
+ Propriedade.
+
+
+ Região:
+
+
+ Nome:
+
+
+ leyla
+
+
+ Tipo:
+
+
+ Continente / Terra
+
+
+ Classificação:
+
+
+ Adult
+
+
+ Revender:
+
+
+ Terra nesta região não pode ser revendida.
+
+
+ Subdividir:
+
+
+ Terra nesta região não pode ser unida/sub-dividida.
+
+
+ Terras compradas na região poderão ser revendidas.
+
+
+ Terras compradas na região não poderão ser revendidas.
+
+
+ O terreno comprado nesta região pode ser compartilhado ou
+subdividido.
+
+
+ O terreno comprado nesta região não pode ser compartilhado
+ou subdividido.
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_region_debug.xml b/indra/newview/skins/default/xui/pt/panel_region_debug.xml
new file mode 100644
index 000000000..724df2015
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_region_debug.xml
@@ -0,0 +1,40 @@
+
+
+
+ Região:
+
+
+ desconhecido
+
+
+
+
+
+
+
+
+
+ Retornar objeto
+
+
+ Residente:
+
+
+ (nenhum)
+
+
+
+ Opções:
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_region_estate.xml b/indra/newview/skins/default/xui/pt/panel_region_estate.xml
new file mode 100644
index 000000000..f43402be1
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_region_estate.xml
@@ -0,0 +1,69 @@
+
+
+
+ Mudanças nas definições nesta guia irão afetar
+todas as regiões desta propriedade.
+
+
+ Propriedade:
+
+
+ (desconhecido)
+
+
+ Proprietário:
+
+
+ (desconhecido)
+
+
+
+
+
+
+
+
+
+ Acesso restrito a Residentes...
+
+
+
+
+
+
+
+
+ Endereço de email de Abuso:
+
+
+ Funcionalidade não suportada
+
+
+
+
+
+
+ Gerentes da propriedade:
+
+
+
+
+
+ Residentes permitidos:
+
+
+
+
+
+ Grupos permitidos:
+
+
+
+
+
+ Residentes banidos:
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_region_general.xml b/indra/newview/skins/default/xui/pt/panel_region_general.xml
new file mode 100644
index 000000000..6873d4ac9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_region_general.xml
@@ -0,0 +1,59 @@
+
+
+
+ Região:
+
+
+ desconhecido
+
+
+ Versão:
+
+
+ desconhecido
+
+
+ Tipo:
+
+
+ desconhecido
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Classificação:
+
+
+
+ Adult
+
+
+ Mature
+
+
+ PG
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_region_terrain.xml b/indra/newview/skins/default/xui/pt/panel_region_terrain.xml
new file mode 100644
index 000000000..b9b0e9d90
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_region_terrain.xml
@@ -0,0 +1,27 @@
+
+
+
+ Região:
+
+
+ nenhum
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_region_texture.xml b/indra/newview/skins/default/xui/pt/panel_region_texture.xml
new file mode 100644
index 000000000..4787b59a8
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_region_texture.xml
@@ -0,0 +1,57 @@
+
+
+
+ Região:
+
+
+ desconhecido
+
+
+ Texturas de Terreno (requer 512x512, arquivos 24 bit .tga )
+
+
+ 1 (baixo)
+
+
+ 2
+
+
+ 3
+
+
+ 4 (alto)
+
+
+ Escalas de Elevação de Terreno
+
+
+ Sudeste
+
+
+ Noroeste
+
+
+ Sudoeste
+
+
+ Noroeste
+
+
+
+
+
+
+
+
+
+
+ Estes valores respresentam o tipo de escala para as texturas acima.
+
+
+ Medido em metros, o valor Baixo é a altura máxima da Textura #1,
+
+
+ e o valor Alto é a altura Mínima da Textura #4.
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_scrolling_param.xml b/indra/newview/skins/default/xui/pt/panel_scrolling_param.xml
new file mode 100644
index 000000000..d5b67884c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_scrolling_param.xml
@@ -0,0 +1,10 @@
+
+
+
+ Carregando...
+
+
+ Carregando...
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_speaker_controls.xml b/indra/newview/skins/default/xui/pt/panel_speaker_controls.xml
new file mode 100644
index 000000000..965197fae
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_speaker_controls.xml
@@ -0,0 +1,41 @@
+
+
+
+ (Moderador)
+
+
+
+
+
+ Vozes ativadas por padrão
+
+
+ Vozes desligadas por padrão
+
+
+
+
+
+
+
+
+
+ Rumplstiltskin Califragilistic
+
+
+
+
+
+
+
+ Controles do Moderador:
+
+
+ Permitir conversa por voz
+
+
+ Permitir conversa por texto
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_status_bar.xml b/indra/newview/skins/default/xui/pt/panel_status_bar.xml
new file mode 100644
index 000000000..c875d496c
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_status_bar.xml
@@ -0,0 +1,38 @@
+
+
+
+ Nome do pedaço de terra vai aqui
+
+
+ Carregando...
+
+
+
+ 12:00 AM
+
+
+ Domingo:Segunda-feira:Terça-feira:Quarta-feira:Quinta-feira:Sexta-feira:Sábado
+
+
+ Janeiro:Fevereiro:Março:Abril:Maio:Junho:Julho:Agosto:Setembro:Outubro:Novembro:Dezembro
+
+
+
+
+ 100%
+
+
+
+
+
+
+
+
+
+
+ Perda de pacote
+
+
+ Banda
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_toolbar.xml b/indra/newview/skins/default/xui/pt/panel_toolbar.xml
new file mode 100644
index 000000000..dec13c95b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_toolbar.xml
@@ -0,0 +1,17 @@
+
+
+
+ Reagrupar as janelas
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_top_pick.xml b/indra/newview/skins/default/xui/pt/panel_top_pick.xml
new file mode 100644
index 000000000..dea3a5d9e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_top_pick.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+ Ordenar:
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_voice_controls.xml b/indra/newview/skins/default/xui/pt/panel_voice_controls.xml
new file mode 100644
index 000000000..79891dfb2
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_voice_controls.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_voice_enable.xml b/indra/newview/skins/default/xui/pt/panel_voice_enable.xml
new file mode 100644
index 000000000..bfff5b401
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_voice_enable.xml
@@ -0,0 +1,23 @@
+
+
+
+ Bem-vindo ao Bate-Papo em voz do Second Life! O Bate-papo em Voz lhe permite falar com outros residentes. Este assistente irá guiá-lo através dos passos necessários para configurar o Bate-papo em voz. Utilizá-lo exige caixas de som e, se quiser falar com outras pessoas, use um microfone ou headset estéreo com microfone.
+
+
+ Bate-papo em voz está ativado por padrão. Quer continuar usando a conversa em voz?
+
+
+
+ Sim, continue com o Bate-papo em Voz.
+
+
+ Não, desative o Bate-papo em Voz.
+
+
+
+ Você pode ativar o bate-papo de Voz a qualquer momento, indo em bate-papo de voz na aba Preferências.
+
+
+ Clique no botão Próximo para configurar as preferências do bate-papo de voz ou clique em Concluir para continuar usando o Second Life.
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_voice_options.xml b/indra/newview/skins/default/xui/pt/panel_voice_options.xml
new file mode 100644
index 000000000..8bd116bc0
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_voice_options.xml
@@ -0,0 +1,21 @@
+
+
+
+ Utilize as opções abaixo para configurar a experiência de bate-papo de Voz.
+
+
+
+ Ouvir o bate-papo de Voz pela posição de câmera.
+
+
+ Ouvir o bate-papo de Voz pela posição do avatar.
+
+
+
+
+
+ acionar pressione-para-falar:
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_voice_remote_expanded.xml b/indra/newview/skins/default/xui/pt/panel_voice_remote_expanded.xml
new file mode 100644
index 000000000..1cd8a4447
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_voice_remote_expanded.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/role_actions.xml b/indra/newview/skins/default/xui/pt/role_actions.xml
new file mode 100644
index 000000000..c05405173
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/role_actions.xml
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
new file mode 100644
index 000000000..f914d1465
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -0,0 +1,208 @@
+
+
+
+
+
+ Fazendo Login. [APP_NAME] pode parecer congelado. Por favor, aguarde.
+ Autenticando
+ Executando manutenção da conta...
+ Falha na tentativa anterior de login. Fazendo Login, tentativa [NUMBER]
+ Carregando mundo...
+ Inicializando navegador embutido...
+ Inicializando multimídia...
+ Verificando arquivos no cache (pode levar 60-90 segundos)...
+ Processando Resposta...
+ Inicializando Mundo...
+ Decodificando imagens...
+ Inicializando o QuickTime...
+ O QuickTime não foi encontrado - incapaz de inicializar.
+ O QuickTime foi inicializado com sucesso.
+ Aguardando o handshake com a região...
+ Conectando à região...
+ Baixando roupas...
+
+
+ Esta região pode estar passando por problemas. Por favor, verifique sua conexão com a internet.
+
+
+ Pessoa
+ (sem nome)
+ Proprietário:
+ Público
+ (Grupo)
+ Script
+ Física
+ Toque
+ [CURRENCY]
+ Dar Inventário
+ Imaterial
+ Temporário
+ (Clique com o botão direito para acessar o menu)
+ Cópia Permitida
+ À venda: [CURRENCY][AMOUNT]
+ À venda: [MESSAGE]
+ Construído por Grupo
+ Não é Permitido Construir
+ Construído por Grupo
+ Não é Seguro
+ Não é Permitido Voar
+ Scripts de Grupo
+ Não são Permitidos Scripts
+ Terreno:
+ Apenas um item único pode ser arrastado para este local
+
+
+ Buscando...
+
+ Notas de Distribuição
+
+
+ Carregando...
+
+
+
+
+ (ninguém)
+
+
+ (aguardando)
+
+
+ (hippos)
+
+
+ (nenhum)
+
+
+ Nenhum erro
+ Item pedido falhou
+ Item pedido: arquivo inexistente
+ Item pedido: item não encontrado na base de dados.
+ Fim do arquivo
+ Não é possível abrir arquivo
+ Arquivo não encontrado
+ Tempo de transferência de arquivo expirado
+ Circuito caiu
+ Visualizador e servidor não concordam no preço
+ Status desconhecido
+
+
+ (Editando Aparência)
+ Distante
+ Ocupado
+ Mudo
+
+
+ Temeroso
+ Bravo
+ Distante
+ Virar para trás
+ Rir segurando a barriga
+ Sorriso largo
+ Mandar beijo
+ Entediado
+ Saudar curvando
+ Aplaudir
+ Saudação formal
+ Chorar
+ Dança 1
+ Dança 2
+ Dança 3
+ Dança 4
+ Dança 5
+ Dança 6
+ Dança 7
+ Dança 8
+ Desdém
+ Beber
+ Envergonhado
+ Negar com o dedo.
+ Vibrar provocando
+ Levitar Yoga
+ Careta
+ Impaciente
+ Pular de Alegria
+ Beije meu Bumbum
+ Beijar
+ Rir
+ Exibir músculos
+ Não (descontente)
+ Não
+ Nya-nya-nya
+ Soco Um-Dois
+ Abrir a boca
+ Paz
+ Apontar para o outro
+ Apontar para si
+ Socar Esquerda
+ Socar Direita
+ RPS contar
+ RPS papel
+ RPS pedra
+ RPS tesoura
+ Repulsa
+ Chute giratório
+ Triste
+ Saúde
+ Gritar
+ Encolher ombros
+ Sorrir
+ Fumar à toa
+ Inalar Fumaça
+ Expelir Fumaça
+ Surpresa
+ Golpe de Espada
+ Enraivecer
+ Mostrar a língua
+ Onda
+ Sussurrar
+ Assobiar
+ Piscar
+ Piscar (Hollywood)
+ Preocupar-se
+ Sim (Feliz)
+ Sim
+
+
+ Carregando...
+ Desconectado
+
+
+ sussurra:
+ grita:
+
+
+ PG
+ Mature
+ Adult
+ Desconectado
+ Desconhecido
+
+
+ (desconhecido)
+
+
+ Última modificação: (nunca)
+ Última modificação:
+
+
+ Todos os Arquivos
+ Sons
+ Animações
+ Imagens
+ Salvar
+ Carregar
+ Imagens Targa
+ Imagens Bitmap
+ Arquivo de filme AVI
+ Arquivo de Animação XAF
+ Arquivo XML
+ Arquivo RAW
+ Imagens Compactadas
+ Carregar Arquivos
+ Escolher Diretório
+
+
diff --git a/indra/newview/skins/default/xui/pt/teleport_strings.xml b/indra/newview/skins/default/xui/pt/teleport_strings.xml
new file mode 100644
index 000000000..6eecc45bc
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/teleport_strings.xml
@@ -0,0 +1,75 @@
+
+
+
+
+ Problema encontrado ao processar seu pedido de Teletransporte. Você pode tentar reiniciar antes de tentar teletransportar-se. Se você continuar a receber esta mensagem, por favor verifique a FAQ do Suporte Técnico em:
+www.secondlife.com/support
+
+
+ Problema encontrado ao processar a passagem de regiões. Você pode tentar reiniciar antes de tentar atravessar regiões novamente. Se você continuar a receber esta mensagem, por favor verifique a FAQ do Suporte Técnico em:
+www.secondlife.com/support
+
+
+ Desculpe, teletransportes estão atualmente bloqueados. Tente novamente dentro de alguns instantes. Se você continuar com problemas de teletransporte, por favor tente deslogar e relogar para resolver o problema.
+
+
+ Desculpe, mas o sistema não conseguiu localizar a landmark de destino.
+
+
+ Desculpe, não foi possível para o sistema executar o teletransporte. Tente novamente dentro de alguns instantes.
+
+
+ Desculpe, você não tem acesso ao destino deste teletransporte.
+
+
+ Seu anexos ainda não chegaram. Tente esperar por alguns momentos ou deslogar e logar antes de tentar teleransportar-se novamente.
+
+
+ Afluxo nesta região é atualmente tão alto que seu pedido de teletransporte não será possível em tempo oportuno. Por favor, tente novamente em alguns minutos ou vá a uma área menos ocupada.
+
+
+ Desculpe, mas o sistema não conseguiu concluir o seu pedido de teletransporte em tempo hábil. Por favor, tente novamente em alguns minutos.
+
+
+ Desculpe, mas o sistema não pôde concluir a sua travessia de região em tempo hábil. Por favor, tente novamente em alguns minutos.
+
+
+ Não foi possível encontrar o destino do teletransporte. O destino pode estar temporariamente indisponível ou não existir mais. Por favor, tente novamente em poucos minutos.
+
+
+ O sistema de inventário está indisponível no momento.
+
+
+
+
+ Enviando para o destino.
+
+
+ Redirecionando para uma localidade diferente.
+
+
+ Transferindo para o destino.
+
+
+ Enviando solicitação de localização da casa.
+
+
+ Enviando solicitação de localização de landmark.
+
+
+ Completando teletransporte.
+
+
+ Identificando destino.
+
+
+ Contactando nova região.
+
+
+ Chegando...
+
+
+ Solicitando teletransporte...
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/ui_strings.xml b/indra/newview/skins/default/xui/pt/ui_strings.xml
new file mode 100644
index 000000000..c35d67fd8
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/ui_strings.xml
@@ -0,0 +1,28 @@
+
+
+
+
+ Ctrl-
+
+
+ Cmd-
+
+
+ Opt-
+
+
+ Shift-
+
+
+ Ctrl-
+
+
+ Alt-
+
+
+ Shift-
+
+
diff --git a/indra/newview/skins/default/xui/pt/xui_version.xml b/indra/newview/skins/default/xui/pt/xui_version.xml
new file mode 100644
index 000000000..0e777751d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/xui_version.xml
@@ -0,0 +1,4 @@
+
+
+ 1.0
+