Merge Firestorm LGPL

Ansariel 2018-12-14 01:17:39 +01:00
commit 3df143dd41
169 changed files with 3716 additions and 1692 deletions

View File

@ -581,3 +581,4 @@ ac3b1332ad4f55b7182a8cbcc1254535a0069f75 5.1.7-release
23ea0fe36fadf009a60c080392ce80e4bf8af8d9 5.1.8-release
52422540bfe54b71155aa455360bee6e3ef1fd96 5.1.9-release
821edfcd14919c0e95c590866171c61fb57e8623 6.0.0-release
21b7604680ef6b6ea67f8bebaaa588d6e263bdc1 6.0.1-release

View File

@ -1988,9 +1988,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>814bec3fa5045a18dce2bc4ce78b585d</string>
<string>1b87073540bf081136e60777d99f09f2</string>
<key>url</key>
<string>file:///opt/firestorm/kdu-7.A.4-darwin-180792321.tar.bz2</string>
<string>file:///opt/firestorm/kdu-7.A.5-darwin-182950050.tar.bz2</string>
</map>
<key>name</key>
<string>darwin64</string>
@ -2820,9 +2820,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>bb8bed08fd5973a040c509ef8b545ec8</string>
<string>2c17cfd900c88914e06947fe0f1fdae4</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/490/1046/ogg_vorbis-1.2.2-1.3.2.500397-darwin64-500397.tar.bz2</string>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/25395/199641/ogg_vorbis-1.3.3-1.3.6.520171-darwin64-520171.tar.bz2</string>
</map>
<key>name</key>
<string>darwin64</string>
@ -2856,9 +2856,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>f7edf86dcf2d9be7bee98c91256fa569</string>
<string>1818627d4d1f05b49709717e240bdcf4</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/512/1108/ogg_vorbis-1.2.2-1.3.2.500397-windows-500397.tar.bz2</string>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/25396/199634/ogg_vorbis-1.3.3-1.3.6.520171-windows-520171.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@ -2868,16 +2868,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>497ec6ac26c2e136ee65acbed86cb2ef</string>
<string>d124788c798684c890c1803fca541a10</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/511/1105/ogg_vorbis-1.2.2-1.3.2.500397-windows64-500397.tar.bz2</string>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/25397/199631/ogg_vorbis-1.3.3-1.3.6.520171-windows64-520171.tar.bz2</string>
</map>
<key>name</key>
<string>windows64</string>
</map>
</map>
<key>version</key>
<string>1.2.2-1.3.2.500397</string>
<string>1.3.3-1.3.6.520171</string>
</map>
<key>open-libndofdev</key>
<map>

View File

@ -344,6 +344,8 @@ Celierra Darling
Chantal Harvey
Charles Courtois
Charlie Sazaland
Chaser Zaks
BUG-225599
Cherry Cheevers
ChickyBabes Zuzu
Christopher Organiser
@ -369,6 +371,7 @@ Cinder Roxley
STORM-2053
STORM-2098
STORM-2113
STORM-2116
STORM-2124
STORM-2127
STORM-2136

View File

@ -1,3 +1 @@

View File

@ -2180,3 +2180,19 @@ LLAvatarAppearance::LLMaskedMorph::LLMaskedMorph(LLVisualParam *morph_target, BO
target->addPendingMorphMask();
}
}
// <FS:Ansariel> Get attachment point name from ID
//static
std::string LLAvatarAppearance::getAttachmentPointName(S32 attachmentPointId)
{
for (auto attachmentPoint : sAvatarXmlInfo->mAttachmentInfoList)
{
if (attachmentPoint->mAttachmentID == attachmentPointId)
{
return attachmentPoint->mName;
}
}
return std::string();
}
// </FS:Ansariel>

View File

@ -228,6 +228,10 @@ protected:
static LLAvatarSkeletonInfo* sAvatarSkeletonInfo;
static LLAvatarXmlInfo* sAvatarXmlInfo;
// <FS:Ansariel> Get attachment point name from ID
public:
static std::string getAttachmentPointName(S32 attachmentPointId);
// </FS:Ansariel>
/** Skeleton
** **

View File

@ -181,7 +181,11 @@ BOOL LLAvatarJoint::updateLOD(F32 pixel_area, BOOL activate)
for (child_list_t::iterator iter = mChildren.begin();
iter != mChildren.end(); ++iter)
{
LLAvatarJoint* joint = dynamic_cast<LLAvatarJoint*>(*iter);
//<FS:Beq> Make this s static cast. The dynamic cast must be working or it would have been crashing on the nullptr in the next line.
// LLAvatarJoint* joint = dynamic_cast<LLAvatarJoint*>(*iter);
LLAvatarJoint* joint = static_cast<LLAvatarJoint*>(*iter);
//</FS:Beq>
F32 jointLOD = joint->getLOD();
if (found_lod || jointLOD == DEFAULT_AVATAR_JOINT_LOD)

View File

@ -390,15 +390,22 @@ namespace
{
llifstream file(filename().c_str());
if (file.is_open())
if (!file.is_open())
{
LLSDSerialize::fromXML(configuration, file);
LL_WARNS() << filename() << " failed to open file; not changing configuration" << LL_ENDL;
return false;
}
if (configuration.isUndefined())
if (LLSDSerialize::fromXML(configuration, file) == LLSDParser::PARSE_FAILURE)
{
LL_WARNS() << filename() << " missing, ill-formed,"
" or simply undefined; not changing configuration"
LL_WARNS() << filename() << " parcing error; not changing configuration" << LL_ENDL;
return false;
}
if (configuration.isUndefined() || !configuration.isMap() || configuration.emptyMap())
{
LL_WARNS() << filename() << " missing, ill-formed, or simply undefined"
" content; not changing configuration"
<< LL_ENDL;
return false;
}
@ -895,19 +902,24 @@ namespace LLError
setEnabledLogTypesMask(config["enabled-log-types-mask"].asInteger());
}
LLSD sets = config["settings"];
LLSD::array_const_iterator a, end;
for (a = sets.beginArray(), end = sets.endArray(); a != end; ++a)
{
const LLSD& entry = *a;
ELevel level = decodeLevel(entry["level"]);
setLevels(s->mFunctionLevelMap, entry["functions"], level);
setLevels(s->mClassLevelMap, entry["classes"], level);
setLevels(s->mFileLevelMap, entry["files"], level);
setLevels(s->mTagLevelMap, entry["tags"], level);
}
if (config.has("settings") && config["settings"].isArray())
{
LLSD sets = config["settings"];
LLSD::array_const_iterator a, end;
for (a = sets.beginArray(), end = sets.endArray(); a != end; ++a)
{
const LLSD& entry = *a;
if (entry.isMap() && !entry.emptyMap())
{
ELevel level = decodeLevel(entry["level"]);
setLevels(s->mFunctionLevelMap, entry["functions"], level);
setLevels(s->mClassLevelMap, entry["classes"], level);
setLevels(s->mFileLevelMap, entry["files"], level);
setLevels(s->mTagLevelMap, entry["tags"], level);
}
}
}
}
}
@ -1068,7 +1080,7 @@ namespace
}
} </FS:LO> */
void writeToRecorders(const LLError::CallSite& site, const std::string& escaped_message, bool show_location = true, bool show_time = true, bool show_tags = true, bool show_level = true, bool show_function = true)
void writeToRecorders(const LLError::CallSite& site, const std::string& escaped_message)
{
LLError::ELevel level = site.mLevel;
LLError::SettingsConfigPtr s = LLError::Settings::getInstance()->getSettingsConfig();
@ -1092,7 +1104,7 @@ namespace
}
message_stream << " ";
if (show_level && r->wantsLevel())
if (r->wantsLevel())
{
message_stream << site.mLevelString;
}
@ -1110,7 +1122,7 @@ namespace
}
message_stream << " ";
if (show_function && r->wantsFunctionName())
if (r->wantsFunctionName())
{
message_stream << site.mFunctionString;
}

View File

@ -43,7 +43,8 @@ template class LLTextBox* LLView::getChild<class LLTextBox>(
LLTextBox::LLTextBox(const LLTextBox::Params& p)
: LLTextBase(p),
mClickedCallback(NULL)
mClickedCallback(NULL),
mShowCursorHand(true)
{}
LLTextBox::~LLTextBox()
@ -107,7 +108,7 @@ BOOL LLTextBox::handleMouseUp(S32 x, S32 y, MASK mask)
BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask)
{
BOOL handled = LLTextBase::handleHover(x, y, mask);
if (!handled && mClickedCallback)
if (!handled && mClickedCallback && mShowCursorHand)
{
// Clickable text boxes change the cursor to a hand
LLUI::getWindow()->setCursor(UI_CURSOR_HAND);

View File

@ -68,6 +68,8 @@ public:
/*virtual*/ LLSD getValue() const;
/*virtual*/ BOOL setTextArg( const std::string& key, const LLStringExplicit& text );
void setShowCursorHand(bool show_cursor) { mShowCursorHand = show_cursor; }
// <COLOSI opensim multi-currency support>
// Set all LLUIStrings to dirty after currency symbol change to force them to be updated.
void updateCurrencySymbols() { mText.updateCurrencySymbols(); LLTextBase::setText(mText.getString()); mLabel.updateCurrencySymbols(); }
@ -78,6 +80,7 @@ protected:
LLUIString mText;
callback_t mClickedCallback;
bool mShowCursorHand;
// <FS:ND> Searchable text for UI filter
protected:
virtual std::string _getSearchText() const

View File

@ -1 +1 @@
6.0.1
6.0.2

View File

@ -286,6 +286,13 @@
is_running_parameters="FSRenderFriendsOnly"
checkbox_control="FSRenderFriendsOnlyPersistsTP"
/>
<command name="derender_animated_objects"
available_in_toybox="false"
icon="derender_animated_objects"
label_ref="Command_DAO_Label"
tooltip_ref="Command_DAO_Tooltip"
execute_function="Tools.DerenderAnimatedObjects"
/>
<command name="view"
available_in_toybox="true"
icon="Command_View_Icon"

View File

@ -3869,6 +3869,28 @@
<key>Value</key>
<integer>3</integer>
</map>
<key>AvatarExtentRefreshPeriodBatch</key>
<map>
<key>Comment</key>
<string>how many frames do we spread over by default when refreshing extents (default is 4)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
<integer>4</integer>
</map>
<key>AvatarExtentRefreshMaxPerBatch</key>
<map>
<key>Comment</key>
<string>how many avatars do we want to handle in total per batch (default is 5)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
<integer>5</integer>
</map>
<key>DebugAvatarAppearanceMessage</key>
<map>
<key>Comment</key>
@ -6526,6 +6548,28 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>FSEnableAggressiveComplexityUpdates</key>
<map>
<key>Comment</key>
<string>Enable active complexity calculations. This may have a significant detrimental performance impact if enabled.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSDisableRiggedMeshMatrixCaching</key>
<map>
<key>Comment</key>
<string>Disable the caching of Rigged mesh matrix pallettes.Non-persistant.</string>
<key>Persist</key>
<integer>0</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FullScreenAspectRatio</key>
<map>
<key>Comment</key>
@ -8950,8 +8994,201 @@
<key>Backup</key>
<integer>0</integer>
</map>
<key>MeshPreviewCanvasColor</key>
<map>
<key>Comment</key>
<string>Canvas colour for the Mesh uploader</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Color4</string>
<key>Value</key>
<array>
<real>0.169</real>
<real>0.169</real>
<real>0.169</real>
<real>1.0</real>
</array>
</map>
<key>MeshPreviewEdgeColor</key>
<map>
<key>Comment</key>
<string>Edge colour for the Mesh uploader preview</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Color4</string>
<key>Value</key>
<array>
<real>0.4</real>
<real>0.4</real>
<real>0.4</real>
<real>1.0</real>
</array>
</map>
<key>MeshPreviewBaseColor</key>
<map>
<key>Comment</key>
<string>Canvas colour for the Mesh uploader</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Color4</string>
<key>Value</key>
<array>
<real>1.0</real>
<real>1.0</real>
<real>1.0</real>
<real>1.0</real>
</array>
</map>
<key>MeshPreviewBrightnessColor</key>
<map>
<key>Comment</key>
<string>Brightness modifier</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Color3</string>
<key>Value</key>
<array>
<real>0.9</real>
<real>0.9</real>
<real>0.9</real>
</array>
</map>
<key>MeshPreviewEdgeWidth</key>
<map>
<key>Comment</key>
<string>line thickness used when display edges is selected in mesh preview</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>1.0</real>
</map>
<key>MeshPreviewPhysicsEdgeColor</key>
<map>
<key>Comment</key>
<string>Edge colour for the Mesh uploader physics preview</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Color4</string>
<key>Value</key>
<array>
<real>0.0</real>
<real>0.25</real>
<real>0.5</real>
<real>0.25</real>
</array>
</map>
<key>MeshPreviewPhysicsFillColor</key>
<map>
<key>Comment</key>
<string>Fill colour for the Mesh uploader physics preview</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Color4</string>
<key>Value</key>
<array>
<real>0.0</real>
<real>0.5</real>
<real>1.0</real>
<real>0.5</real>
</array>
</map>
<key>MeshPreviewPhysicsEdgeWidth</key>
<map>
<key>Comment</key>
<string>line thickness used when display physics is selected in mesh preview</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>1.0</real>
</map>
<key>MeshPreviewDegenerateEdgeColor</key>
<map>
<key>Comment</key>
<string>Edge colour for the Mesh uploader Degenerate preview</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Color4</string>
<key>Value</key>
<array>
<real>1.0</real>
<real>0.0</real>
<real>0.0</real>
<real>1.0</real>
</array>
</map>
<key>MeshPreviewDegenerateFillColor</key>
<map>
<key>Comment</key>
<string>Fill colour for the Mesh uploader Degenerate preview</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Color4</string>
<key>Value</key>
<array>
<real>1.0</real>
<real>0.0</real>
<real>0.0</real>
<real>0.5</real>
</array>
</map>
<key>MeshPreviewDegenerateEdgeWidth</key>
<map>
<key>Comment</key>
<string>line thickness used when display Degenerate is selected in mesh preview</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>3.0</real>
</map>
<key>MeshPreviewDegeneratePointSize</key>
<map>
<key>Comment</key>
<string>Large point size used to highlight degenerate triangle vertices in Mesh preview</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>8.0</real>
</map>
<key>MeshPreviewZoomLimit</key>
<map>
<key>Comment</key>
<string>Maximum Zoom level in preview</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>10.0</real>
</map>
<key>FSMeshPreviewUVGuideFile</key>
<map>
<key>Comment</key>
<string>filename of the texture to use as a UV guide for mesh preview.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>salt_and_pepper.jpg</string>
</map>
<key>MigrateCacheDirectory</key>
<map>
<map>
<key>Comment</key>
<string>Check for old version of disk cache to migrate to current location</string>
<key>Persist</key>
@ -10284,7 +10521,17 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>13</integer>
</map>
<key>PreviewRenderSize</key>
<map>
<key>Comment</key>
<string>Resolution of the image rendered for the mesh upload preview</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
<integer>1024</integer>
</map>
<key>PreviewAmbientColor</key>
<map>
<key>Comment</key>
@ -10301,8 +10548,6 @@ Change of this parameter will affect the layout of buttons in notification toast
<real>1.0</real>
</array>
</map>
<key>PreviewDiffuse0</key>
<map>
<key>Comment</key>
@ -11520,7 +11765,7 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>RenderAnimateRes</key>
<map>
<key>Comment</key>
<string>Animate rezing prims.</string>
<string>(Obsolete) Does nothing Animate rezing prims.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@ -24870,6 +25115,17 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>0</integer>
</map>
<key>FSScriptInfoExtended</key>
<map>
<key>Comment</key>
<string>If enabled, extend basic script info feature with various details useful for builders.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
</map>
</llsd>

View File

@ -91,8 +91,9 @@ void main()
// Collect normal lights (need to be divided by two, as we later multiply by 2)
col.rgb += light_diffuse[1].rgb * calcDirectionalLight(norm, light_position[1].xyz);
col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], light_attenuation[2].x, light_attenuation[2].z);
col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], light_attenuation[3].x, light_attenuation[3].z);
// col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], light_attenuation[2].x, light_attenuation[2].z);
col.rgb += light_diffuse[2].rgb * calcDirectionalLight(norm, light_position[2].xyz);
// col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], light_attenuation[3].x, light_attenuation[3].z);
col /= 2.0;
vertex_color = col*color;
}

View File

@ -1684,6 +1684,7 @@ LLUUID cmdline_partial_name2key(std::string partial_name)
{
std::string av_name;
LLStringUtil::toLower(partial_name);
LLStringUtil::replaceString(partial_name, ".", " ");
FSRadar* radar = FSRadar::getInstance();
if (radar)

View File

@ -7,7 +7,7 @@
//
// Bridge platform
string BRIDGE_VERSION = "2.23"; // This should match fslslbridge.cpp
string BRIDGE_VERSION = "2.24"; // This should match fslslbridge.cpp
string gLatestURL;
integer gViewerIsFirestorm;
integer gTryHandshakeOnce = TRUE;
@ -491,15 +491,40 @@ default
else if (cmd == "getScriptInfo")
{
list details = llGetObjectDetails(llList2Key(commandList, 1), ([OBJECT_NAME, OBJECT_RUNNING_SCRIPT_COUNT, OBJECT_TOTAL_SCRIPT_COUNT, OBJECT_SCRIPT_MEMORY, OBJECT_SCRIPT_TIME, OBJECT_CHARACTER_TIME]));
if (llGetListLength(details) == 6)
key targetkey = llList2Key(commandList, 1);
integer extended = llList2Integer(commandList, 2);
integer elements;
list details;
vector currentPosition;
if (extended)
{
llOwnerSay("<bridgeGetScriptInfo>" + llList2CSV([llStringToBase64(llStringTrim(llList2String(details, 0), STRING_TRIM)), llList2String(details, 1), llList2String(details, 2), llList2Integer(details, 3) / 1024, llList2Float(details, 4) * 1000.0, llList2Float(details, 5) * 1000.0]) + "</bridgeGetScriptInfo>");
currentPosition = llGetPos();
details = llGetObjectDetails(targetkey, ([OBJECT_NAME, OBJECT_RUNNING_SCRIPT_COUNT, OBJECT_TOTAL_SCRIPT_COUNT, OBJECT_SCRIPT_MEMORY, OBJECT_SCRIPT_TIME, OBJECT_CHARACTER_TIME, OBJECT_DESC, OBJECT_ROOT, OBJECT_PRIM_COUNT, OBJECT_PRIM_EQUIVALENCE, OBJECT_TOTAL_INVENTORY_COUNT, OBJECT_VELOCITY, OBJECT_POS, OBJECT_ROT, OBJECT_OMEGA, OBJECT_CREATOR, OBJECT_OWNER, OBJECT_LAST_OWNER_ID, OBJECT_REZZER_KEY, OBJECT_GROUP, OBJECT_CREATION_TIME, OBJECT_PATHFINDING_TYPE, OBJECT_ATTACHED_POINT, OBJECT_TEMP_ATTACHED]));
details = details + [currentPosition, targetkey];
elements = 26;
}
else
{
details = llGetObjectDetails(targetkey, ([OBJECT_NAME, OBJECT_RUNNING_SCRIPT_COUNT, OBJECT_TOTAL_SCRIPT_COUNT, OBJECT_SCRIPT_MEMORY, OBJECT_SCRIPT_TIME, OBJECT_CHARACTER_TIME]));
elements = 6;
}
if (llGetListLength(details) == elements)
{
list returnedList = [llStringToBase64(llStringTrim(llList2String(details, 0), STRING_TRIM)), llList2String(details, 1), llList2String(details, 2), llList2Integer(details, 3) / 1024, llList2Float(details, 4) * 1000.0, llList2Float(details, 5) * 1000.0];
if (extended)
{
returnedList = returnedList + [llStringToBase64(llStringTrim(llList2String(details, 6), STRING_TRIM)), llList2String(details, 7), llList2Integer(details, 8), llList2Integer(details, 9), llList2Integer(details, 10), llStringToBase64(llList2String(details, 11)), llStringToBase64(llList2String(details, 12) + " (" + (string)llVecDist(llList2Vector(details, 12), currentPosition) + " m)"), llStringToBase64(llList2String(details, 13) + " (" + (string)(RAD_TO_DEG * llRot2Euler(llList2Rot(details, 13))) + ")"), llStringToBase64(llList2String(details, 14)), llList2Key(details, 15), llList2Key(details, 16), llList2Key(details, 17), llList2Key(details, 18), llList2Key(details, 19), llList2String(details, 20), llList2Integer(details, 21), llList2Integer(details, 22), llList2Integer(details, 23), llStringToBase64(llList2String(details, 24)), llList2Key(details, 25)];
}
llOwnerSay("<bridgeGetScriptInfo>" + llList2CSV(returnedList) + "</bridgeGetScriptInfo>");
}
else
{
llOwnerSay("<bridgeError error=scriptinfonotfound>");
}
}
else if (cmd == "UseLSLFlightAssist")

View File

@ -1650,7 +1650,7 @@ bool FSPanelAreaSearchList::onContextMenuItemClick(const LLSD& userdata)
}
break;
case 's': // script
FSLSLBridge::instance().viewerToLSL("getScriptInfo|" + (*item_it)->getUUID().asString());
FSLSLBridge::instance().viewerToLSL("getScriptInfo|" + (*item_it)->getUUID().asString() + "|" + (gSavedSettings.getBOOL("FSScriptInfoExtended") ? "1" : "0"));
break;
case 'l': // blacklist
{

View File

@ -38,7 +38,6 @@
/* boost: will not compile unless equivalent is undef'd, beware. */
#include "fix_macros.h"
#include <boost/filesystem.hpp>
#include <boost/foreach.hpp>
#include "llappviewer.h"
#include "llagent.h"
@ -64,15 +63,6 @@
const std::string LEGACY_CLIENT_LIST_URL = "http://phoenixviewer.com/app/client_tags/client_list_v2.xml";
const LLUUID MAGIC_ID("3c115e51-04f4-523c-9fa6-98aff1034730");
const F32 HTTP_TIMEOUT = 30.f;
#if LL_DARWIN
size_t strnlen(const char *s, size_t n)
{
const char *p = (const char *)memchr(s, 0, n);
return(p ? p-s : n);
}
#endif
FSData::FSData() :
mLegacySearch(true),
@ -306,7 +296,7 @@ void downloadError(LLSD const &aData, std::string const &aURL)
void FSData::startDownload()
{
mFSdataFilename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "fsdata.xml");
mFSdataDefaultsFilename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "fsdata_defaults.xml");
mFSdataDefaultsFilename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, llformat("fsdata_defaults.%s.xml", LLVersionInfo::getShortVersion().c_str()));
mClientTagsFilename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "client_list_v2.xml");
{
@ -341,8 +331,8 @@ void FSData::startDownload()
}
#if OPENSIM
std::string filenames[] = {"scriptlibrary_ossl.xml", "scriptlibrary_aa.xml"};
BOOST_FOREACH(std::string script_name, filenames)
std::string filenames[] = { "scriptlibrary_ossl.xml", "scriptlibrary_aa.xml" };
for (auto const& script_name : filenames)
{
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, script_name);
time_t last_modified = 0;

View File

@ -33,17 +33,19 @@
#include "apr_base64.h" // For getScriptInfo()
#include "llagent.h"
#include "llattachmentsmgr.h"
#include "llappearancemgr.h"
#include "llattachmentsmgr.h"
#include "llavatarappearance.h"
#include "llinventoryfunctions.h"
#include "llmaniptranslate.h"
#include "llpreviewscript.h"
#include "llselectmgr.h"
#include "llsdutil.h"
#include "llslurl.h"
#include "lltrans.h"
#include "llviewerassetupload.h"
#include "llviewercontrol.h"
#include "llviewerregion.h"
#include "llviewerassetupload.h"
#include "llsdutil.h"
#if OPENSIM
#include "llviewernetwork.h"
@ -52,7 +54,7 @@
static const std::string FS_BRIDGE_FOLDER = "#LSL Bridge";
static const std::string FS_BRIDGE_CONTAINER_FOLDER = "Landscaping";
static const U32 FS_BRIDGE_MAJOR_VERSION = 2;
static const U32 FS_BRIDGE_MINOR_VERSION = 23;
static const U32 FS_BRIDGE_MINOR_VERSION = 24;
static const U32 FS_MAX_MINOR_VERSION = 99;
static const std::string UPLOAD_SCRIPT_CURRENT = "EBEDD1D2-A320-43f5-88CF-DD47BBCA5DFB.lsltxt";
static const std::string FS_STATE_ATTRIBUTE = "state=";
@ -79,18 +81,13 @@ private:
std::string sName;
};
void uploadDone(LLUUID itemId, LLUUID taskId, LLUUID newAssetId, LLSD response)
{
FSLSLBridge::getInstance()->setTimerResult(FSLSLBridge::SCRIPT_UPLOAD_FINISHED);
}
//
//
// Bridge functionality
//
FSLSLBridge::FSLSLBridge():
mBridgeCreating(false),
mpBridge(NULL),
mpBridge(nullptr),
mIsFirstCallDone(false),
mAllowDetach(false),
mFinishCreation(false),
@ -352,7 +349,7 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID,
while (std::getline(strStreamGetScriptInfo, scriptInfoToken, ','))
{
LLStringUtil::trim(scriptInfoToken);
if (scriptInfoArrayCount == 0)
if (scriptInfoArrayCount == 0 || scriptInfoArrayCount == 6 || scriptInfoArrayCount == 11 || scriptInfoArrayCount == 12 || scriptInfoArrayCount == 13 || scriptInfoArrayCount == 14 || scriptInfoArrayCount == 24)
{
// First value, OBJECT_NAME, should be passed from Bridge as encoded in base64
// Encoding eliminates problems with special characters and commas for CSV
@ -368,14 +365,14 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID,
}
else
{
LL_WARNS("FSLSLBridge") << "ScriptInfo - OBJECT_NAME cannot be decoded" << LL_ENDL;
LL_WARNS("FSLSLBridge") << "ScriptInfo - value with index " << scriptInfoArrayCount << " cannot be decoded" << LL_ENDL;
}
}
scriptInfoArray.append(scriptInfoToken);
++scriptInfoArrayCount;
}
if (scriptInfoArrayCount == 6)
if (scriptInfoArrayCount == 6 || scriptInfoArrayCount == 26)
{
LLStringUtil::format_map_t args;
args["OBJECT_NAME"] = scriptInfoArray[0].asString();
@ -394,6 +391,31 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID,
args["PATHFINDING_TEXT"] = "";
}
report_to_nearby_chat(format_string(LLTrans::getString("fsbridge_script_info"), args));
if (scriptInfoArrayCount == 26)
{
LLStringUtil::format_map_t args3;
args3["OBJECT_DESC"] = scriptInfoArray[6].asString();
args3["OBJECT_ROOT"] = scriptInfoArray[7].asString();
args3["OBJECT_PRIM_COUNT"] = scriptInfoArray[8].asString();
args3["OBJECT_PRIM_EQUIVALENCE"] = scriptInfoArray[9].asString();
args3["OBJECT_TOTAL_INVENTORY_COUNT"] = scriptInfoArray[10].asString();
args3["OBJECT_VELOCITY"] = scriptInfoArray[11].asString();
args3["OBJECT_POS"] = scriptInfoArray[12].asString();
args3["OBJECT_ROT"] = scriptInfoArray[13].asString();
args3["OBJECT_OMEGA"] = scriptInfoArray[14].asString();
args3["OBJECT_CREATOR"] = LLSLURL("agent", scriptInfoArray[15].asUUID(), "inspect").getSLURLString();
args3["OBJECT_OWNER"] = scriptInfoArray[16].asUUID().isNull() ? LLTrans::getString("GroupOwned") : LLSLURL("agent", scriptInfoArray[16].asUUID(), "inspect").getSLURLString();
args3["OBJECT_LAST_OWNER_ID"] = scriptInfoArray[17].asUUID().notNull() ? LLSLURL("agent", scriptInfoArray[17].asUUID(), "inspect").getSLURLString() : "---";
args3["OBJECT_REZZER_KEY"] = scriptInfoArray[18].asString();
args3["OBJECT_GROUP"] = scriptInfoArray[19].asUUID().notNull() ? LLSLURL("group", scriptInfoArray[19].asUUID(), "inspect").getSLURLString() : "---";
args3["OBJECT_CREATION_TIME"] = scriptInfoArray[20].asString();
args3["OBJECT_PATHFINDING_TYPE"] = scriptInfoArray[21].asString();
args3["OBJECT_ATTACHED_POINT"] = (scriptInfoArray[22].asInteger() < 1 || scriptInfoArray[22].asInteger() > 255) ? "---" : LLTrans::getString(LLAvatarAppearance::getAttachmentPointName(scriptInfoArray[22].asInteger()));
args3["OBJECT_TEMP_ATTACHED"] = scriptInfoArray[23].asInteger() == 1 ? LLTrans::getString("Yes") : LLTrans::getString("No");
args3["AVATAR_POS"] = scriptInfoArray[24].asString();
args3["INSPECTING_KEY"] = scriptInfoArray[25].asString();
report_to_nearby_chat(format_string(LLTrans::getString("fsbridge_script_info_ext"), args3));
}
}
else
{
@ -472,7 +494,7 @@ bool FSLSLBridge::canUseBridge()
return (isBridgeValid() && sUseLSLBridge && !mCurrentURL.empty());
}
bool FSLSLBridge::viewerToLSL(const std::string& message, tCallback aCallback )
bool FSLSLBridge::viewerToLSL(const std::string& message, Callback_t aCallback)
{
LL_DEBUGS("FSLSLBridge") << message << LL_ENDL;
@ -481,11 +503,13 @@ bool FSLSLBridge::viewerToLSL(const std::string& message, tCallback aCallback )
return false;
}
tCallback pCallback = aCallback;
if( !pCallback )
Callback_t pCallback = aCallback;
if (!pCallback)
{
pCallback = FSLSLBridgeRequest_Success;
}
LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(mCurrentURL, LLSD(message), pCallback, FSLSLBridgeRequest_Failure );
LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(mCurrentURL, LLSD(message), pCallback, FSLSLBridgeRequest_Failure);
return true;
}
@ -629,12 +653,12 @@ void FSLSLBridge::finishCleanUpPreCreation()
for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); ++it)
{
LL_INFOS("FSLSLBridge") << "Bridge folder cleanup: Deleting " << (*it)->getName() << " (" << (*it)->getUUID() << ")" << LL_ENDL;
remove_inventory_item((*it)->getUUID(), NULL, true); // Don't wait for callback from server to update inventory model
remove_inventory_item((*it)->getUUID(), nullptr, true); // Don't wait for callback from server to update inventory model
}
gInventory.notifyObservers();
// clear the stored bridge ID - we are starting over.
mpBridge = NULL; //the object itself will get cleaned up when new one is created.
mpBridge = nullptr; //the object itself will get cleaned up when new one is created.
mCurrentURL.clear();
setBridgeCreating(true);
@ -767,7 +791,7 @@ void FSLSLBridge::createNewBridge()
const LLUUID libID = gInventory.getLibraryRootFolderID();
LLViewerInventoryItem* libRock = findInvObject(LIB_ROCK_NAME, libID);
//shouldn't happen but just in case
if (libRock != NULL)
if (libRock)
{
LL_INFOS("FSLSLBridge") << "Cloning a new Bridge container from the Library..." << LL_ENDL;
@ -868,7 +892,7 @@ void FSLSLBridge::processAttach(LLViewerObject* object, const LLViewerJointAttac
// AH: We need to request objects inventory first before we can
// do anything with it!
LL_INFOS("FSLSLBridge") << "Requesting bridge inventory contents..." << LL_ENDL;
object->registerInventoryListener(this, NULL);
object->registerInventoryListener(this, nullptr);
object->requestInventory();
}
else
@ -1009,14 +1033,14 @@ void FSLSLBridge::processDetach(LLViewerObject* object, const LLViewerJointAttac
}
mAllowDetach = false;
if (gAgentAvatarp.isNull() || (!gAgentAvatarp->isSelf()) || (attachment == NULL) || (attachment->getName() != FS_BRIDGE_ATTACHMENT_POINT_NAME))
if (gAgentAvatarp.isNull() || (!gAgentAvatarp->isSelf()) || (!attachment) || (attachment->getName() != FS_BRIDGE_ATTACHMENT_POINT_NAME))
{
LL_WARNS("FSLSLBridge") << "Couldn't detach bridge, object has wrong name or avatar wasn't self." << LL_ENDL;
return;
}
LLViewerInventoryItem* fsObject = gInventory.getItem(object->getAttachmentItemID());
if (fsObject == NULL) //just in case
if (!fsObject) //just in case
{
LL_WARNS("FSLSLBridge") << "Couldn't detach bridge. inventory object was NULL." << LL_ENDL;
return;
@ -1040,7 +1064,7 @@ void FSLSLBridge::processDetach(LLViewerObject* object, const LLViewerJointAttac
}
if (mpBridge && mpBridge->getUUID() == fsObject->getUUID())
{
mpBridge = NULL;
mpBridge = nullptr;
report_to_nearby_chat(LLTrans::getString("fsbridge_detached"));
mIsFirstCallDone = false;
if (mBridgeCreating)
@ -1118,8 +1142,8 @@ void FSLSLBridge::create_script_inner()
const LLUUID catID = findFSCategory();
LLPointer<LLInventoryCallback> cb = new FSLSLBridgeScriptCallback();
create_inventory_item(gAgent.getID(),
gAgent.getSessionID(),
create_inventory_item(gAgentID,
gAgentSessionID,
catID,
LLTransactionID::tnull,
mCurrentFullName,
@ -1129,19 +1153,11 @@ void FSLSLBridge::create_script_inner()
NOT_WEARABLE,
PERM_ALL,
cb);
}
//
// Bridge rez callback
//
FSLSLBridgeRezCallback::FSLSLBridgeRezCallback()
{
}
FSLSLBridgeRezCallback::~FSLSLBridgeRezCallback()
{
}
void FSLSLBridgeRezCallback::fire(const LLUUID& inv_item)
{
// this is the first attach - librock got copied and worn on hand - but the ID is now real.
@ -1191,29 +1207,6 @@ void FSLSLBridgeRezCallback::fire(const LLUUID& inv_item)
//
// Bridge script creation callback
//
FSLSLBridgeScriptCallback::FSLSLBridgeScriptCallback()
{
}
FSLSLBridgeScriptCallback::~FSLSLBridgeScriptCallback()
{
}
class FSMonoScriptAssetUpload: public LLScriptAssetUpload
{
public:
FSMonoScriptAssetUpload(LLUUID itemId, std::string buffer, invnUploadFinish_f finish)
: LLScriptAssetUpload( itemId, buffer, finish)
{
}
virtual LLSD generatePostBody()
{
LLSD body = LLScriptAssetUpload::generatePostBody();
body["target"] = "mono";
return body;
}
};
void FSLSLBridgeScriptCallback::fire(const LLUUID& inv_item)
{
if (inv_item.isNull() || !FSLSLBridge::instance().getBridgeCreating())
@ -1238,7 +1231,7 @@ void FSLSLBridgeScriptCallback::fire(const LLUUID& inv_item)
gInventory.updateItem(item);
gInventory.notifyObservers();
LLViewerObject* obj(NULL);
LLViewerObject* obj(nullptr);
if (FSLSLBridge::instance().isBridgeValid())
{
@ -1259,11 +1252,14 @@ void FSLSLBridgeScriptCallback::fire(const LLUUID& inv_item)
const std::string fName = prepUploadFile(buffer);
if (!fName.empty())
{
LLResourceUploadInfo::ptr_t uploadInfo(new FSMonoScriptAssetUpload( inv_item, buffer, uploadDone ));
LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo);
LL_INFOS("FSLSLBridge") << "updating script ID for bridge" << LL_ENDL;
LL_INFOS("FSLSLBridge") << "Updating script ID for bridge and enqueing upload. Inventory ID: " << inv_item.asString() << LL_ENDL;
FSLSLBridge::instance().mScriptItemID = inv_item;
LLResourceUploadInfo::ptr_t uploadInfo(boost::make_shared<LLScriptAssetUpload>(obj->getID(), inv_item, LLScriptAssetUpload::MONO, true, LLUUID::null, buffer,
[](LLUUID, LLUUID, LLUUID, LLSD) {
FSLSLBridge::getInstance()->setTimerResult(FSLSLBridge::SCRIPT_UPLOAD_FINISHED);
}));
LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo);
}
else
{
@ -1288,14 +1284,14 @@ void FSLSLBridgeScriptCallback::fire(const LLUUID& inv_item)
FSLSLBridge::instance().cleanUpBridge();
//also clean up script remains
remove_inventory_item(item->getUUID(), NULL, true);
remove_inventory_item(item->getUUID(), nullptr, true);
gInventory.notifyObservers();
LL_WARNS("FSLSLBridge") << "Can't update bridge script. Purging bridge." << LL_ENDL;
return;
}
}
std::string FSLSLBridgeScriptCallback::prepUploadFile( std::string &aBuffer )
std::string FSLSLBridgeScriptCallback::prepUploadFile(std::string &aBuffer)
{
const std::string fName = gDirUtilp->getExpandedFilename(LL_PATH_FS_RESOURCES, UPLOAD_SCRIPT_CURRENT);
const std::string fNew = gDirUtilp->getExpandedFilename(LL_PATH_CACHE,UPLOAD_SCRIPT_CURRENT);
@ -1304,7 +1300,7 @@ std::string FSLSLBridgeScriptCallback::prepUploadFile( std::string &aBuffer )
if (!fpIn)
{
LL_WARNS("FSLSLBridge") << "Cannot open script resource file" << LL_ENDL;
return "";
return std::string();
}
fseek(fpIn, 0, SEEK_END);
long lSize = ftell(fpIn);
@ -1322,13 +1318,19 @@ std::string FSLSLBridgeScriptCallback::prepUploadFile( std::string &aBuffer )
aBuffer = ( (char const*)&vctData[0] );
const std::string bridgekey = "BRIDGEKEY";
aBuffer.replace(aBuffer.find(bridgekey), bridgekey.length(), FSLSLBridge::getInstance()->findFSCategory().asString());
size_t pos = aBuffer.find(bridgekey);
if (pos == std::string::npos)
{
LL_WARNS("FSLSLBridge") << "Invalid bridge script" << LL_ENDL;
return std::string();
}
aBuffer.replace(pos, bridgekey.length(), FSLSLBridge::getInstance()->findFSCategory().asString());
LLFILE *fpOut = LLFile::fopen(fNew, "wt");
if (!fpOut)
{
LL_WARNS("FSLSLBridge") << "Cannot open script upload file" << LL_ENDL;
return "";
return std::string();
}
if (aBuffer.size() != fwrite(aBuffer.c_str(), 1, aBuffer.size(), fpOut))
@ -1371,7 +1373,9 @@ void FSLSLBridge::checkBridgeScriptName()
cleanUpBridge();
return;
}
obj->saveScript(gInventory.getItem(mScriptItemID), TRUE, false);
LL_INFOS("FSLSLBridge") << "Saving script " << mScriptItemID.asString() << " in object" << LL_ENDL;
obj->saveScript(gInventory.getItem(mScriptItemID), TRUE, true);
new FSLSLBridgeCleanupTimer();
}
@ -1383,11 +1387,11 @@ void FSLSLBridge::cleanUpBridge()
if (isBridgeValid())
{
remove_inventory_item(mpBridge->getUUID(), NULL, true);
remove_inventory_item(mpBridge->getUUID(), nullptr, true);
}
gInventory.notifyObservers();
mpBridge = NULL;
mpBridge = nullptr;
mAllowedDetachables.clear();
setBridgeCreating(false);
}
@ -1543,7 +1547,7 @@ LLViewerInventoryItem* FSLSLBridge::findInvObject(const std::string& obj_name, c
LLViewerInventoryItem* item = gInventory.getItem(itemID);
return item;
}
return NULL;
return nullptr;
}
void FSLSLBridge::cleanUpBridgeFolder(const std::string& nameToCleanUp)
@ -1571,7 +1575,7 @@ void FSLSLBridge::cleanUpBridgeFolder(const std::string& nameToCleanUp)
if (!itemp->getIsLinkType() && (itemp->getUUID() != mpBridge->getUUID()))
{
LL_INFOS("FSLSLBridge") << "Bridge folder cleanup: Deleting " << itemp->getName() << " (" << itemp->getUUID() << ")" << LL_ENDL;
remove_inventory_item(itemp->getUUID(), NULL, true);
remove_inventory_item(itemp->getUUID(), nullptr, true);
}
}
@ -1616,13 +1620,13 @@ void FSLSLBridge::detachOtherBridges()
LLViewerInventoryItem* fsBridge = findInvObject(mCurrentFullName, catID);
//detach everything except current valid bridge - if any
gInventory.collectDescendents(catID,cats,items,FALSE);
gInventory.collectDescendents(catID, cats, items, FALSE);
for (LLViewerInventoryItem::item_array_t::iterator it = items.begin(); it != items.end(); ++it)
{
const LLViewerInventoryItem* itemp = *it;
if (get_is_item_worn(itemp->getUUID()) &&
((fsBridge == NULL) || (itemp->getUUID() != fsBridge->getUUID())))
((!fsBridge) || (itemp->getUUID() != fsBridge->getUUID())))
{
LLVOAvatarSelf::detachAttachmentIntoInventory(itemp->getUUID());
}

View File

@ -63,10 +63,10 @@ public:
NO_TIMER
};
typedef boost::function<void(const LLSD &)> tCallback;
typedef std::function<void(const LLSD &)> Callback_t;
bool lslToViewer(const std::string& message, const LLUUID& fromID, const LLUUID& ownerID);
bool viewerToLSL(const std::string& message, tCallback = NULL );
bool viewerToLSL(const std::string& message, Callback_t = nullptr);
bool updateBoolSettingValue(const std::string& msgVal);
bool updateBoolSettingValue(const std::string& msgVal, bool contentVal);
@ -83,7 +83,7 @@ public:
void setBridge(LLViewerInventoryItem* item) { mpBridge = item; };
LLViewerInventoryItem* getBridge() { return mpBridge; };
bool canUseBridge();
bool isBridgeValid() const { return NULL != mpBridge; }
bool isBridgeValid() const { return nullptr != mpBridge; }
void checkBridgeScriptName();
std::string currentFullName() { return mCurrentFullName; }
@ -147,22 +147,22 @@ protected:
class FSLSLBridgeRezCallback : public LLInventoryCallback
{
public:
FSLSLBridgeRezCallback();
FSLSLBridgeRezCallback() {}
void fire(const LLUUID& inv_item);
protected:
~FSLSLBridgeRezCallback();
~FSLSLBridgeRezCallback() {}
};
class FSLSLBridgeScriptCallback : public LLInventoryCallback
{
public:
FSLSLBridgeScriptCallback();
FSLSLBridgeScriptCallback() {}
void fire(const LLUUID& inv_item);
std::string prepUploadFile( std::string& );
std::string prepUploadFile(std::string& aBuffer);
protected:
~FSLSLBridgeScriptCallback();
~FSLSLBridgeScriptCallback() {}
};
class FSLSLBridgeInventoryObserver : public LLInventoryFetchDescendentsObserver
@ -174,7 +174,6 @@ public:
protected:
~FSLSLBridgeInventoryObserver() {}
};
class FSLSLBridgeInventoryPreCreationCleanupObserver : public LLInventoryFetchDescendentsObserver
@ -185,14 +184,12 @@ public:
protected:
~FSLSLBridgeInventoryPreCreationCleanupObserver() {}
};
class FSLSLBridgeCleanupTimer : public LLEventTimer
{
public:
FSLSLBridgeCleanupTimer() : LLEventTimer(1.f) {}
FSLSLBridgeCleanupTimer() : LLEventTimer(12.f) {}
BOOL tick();
};

View File

@ -36,28 +36,28 @@
//If we get back a normal response, handle it here
void FSLSLBridgeRequest_Success( LLSD const &aData )
void FSLSLBridgeRequest_Success(LLSD const &aData)
{
LL_DEBUGS() << ll_pretty_print_sd( aData ) << LL_ENDL;
LL_DEBUGS("FSLSLBridge") << ll_pretty_print_sd(aData) << LL_ENDL;
//do not use - infinite loop, only here for testing.
//FSLSLBridge::instance().viewerToLSL("Response_to_response|" + strContent);
}
//If we get back an error (not found, etc...), handle it here
void FSLSLBridgeRequest_Failure( LLSD const &aData )
void FSLSLBridgeRequest_Failure(LLSD const &aData)
{
LL_WARNS() << "FSLSLBridgeRequest::error(" << ll_pretty_print_sd( aData ) << ")" << LL_ENDL;
LL_WARNS("FSLSLBridge") << "FSLSLBridgeRequest::error(" << ll_pretty_print_sd(aData) << ")" << LL_ENDL;
}
void FSLSLBridgeRequestRadarPos_Success( LLSD const &aData )
void FSLSLBridgeRequestRadarPos_Success(LLSD const &aData)
{
FSRadar* radar = FSRadar::getInstance();
LL_DEBUGS() << ll_pretty_print_sd( aData ) << LL_ENDL;
if (radar && aData.has( LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT ) )
LL_DEBUGS("FSLSLBridge") << ll_pretty_print_sd(aData) << LL_ENDL;
if (radar && aData.has(LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT))
{
std::string strContent = aData[ LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT ].asString();
//LL_INFOS() << "Got info: " << strContent << LL_ENDL;
// AO: parse content into pairs of [agent UUID,agent zHeight] , update our peoplepanel radar for each one
std::string strContent = aData[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT].asString();
//LL_INFOS("FSLSLBridge") << "Got info: " << strContent << LL_ENDL;
// AO: parse content into pairs of [agent UUID,agent zHeight] , update our radar for each one
LLUUID targetAv;
F32 targetZ;
@ -74,9 +74,8 @@ void FSLSLBridgeRequestRadarPos_Success( LLSD const &aData )
if (entry)
{
entry->setZOffset(targetZ);
//LL_INFOS() << targetAv << " ::: " << targetZ << LL_ENDL;
//LL_INFOS("FSLSLBridge") << targetAv << " ::: " << targetZ << LL_ENDL;
}
}
}
}

View File

@ -28,8 +28,8 @@
#ifndef FS_LSLBRIDGEREQUEST_H
#define FS_LSLBRIDGEREQUEST_H
void FSLSLBridgeRequest_Success( LLSD const &aData );
void FSLSLBridgeRequest_Failure( LLSD const &aData );
void FSLSLBridgeRequestRadarPos_Success( LLSD const &aData );
void FSLSLBridgeRequest_Success(LLSD const &aData);
void FSLSLBridgeRequest_Failure(LLSD const &aData);
void FSLSLBridgeRequestRadarPos_Success(LLSD const &aData);
#endif // FS_LSLBRIDGEREQUEST_H

View File

@ -162,15 +162,6 @@ void FSPanelProfileTab::setApplyProgress(bool started)
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
bool enable_god()
{
return gAgent.isGodlike();
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
FSPanelProfileSecondLife::FSPanelProfileSecondLife()
: FSPanelProfileTab()
, mStatusText(NULL)
@ -217,16 +208,17 @@ BOOL FSPanelProfileSecondLife::postBuild()
mStatusText->setVisible(FALSE);
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
registrar.add("Profile.Call", boost::bind(&FSPanelProfileSecondLife::onCallButtonClick, this));
registrar.add("Profile.Share", boost::bind(&FSPanelProfileSecondLife::share, this));
registrar.add("Profile.Kick", boost::bind(&FSPanelProfileSecondLife::kick, this));
registrar.add("Profile.Freeze", boost::bind(&FSPanelProfileSecondLife::freeze, this));
registrar.add("Profile.Unfreeze", boost::bind(&FSPanelProfileSecondLife::unfreeze, this));
registrar.add("Profile.CSR", boost::bind(&FSPanelProfileSecondLife::csr, this));
registrar.add("Profile.CopyNameToClipboard", boost::bind(&FSPanelProfileSecondLife::onCopyToClipboard, this));
registrar.add("Profile.CopyURI", boost::bind(&FSPanelProfileSecondLife::onCopyURI, this));
registrar.add("Profile.CopyKey", boost::bind(&FSPanelProfileSecondLife::onCopyKey, this));
registrar.add("Profile.Report", boost::bind(&FSPanelProfileSecondLife::onReport, this));
registrar.add("Profile.Call", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::startCall(getAvatarId()); });
registrar.add("Profile.AddToContactSet", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::addToContactSet(getAvatarId()); });
registrar.add("Profile.Share", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::share(getAvatarId()); });
registrar.add("Profile.Kick", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::kick(getAvatarId()); });
registrar.add("Profile.Freeze", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::freeze(getAvatarId()); });
registrar.add("Profile.Unfreeze", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::unfreeze(getAvatarId()); });
registrar.add("Profile.CSR", [this](LLUICtrl*, const LLSD&) { LLAvatarName av_name; LLAvatarNameCache::get(getAvatarId(), &av_name); std::string name = av_name.getUserName(); LLAvatarActions::csr(getAvatarId(), name); });
registrar.add("Profile.CopyNameToClipboard", [this](LLUICtrl*, const LLSD&) { onCopyToClipboard(); });
registrar.add("Profile.CopyURI", [this](LLUICtrl*, const LLSD&) { onCopyURI(); });
registrar.add("Profile.CopyKey", [this](LLUICtrl*, const LLSD&) { LLClipboard::instance().copyToClipboard(utf8str_to_wstring(getAvatarId().asString()), 0, getAvatarId().asString().size() ); });
registrar.add("Profile.Report", [this](LLUICtrl*, const LLSD&) { LLAvatarActions::report(getAvatarId()); });
mAddFriendButton->setCommitCallback(boost::bind(&FSPanelProfileSecondLife::onAddFriendButtonClick, this));
mIMButton->setCommitCallback(boost::bind(&FSPanelProfileSecondLife::onIMButtonClick, this));
@ -239,8 +231,8 @@ BOOL FSPanelProfileSecondLife::postBuild()
mDisplayNameButton->setCommitCallback(boost::bind(&FSPanelProfileSecondLife::onClickSetName, this));
LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable;
enable.add("Profile.EnableCall", boost::bind(&FSPanelProfileSecondLife::enableCall, this));
enable.add("Profile.EnableGod", boost::bind(&enable_god));
enable.add("Profile.EnableCall", [this](LLUICtrl*, const LLSD&) { return mVoiceStatus; });
enable.add("Profile.EnableGod", [](LLUICtrl*, const LLSD&) { return gAgent.isGodlike(); });
mGroupList->setDoubleClickCallback(boost::bind(&FSPanelProfileSecondLife::openGroupProfile, this));
mGroupList->setReturnCallback(boost::bind(&FSPanelProfileSecondLife::openGroupProfile, this));
@ -582,11 +574,6 @@ void FSPanelProfileSecondLife::pay()
LLAvatarActions::pay(getAvatarId());
}
void FSPanelProfileSecondLife::share()
{
LLAvatarActions::share(getAvatarId());
}
void FSPanelProfileSecondLife::toggleBlock()
{
LLAvatarActions::toggleBlock(getAvatarId());
@ -594,34 +581,6 @@ void FSPanelProfileSecondLife::toggleBlock()
updateButtons();
}
bool FSPanelProfileSecondLife::enableCall()
{
return mVoiceStatus;
}
void FSPanelProfileSecondLife::kick()
{
LLAvatarActions::kick(getAvatarId());
}
void FSPanelProfileSecondLife::freeze()
{
LLAvatarActions::freeze(getAvatarId());
}
void FSPanelProfileSecondLife::unfreeze()
{
LLAvatarActions::unfreeze(getAvatarId());
}
void FSPanelProfileSecondLife::csr()
{
LLAvatarName av_name;
LLAvatarNameCache::get(getAvatarId(), &av_name);
std::string name = av_name.getUserName();
LLAvatarActions::csr(getAvatarId(), name);
}
void FSPanelProfileSecondLife::onAddFriendButtonClick()
{
LLAvatarActions::requestFriendshipDialog(getAvatarId());
@ -637,11 +596,6 @@ void FSPanelProfileSecondLife::onTeleportButtonClick()
LLAvatarActions::offerTeleport(getAvatarId());
}
void FSPanelProfileSecondLife::onCallButtonClick()
{
LLAvatarActions::startCall(getAvatarId());
}
void FSPanelProfileSecondLife::onCopyToClipboard()
{
std::string name = getChild<LLUICtrl>("complete_name")->getValue().asString();
@ -654,21 +608,11 @@ void FSPanelProfileSecondLife::onCopyURI()
LLClipboard::instance().copyToClipboard(utf8str_to_wstring(name), 0, name.size() );
}
void FSPanelProfileSecondLife::onCopyKey()
{
LLClipboard::instance().copyToClipboard(utf8str_to_wstring(getAvatarId().asString()), 0, getAvatarId().asString().size() );
}
void FSPanelProfileSecondLife::onGroupInvite()
{
LLAvatarActions::inviteToGroup(getAvatarId());
}
void FSPanelProfileSecondLife::onReport()
{
LLAvatarActions::report(getAvatarId());
}
// virtual, called by LLAvatarTracker
void FSPanelProfileSecondLife::changed(U32 mask)
{

View File

@ -194,11 +194,6 @@ protected:
*/
void pay();
/**
* opens inventory and IM for sharing items
*/
void share();
/**
* Add/remove resident to/from your block list.
*/
@ -206,23 +201,13 @@ protected:
void updateButtons();
void kick();
void freeze();
void unfreeze();
void csr();
bool enableCall();
void onAddFriendButtonClick();
void onIMButtonClick();
void onCallButtonClick();
void onTeleportButtonClick();
void onCopyToClipboard();
void onCopyURI();
void onCopyKey();
void onGroupInvite();
void onReport();
bool isGrantedToSeeOnlineStatus();

View File

@ -2836,7 +2836,7 @@ bool LLAppViewer::initConfiguration()
//<FS:Techwolf Lupindo>
// load defaults overide here. Can not use settings_files.xml as path is different then above loading of defaults.
std::string fsdata_defaults = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "fsdata_defaults.xml");
std::string fsdata_defaults = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, llformat("fsdata_defaults.%s.xml", LLVersionInfo::getShortVersion().c_str()));
std::string fsdata_global = "Global";
LLControlGroup* settings_group = LLControlGroup::getInstance(fsdata_global);
if(settings_group && settings_group->loadFromFile(fsdata_defaults, set_defaults))

View File

@ -1776,7 +1776,7 @@ void LLAvatarActions::zoomIn(const LLUUID& idAgent)
void LLAvatarActions::getScriptInfo(const LLUUID& idAgent)
{
LL_INFOS() << "Reporting Script Info for avatar: " << idAgent.asString() << LL_ENDL;
FSLSLBridge::instance().viewerToLSL("getScriptInfo|" + idAgent.asString());
FSLSLBridge::instance().viewerToLSL("getScriptInfo|" + idAgent.asString() + "|" + (gSavedSettings.getBOOL("FSScriptInfoExtended") ? "1" : "0"));
}

View File

@ -53,6 +53,7 @@
#include "llvocache.h"
#include "llcontrolavatar.h"
#include "lldrawpoolavatar.h"
#include "llskinningutil.h"
const F32 MIN_INTERPOLATE_DISTANCE_SQUARED = 0.001f * 0.001f;
const F32 MAX_INTERPOLATE_DISTANCE_SQUARED = 10.f * 10.f;
@ -94,7 +95,10 @@ void LLDrawable::incrementVisible()
LLDrawable::LLDrawable(LLViewerObject *vobj, bool new_entry)
: LLViewerOctreeEntryData(LLViewerOctreeEntry::LLDRAWABLE),
LLTrace::MemTrackable<LLDrawable, 16>("LLDrawable"),
mVObjp(vobj)
mVObjp(vobj),
mSkinningMatCache(nullptr),
mLastSkinningMatCacheFrame(0),
mCacheSize(0)
{
init(new_entry);
}
@ -140,7 +144,7 @@ void LLDrawable::init(bool new_entry)
llassert(!vo_entry->getGroup()); //not in the object cache octree.
}
llassert(!vo_entry || vo_entry->getEntry() == mEntry);
initVisible(sCurVisible - 2);//invisible for the current frame and the last frame.
@ -164,7 +168,6 @@ void LLDrawable::unload()
}
facep->clearState(LLFace::RIGGED);
}
pVVol->markForUpdate(TRUE);
}
@ -199,8 +202,14 @@ void LLDrawable::destroy()
std::for_each(mFaces.begin(), mFaces.end(), DeletePointer());
mFaces.clear();
// <FS:Beq> close up potential memory leak
if (mSkinningMatCache)
{
ll_aligned_free_16(mSkinningMatCache);
}
// </FS:Beq>
/*if (!(sNumZombieDrawables % 10))
{
LL_INFOS() << "- Zombie drawables: " << sNumZombieDrawables << LL_ENDL;

View File

@ -66,7 +66,9 @@ class LLDrawable
public:
LLDrawable(const LLDrawable& rhs)
: LLTrace::MemTrackable<LLDrawable, 16>("LLDrawable"),
LLViewerOctreeEntryData(rhs)
LLViewerOctreeEntryData(rhs),
mLastSkinningMatCacheFrame(0),
mCacheSize(0)
{
*this = rhs;
}
@ -79,6 +81,12 @@ public:
static void initClass();
//<FS:Beq> per frame matrix cache
LL_ALIGN_16(LLMatrix4a* mSkinningMatCache);
U32 mLastSkinningMatCacheFrame;
U32 mCacheSize;
//</FS:Beq>
LLDrawable(LLViewerObject *vobj, bool new_entry = false);
void markDead(); // Mark this drawable as dead

View File

@ -1954,9 +1954,13 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(
LLVector4a* norm = has_normal ? (LLVector4a*) normal.get() : NULL;
//build matrix palette
LLMatrix4a mat[LL_MAX_JOINTS_PER_MESH_OBJECT];
U32 count = LLSkinningUtil::getMeshJointCount(skin);
LLSkinningUtil::initSkinningMatrixPalette((LLMatrix4*)mat, count, skin, avatar);
//<FS:Beq> per frame cache of skinning matrices
//LLMatrix4a mat[LL_MAX_JOINTS_PER_MESH_OBJECT];
//U32 count = LLSkinningUtil::getMeshJointCount(skin);
//LLSkinningUtil::initSkinningMatrixPalette(mat, count, skin, avatar);
U32 count = LLSkinningUtil::getMeshJointCount(skin);
auto mat = getCacheSkinningMats(drawable, skin, count, avatar);
//</FS:Beq>
LLSkinningUtil::checkSkinWeights(weights, buffer->getNumVerts(), skin);
LLMatrix4a bind_shape_matrix;
@ -1992,6 +1996,40 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(
}
}
//<FS:Beq> cache per frame Skinning mats
LLMatrix4a* LLDrawPoolAvatar::getCacheSkinningMats(LLDrawable* drawable, const LLMeshSkinInfo* skin,
U32 count, LLVOAvatar* avatar)
{
if (drawable->mCacheSize < count || !drawable->mSkinningMatCache)
{
// delete[](drawable->mSkinningMatCache);
if (drawable->mSkinningMatCache)
{
ll_aligned_free_16(drawable->mSkinningMatCache);
}
drawable->mCacheSize = count;
// drawable->mSkinningMatCache = new LLMatrix4a[count];
drawable->mSkinningMatCache = (LLMatrix4a*)ll_aligned_malloc_16(sizeof(LLMatrix4a)*count);
}
static LLCachedControl<bool> disableMatCache(gSavedSettings, "FSDisableRiggedMeshMatrixCaching"); // <FS:Beq> FIRE-23331 - disable matrix caching during appearance update due to weird side effects
if (disableMatCache ||
(avatar->isSelf() && avatar->isEditingAppearance()) ||
(drawable->mSkinningMatCache && LLFrameTimer::getFrameCount() != drawable->mLastSkinningMatCacheFrame))
{
// LL_DEBUGS("Skinning") << "Call InitSkinningMatrixPalette for drawable @" << (U64)drawable << LL_ENDL;
//<FS:Beq> add caching of matrix pallette as high up the stack as we can
drawable->mLastSkinningMatCacheFrame = LLFrameTimer::getFrameCount();
LLSkinningUtil::initSkinningMatrixPalette(drawable->mSkinningMatCache, count, skin, avatar);
}
else
{
// LL_DEBUGS("Skinning") << "Avoiding InitSkinningMatrixPalette for drawable @" << (U64)drawable << LL_ENDL;
}
return drawable->mSkinningMatCache;
}
//</FS:Beq>
void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
{
if (!avatar->shouldRenderRigged())
@ -2134,11 +2172,16 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
{
if (sShaderLevel > 0)
{
// upload matrix palette to shader
LLMatrix4a mat[LL_MAX_JOINTS_PER_MESH_OBJECT];
U32 count = LLSkinningUtil::getMeshJointCount(skin);
LLSkinningUtil::initSkinningMatrixPalette((LLMatrix4*)mat, count, skin, avatar);
// upload matrix palette to shader
//<FS:Beq> per frame cache of skinning matrices
//LLMatrix4a mat[LL_MAX_JOINTS_PER_MESH_OBJECT];
//U32 count = LLSkinningUtil::getMeshJointCount(skin);
//LLSkinningUtil::initSkinningMatrixPalette(mat, count, skin, avatar);
U32 count = LLSkinningUtil::getMeshJointCount(skin);
auto mat = getCacheSkinningMats(drawable, skin, count, avatar);
//</FS:Beq>
stop_glerror();
F32 mp[LL_MAX_JOINTS_PER_MESH_OBJECT*12];

View File

@ -28,6 +28,7 @@
#define LL_LLDRAWPOOLAVATAR_H
#include "lldrawpool.h"
#include "fsareasearch.h"
class LLVOAvatar;
class LLGLSLShader;
@ -57,6 +58,7 @@ public:
~LLDrawPoolAvatar();
/*virtual*/ BOOL isDead();
typedef enum
{
RIGGED_MATERIAL=0,
@ -181,6 +183,11 @@ typedef enum
static LLMatrix4& getModelView();
//<FS:Beq> per frame cache
static LLMatrix4a* getCacheSkinningMats(LLDrawable* drawable, const LLMeshSkinInfo* skin, U32 count,
LLVOAvatar* avatar);
//</FS:Beq>
/*virtual*/ LLDrawPool *instancePool();
/*virtual*/ S32 getNumPasses();

View File

@ -125,11 +125,17 @@ BOOL LLViewerDynamicTexture::render()
//-----------------------------------------------------------------------------
void LLViewerDynamicTexture::preRender(BOOL clear_depth)
{
//only images up to 512x512 are supported
llassert(mFullHeight <= 512);
llassert(mFullWidth <= 512);
// <FS:Beq> changes to support higher resolution rendering in the preview
////only images up to 512x512 are supported
//llassert(mFullHeight <= 512);
//llassert(mFullWidth <= 512);
gPipeline.allocatePhysicsBuffer();
llassert(mFullWidth <= static_cast<S32>(gPipeline.mPhysicsDisplay.getWidth()));
llassert(mFullWidth <= static_cast<S32>(gPipeline.mPhysicsDisplay.getHeight()));
if (gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete() && !gGLManager.mIsATI)
// if (gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete() && !gGLManager.mIsATI)
if (gGLManager.mHasFramebufferObject && gPipeline.mPhysicsDisplay.isComplete() && !gGLManager.mIsATI)
// </FS:Beq>
{ //using offscreen render target, just use the bottom left corner
mOrigin.set(0, 0);
}
@ -215,14 +221,15 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
{
return TRUE;
}
bool use_fbo = gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete() && !gGLManager.mIsATI;
// <FS:Beq> changes to support higher resolution rendering in the preview
// bool use_fbo = gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete() && !gGLManager.mIsATI;
bool use_fbo = gGLManager.mHasFramebufferObject && gPipeline.mPhysicsDisplay.isComplete() && !gGLManager.mIsATI;
if (use_fbo)
{
gPipeline.mWaterDis.bindTarget();
// gPipeline.mWaterDis.bindTarget();
gPipeline.mPhysicsDisplay.bindTarget();
}
// </FS:Beq>
LLGLSLShader::bindNoShader();
LLVertexBuffer::unbind();
@ -258,7 +265,10 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
if (use_fbo)
{
gPipeline.mWaterDis.flush();
// <FS:Beq> changes to support higher resolution rendering in the preview
// gPipeline.mWaterDis.flush();
gPipeline.mPhysicsDisplay.flush();
// </FS:Beq>
}
return ret;

View File

@ -39,6 +39,7 @@
#include "llvertexbuffer.h"
#include "llviewertexture.h"
#include "lldrawable.h"
#include "lljoint.h"
class LLFacePool;
class LLVolume;
@ -267,7 +268,6 @@ public:
private:
LLPointer<LLVertexBuffer> mVertexBuffer;
U32 mState;
LLFacePool* mDrawPoolp;
U32 mPoolType;

File diff suppressed because it is too large Load Diff

View File

@ -152,6 +152,7 @@ protected:
static void onAutoFillCommit(LLUICtrl*,void*);
void onLODParamCommit(S32 lod, bool enforce_tri_limit);
void draw3dPreview();
static void onExplodeCommit(LLUICtrl*, void*);
@ -310,6 +311,7 @@ public:
static bool sIgnoreLoadedCallback;
std::vector<S32> mLodsQuery;
std::vector<S32> mLodsWithParsingError;
bool mHasDegenerate;
protected:
@ -337,6 +339,7 @@ private:
LLFloater* mFMP;
LLPointer<LLViewerFetchedTexture> mUVGuideTexture; // <FS:Beq> Add UV Guide texture overlay
BOOL mNeedsUpdate;
bool mDirty;
bool mGenLOD;

View File

@ -884,16 +884,6 @@ void LLFloaterPreference::onDoNotDisturbResponseChanged()
LLFloaterPreference::~LLFloaterPreference()
{
/* Dead code - "windowsize combo" is not in any of the skin files, except for the
* dutch translation, which hints at a removed control. Apart from that, I don't
* even understand what this code does O.o -Zi
// clean up user data
LLComboBox* ctrl_window_size = getChild<LLComboBox>("windowsize combo");
for (S32 i = 0; i < ctrl_window_size->getItemCount(); i++)
{
ctrl_window_size->setCurrentByIndex(i);
}*/
LLConversationLog::instance().removeObserver(this);
delete mSearchData;
@ -3673,6 +3663,12 @@ BOOL LLPanelPreference::postBuild()
{
getChild<LLCheckBoxCtrl>("voice_call_friends_only_check")->setCommitCallback(boost::bind(&showFriendsOnlyWarning, _1, _2));
}
// <FS:Ansariel> Disable running multiple viewers warning
//if (hasChild("allow_multiple_viewer_check", TRUE))
//{
// getChild<LLCheckBoxCtrl>("allow_multiple_viewer_check")->setCommitCallback(boost::bind(&showMultipleViewersWarning, _1, _2));
//}
// </FS:Ansariel>
if (hasChild("favorites_on_login_check", TRUE))
{
getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setCommitCallback(boost::bind(&handleFavoritesOnLoginChanged, _1, _2));
@ -3682,6 +3678,11 @@ BOOL LLPanelPreference::postBuild()
// </FS:Ansariel> [FS Login Panel]
getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setValue(show_favorites_at_login);
}
if (hasChild("mute_chb_label", TRUE))
{
getChild<LLTextBox>("mute_chb_label")->setShowCursorHand(false);
getChild<LLTextBox>("mute_chb_label")->setClickedCallback(boost::bind(&toggleMuteWhenMinimized));
}
//////////////////////PanelAdvanced ///////////////////
if (hasChild("modifier_combo", TRUE))
@ -3806,6 +3807,14 @@ void LLPanelPreference::saveSettings()
}
}
void LLPanelPreference::showMultipleViewersWarning(LLUICtrl* checkbox, const LLSD& value)
{
if (checkbox && checkbox->getValue())
{
LLNotificationsUtil::add("AllowMultipleViewers");
}
}
void LLPanelPreference::showFriendsOnlyWarning(LLUICtrl* checkbox, const LLSD& value)
{
if (checkbox && checkbox->getValue())
@ -3832,6 +3841,12 @@ void LLPanelPreference::handleFavoritesOnLoginChanged(LLUICtrl* checkbox, const
}
}
void LLPanelPreference::toggleMuteWhenMinimized()
{
std::string mute("MuteWhenMinimized");
gSavedSettings.setBOOL(mute, !gSavedSettings.getBOOL(mute));
}
// <FS:Ansariel> Only enable Growl checkboxes if Growl is usable
void LLPanelPreference::onEnableGrowlChanged()
{

View File

@ -331,12 +331,16 @@ protected:
private:
//for "Only friends and groups can call or IM me"
static void showFriendsOnlyWarning(LLUICtrl*, const LLSD&);
//for "Allow Multiple Viewers"
static void showMultipleViewersWarning(LLUICtrl*, const LLSD&);
static void showCustomPortWarning(LLUICtrl*, const LLSD&); // -WoLf
static void showCustomPortWarning(LLUICtrl*, const LLSD&); // <FS:WoLf>
//for "Show my Favorite Landmarks at Login"
static void handleFavoritesOnLoginChanged(LLUICtrl* checkbox, const LLSD& value);
static void toggleMuteWhenMinimized();
// <FS:Ansariel> Only enable Growl checkboxes if Growl is usable
void onEnableGrowlChanged();
// <FS:Ansariel> Flash chat toolbar button notification

View File

@ -167,9 +167,12 @@ void LLFloaterScriptDebug::addScriptLine(const LLChat& chat)
{
if(objectp->isHUDAttachment())
{
((LLViewerObject*)gAgentAvatarp)->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_UI));
// <FS:Ansariel> Mark script error icons
((LLViewerObject*)gAgentAvatarp)->getIcon()->setScriptError();
if (isAgentAvatarValid())
{
((LLViewerObject*)gAgentAvatarp)->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_UI));
// <FS:Ansariel> Mark script error icons
((LLViewerObject*)gAgentAvatarp)->getIcon()->setScriptError();
}
}
else
{

View File

@ -353,8 +353,8 @@ BOOL LLFloaterWorldMap::postBuild()
landmark_combo->setTextChangedCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) );
mListLandmarkCombo = dynamic_cast<LLCtrlListInterface *>(landmark_combo);
mCurZoomVal = log(LLWorldMapView::sMapScale)/log(2.f);
getChild<LLUICtrl>("zoom slider")->setValue(LLWorldMapView::sMapScale);
mCurZoomVal = log(LLWorldMapView::sMapScale/256.f)/log(2.f);
getChild<LLUICtrl>("zoom slider")->setValue(mCurZoomVal);
setDefaultBtn(NULL);

View File

@ -2740,6 +2740,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
// <FS:Ansariel> FIRE-1392: Allow dragging all asset types into Landmarks folder
//const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false);
const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
const LLUUID &lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND, false);
const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
@ -2747,6 +2748,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
const BOOL move_is_into_current_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_CURRENT_OUTFIT);
// <FS:Ansariel> FIRE-1392: Allow dragging all asset types into Landmarks folder
//const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id);
const BOOL move_is_into_lost_and_found = model->isObjectDescendentOf(mUUID, lost_and_found_id);
//--------------------------------------------------------------------------------
// Determine if folder can be moved.
@ -2796,6 +2798,10 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
{
is_movable = FALSE;
}
if (is_movable && move_is_into_lost_and_found)
{
is_movable = FALSE;
}
if (is_movable && (mUUID == model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE)))
{
is_movable = FALSE;
@ -3954,12 +3960,14 @@ void LLFolderBridge::perform_pasteFromClipboard()
const LLUUID &marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);
const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
const LLUUID &lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND, false);
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
const BOOL move_is_into_marketplacelistings = model->isObjectDescendentOf(mUUID, marketplacelistings_id);
const BOOL move_is_into_favorites = (mUUID == favorites_id);
const BOOL move_is_into_lost_and_found = model->isObjectDescendentOf(mUUID, lost_and_found_id);
std::vector<LLUUID> objects;
LLClipboard::instance().pasteFromClipboard(objects);
@ -4035,6 +4043,13 @@ void LLFolderBridge::perform_pasteFromClipboard()
LLInventoryObject *obj = model->getObject(item_id);
if (obj)
{
if (move_is_into_lost_and_found)
{
if (LLAssetType::AT_CATEGORY == obj->getType())
{
return;
}
}
if (move_is_into_current_outfit || move_is_into_outfit)
{
if (item && can_move_to_outfit(item, move_is_into_current_outfit))

View File

@ -1221,12 +1221,16 @@ void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& it
mCompletionObserver->reset();
for (std::deque<LLFolderViewItem*>::const_iterator it = items.begin(); it != items.end(); ++it)
{
LLUUID id = static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem())->getUUID();
LLViewerInventoryItem* inv_item = mInventory->getItem(id);
if (inv_item && !inv_item->isFinished())
LLFolderViewModelItemInventory* view_model = static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem());
if (view_model)
{
mCompletionObserver->watchItem(id);
LLUUID id = view_model->getUUID();
LLViewerInventoryItem* inv_item = mInventory->getItem(id);
if (inv_item && !inv_item->isFinished())
{
mCompletionObserver->watchItem(id);
}
}
}

View File

@ -841,11 +841,12 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
bool identical_color = false;
if(mColorSwatch)
{
{
LLSelectedTE::getColor(color, identical_color);
LLColor4 prev_color = mColorSwatch->get();
mColorSwatch->setOriginal(color);
mColorSwatch->set(color, TRUE);
mColorSwatch->set(color, force_set_values || (prev_color != color) || !editable);
mColorSwatch->setValid(editable);
mColorSwatch->setEnabled( editable );
@ -1463,8 +1464,12 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
//
if (!material->getSpecularID().isNull())
{
getChild<LLColorSwatchCtrl>("shinycolorswatch")->setOriginal(material->getSpecularLightColor());
getChild<LLColorSwatchCtrl>("shinycolorswatch")->set(material->getSpecularLightColor(),TRUE);
LLColorSwatchCtrl* shiny_swatch = getChild<LLColorSwatchCtrl>("shinycolorswatch");
LLColor4 new_color = material->getSpecularLightColor();
LLColor4 old_color = shiny_swatch->get();
shiny_swatch->setOriginal(new_color);
shiny_swatch->set(new_color, force_set_values || old_color != new_color || !editable);
}
// Bumpy (normal)

View File

@ -2358,8 +2358,8 @@ class FSScriptAssetUpload: public LLScriptAssetUpload
{
bool m_bMono;
public:
FSScriptAssetUpload( LLUUID itemId, std::string buffer, invnUploadFinish_f finish, bool a_bMono )
: LLScriptAssetUpload( itemId, buffer, finish )
FSScriptAssetUpload(LLUUID itemId, std::string buffer, invnUploadFinish_f finish, bool a_bMono)
: LLScriptAssetUpload(itemId, buffer, finish)
{
m_bMono = a_bMono;
}
@ -2367,7 +2367,7 @@ public:
virtual LLSD generatePostBody()
{
LLSD body = LLScriptAssetUpload::generatePostBody();
if( m_bMono )
if (m_bMono)
body["target"] = "mono";
else
body["target"] = "lsl2";
@ -2407,36 +2407,45 @@ void LLPreviewLSL::saveIfNeeded(bool sync /*= true*/)
// NaCL - LSL Preprocessor
mScriptEd->enableSave(FALSE); // Clear the enable save flag (FIRE-10173)
BOOL domono = FSLSLPreprocessor::mono_directive(mScriptEd->getScriptText());
if(domono == FALSE)
bool domono = gSavedSettings.getBOOL("FSSaveInventoryScriptsAsMono");
if (gSavedSettings.getBOOL("_NACL_LSLPreprocessor"))
{
LLSD row;
if(gSavedSettings.getBOOL("_NACL_SaveInventoryScriptsAsMono"))
bool mono_directive = FSLSLPreprocessor::mono_directive(mScriptEd->getScriptText(), domono);
if (mono_directive != domono)
{
row["columns"][0]["value"] = "Detected compile-as-LSL2 directive, but debug setting SaveInventoryScriptsAsMono overrided it.";
domono = TRUE;
}else row["columns"][0]["value"] = "Detected compile-as-LSL2 directive";
//domono = FALSE;
row["columns"][0]["font"] = "SANSSERIF_SMALL";
mScriptEd->mErrorList->addElement(row);
std::string message;
if (mono_directive)
{
message = LLTrans::getString("fs_preprocessor_mono_directive_override");
}
else
{
message = LLTrans::getString("fs_preprocessor_lsl2_directive_override");
}
domono = mono_directive;
mScriptEd->mErrorList->addCommentText(message);
}
}
// NaCl End
if(inv_item)
{
getWindow()->incBusyCount();
mPendingUploads++;
if (!url.empty())
{
//<FS:KC> Script Preprocessor
//<FS:KC> Script Preprocessor
// std::string buffer(mScriptEd->mEditor->getText());
std::string buffer(mScriptEd->getScriptText());
//</FS:KC> Script Preprocessor
std::string buffer(mScriptEd->getScriptText());
//</FS:KC> Script Preprocessor
LLBufferedAssetUploadInfo::invnUploadFinish_f proc = boost::bind(&LLPreviewLSL::finishedLSLUpload, _1, _4);
// <FS:ND> DoMono needs to be passed/set here.
// LLResourceUploadInfo::ptr_t uploadInfo(new LLScriptAssetUpload(mItemUUID, buffer, proc));
LLResourceUploadInfo::ptr_t uploadInfo(new FSScriptAssetUpload(mItemUUID, buffer, proc, domono ));
LLResourceUploadInfo::ptr_t uploadInfo(new FSScriptAssetUpload(mItemUUID, buffer, proc, domono ));
LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo); // <FS:ND> DoMono needs to be passed/set here.
LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo);
}
}
}

View File

@ -128,49 +128,100 @@ void LLSkinningUtil::scrubInvalidJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin
skin->mInvalidJointsScrubbed = true;
}
//<FS:Beq> Per frame SkinningMatrix Caching
//void LLSkinningUtil::initSkinningMatrixPalette(
// LLMatrix4* mat,
// S32 count,
// const LLMeshSkinInfo* skin,
// LLVOAvatar *avatar)
//{
// initJointNums(const_cast<LLMeshSkinInfo*>(skin), avatar);
// for (U32 j = 0; j < count; ++j)
// {
// LLJoint *joint = avatar->getJoint(skin->mJointNums[j]);
// if (joint)
// {
//#define MAT_USE_SSE
//#ifdef MAT_USE_SSE
// LLMatrix4a bind, world, res;
// bind.loadu(skin->mInvBindMatrix[j]);
// world.loadu(joint->getWorldMatrix());
// matMul(bind, world, res);
// memcpy(mat[j].mMatrix, res.mMatrix, 16 * sizeof(float));
//#else
// mat[j] = skin->mInvBindMatrix[j];
// mat[j] *= joint->getWorldMatrix();
//#endif
// }
// else
// {
// mat[j] = skin->mInvBindMatrix[j];
// // This shouldn't happen - in mesh upload, skinned
// // rendering should be disabled unless all joints are
// // valid. In other cases of skinned rendering, invalid
// // joints should already have been removed during scrubInvalidJoints().
// LL_WARNS_ONCE("Avatar") << avatar->getFullname()
// << " rigged to invalid joint name " << skin->mJointNames[j]
// << " num " << skin->mJointNums[j] << LL_ENDL;
// LL_WARNS_ONCE("Avatar") << avatar->getFullname()
// << " avatar build state: isBuilt() " << avatar->isBuilt()
// << " mInitFlags " << avatar->mInitFlags << LL_ENDL;
//#if 0
// dump_avatar_and_skin_state("initSkinningMatrixPalette joint not found", avatar, skin);
//#endif
// }
// }
//}
#ifndef LL_RELEASE_FOR_DOWNLOAD
static LLTrace::BlockTimerStatHandle FTM_SKINNING_INIT("Init Skinning Mats");
#endif
void LLSkinningUtil::initSkinningMatrixPalette(
LLMatrix4* mat,
LLMatrix4a* mat,
S32 count,
const LLMeshSkinInfo* skin,
LLVOAvatar *avatar)
{
initJointNums(const_cast<LLMeshSkinInfo*>(skin), avatar);
for (U32 j = 0; j < count; ++j)
#ifndef LL_RELEASE_FOR_DOWNLOAD
// This timer is too hot for normal use (though better now with caching)
LL_RECORD_BLOCK_TIME(FTM_SKINNING_INIT);
#endif
LLMatrix4a bind[LL_MAX_JOINTS_PER_MESH_OBJECT];
LLMatrix4a world[LL_MAX_JOINTS_PER_MESH_OBJECT];
initJointNums(const_cast<LLMeshSkinInfo*>(skin), avatar);
// TODO: Refactored to encourage the compiler to optimise better but it's too old and stubborn. Need to hand tool the SIMD.
// TODO: There are two overheads in this function casued by the unaligned loads. use Matrix4a
// TODO: getWorldMatrix forces a reverse recursion up through the skelly. Check if this is happening efficiently.
for (S32 j = 0; j < count; ++j)
{
LLJoint *joint = avatar->getJoint(skin->mJointNums[j]);
if (joint)
{
#define MAT_USE_SSE
#ifdef MAT_USE_SSE
LLMatrix4a bind, world, res;
bind.loadu(skin->mInvBindMatrix[j]);
world.loadu(joint->getWorldMatrix());
matMul(bind,world,res);
memcpy(mat[j].mMatrix,res.mMatrix,16*sizeof(float));
#else
mat[j] = skin->mInvBindMatrix[j];
mat[j] *= joint->getWorldMatrix();
#endif
}
else
{
mat[j] = skin->mInvBindMatrix[j];
// This shouldn't happen - in mesh upload, skinned
// rendering should be disabled unless all joints are
// valid. In other cases of skinned rendering, invalid
// joints should already have been removed during scrubInvalidJoints().
LL_WARNS_ONCE("Avatar") << avatar->getFullname()
<< " rigged to invalid joint name " << skin->mJointNames[j]
<< " num " << skin->mJointNums[j] << LL_ENDL;
LL_WARNS_ONCE("Avatar") << avatar->getFullname()
<< " avatar build state: isBuilt() " << avatar->isBuilt()
<< " mInitFlags " << avatar->mInitFlags << LL_ENDL;
#if 0
dump_avatar_and_skin_state("initSkinningMatrixPalette joint not found", avatar, skin);
#endif
}
if (joint != nullptr){
bind[j].loadu(skin->mInvBindMatrix[j]);
world[j].loadu(joint->getWorldMatrix());
matMul(bind[j], world[j], mat[j]);
}
else
{
mat[j].loadu(skin->mInvBindMatrix[j]);
// This shouldn't happen - in mesh upload, skinned
// rendering should be disabled unless all joints are
// valid. In other cases of skinned rendering, invalid
// joints should already have been removed during scrubInvalidJoints().
// Beq note - Oct 2018 Animesh - Many rigged meshes still fail here. ('mElbowLeeft' typo in the rigging data)
LL_WARNS_ONCE("Avatar") << avatar->getFullname()
<< " rigged to invalid joint name " << skin->mJointNames[j]
<< " num " << skin->mJointNums[j] << LL_ENDL;
LL_WARNS_ONCE("Avatar") << avatar->getFullname()
<< " avatar build state: isBuilt() " << avatar->isBuilt()
<< " mInitFlags " << avatar->mInitFlags << LL_ENDL;
}
//LL_DEBUGS("Skinning") << "[" << avatar->getFullname() << "] joint(" << skin->mJointNames[j] << ") matices bind(" << bind << ") world(" << world << ")" << LL_ENDL;
}
}
//</FS:Beq>
void LLSkinningUtil::checkSkinWeights(LLVector4a* weights, U32 num_vertices, const LLMeshSkinInfo* skin)
{

View File

@ -38,8 +38,11 @@ namespace LLSkinningUtil
U32 getMaxJointCount();
U32 getMeshJointCount(const LLMeshSkinInfo *skin);
void scrubInvalidJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin);
void initSkinningMatrixPalette(LLMatrix4* mat, S32 count, const LLMeshSkinInfo* skin, LLVOAvatar *avatar);
void checkSkinWeights(LLVector4a* weights, U32 num_vertices, const LLMeshSkinInfo* skin);
//<FS:Beq> Per frame SkinningMatrix Caching
//void initSkinningMatrixPalette(LLMatrix4* mat, S32 count, const LLMeshSkinInfo* skin, LLVOAvatar* avatar);
void initSkinningMatrixPalette(LLMatrix4a* mat, S32 count, const LLMeshSkinInfo* skin, LLVOAvatar* avatar);
//</FS:Beq>
void checkSkinWeights(LLVector4a* weights, U32 num_vertices, const LLMeshSkinInfo* skin);
void scrubSkinWeights(LLVector4a* weights, U32 num_vertices, const LLMeshSkinInfo* skin);
void getPerVertexSkinMatrix(F32* weights, LLMatrix4a* mat, bool handle_bad_scale, LLMatrix4a& final_mat, U32 max_joints);
void initJointNums(LLMeshSkinInfo* skin, LLVOAvatar *avatar);

View File

@ -28,6 +28,7 @@
#include "lltoastscripttextbox.h"
#include "lldbstrings.h"
#include "lllslconstants.h"
#include "llnotifications.h"
#include "llstyle.h"
@ -35,15 +36,15 @@
#include "llviewertexteditor.h"
const S32 LLToastScriptTextbox::DEFAULT_MESSAGE_MAX_LINE_COUNT= 14;
#include "lldbstrings.h"
// *TODO: magic numbers - copied from lltoastnotifypanel.cpp(50) which was copied from llnotify.cpp(250)
const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + DB_INV_ITEM_NAME_BUF_SIZE;
LLToastScriptTextbox::LLToastScriptTextbox(const LLNotificationPtr& notification)
: LLToastPanel(notification)
{
buildFromFile( "panel_notify_textbox.xml");
mInfoText = getChild<LLTextBox>("text_editor_box");
const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + DB_INV_ITEM_NAME_BUF_SIZE;
mInfoText = getChild<LLTextEditor>("text_editor_box");
mInfoText->setMaxTextLength(MAX_LENGTH);
mInfoText->setValue(notification->getMessage());

View File

@ -48,7 +48,7 @@ public:
private:
LLTextBox* mInfoText;
LLTextEditor* mInfoText;
void onClickSubmit();
void onClickIgnore();

View File

@ -930,7 +930,7 @@ void handleRenderFriendsOnlyChanged(const LLSD& newvalue)
{
LLVOAvatar* avatar = (LLVOAvatar*)*iter;
if (avatar->getID() != gAgentID && !LLAvatarActions::isFriend(avatar->getID()))
if (avatar->getID() != gAgentID && !LLAvatarActions::isFriend(avatar->getID()) && !avatar->isControlAvatar())
{
gObjectList.killObject(avatar);
if (LLViewerRegion::sVOCacheCullingEnabled && avatar->getRegion())

View File

@ -7406,7 +7406,7 @@ void handle_script_info()
{
object_id = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject()->mID;
LL_INFOS() << "Reporting Script Info for object: " << object_id.asString() << LL_ENDL;
FSLSLBridge::instance().viewerToLSL("getScriptInfo|" + object_id.asString());
FSLSLBridge::instance().viewerToLSL("getScriptInfo|" + object_id.asString() + "|" + (gSavedSettings.getBOOL("FSScriptInfoExtended") ? "1" : "0"));
}
}
@ -10619,6 +10619,17 @@ class LLEditEnableTakeOff : public view_listener_t
}
};
// <FS:Beq> Xmas present for Ansa, Animesh kill switch
class FSDerenderAnimatedObjects : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
gObjectList.killAnimatedObjects();
return true;
}
};
// </FS:Beq>
class LLEditTakeOff : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@ -11400,6 +11411,7 @@ void initialize_menus()
view_listener_t::addMenu(new LLToolsSelectedScriptAction(), "Tools.SelectedScriptAction");
view_listener_t::addMenu(new FSToolsResyncAnimations(), "Tools.ResyncAnimations"); // <FS:CR> Resync Animations
view_listener_t::addMenu(new FSToolsUndeform(), "Tools.Undeform"); // <FS:CR> FIRE-4345: Undeform
view_listener_t::addMenu(new FSDerenderAnimatedObjects(), "Tools.DerenderAnimatedObjects"); // <FS:Beq> Animesh Kill switch
view_listener_t::addMenu(new LLToolsEnableToolNotPie(), "Tools.EnableToolNotPie");
view_listener_t::addMenu(new LLToolsEnableSelectNextPart(), "Tools.EnableSelectNextPart");

View File

@ -299,6 +299,12 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
// This will also trigger an onlinenotification if the user is online
std::string url = gAgent.getRegionCapability("AcceptFriendship");
// <FS:Ansariel> This only seems to work for offline FRs if FSUseReadOfflineMsgsCap has been used
if (!gSavedSettings.getBOOL("FSUseReadOfflineMsgsCap"))
{
url = "";
}
// </FS:Ansariel>
LL_DEBUGS("Friendship") << "Cap string: " << url << LL_ENDL;
if (!url.empty() && payload.has("online") && payload["online"].asBoolean() == false)
{
@ -338,6 +344,12 @@ bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
// We no longer notify other viewers, but we DO still send
// the rejection to the simulator to delete the pending userop.
std::string url = gAgent.getRegionCapability("DeclineFriendship");
// <FS:Ansariel> This only seems to work for offline FRs if FSUseReadOfflineMsgsCap has been used
if (!gSavedSettings.getBOOL("FSUseReadOfflineMsgsCap"))
{
url = "";
}
// </FS:Ansariel>
LL_DEBUGS("Friendship") << "Cap string: " << url << LL_ENDL;
if (!url.empty() && payload.has("online") && payload["online"].asBoolean() == false)
{
@ -2011,7 +2023,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
{
// <FS:Ansariel> This breaks object owner name parsing
//log_message = "<nolink>" + chatHistory_string + "</nolink> " + LLTrans::getString("InvOfferGaveYou") + " " + getSanitizedDescription() + LLTrans::getString(".");
log_message = chatHistory_string + LLTrans::getString("InvOfferGaveYou") + " " + getSanitizedDescription() + LLTrans::getString(".");
log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + getSanitizedDescription() + LLTrans::getString(".");
// </FS:Ansariel>
LLSD args;
args["MESSAGE"] = log_message;
@ -4715,6 +4727,7 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
msg->getU64Fast(_PREHASH_SoundData, _PREHASH_Handle, region_handle);
msg->getVector3Fast(_PREHASH_SoundData, _PREHASH_Position, pos_local);
msg->getF32Fast(_PREHASH_SoundData, _PREHASH_Gain, gain);
gain = llclampf(gain); // <FS> INT-141: Clamp gain to valid range
// adjust sound location to true global coords
LLVector3d pos_global = from_region_handle(region_handle);
@ -4861,6 +4874,7 @@ void process_attached_sound(LLMessageSystem *msg, void **user_data)
msg->getF32Fast(_PREHASH_DataBlock, _PREHASH_Gain, gain);
msg->getU8Fast(_PREHASH_DataBlock, _PREHASH_Flags, flags);
gain = llclampf(gain); // <FS> INT-141: Clamp gain to valid range
LLViewerObject *objectp = gObjectList.findObject(object_id);
if (objectp)
@ -4899,6 +4913,7 @@ void process_attached_sound_gain_change(LLMessageSystem *mesgsys, void **user_da
}
mesgsys->getF32Fast(_PREHASH_DataBlock, _PREHASH_Gain, gain);
gain = llclampf(gain); // <FS> INT-141: Clamp gain to valid range
objectp->adjustAudioGain(gain);
}

View File

@ -996,12 +996,14 @@ void LLViewerObjectList::update(LLAgent &agent)
const F64 frame_time = LLFrameTimer::getElapsedSeconds();
LLViewerObject *objectp = NULL;
// Make a copy of the list in case something in idleUpdate() messes with it
static std::vector<LLViewerObject*> idle_list;
U32 idle_count = 0;
//<FS:Beq> need avatar count for dynamic BB load balancing
mNumAvatars = 0;
//</FS:Beq>
{
LL_RECORD_BLOCK_TIME(FTM_IDLE_COPY);
@ -1015,11 +1017,15 @@ void LLViewerObjectList::update(LLAgent &agent)
{
idle_list.push_back( objectp );
}
else
else
{
idle_list[idle_count] = objectp;
}
++idle_count;
//<FS:Beq> need avatar count for dynamic BB load balancing
if (objectp->isAvatar())
mNumAvatars++;
//</FS:Beq>
}
else
{ // There shouldn't be any NULL pointers in the list, but they have caused
@ -1055,7 +1061,7 @@ void LLViewerObjectList::update(LLAgent &agent)
objectp = *idle_iter;
llassert(objectp->isActive());
objectp->idleUpdate(agent, frame_time);
}
}
//update flexible objects
LLVolumeImplFlexible::updateClass();
@ -1497,6 +1503,29 @@ BOOL LLViewerObjectList::killObject(LLViewerObject *objectp)
return FALSE;
}
// <FS:Beq> Animated Objects kill switch
void LLViewerObjectList::killAnimatedObjects()
{
LLViewerObject *objectp;
for (auto iter = mObjects.begin(); iter != mObjects.end(); ++iter)
{
objectp = *iter;
if (objectp->isAnimatedObject())
{
killObject(objectp);
if (LLViewerRegion::sVOCacheCullingEnabled && objectp->getRegion())
{
objectp->getRegion()->killCacheEntry(objectp->getLocalID());
}
}
}
cleanDeadObjects(FALSE);
}
// </FS:Beq>
void LLViewerObjectList::killObjects(LLViewerRegion *regionp)
{
LLViewerObject *objectp;
@ -1661,9 +1690,9 @@ void LLViewerObjectList::updateActive(LLViewerObject *objectp)
mActiveObjects.push_back(objectp);
objectp->setListIndex(mActiveObjects.size()-1);
objectp->setOnActiveList(TRUE);
}
else
{
}
else
{
llassert(idx < mActiveObjects.size());
llassert(mActiveObjects[idx] == objectp);
@ -1804,6 +1833,7 @@ void LLViewerObjectList::repartitionObjects()
for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); ++iter)
{
LLViewerObject* objectp = *iter;
if (!objectp->isDead())
{
LLDrawable* drawable = objectp->mDrawable;

View File

@ -75,6 +75,7 @@ public:
LLViewerObject *replaceObject(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); // TomY: hack to switch VO instances on the fly
BOOL killObject(LLViewerObject *objectp);
void killAnimatedObjects();
void killObjects(LLViewerRegion *regionp); // Kill all objects owned by a particular region.
void killAllObjects();
@ -152,7 +153,6 @@ public:
boost::signals2::connection setNewObjectCallback(new_object_callback_t cb);
new_object_signal_t mNewObjectSignal;
// </FS:CR>
////////////////////////////////////////////
//
// Only accessed by markDead in LLViewerObject
@ -162,6 +162,10 @@ public:
S32 getOrphanParentCount() const { return (S32) mOrphanParents.size(); }
S32 getOrphanCount() const { return mNumOrphans; }
//<FS:Beq> need avatar count for dynamic BB load balancing
S32 getAvatarCount() const { return mNumAvatars; }
//</FS:Beq>
void orphanize(LLViewerObject *childp, U32 parent_id, U32 ip, U32 port);
void findOrphans(LLViewerObject* objectp, U32 ip, U32 port);
@ -208,6 +212,9 @@ protected:
std::vector<U64> mOrphanParents; // LocalID/ip,port of orphaned objects
std::vector<OrphanInfo> mOrphanChildren; // UUID's of orphaned objects
S32 mNumOrphans;
//<FS:Beq> need avatar count for dynamic BB load balancing
S32 mNumAvatars;
//</FS:Beq>
typedef std::vector<LLPointer<LLViewerObject> > vobj_list_t;

View File

@ -126,9 +126,9 @@ const F32 desired_discard_bias_max = (F32)MAX_DISCARD_LEVEL; // max number of le
const F64 log_2 = log(2.0);
#if ADDRESS_SIZE == 32
/*const*/ U32 DESIRED_NORMAL_FETCHED_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2; // <FS:Ansariel> Max texture resolution
/*const*/ U32 DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2; // <FS:Ansariel> Max texture resolution
#else
/*const*/ U32 DESIRED_NORMAL_FETCHED_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT; // <FS:Ansariel> Max texture resolution
/*const*/ U32 DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT; // <FS:Ansariel> Max texture resolution
#endif
LLUUID LLViewerTexture::sInvisiprimTexture1 = LLUUID::null;
@ -1705,10 +1705,12 @@ void LLViewerFetchedTexture::processTextureStats()
else
{
U32 desired_size = MAX_IMAGE_SIZE_DEFAULT; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048
// <FS:Ansariel> Keep restriction on "fetched" (seems to be HUD) textures as well
if (mBoostLevel <= LLGLTexture::BOOST_SCULPTED)
{
desired_size = DESIRED_NORMAL_FETCHED_TEXTURE_SIZE;
desired_size = DESIRED_NORMAL_TEXTURE_SIZE;
}
// </FS:Ansariel>
if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight)
{
if (mFullWidth > desired_size || mFullHeight > desired_size)
@ -3325,6 +3327,7 @@ void LLViewerLODTexture::processTextureStats()
if (mKnownDrawWidth && mKnownDrawHeight)
{
S32 draw_texels = mKnownDrawWidth * mKnownDrawHeight;
draw_texels = llclamp(draw_texels, MIN_IMAGE_AREA, MAX_IMAGE_AREA);
// Use log_4 because we're in square-pixel space, so an image
// with twice the width and twice the height will have mTexelsPerImage
@ -3365,7 +3368,7 @@ void LLViewerLODTexture::processTextureStats()
U32 desired_size = MAX_IMAGE_SIZE_DEFAULT; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048
if (mBoostLevel <= LLGLTexture::BOOST_SCULPTED)
{
desired_size = DESIRED_NORMAL_FETCHED_TEXTURE_SIZE;
desired_size = DESIRED_NORMAL_TEXTURE_SIZE;
}
if (mFullWidth > desired_size || mFullHeight > desired_size)
min_discard = 1.f;

View File

@ -46,7 +46,7 @@ extern S32Megabytes gMaxVideoRam;
// </FS:Ansariel>
// <FS:Ansariel> Max texture resolution
extern U32 DESIRED_NORMAL_FETCHED_TEXTURE_SIZE;
extern U32 DESIRED_NORMAL_TEXTURE_SIZE;
class LLFace;
class LLImageGL ;

View File

@ -1966,12 +1966,12 @@ LLViewerWindow::LLViewerWindow(const Params& p)
#if ADDRESS_SIZE == 64
if (gSavedSettings.getBOOL("FSRestrictMaxTextureSize"))
{
DESIRED_NORMAL_FETCHED_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2;
DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2;
}
#else
gSavedSettings.setBOOL("FSRestrictMaxTextureSize", TRUE);
#endif
LL_INFOS() << "Maximum fetched texture size: " << DESIRED_NORMAL_FETCHED_TEXTURE_SIZE << "px" << LL_ENDL;
LL_INFOS() << "Maximum fetched texture size: " << DESIRED_NORMAL_TEXTURE_SIZE << "px" << LL_ENDL;
// </FS:Ansariel>
// Init the image list. Must happen after GL is initialized and before the images that

View File

@ -211,6 +211,9 @@ const F32 NAMETAG_VERTICAL_SCREEN_OFFSET = 25.f;
const F32 NAMETAG_VERT_OFFSET_WEIGHT = 0.17f;
const U32 LLVOAvatar::VISUAL_COMPLEXITY_UNKNOWN = 0;
const F32 LLVOAvatar::VISUAL_COMPLEXITY_UPDATE_SECONDS = 10.0f;
const F32 VISUAL_COMPLEXITY_FRAC_CHANGE_THRESH = 0.05f; // Changes to self will not be displayed unless they exceed this fraction of previous value.
const F32 VISUAL_COMPLEXITY_ABS_CHANGE_THRESH = 1000; // ... and this absolute amount of change.
const F64 HUD_OVERSIZED_TEXTURE_DATA_SIZE = 1024 * 1024;
enum ERenderName
@ -1390,9 +1393,10 @@ static LLTrace::BlockTimerStatHandle FTM_AVATAR_EXTENT_UPDATE("Av Upd Extent");
void LLVOAvatar::calculateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax)
{
LL_RECORD_BLOCK_TIME(FTM_AVATAR_EXTENT_UPDATE);
S32 box_detail = gSavedSettings.getS32("AvatarBoundingBoxComplexity");
//<FS:Beq> not called as often as it used to be but still no harm in optimising
// S32 box_detail = gSavedSettings.getS32("AvatarBoundingBoxComplexity");
static const LLCachedControl<S32> box_detail(gSavedSettings, "AvatarBoundingBoxComplexity");
//<FS:Beq>
// FIXME the update_min_max function used below assumes there is a
// known starting point, but in general there isn't. Ideally the
// box update logic should be modified to handle the no-point-yet
@ -2569,7 +2573,21 @@ void LLVOAvatar::idleUpdate(LLAgent &agent, const F64 &time)
}
// Update should be happening max once per frame.
const S32 upd_freq = 4; // force update every upd_freq frames.
// <FS:Beq> enable dynamic spreading of the BB calculations
//const S32 upd_freq = 4; // force update every upd_freq frames.
static LLCachedControl<S32> refreshPeriod(gSavedSettings, "AvatarExtentRefreshPeriodBatch");
static LLCachedControl<S32> refreshMaxPerPeriod(gSavedSettings, "AvatarExtentRefreshMaxPerBatch");
static S32 upd_freq = refreshPeriod; // initialise to a reasonable defauilt of 1 batch
static S32 lastRecalibrationFrame{ 0 };
const S32 thisFrame = LLDrawable::getCurrentFrame();
if (thisFrame - lastRecalibrationFrame >= upd_freq)
{
// Only update at the start of a cycle. .
upd_freq = (((gObjectList.getAvatarCount() - 1) / refreshMaxPerPeriod) + 1)*refreshPeriod;
lastRecalibrationFrame = thisFrame;
}
//</FS:Beq>
if ((mLastAnimExtents[0]==LLVector3())||
(mLastAnimExtents[1])==LLVector3())
{
@ -2577,7 +2595,10 @@ void LLVOAvatar::idleUpdate(LLAgent &agent, const F64 &time)
}
else
{
mNeedsExtentUpdate = ((LLDrawable::getCurrentFrame()+mID.mData[0])%upd_freq==0);
//<FS:Beq> enable dynamic spreading of the BB calculations
//mNeedsExtentUpdate = ((LLDrawable::getCurrentFrame()+mID.mData[0]) % upd_freq == 0);
mNeedsExtentUpdate = ((thisFrame + mID.mData[0]) % upd_freq == 0);
//</FS:Beq>
}
LLScopedContextString str("avatar_idle_update " + getFullname());
@ -10661,8 +10682,10 @@ void LLVOAvatar::updateRiggingInfo()
//LL_INFOS() << "done update rig count is " << countRigInfoTab(mJointRiggingInfoTab) << LL_ENDL;
//LL_DEBUGS("RigSpammish") << getFullname() << " after update rig tab:" << LL_ENDL; // <FS:Ansariel> Performance tweak
S32 joint_count, box_count;
showRigInfoTabExtents(this, mJointRiggingInfoTab, joint_count, box_count);
//<FS:Beq> remove debug only stuff on hot path
//S32 joint_count, box_count;
//showRigInfoTabExtents(this, mJointRiggingInfoTab, joint_count, box_count);
//</FS:Beq>
//LL_DEBUGS("RigSpammish") << "uses " << joint_count << " joints " << " nonzero boxes: " << box_count << LL_ENDL; // <FS:Ansariel> Performance tweak
}
@ -10899,7 +10922,6 @@ void LLVOAvatar::idleUpdateRenderComplexity()
void LLVOAvatar::updateVisualComplexity()
{
LL_DEBUGS("AvatarRender") << "avatar " << getID() << " appearance changed" << LL_ENDL;
// Set the cache time to in the past so it's updated ASAP
mVisualComplexityStale = true;
}
@ -11068,8 +11090,15 @@ void LLVOAvatar::calculateUpdateRenderComplexity()
// <FS:Ansariel> Disable useless diagnostics
//static std::set<LLUUID> all_textures;
if (mVisualComplexityStale)
// <FS:Beq> remove the timer based complexity updates
//bool needs_update = mVisualComplexityStale &&
// (mVisualComplexity==VISUAL_COMPLEXITY_UNKNOWN ||
// mVisualComplexityUpdateTimer.getElapsedTimeF32()>VISUAL_COMPLEXITY_UPDATE_SECONDS);
bool needs_update = mVisualComplexityStale;
if (needs_update)
{
// <FS:Ansariel> Show per-item complexity in COF
std::map<LLUUID, U32> item_complexity;
std::map<LLUUID, U32> temp_item_complexity;
@ -11185,26 +11214,64 @@ void LLVOAvatar::calculateUpdateRenderComplexity()
//}
// </FS:Ansariel>
if ( cost != mVisualComplexity )
{
LL_DEBUGS("AvatarRender") << "Avatar "<< getID()
<< " complexity updated was " << mVisualComplexity << " now " << cost
<< " reported " << mReportedVisualComplexity
<< LL_ENDL;
}
else
{
LL_DEBUGS("AvatarRender") << "Avatar "<< getID()
<< " complexity updated no change " << mVisualComplexity
<< " reported " << mReportedVisualComplexity
<< LL_ENDL;
}
mVisualComplexity = cost;
bool cost_changed = false;
if ( mVisualComplexity == VISUAL_COMPLEXITY_UNKNOWN)
{
LL_DEBUGS("AvatarRender") << "Avatar "<< getID()
<< " complexity initialized to " << cost
<< " reported " << mReportedVisualComplexity
<< LL_ENDL;
cost_changed = true;
}
else
{
if ( cost != mVisualComplexity )
{
// <FS:Beq> remove the threshold calcs
// F32 top_val = (1.0f+VISUAL_COMPLEXITY_FRAC_CHANGE_THRESH)*mVisualComplexity;
// F32 bottom_val = (1.0f/(1.0f+VISUAL_COMPLEXITY_FRAC_CHANGE_THRESH))*mVisualComplexity;
// top_val = llmax(top_val, mVisualComplexity + VISUAL_COMPLEXITY_ABS_CHANGE_THRESH);
// bottom_val = llmax(0.f, llmin(bottom_val, mVisualComplexity - VISUAL_COMPLEXITY_ABS_CHANGE_THRESH));
// if (isSelf() && cost > bottom_val && cost < top_val)
// {
// LL_DEBUGS("AvatarRender") << "Avatar "<< getID()
// << " self complexity change from " << mVisualComplexity << " to " << cost
// << " is within range "
// << "(" << bottom_val << "," << top_val << ")"
// << ", not updated."
// << " reported " << mReportedVisualComplexity
// << LL_ENDL;
// }
// else
// {
// LL_DEBUGS("AvatarRender") << "Avatar "<< getID()
// << " complexity updated was " << mVisualComplexity << " now " << cost
// << " reported " << mReportedVisualComplexity
// << LL_ENDL;
// cost_changed = true;
// }
//}
//else
//{
// LL_DEBUGS("AvatarRender") << "Avatar "<< getID()
// << " complexity updated no change " << mVisualComplexity
// << " reported " << mReportedVisualComplexity
// << LL_ENDL;
cost_changed = true;
}
}
if (cost_changed)
{
mVisualComplexity = cost;
}
mVisualComplexityStale = false;
// </FS:Beq> Remove the timer for now.
// mVisualComplexityUpdateTimer.reset();
static LLCachedControl<U32> show_my_complexity_changes(gSavedSettings, "ShowMyComplexityChanges", 20);
if (isSelf() && show_my_complexity_changes)
if (isSelf() && cost_changed && show_my_complexity_changes)
{
// Avatar complexity
LLAvatarRenderNotifier::getInstance()->updateNotificationAgent(mVisualComplexity);

View File

@ -306,6 +306,7 @@ public:
// </FS:Ansariel>
void calculateUpdateRenderComplexity();
static const U32 VISUAL_COMPLEXITY_UNKNOWN;
static const F32 VISUAL_COMPLEXITY_UPDATE_SECONDS;
void updateVisualComplexity();
U32 getVisualComplexity() { return mVisualComplexity; }; // Numbers calculated here by rendering AV
@ -485,6 +486,7 @@ public:
// the isTooComplex method uses these mutable values to avoid recalculating too frequently
mutable U32 mVisualComplexity;
mutable bool mVisualComplexityStale;
mutable LLFrameTimer mVisualComplexityUpdateTimer;
U32 mReportedVisualComplexity; // from other viewers through the simulator
bool mCachedInMuteList;

View File

@ -3200,7 +3200,6 @@ void LLVOAvatarSelf::onCustomizeStart(bool disable_camera_switch)
gAgentAvatarp->mIsEditingAppearance = true;
gAgentAvatarp->mUseLocalAppearance = true;
if (gSavedSettings.getBOOL("AppearanceCameraMovement") && !disable_camera_switch)
{
gAgentCamera.changeCameraToCustomizeAvatar();

View File

@ -904,7 +904,7 @@ void LLVoiceClient::addObserver(LLVoiceClientStatusObserver* observer)
void LLVoiceClient::removeObserver(LLVoiceClientStatusObserver* observer)
{
if (mVoiceModule) mVoiceModule->removeObserver(observer);
if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer);
}
void LLVoiceClient::addObserver(LLFriendObserver* observer)
@ -914,7 +914,7 @@ void LLVoiceClient::addObserver(LLFriendObserver* observer)
void LLVoiceClient::removeObserver(LLFriendObserver* observer)
{
if (mVoiceModule) mVoiceModule->removeObserver(observer);
if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer);
}
void LLVoiceClient::addObserver(LLVoiceClientParticipantObserver* observer)
@ -924,7 +924,7 @@ void LLVoiceClient::addObserver(LLVoiceClientParticipantObserver* observer)
void LLVoiceClient::removeObserver(LLVoiceClientParticipantObserver* observer)
{
if (mVoiceModule) mVoiceModule->removeObserver(observer);
if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer);
}
std::string LLVoiceClient::sipURIFromID(const LLUUID &id)

View File

@ -124,6 +124,8 @@ public:
virtual const LLVoiceVersionInfo& getVersion()=0;
virtual bool singletoneInstanceExists()=0;
/////////////////////
/// @name Tuning
//@{

View File

@ -4884,6 +4884,11 @@ void LLVivoxVoiceClient::declineInvite(std::string &sessionHandle)
}
}
bool LLVivoxVoiceClient::singletoneInstanceExists()
{
return LLVivoxVoiceClient::instanceExists();
}
void LLVivoxVoiceClient::leaveNonSpatialChannel()
{
LL_DEBUGS("Voice") << "Request to leave spacial channel." << LL_ENDL;

View File

@ -73,6 +73,8 @@ public:
// Returns true if vivox has successfully logged in and is not in error state
virtual bool isVoiceWorking() const;
virtual bool singletoneInstanceExists();
/////////////////////
/// @name Tuning

View File

@ -475,6 +475,11 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
{
retval |= MEDIA_FLAGS_CHANGED;
}
if (result && getRootEdit()->isAttachment() && getAvatarAncestor()==gAgentAvatarp )
{
LL_INFOS("AvatarRender") << "Volume attached to self av has updated TE properties. ARC may change accordingly. Change flags "
<< result << LL_ENDL;
}
}
else
{
@ -615,6 +620,11 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
{
retval |= MEDIA_FLAGS_CHANGED;
}
if (result && getRootEdit()->isAttachment() && getAvatarAncestor()==gAgentAvatarp )
{
LL_INFOS("AvatarRender") << "Volume attached to self av has updated TE properties. ARC may change accordingly. Change flags "
<< result << LL_ENDL;
}
}
}
}
@ -1641,7 +1651,11 @@ BOOL LLVOVolume::updateLOD()
if (lod_changed)
{
if (debugLoggingEnabled("AnimatedObjectsLinkset"))
//<FS:Beq> avoid unfortunate sleep during trylock by static check
//if(debugLoggingEnabled("AnimatedObjectsLinkset"))
static auto debug_logging_on = debugLoggingEnabled("AnimatedObjectsLinkset");
if (debug_logging_on)
//</FS:Beq>
{
if (isAnimatedObject() && isRiggedMesh())
{
@ -4615,8 +4629,12 @@ const LLMatrix4& LLVOVolume::getWorldMatrix(LLXformMatrix* xform) const
void LLVOVolume::markForUpdate(BOOL priority)
{
if (debugLoggingEnabled("AnimatedObjectsLinkset"))
{
//<FS:Beq> avoid unfortunate sleep during trylock by static check
//if(debugLoggingEnabled("AnimatedObjectsLinkset"))
static auto debug_logging_on = debugLoggingEnabled("AnimatedObjectsLinkset");
if (debug_logging_on)
//</FS:Beq>
{
if (isAnimatedObject() && isRiggedMesh())
{
std::string vobj_name = llformat("Vol%p", this);
@ -4941,6 +4959,7 @@ static LLTrace::BlockTimerStatHandle FTM_RIGGED_OCTREE("Octree");
void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, const LLVolume* volume)
{
bool copy = false;
if (volume->getNumVolumeFaces() != getNumVolumeFaces())
{
@ -4982,7 +5001,10 @@ void LLRiggedVolume::update(const LLMeshSkinInfo* skin, LLVOAvatar* avatar, cons
LLMatrix4a mat[kMaxJoints];
U32 maxJoints = LLSkinningUtil::getMeshJointCount(skin);
LLSkinningUtil::initSkinningMatrixPalette((LLMatrix4*)mat, maxJoints, skin, avatar);
//<FS:Beq> Skinning Matrix caching
//LLSkinningUtil::initSkinningMatrixPalette((LLMatrix4)mat, maxJoints, skin, avatar);
LLSkinningUtil::initSkinningMatrixPalette(mat, maxJoints, skin, avatar);
//</FS:Beq>
S32 rigged_vert_count = 0;
S32 rigged_face_count = 0;
@ -5594,7 +5616,11 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
vobj = bridge->mDrawable->getVObj();
vol_obj = dynamic_cast<LLVOVolume*>(vobj);
}
if (vol_obj)
// <FS:Beq> option to reduce the number of complexity updates
// if (vol_obj)
static LLCachedControl< bool >aggressiveComplexityUpdates(gSavedSettings, "FSEnableAggressiveComplexityUpdates", false);
if (aggressiveComplexityUpdates && vol_obj)
// </FS:Beq>
{
vol_obj->updateVisualComplexity();
}
@ -5672,7 +5698,10 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
continue;
}
std::string vobj_name = llformat("Vol%p", vobj);
//<FS:Beq> Stop doing stupid stuff we don;t need to.
// Moving this inside a debug enabled check
// std::string vobj_name = llformat("Vol%p", vobj);
//</FS:Beq>
if (vobj->isMesh() &&
((vobj->getVolume() && !vobj->getVolume()->isMeshAssetLoaded()) || !gMeshRepo.meshRezEnabled()))
@ -5686,26 +5715,37 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
const LLVector3& scale = vobj->getScale();
group->mSurfaceArea += volume->getSurfaceArea() * llmax(llmax(scale.mV[0], scale.mV[1]), scale.mV[2]);
}
bool is_mesh = vobj->isMesh();
F32 est_tris = vobj->getEstTrianglesMax();
//<FS:Beq> Stop doing stupid stuff we don;t need on the critical path
//bool is_mesh = vobj->isMesh();
//F32 est_tris = vobj->getEstTrianglesMax();
vobj->updateControlAvatar();
LL_DEBUGS("AnimatedObjectsLinkset") << vobj_name << " rebuilding, isAttachment: " << (U32) vobj->isAttachment()
<< " is_mesh " << is_mesh
<< " est_tris " << est_tris
<< " is_animated " << vobj->isAnimatedObject()
<< " can_animate " << vobj->canBeAnimatedObject()
<< " cav " << vobj->getControlAvatar()
<< " lod " << vobj->getLOD()
<< " drawable rigged " << (drawablep->isState(LLDrawable::RIGGED))
<< " drawable state " << drawablep->getState()
<< " playing " << (U32) (vobj->getControlAvatar() ? vobj->getControlAvatar()->mPlaying : false)
<< " frame " << LLFrameTimer::getFrameCount()
<< LL_ENDL;
// Also avoid unfortunate sleep during trylock by static check
//if(debugLoggingEnabled("AnimatedObjectsLinkset"))
static auto debug_logging_on = debugLoggingEnabled("AnimatedObjectsLinkset");
if (debug_logging_on)
//</FS:Beq>
{
std::string vobj_name = llformat("Vol%p", vobj);
bool is_mesh = vobj->isMesh();
F32 est_tris = vobj->getEstTrianglesMax();
LL_DEBUGS("AnimatedObjectsLinkset") << vobj_name << " rebuilding, isAttachment: " << (U32) vobj->isAttachment()
<< " is_mesh " << is_mesh
<< " est_tris " << est_tris
<< " is_animated " << vobj->isAnimatedObject()
<< " can_animate " << vobj->canBeAnimatedObject()
<< " cav " << vobj->getControlAvatar()
<< " lod " << vobj->getLOD()
<< " drawable rigged " << (drawablep->isState(LLDrawable::RIGGED))
<< " drawable state " << drawablep->getState()
<< " playing " << (U32) (vobj->getControlAvatar() ? vobj->getControlAvatar()->mPlaying : false)
<< " frame " << LLFrameTimer::getFrameCount()
<< LL_ENDL;
}
//<FS:Beq> Pointless. We already checked this and have used it.
//llassert_always(vobj);
llassert_always(vobj);
// <FS:AO> Z's protection auto-derender code
if (enableVolumeSAPProtection())
@ -6245,8 +6285,12 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
if (drawablep && !drawablep->isDead() && drawablep->isState(LLDrawable::REBUILD_ALL) && !drawablep->isState(LLDrawable::RIGGED) )
{
LLVOVolume* vobj = drawablep->getVOVolume();
if (debugLoggingEnabled("AnimatedObjectsLinkset"))
{
//<FS:Beq> avoid unfortunate sleep during trylock by static check
//if(debugLoggingEnabled("AnimatedObjectsLinkset"))
static auto debug_logging_on = debugLoggingEnabled("AnimatedObjectsLinkset");
if (debug_logging_on)
//</FS:Beq>
{
if (vobj->isAnimatedObject() && vobj->isRiggedMesh())
{
std::string vobj_name = llformat("Vol%p", vobj);

View File

@ -544,7 +544,7 @@ void ParticleEditor::onInjectButtonClicked()
if (categoryID.isNull())
{
std::string scriptFolderName = LLFolderType::lookup(LLFolderType::FT_LSL_TEXT);
gInventory.findCategoryByName(scriptFolderName);
categoryID = gInventory.findCategoryByName(scriptFolderName);
}
// if still no valid folder found bail out and complain

View File

@ -151,7 +151,7 @@ bool LLPipeline::RenderDeferredSSAO;
F32 LLPipeline::RenderShadowResolutionScale;
bool LLPipeline::RenderLocalLights;
bool LLPipeline::RenderDelayCreation;
bool LLPipeline::RenderAnimateRes;
//bool LLPipeline::RenderAnimateRes; <FS:Beq> FIRE-23122 BUG-225920 Remove broken RenderAnimateRes functionality.
bool LLPipeline::FreezeTime;
S32 LLPipeline::DebugBeaconLineWidth;
F32 LLPipeline::RenderHighlightBrightness;
@ -627,7 +627,7 @@ void LLPipeline::init()
connectRefreshCachedSettingsSafe("RenderShadowResolutionScale");
connectRefreshCachedSettingsSafe("RenderLocalLights");
connectRefreshCachedSettingsSafe("RenderDelayCreation");
connectRefreshCachedSettingsSafe("RenderAnimateRes");
// connectRefreshCachedSettingsSafe("RenderAnimateRes"); <FS:Beq> FIRE-23122 BUG-225920 Remove broken RenderAnimateRes functionality.
connectRefreshCachedSettingsSafe("FreezeTime");
connectRefreshCachedSettingsSafe("DebugBeaconLineWidth");
connectRefreshCachedSettingsSafe("RenderHighlightBrightness");
@ -1209,7 +1209,7 @@ void LLPipeline::refreshCachedSettings()
RenderShadowResolutionScale = gSavedSettings.getF32("RenderShadowResolutionScale");
RenderLocalLights = gSavedSettings.getBOOL("RenderLocalLights");
RenderDelayCreation = gSavedSettings.getBOOL("RenderDelayCreation");
RenderAnimateRes = gSavedSettings.getBOOL("RenderAnimateRes");
// RenderAnimateRes = gSavedSettings.getBOOL("RenderAnimateRes"); <FS:Beq> FIRE-23122 BUG-225920 Remove broken RenderAnimateRes functionality.
FreezeTime = gSavedSettings.getBOOL("FreezeTime");
DebugBeaconLineWidth = gSavedSettings.getS32("DebugBeaconLineWidth");
RenderHighlightBrightness = gSavedSettings.getF32("RenderHighlightBrightness");
@ -2018,14 +2018,15 @@ void LLPipeline::createObject(LLViewerObject* vobj)
markRebuild(drawablep, LLDrawable::REBUILD_ALL, TRUE);
if (drawablep->getVOVolume() && RenderAnimateRes)
{
// fun animated res
drawablep->updateXform(TRUE);
drawablep->clearState(LLDrawable::MOVE_UNDAMPED);
drawablep->setScale(LLVector3(0,0,0));
drawablep->makeActive();
}
// <FS:Beq> FIRE-23122 BUG-225920 Remove broken RenderAnimateRes functionality.
//if (drawablep->getVOVolume() && RenderAnimateRes)
//{
// // fun animated res
// drawablep->updateXform(TRUE);
// drawablep->clearState(LLDrawable::MOVE_UNDAMPED);
// drawablep->setScale(LLVector3(0,0,0));
// drawablep->makeActive();
//}
}
@ -3483,8 +3484,12 @@ void LLPipeline::markRebuild(LLDrawable *drawablep, LLDrawable::EDrawableFlags f
{
if (drawablep && !drawablep->isDead() && assertInitialized())
{
if (debugLoggingEnabled("AnimatedObjectsLinkset"))
{
//<FS:Beq> avoid unfortunate sleep during trylock by static check
//if(debugLoggingEnabled("AnimatedObjectsLinkset"))
static auto debug_logging_on = debugLoggingEnabled("AnimatedObjectsLinkset");
if (debug_logging_on)
//</FS:Beq>
{
LLVOVolume *vol_obj = drawablep->getVOVolume();
if (vol_obj && vol_obj->isAnimatedObject() && vol_obj->isRiggedMesh())
{
@ -6721,7 +6726,7 @@ void LLPipeline::enableLightsPreview()
light->enable();
light->setPosition(light_pos);
light->setDiffuse(diffuse0);
light->setAmbient(LLColor4::black);
light->setAmbient(ambient);
light->setSpecular(specular0);
light->setSpotExponent(0.f);
light->setSpotCutoff(180.f);
@ -6732,7 +6737,7 @@ void LLPipeline::enableLightsPreview()
light->enable();
light->setPosition(light_pos);
light->setDiffuse(diffuse1);
light->setAmbient(LLColor4::black);
light->setAmbient(ambient);
light->setSpecular(specular1);
light->setSpotExponent(0.f);
light->setSpotCutoff(180.f);
@ -6742,7 +6747,7 @@ void LLPipeline::enableLightsPreview()
light->enable();
light->setPosition(light_pos);
light->setDiffuse(diffuse2);
light->setAmbient(LLColor4::black);
light->setAmbient(ambient);
light->setSpecular(specular2);
light->setSpotExponent(0.f);
light->setSpotCutoff(180.f);
@ -8867,7 +8872,8 @@ void LLPipeline::renderDeferredLighting()
}
const LLViewerObject *vobj = drawablep->getVObj();
if(vobj && vobj->getAvatar() && vobj->getAvatar()->isInMuteList())
if(vobj && vobj->getAvatar()
&& (vobj->getAvatar()->isTooComplex() || vobj->getAvatar()->isInMuteList()))
{
continue;
}

View File

@ -902,7 +902,7 @@ public:
static F32 RenderShadowResolutionScale;
static bool RenderLocalLights;
static bool RenderDelayCreation;
static bool RenderAnimateRes;
// static bool RenderAnimateRes; <FS:Beq> FIRE-23122 BUG-225920 Remove broken RenderAnimateRes functionality.
static bool FreezeTime;
static S32 DebugBeaconLineWidth;
static F32 RenderHighlightBrightness;

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -23,7 +23,7 @@
Name der Voreinstellung:
</text>
<text name="note">
Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, entsteht eine neue Voreinstellung; die vorhandene Voreinstellung wird nicht geändert.
Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, erstellen Sie eine neue Voreinstellung. Die vorhandene Voreinstellung wird nicht geändert.
</text>
<tab_container name="WindLight Tabs">
<panel label="ATMOSPHÄRE" name="Atmosphere">
@ -90,7 +90,7 @@
0:00
</text>
<text name="WL6am">
3:00
6:00
</text>
<text name="WL12pmHash">
12:00

View File

@ -23,7 +23,7 @@
Name der Voreinstellung:
</text>
<text name="note">
Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, entsteht eine neue Voreinstellung; die vorhandene Voreinstellung wird nicht geändert.
Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, erstellen Sie eine neue Voreinstellung. Die vorhandene Voreinstellung wird nicht geändert.
</text>
<panel name="panel_water_preset">
<text name="water_color_label">

View File

@ -8,7 +8,7 @@
Fehler: Fehler beim DAE-Parsen Details siehe Protokoll.
</string>
<string name="status_bind_shape_orientation">
Warnung: Bind-Shape-Matrix ist nicht in Standard-X-Forward-Orientierung.
Warnung: Verbundform-Matrix befindet sich nicht in Standard-X-Vorwärtsrichtung.
</string>
<string name="status_material_mismatch">
Fehler: Das Material des Modells ist keine Teilmenge des Referenzmodells.
@ -62,7 +62,19 @@
Detailstufenmaterial ist keine Teilmenge des Referenzmodells.
</string>
<string name="phys_status_vertex_limit_exceeded">
Einige physische Hüllen überschreiten die Vertexbeschränkungen.
Einige physische Hüllen überschreiten die Vertex-Limits (256). Probieren Sie andere Analyse-Methode.
</string>
<string name="phys_status_hull_limit_exceeded">
Einige Modelle überschreiten das Hüllen-Limit (256). Probieren Sie Vereinfachen“.
</string>
<string name="phys_status_degenerate_triangles">
Das Physik-Netz ist zu dicht - kleine dünne Dreiecke entfernen (siehe Vorschau)
</string>
<string name="phys_status_no_havok">
Die OpenSim-Version unterstützt kein Hochladen von Physik in Second Life. Unvorhersehbare Ergebnisse möglich!
</string>
<string name="phys_status_unknown_error">
Ein unbekannter Fehler ist aufgetreten.
</string>
<string name="layer_all">
Alle
@ -74,7 +86,7 @@
Vereinfachung läuft...
</string>
<string name="tbd">
noch nicht festgelegt
folgt
</string>
<panel name="left_panel">
<panel name="model_name_representation_panel">
@ -193,7 +205,7 @@
<panel label="Physik" name="physics_panel">
<panel name="physics geometry">
<text name="first_step_name">
Schritt 1: Detailstufe
Schritt 1: Physik-Modell wählen
</text>
<combo_box name="physics_lod_combo" tool_tip="Detailstufe für Physikform">
<combo_item name="choose_one">
@ -219,7 +231,7 @@
</panel>
<panel name="physics analysis">
<text name="method_label">
Schritt 2: Analysieren
Schritt 2: Zu Hüllen konvertieren (optional)
</text>
<text name="analysis_method_label">
Methode:
@ -297,6 +309,14 @@
Z-Offset (Avatar anheben oder senken):
</text>
<spinner name="pelvis_offset" value="0.0"/>
<panel name="avatar_model_hint_panel">
<text name="avatar_model_hint_text">
Hinweis:
Zu viele Objekte nutzen unnötigerweise den Standard-Anhängepunkt (Rechte Hand).
Bitte ziehen Sie einen anderen Anhängepunkt nahe der Objektposition in Betracht.
</text>
</panel>
</panel>
</tab_container>
<panel name="weights_and_warning_panel">
@ -305,13 +325,13 @@
<button label="Hochladen" name="ok_btn" tool_tip="Auf Simulator hochladen"/>
<button label="Einstellungen löschen und Formular zurücksetzen" name="reset_btn" width="280"/>
<text name="upload_fee">
Gebühr für Hochladen: [FEE] L$
Uploadkost.: [FEE] L$
</text>
<text name="prim_weight">
Auswirkung auf Land: [EQ]
Land-Impakt: [EQ]
</text>
<text name="download_weight">
Herunterladen: [ST]
Herunterl.: [ST]
</text>
<text name="physics_weight">
Physik: [PH]
@ -319,7 +339,72 @@
<text name="server_weight">
Server: [SIM]
</text>
<text name="warning_title">
<panel name="price_breakdown_panel">
<text name="price_breakdown_title">
Kosten-Aufstellung
</text>
<text name="price_breakdown_labels">
Download:
Physik:
Instanzen:
Texturen:
Model:
</text>
</panel>
<!--
<text name="streaming_breakdown_labels">
Streaming/Download:
Hoch:
Mittel:
Niedrig:
Niedrigste:
</text>
-->
<panel name="physics_breakdown_panel">
<text name="physics_breakdown_title">
Physik-Kosten
</text>
<text name="physics_breakdown_labels">
Basis-Hülle:
Mesh:
Analysiert:
</text>
</panel>
<panel name="preview_controls_panel">
<panel name="preview_controls_inner_panel">
<text name="preview_controls_title">
Vorschau-Einstellungen:
</text>
<combo_box name="preview_lod_combo" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
<combo_item name="high">
Hoch
</combo_item>
<combo_item name="medium">
Mittel
</combo_item>
<combo_item name="low">
Niedrig
</combo_item>
<combo_item name="lowest">
Niedrigste
</combo_item>
</combo_box>
</panel>
<text name="label_display">
Anzeige...
</text>
<check_box label="Kanten" name="show_edges"/>
<check_box label="Texturen" name="show_textures"/>
<check_box label="UV-Hilfe" name="show_uv_guide"/>
<check_box label="Physik" name="show_physics"/>
<check_box label="Skingew." name="show_skin_weight"/>
<check_box label="Gelenke" name="show_joint_positions"/>
<text name="exploder_label" width="105">
Vorschaudehnung:
</text>
<slider name="physics_explode" width="80"/>
</panel>
<text name="warning_title" width="60">
HINWEIS:
</text>
<text name="warning_message">
@ -330,34 +415,11 @@
</text>
</panel>
</panel>
<text name="lod_label">
Vorschau:
</text>
<panel name="right_panel">
<combo_box name="preview_lod_combo" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
<combo_item name="high">
Hoch
</combo_item>
<combo_item name="medium">
Mittel
</combo_item>
<combo_item name="low">
Niedrig
</combo_item>
<combo_item name="lowest">
Niedrigste
</combo_item>
</combo_box>
<text name="label_display">
Anzeige...
</text>
<check_box label="Kanten" name="show_edges"/>
<check_box label="Physik" name="show_physics"/>
<check_box label="Texturen" name="show_textures"/>
<check_box label="Skingewichte" name="show_skin_weight"/>
<check_box label="Gelenke" name="show_joint_positions"/>
<text name="physics_explode_label">
Vorschaudehnung:
<text name="lod_label">
Vorschau:
</text>
</panel>
<panel name="lower_right_panel">
</panel>
</floater>

View File

@ -91,7 +91,6 @@
<text name="RenderingCost" tool_tip="Zeigt die errechneten Wiedergabekosten für dieses Objekt">
þ: [COUNT]
</text>
<check_box name="checkbox uniform" label="Beide Seiten dehnen"/>
<check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures"/>
<check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid"/>
<check_box initial_value="false" label="Achse an Wurzel edit." name="checkbox actual root"/>
@ -470,7 +469,7 @@ Ndrg ↔ Nst
<text name="edit_object">
Objekteigenschaften bearbeiten:
</text>
<check_box label="Animiertes Mesh" name="Animated Mesh Checkbox Ctrl" tool_tip="Erlaubt geriggte Mesh-Objekte unabhängig zu animieren"/>
<check_box label="Animiertes Netz" name="Animated Mesh Checkbox Ctrl" tool_tip="Ermöglicht die unabhängige Animation geriggter Netzobjekte"/>
<check_box label="Flexibler Pfad" name="Flexible1D Checkbox Ctrl" tool_tip="Bewirkt, dass sich das Objekt um die Z-Achse biegen kann. (Nur Client-Seite)"/>
<spinner label="Weichheit" name="FlexNumSections"/>
<spinner label="Schwerkraft" name="FlexGravity"/>

View File

@ -3,6 +3,7 @@
<menu_item_check label="Nach letzten Sprechern sortieren" name="sort_by_recent_speakers"/>
<menu_item_check label="Nach Namen sortieren" name="sort_name"/>
<menu_item_check label="Nach Nähe sortieren" name="sort_distance"/>
<menu_item_check label="Nach letzter Ankunft sortieren" name="sort_arrival"/>
<menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
<menu_item_check label="Karte anzeigen" name="view_map"/>
</toggleable_menu>

View File

@ -4,6 +4,7 @@
<menu_item_call label="Bezahlen" name="pay"/>
<menu_item_call label="Teilen" name="share"/>
<menu_item_call label="Anrufen" name="call"/>
<menu_item_call label="Zu Kontakt-Set hinzufügen" name="add_to_contact_set"/>
<menu_item_call label="Name kopieren" name="copy_name_to_clipboard"/>
<menu_item_call label="URI kopieren" name="copy_uri_to_clipboard"/>
<menu_item_call label="UUID kopieren" name="copy_key_to_clipboard"/>

View File

@ -437,7 +437,7 @@
<menu_item_check label="Texturbereich" name="Texture Area"/>
<menu_item_check label="Oberflächenbereich" name="Face Area"/>
<menu_item_check label="Detailstufeninfos" name="LOD Info"/>
<menu_item_check label="Triangle-Zähler" name="Triangle Count"/>
<menu_item_check label="Dreieckszähler" name="Triangle Count"/>
<menu_item_check label="Konstruktionswarteschlange" name="Build Queue"/>
<menu_item_check label="Lichter" name="Lights"/>
<menu_item_check label="Partikel" name="Particles"/>
@ -471,6 +471,7 @@
<menu_item_check label="Automatische Alpha-Masken (nicht aufgeschoben)" name="Automatic Alpha Masks (non-deferred)"/>
<menu_item_check label="Animationstexturen" name="Animation Textures"/>
<menu_item_check label="Texturen deaktivieren" name="Disable Textures"/>
<menu_item_call label="Animesh nicht anzeigen" name="Derender Animesh"/>
<menu_item_check label="Texturen in Vollauflösung (gefährlich)" name="Full Res Textures"/>
<menu_item_check label="Angehängte Lichter rendern" name="Render Attached Lights"/>
<menu_item_check label="Angehängte Partikel rendern" name="Render Attached Particles"/>
@ -564,7 +565,7 @@
<menu_item_check label="Gelenkpunkte anzeigen" name="Show Collision Skeleton"/>
<menu_item_check label="Knochen anzeigen" name="Show Bones"/>
<menu_item_check label="Agent-Ziel anzeigen" name="Display Agent Target"/>
<menu_item_check label="Impostor-Ausmaße anzeigen" name="Show Impostor Extents"/>
<menu_item_check label="Umfang der vereinfachten Darstellung anzeigen" name="Show Impostor Extents"/>
<menu_item_call label="Anhänge ausgeben" name="Dump Attachments"/>
<menu_item_call label="Avatar-Texturen debuggen" name="Debug Avatar Textures"/>
<menu_item_call label="Lokale Texturen ausgeben" name="Dump Local Textures"/>

View File

@ -3430,7 +3430,7 @@ Diese werden für ein paar Sekunden sicherheitshalber gesperrt.
Fehler beim Speichern der Voreinstellung [NAME].
</notification>
<notification name="DefaultPresetNotSaved">
Standard-Voreinstellung kann nicht überschrieben werden.
Die Standard-Voreinstellung kann nicht überschrieben werden.
</notification>
<notification name="PresetNotDeleted">
Fehler beim Löschen der Voreinstellung [NAME].
@ -4216,7 +4216,7 @@ Sie ist voll oder startet in Kürze neu.
Angefordertes Objekt kann nicht erstellt werden. Die Region ist voll.
</notification>
<notification name="CantCreateAnimatedObjectTooLarge">
Angefordertes animiertes Objekt kann nicht erstellt werden, da es das Limit für geriggte Dreiecke übersteigt.
Das gewünschte animierte Objekt kann nicht erstellt werden, da es das Limit für geriggte Dreiecke überschreitet.
</notification>
<notification name="CantAttackMultipleObjOneSpot">
Sie können nicht mehrere Objekte an ein und derselben Stelle anhängen.
@ -4267,19 +4267,19 @@ Sie ist voll oder startet in Kürze neu.
Sie können diese Form nicht ändern.
</notification>
<notification name="NoPermsTooManyAttachedAnimatedObjects">
Durch diese Aktion würde die Anzahl an animierten Objekten das Limit überschreiten.
Durch den Vorgang würde die Anzahl der angehängten animierten Objekte das zulässige Limit überschreiten.
</notification>
<notification name="NoPermsLinkAnimatedObjectTooLarge">
Objekte können nicht verknüpft werden, da das resultierende animierte Objekt das Limit für geriggte Dreiecke überschreiten würde.
Diese Objekte können nicht verknüpft werden, da das hieraus resultierende animierte Objekt das Limit für geriggte Dreiecke überschreiten würde.
</notification>
<notification name="NoPermsSetFlagAnimatedObjectTooLarge">
Objekt kann nicht in ein animiertes Objekt geändert werden, da es das Limit für geriggte Dreiecke überschreiten würde.
Dieses Objekt kann nicht in ein animiertes Objekt umgewandelt werden, da es das Limit für geriggte Dreiecke überschreiten würde.
</notification>
<notification name="CantChangeAnimatedObjectStateInsufficientLand">
Zustand für animiertes Objekt kann nicht geändert werden, da es das Parzellen-Limit überschreiten würde.
Der Status der animierten Objekte für dieses Objekt kann nicht geändert werden, da hierdurch die Parzellenlimits überschritten würden.
</notification>
<notification name="ErrorNoMeshData">
Server-Fehler: Aktionen kann nicht abgeschlossen werden, da die Mesh-Daten nicht gelanden sind.
Serverfehler: Dieser Vorgang kann nicht abgeschlossen werden, da die Netzdaten nicht geladen sind.
</notification>
<notification name="NoAccessToClaimObjects">
Ihr Zugangsberechtigungen gestatten nicht das Beanspruchen von Objekten an dieser Stelle.

View File

@ -252,6 +252,7 @@
<check_box label="Vom Inventar aus bearbeitete Skripte als Mono speichern" tool_tip="Speichert Skripte, die direkt vom Inventar aus bearbeitet werden, als Mono anstatt LSL." name="FSSaveInventoryScriptsAsMono_toggle"/>
<check_box label="Texturen standardmäßig im PNG-Format anstelle von TGA speichern" tool_tip="Falls aktiviert, werden Texturen in der Vorschau standardmäßig im PNG-Format gespeichert" name="FSTextureDefaultSaveAsFormat"/>
<check_box label="Vorschau von Animation beim Upload am eigenen Avatar" tool_tip="Falls aktiviert, werden Animationen in der Vorschau am eigenen Avatar abgespielt" name="FSUploadAnimationOnOwnAvatar"/>
<check_box label="Erweiterte Skript-Informationen aktivieren" tool_tip="Falls aktiviert, werden die Skript-Informationen um weitergehende Details ergänzt." name="FSScriptInfoExtended"/>
</panel>
<!--Uploads-->

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Umgebung" name="panel_env_info">
<text name="water_settings_title">
Wählen Sie die Wasser- und Himmel-/Tageszykluseinstellungen aus, die alle Besucher Ihrer Region sehen sollen. Mehr Infos
Wählen Sie die Wasser- und Himmel-/Tageszykluseinstellungen aus, die alle Besucher Ihrer Region sehen sollen. Mehr Infos
</text>
<radio_group name="region_settings_radio_group">
<radio_item label="Second Life-Standard verwenden" name="use_sl_default_settings"/>
@ -15,7 +15,7 @@
<combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
</combo_box>
<text name="sky_dayc_settings_title">
Himmel / Tageszyklus
Himmel/Tageszyklus
</text>
<radio_group name="sky_dayc_settings_radio_group">
<radio_item label="Fester Himmel" name="my_sky_settings"/>

View File

@ -5829,6 +5829,9 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="Command_RFO_Label">
Nur Freunde anzeigen
</string>
<string name="Command_DAO_Label">
Animesh nicht anzeigen
</string>
<string name="Command_Beacons_Label">
Ortungssignale
</string>
@ -6015,6 +6018,9 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="Command_RFO_Tooltip">
Nur Freunde im Viewer darstellen. Nach Deaktivierung ist ein Teleport erforderlich, um andere Avatare wieder darzustellen.
</string>
<string name="Command_DAO_Tooltip">
Animesh-Objekte nicht darstellen - Stellt Animesh-Objekte temporär nicht dar. Nach Deaktivierung ist ein Teleport erforderlich, um entsprechende Objekte wieder darzustellen.
</string>
<string name="Command_Beacons_Tooltip">
Ortungssignale anzeigen
</string>
@ -6517,6 +6523,28 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="fsbridge_script_info_pf">
Durchschnittlich beanspruchte CPU-Zeit für Pathfinding-Navigation: [OBJECT_CHARACTER_TIME] ms.
</string>
<string name="fsbridge_script_info_ext">
Objekt-ID: [INSPECTING_KEY]
Beschreibung: [OBJECT_DESC]
Wurzel-Prim: [OBJECT_ROOT]
Primanzahl: [OBJECT_PRIM_COUNT]
Auswirkung auf Land: [OBJECT_PRIM_EQUIVALENCE]
Inventar-Objekte: [OBJECT_TOTAL_INVENTORY_COUNT]
Geschwindigkeit: [OBJECT_VELOCITY]
Position: [OBJECT_POS]
Rotation: [OBJECT_ROT]
Winkelgeschwindigkeit: [OBJECT_OMEGA] (Rad pro Sekunde)
Ersteller: [OBJECT_CREATOR]
Besitzer: [OBJECT_OWNER]
Vorheriger Besitzer: [OBJECT_LAST_OWNER_ID]
Gerezt von: [OBJECT_REZZER_KEY]
Gruppe: [OBJECT_GROUP]
Erstellungszeit: [OBJECT_CREATION_TIME]
Pathfinding-Typ: [OBJECT_PATHFINDING_TYPE]
Angehängt an: [OBJECT_ATTACHED_POINT]
Temporär angehängt: [OBJECT_TEMP_ATTACHED]
Ihre aktuelle Position: [AVATAR_POS]
</string>
<string name="fsbridge_error_scriptinfonotfound">
Skript-Info: Zu prüfendes Objekt ungültig oder außer Reichweite.
</string>
@ -6666,6 +6694,12 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="fs_preprocessor_error">
[ERR_NAME] ([LINENUMBER]): Unerwarteter Ausnahmefehler aufgetreten.
</string>
<string name="fs_preprocessor_lsl2_directive_override">
Erkannte LSL2-Kompilierungsdirektive übersteuert Voreinstellung.
</string>
<string name="fs_preprocessor_mono_directive_override">
Erkannte Mono-Kompilierungsdirektive übersteuert Voreinstellung.
</string>
<!-- LSL Optimizer -->
<string name="fs_preprocessor_optimizer_start">
Entfernung von nicht-referenzierten benutzerdefinierten Funktionen und globalen Variablen.
@ -6870,4 +6904,10 @@ Setzen Sie den Editorpfad in Anführungszeichen
[ASSET_NAME]
</string>
<string name="Yes">
Ja
</string>
<string name="No">
Nein
</string>
</strings>

View File

@ -2,12 +2,13 @@
<floater
can_close="true"
can_drag_on_left="false"
can_minimize="false"
can_resize="false"
height="480"
min_height="480"
width="980"
min_width="980"
can_minimize="true"
can_resize="true"
height="585"
min_height="585"
width="1024"
top="0"
min_width="1024"
name="Model Preview"
title="Upload Model"
help_topic="upload_model">
@ -33,20 +34,24 @@
<string name="mesh_status_too_many_vertices">Level of detail has too many vertices.</string>
<string name="mesh_status_missing_lod">Missing required level of detail.</string>
<string name="mesh_status_invalid_material_list">LOD materials are not a subset of reference model.</string>
<string name="phys_status_vertex_limit_exceeded">Some physical hulls exceed vertex limitations.</string>
<string name="phys_status_vertex_limit_exceeded">Some physical hulls exceed the vertex limit (256); try an alternative 'Analyze Method'.</string>
<string name="phys_status_hull_limit_exceeded">Some models exceed the hull limit (256); try 'simplify'.</string>
<string name="phys_status_degenerate_triangles">Physics mesh too dense; remove the small, thin triangles (see preview).</string>
<string name="phys_status_no_havok">The OpenSim version is not recommended for physics upload in SL. Results may be unpredictable.</string>
<string name="phys_status_unknown_error">An unrecognized error was detected.</string>
<string name="layer_all">All</string> <!-- Text to display in physics layer combo box for "all layers" -->
<string name="decomposing">Analyzing...</string>
<string name="simplifying">Simplifying...</string>
<string name="tbd">TBD</string>
<panel
follows="top|left"
height="455"
layout="topleft"
left="3"
name="left_panel"
top_pad="10"
width="630">
<panel
follows="top|left"
height="570"
layout="topleft"
left="3"
name="left_panel"
top_pad="0"
width="630">
<panel
follows="all"
height="50"
@ -785,8 +790,9 @@
name="first_step_name"
text_color="White"
top_pad="0"
width="210">
Step 1: Level of Detail
width="210"
valign="center">
Step 1: Pick a physics model
</text>
<combo_box
follows="left|top"
@ -828,7 +834,7 @@
layout="topleft"
left="18"
name="physics_tab_border"
top_pad="15"
top_pad="10"
width="589"/>
<panel
bg_alpha_color="0 0 0 0"
@ -837,7 +843,7 @@
follows="top|left"
left="18"
name="physics analysis"
top_pad="15"
top_pad="10"
visible="true"
width="589">
<text
@ -849,7 +855,7 @@
name="method_label"
text_color="White"
top_pad="0">
Step 2: Analyze
Step 2: Convert to hulls (optional)
</text>
<text
follows="top|left"
@ -935,7 +941,7 @@
layout="topleft"
left="18"
name="physics_tab_border"
top_pad="15"
top_pad="10"
width="589"/>
<panel
bg_alpha_color="0 0 0 0"
@ -944,7 +950,7 @@
height="66"
left="18"
name="physics simplification"
top_pad="15"
top_pad="10"
width="589">
<text
text_color="White"
@ -1043,7 +1049,7 @@
layout="topleft"
left="18"
name="physics_tab_border"
top_pad="15"
top_pad="10"
width="589"/>
<panel
bg_alpha_color="0 0 0 0"
@ -1105,10 +1111,9 @@
follows="left|top"
height="19"
layout="topleft"
left_pad="5"
top_delta="0"
top_pad="5"
name="physics message"
width="270">
width="589">
<icon
follows="left|top"
height="16"
@ -1123,7 +1128,7 @@
layout="topleft"
left_pad="2"
name="physics_status_message_text"
width="252"
width="573"
top_delta="3"/>
</panel>
</panel>
@ -1184,7 +1189,6 @@
follows="top|left"
name="upload_textures"
label="Include textures"
label_text.text_color="White"
left="20"
top_pad="20"/>
<view_border
@ -1209,21 +1213,18 @@
follows="top|left"
height="15"
label="Include skin weight"
label_text.text_color="White"
name="upload_skin"
top_pad="15"/>
<check_box
follows="top|left"
height="15"
label="Include joint positions"
label_text.text_color="White"
name="upload_joints"
top_pad="15"/>
<check_box
follows="top|left"
height="15"
label="Lock scale if joint position defined"
label_text.text_color="White"
name="lock_scale_if_joint_position"
top_pad="15"/>
<text
@ -1246,16 +1247,41 @@
top_pad="10"
value="0.0"
width="80"/>
<panel
follows="top|left"
layout="topleft"
border="true"
left="400"
height="165"
top="100"
width="200"
name="avatar_model_hint_panel"
>
<text
left="5"
width="190"
height="165"
name="avatar_model_hint_text"
wrap="true"
word_wrap="true"
type="string">
Tip:
Too many items use the default (right hand) unnecessarily.
Please consider using an attachment point close to the item's position on the body.
</text>
</panel>
</panel>
</tab_container>
<panel
follows="top|left"
height="80"
layout="top|left"
left="0"
follows="top|left|bottom"
layout="topleft"
height="184"
left="4"
border="true"
name="weights_and_warning_panel"
top_pad="3"
width="625">
width="629">
<button
follows="top|left"
label="Calculate weights &amp; fee"
@ -1295,10 +1321,10 @@
label_color="White"
layout="topleft"
name="reset_btn"
right="-2"
right="-5"
top="3"
height="20"
width="275"/>
width="265"/>
<!-- ========== WEIGHTS ==========-->
<text
follows="top|left"
@ -1317,7 +1343,7 @@
left_pad="0"
name="prim_weight"
top_delta="0"
width="120"
width="130"
word_wrap="true">
Land impact: [EQ]
</text>
@ -1327,7 +1353,7 @@
left_pad="0"
name="download_weight"
top_delta="0"
width="100"
width="130"
word_wrap="true">
Download: [ST]
</text>
@ -1337,7 +1363,7 @@
layout="topleft"
left_pad="0"
name="physics_weight"
width="90"
width="130"
word_wrap="true">
Physics: [PH]
</text>
@ -1347,17 +1373,257 @@
layout="topleft"
left_pad="0"
name="server_weight"
width="83"
width="130"
word_wrap="true">
Server: [SIM]
</text>
<!-- ========== NOTE MESSAGE ========== -->
<!-- =========== Cost breakdown ======== -->
<panel
border="true"
top_pad="5"
layout="topleft"
left="6"
name="price_breakdown_panel"
width="120"
height="100">
<text
layout="topleft"
left="3"
name="price_breakdown_title">
Price Breakdown
</text>
<view_border
bevel_style="none"
follows="top|left"
height="0"
layout="topleft"
left="3"
name="price_breakdown_border"
top_pad="5"
width="110"/>
<text
height="80"
top_pad="5"
layout="topleft"
left="3"
name="price_breakdown_labels"
width="70"
word_wrap="false">
Download:
Physics:
Instances:
Textures:
Model:
</text>
<text
height="80"
top_delta="0"
layout="topleft"
halign="right"
left_pad="0"
name="price_breakdown"
width="40"
word_wrap="false">
[STREAMING]
[PHYSICS]
[INSTANCES]
[TEXTURES]
[MODEL]
</text>
</panel>
<!--
Streaming breakdown numbers are available but not fully understood
uncommenting the following sections will display the numbers for debugging purposes
<text
height="80"
top_delta="0"
layout="topleft"
left="130"
name="streaming_breakdown_labels"
width="65"
word_wrap="true">
Streaming/Download:
High:
Medium:
Low:
Lowest:
</text>
<text
height="80"
top_delta="0"
layout="topleft"
left_pad="0"
name="streaming_breakdown"
width="95"
word_wrap="true">
[STR_TOTAL]
[STR_HIGH]
[STR_MED]
[STR_LOW]
[STR_LOWEST]
</text>-->
<panel
border="true"
layout="topleft"
left_pad="15"
name="physics_breakdown_panel"
width="120"
height="100">
<text
layout="topleft"
name="physics_breakdown_title"
left="3">
Physics Costs
</text>
<view_border
bevel_style="none"
follows="top|left"
height="0"
layout="topleft"
left="3"
name="physics_breakdown_border"
top_pad="5"
width="110"/>
<text
height="80"
top_pad="5"
layout="topleft"
left="5"
name="physics_breakdown_labels"
width="65">
Base Hull:
Mesh:
Analysed:
</text>
<text
height="80"
top_delta="0"
layout="topleft"
left_pad="0"
name="physics_breakdown"
width="40"
halign="right"
word_wrap="false"
visible="true">
[PCH]
[PM]
[PHU]
</text>-->
</panel>
<panel
follows="top|left"
layout="topleft"
left_pad="100"
height="100"
border="true"
name="preview_controls_panel"
width="260">
<panel
name="preview_controls_inner_panel"
height="18" >
<text
height="18"
layout="topleft"
name="preview_controls_title"
left="3"
width="150">
Preview controls
</text>
<combo_box
can_resize="false"
follows="top|left"
left="-85"
top_delta="-2"
height="18"
layout="topleft"
name="preview_lod_combo"
width="80"
tool_tip="LOD to view in preview render">
<combo_item name="high"> High </combo_item>
<combo_item name="medium"> Medium </combo_item>
<combo_item name="low"> Low </combo_item>
<combo_item name="lowest"> Lowest </combo_item>
</combo_box>
</panel>
<view_border
bevel_style="none"
follows="top|left"
height="0"
layout="topleft"
left="3"
name="preview_controls_border"
top_pad="5"
halign="center"
width="250"/>
<check_box
follows="top|left"
label="Edges"
layout="topleft"
name="show_edges"
width="70"
left="0"
top_pad="10"/>
<check_box
follows="top|left"
label="Textures"
layout="topleft"
name="show_textures"
left_pad="0"/>
<check_box
follows="top|left"
label="UV guide"
layout="topleft"
name="show_uv_guide"
left_pad="0"/>
<check_box
follows="top|left"
top_pad="10"
left="0"
width="70"
label="Physics"
name="show_physics"/>
<text
layout="topleft"
follows="top|left"
left_pad="2"
height="16"
width="80"
name="exploder_label">
Explode hulls
</text>
<slider
name="physics_explode"
show_text="false"
top_delta="1"
follows="top|left"
valign="center"
left_pad="2"
min_val="0.0"
max_val="3.0"
width="100"/>
<check_box
follows="top|left"
top_pad="15"
label="Weights"
layout="topleft"
width="70"
name="show_skin_weight"
left="0"/>
<check_box
follows="top|left"
label="Joints"
height="0"
layout="topleft"
name="show_joint_positions"
left_pad="0"/>
</panel>
<!-- ========== NOTE MESSAGE ========== -->
<text
font="SansSerif"
layout="topleft"
left="6"
name="warning_title"
top_pad="10"
top_pad="5"
text_color="DrYellow"
visible="false"
width="40">
@ -1370,125 +1636,46 @@
left_pad="1"
name="warning_message"
parse_urls="true"
top_delta="2"
top_delta="0"
wrap="true"
width="462"
visible="false">
You dont have rights to upload mesh models. [[VURL] Find out how] to get certified.
</text>
<text text_color="Yellow" layout="topleft" top_delta="20" left="6" name="status">[STATUS]</text>
<text text_color="Yellow" layout="topleft" top_delta="5" left="6" name="status">
[STATUS]
</text>
</panel>
</panel>
<text
follows="left|top"
layout="topleft"
left="640"
name="lod_label"
text_color="White"
top="13"
height="15"
width="290">
Preview:
</text>
<panel
border="true"
bevel_style="none"
follows="top|left"
name="preview_panel"
top_pad="4"
width="290"
height="290"/>
<panel
follows="all"
height="130"
layout="topleft"
name="right_panel"
top_pad="5"
width="340">
<combo_box
top_pad="3"
</panel>
<panel
follows="top|left|bottom|right"
can_resize="true"
name="right_panel"
top="0"
left="640"
background_visible="true"
width="375"
height="570">
<!--<text
follows="left|top"
height="18"
layout="topleft"
name="preview_lod_combo"
width="150"
tool_tip="LOD to view in preview render">
<combo_item name="high"> High </combo_item>
<combo_item name="medium"> Medium </combo_item>
<combo_item name="low"> Low </combo_item>
<combo_item name="lowest"> Lowest </combo_item>
</combo_box>
<text
follows="top|left"
layout="topleft"
text_color="White"
top="5"
left_pad="20"
name="label_display"
width="50">
Display...
</text>
<check_box
follows="top|left"
label="Edges"
label_text.text_color="White"
layout="topleft"
left_delta="0"
name="show_edges"
top_pad="8">
</check_box>
<check_box
follows="top|left"
label="Physics"
label_text.text_color="White"
layout="topleft"
name="show_physics"
top_pad="8">
</check_box>
<check_box
follows="top|left"
label="Textures"
label_text.text_color="White"
layout="topleft"
name="show_textures"
top_pad="8">
</check_box>
<check_box
follows="top|left"
label="Skin weights"
label_text.text_color="White"
layout="topleft"
name="show_skin_weight"
top_pad="8">
</check_box>
<check_box
follows="top|left"
label="Joints"
label_text.text_color="White"
layout="topleft"
name="show_joint_positions"
top_pad="8">
</check_box>
<text
follows="top|left"
layout="topleft"
left="2"
name="physics_explode_label"
top="85"
width="150">
Preview Spread:
</text>
<slider
name="physics_explode"
follows="top|left"
top="100"
left="0"
min_val="0.0"
max_val="3.0"
height="20"
width="150"/>
</panel>
name="lod_label"
text_color="White"
top="13"
height="15"
width="290">
Preview:
</text>-->
</panel>
<panel
border="true"
bevel_style="none"
follows="top|left|right|bottom"
layout="topleft"
name="preview_panel"
top="5"
width="375"
/>
</floater>

View File

@ -86,7 +86,7 @@
layout="topleft"
left="484"
name="Continue"
top_delta="35"
top_delta="45"
width="100" />
<button
height="20"

View File

@ -13,7 +13,7 @@
save_rect="true"
single_instance="true"
title="Toolbar Buttons"
width="900">
width="925">
<text
follows="left|top"
font="SansSerifMedium"

View File

@ -53,6 +53,13 @@
<menu_item_call.on_visible
function="Profile.EnableUnblock" />
</menu_item_call>-->
<menu_item_call
label="Add to Contact Set"
layout="topleft"
name="add_to_contact_set">
<menu_item_call.on_click
function="Profile.AddToContactSet" />
</menu_item_call>
<menu_item_call
label="Copy Name"
layout="topleft"

View File

@ -4064,7 +4064,13 @@
function="ToggleControl"
parameter="TextureDisable" />
</menu_item_check>
<menu_item_check
<menu_item_call
label="Derender all animesh"
name="Derender Animesh">
<menu_item_call.on_click
function="Tools.DerenderAnimatedObjects" />
</menu_item_call>
<menu_item_check
label="Full Res Textures (dangerous)"
name="Full Res Textures">
<menu_item_check.on_check

View File

@ -615,6 +615,16 @@ Save all changes to clothing/body parts?
yestext="OK"/>
</notification>
<notification
icon="alertmodal.tga"
name="AllowMultipleViewers"
type="alertmodal">
Running multiple Second Life viewers is not supported. It can lead to texture cache collisions, corruption and degraded visuals and performance.
<usetemplate
name="okbutton"
yestext="OK"/>
</notification>
<notification
icon="alertmodal.tga"
name="GrantModifyRights"

View File

@ -13,36 +13,39 @@
<string
name="message_max_lines_count"
value="30" />
<!-- THIS PANEL CONTROLS TOAST HEIGHT? -->
<panel
bevel_style="none"
follows="all"
height="120"
label="info_panel"
layout="topleft"
left="0"
name="info_panel"
top="0"
width="305">
<text
bg_readonly_color="ScriptDialog"
border_visible="false"
follows="all"
font="SansSerif"
height="110"
layout="topleft"
left="10"
mouse_opaque="false"
name="text_editor_box"
read_only="true"
text_color="ScriptDialogFg"
text_readonly_color="ScriptDialogFg"
top="0"
value="informational text"
width="285"
wrap="true"
parse_highlights="true"
parse_urls="true"/>
</panel>
bevel_style="none"
follows="all"
height="120"
label="info_panel"
layout="topleft"
left="0"
name="info_panel"
top="0"
width="305">
<text_editor
bg_readonly_color="ScriptDialog"
border_visible="false"
embedded_items="false"
enabled="true"
follows="all"
font="SansSerif"
height="120"
layout="topleft"
left="10"
mouse_opaque="false"
name="text_editor_box"
read_only="true"
text_color="ScriptDialogFg"
text_readonly_color="ScriptDialogFg"
top="0"
visible="true"
width="285"
wrap="true"
parse_highlights="true"
parse_urls="true"/>
</panel>
<panel
bevel_style="none"
follows="left|right|bottom"
@ -54,7 +57,7 @@
top_pad="5"
width="305">
<text_editor
border_visible="true"
border_visible="true"
parse_urls="true"
enabled="true"
follows="all"

View File

@ -1693,6 +1693,15 @@
tool_tip="If enabled, you can preview animations during the upload process on your own avatar"
name="FSUploadAnimationOnOwnAvatar"
control_name="FSUploadAnimationOnOwnAvatar"/>
<check_box
top_pad="8"
follows="left|top"
height="16"
label="Enable extend script info details"
tool_tip="If enabled, extend basic script info feature with various details useful for builders"
name="FSScriptInfoExtended"
enabled_control="UseLSLBridge"
control_name="FSScriptInfoExtended"/>
</panel>
<!--Uploads-->

View File

@ -2628,6 +2628,7 @@ Try enclosing path to the editor with double quotes.
<string name="Command_Group_Titles_Label">Group Titles</string>
<string name="Command_Wearable_Favorites_Label">Favorite Wearables</string>
<string name="Command_RFO_Label">Show Friends Only</string>
<string name="Command_DAO_Label">Derender Animesh</string>
<string name="Command_Beacons_Label">Beacons</string>
<string name="Command_AboutLand_Tooltip">Information about the land you're visiting</string>
@ -2691,6 +2692,7 @@ Try enclosing path to the editor with double quotes.
<string name="Command_Group_Titles_Tooltip">Change active group tag</string>
<string name="Command_Wearable_Favorites_Tooltip">Open the list of favorite wearables</string>
<string name="Command_RFO_Tooltip">Show only your friends in the viewer, all other avatars will be removed. Once enabled a TP is required to restore visibility of others.</string>
<string name="Command_DAO_Tooltip">Derender Animated Objects (aka Animesh) - Temporarily derenders all currently visible Animesh (attached and free roaming). Derendered animesh will reappear after a TP</string>
<string name="Command_Beacons_Tooltip">Show beacons</string>
<string name="Toolbar_Bottom_Tooltip">currently in your bottom toolbar</string>
@ -2914,6 +2916,28 @@ Try enclosing path to the editor with double quotes.
<string name="fsbridge_created">Bridge created.</string>
<string name="fsbridge_script_info">Script info: '[OBJECT_NAME]': [[OBJECT_RUNNING_SCRIPT_COUNT]/[OBJECT_TOTAL_SCRIPT_COUNT]] running scripts, [OBJECT_SCRIPT_MEMORY] KB allowed memory size limit, [OBJECT_SCRIPT_TIME] ms of CPU time consumed.[PATHFINDING_TEXT]</string>
<string name="fsbridge_script_info_pf">Average CPU time used for pathfinding navigation: [OBJECT_CHARACTER_TIME] ms.</string>
<string name="fsbridge_script_info_ext">
Object ID: [INSPECTING_KEY]
Description: [OBJECT_DESC]
Root prim: [OBJECT_ROOT]
Prim count: [OBJECT_PRIM_COUNT]
Land impact: [OBJECT_PRIM_EQUIVALENCE]
Inventory items: [OBJECT_TOTAL_INVENTORY_COUNT]
Velocity: [OBJECT_VELOCITY]
Position: [OBJECT_POS]
Rotation: [OBJECT_ROT]
Angular velocity: [OBJECT_OMEGA] (radians per second)
Creator: [OBJECT_CREATOR]
Owner: [OBJECT_OWNER]
Previous owner: [OBJECT_LAST_OWNER_ID]
Rezzed by: [OBJECT_REZZER_KEY]
Group: [OBJECT_GROUP]
Creation time: [OBJECT_CREATION_TIME]
Pathfinding type: [OBJECT_PATHFINDING_TYPE]
Attachment point: [OBJECT_ATTACHED_POINT]
Temporarily attached: [OBJECT_TEMP_ATTACHED]
Your current position: [AVATAR_POS]
</string>
<string name="fsbridge_error_scriptinfonotfound">Script info: Object to check is invalid or out of range.</string>
<string name="fsbridge_error_scriptinfomalformed">Script info: Received malformed response from bridge. Try again.</string>
<string name="fsbridge_error_injection">NOTICE: One or more scripts have been added to your Firestorm bridge! If you did not expect this message, use the Firestorm 'Avatar/Avatar Health/Recreate Bridge' menu option to re-create your bridge now.</string>
@ -2975,6 +2999,8 @@ Try enclosing path to the editor with double quotes.
<string name="fs_preprocessor_lexing_exception">[SEVERITY]: [ERR_NAME] ([LINENUMBER]): [ERR_DESC]</string>
<string name="fs_preprocessor_exception">[ERR_NAME] ([LINENUMBER]): exception caught: [ERR_DESC]</string>
<string name="fs_preprocessor_error">[ERR_NAME] ([LINENUMBER]): unexpected exception caught.</string>
<string name="fs_preprocessor_lsl2_directive_override">Detected compile-as-LSL2 directive overriding preference setting.</string>
<string name="fs_preprocessor_mono_directive_override">Detected compile-as-Mono directive overriding preference setting.</string>
<!-- LSL Optimizer -->
<string name="fs_preprocessor_optimizer_start">Optimizing out unreferenced user-defined functions and global variables.</string>
<string name="fs_preprocessor_optimizer_regex_err">Not a valid regular expression: '[WHAT]'; LSL optimization skipped.</string>
@ -3082,7 +3108,8 @@ Try enclosing path to the editor with double quotes.
<string name="mode_settings_text.xml">Text</string>
<string name="Asset_Uploading">Uploading...
[ASSET_NAME]
</string>
<string name="Yes">Yes</string>
<string name="No">No</string>
</strings>

View File

@ -30,6 +30,6 @@
<text name="label" width="72">
Predefinido:
</text>
<button label="Borrar" name="delete"/>
<button label="Eliminar" name="delete"/>
<button label="Cancelar" name="cancel"/>
</floater>

View File

@ -6,6 +6,9 @@
<string name="status_parse_error">
Error: Problema de análisis de DAE - consulta los datos en el registro.
</string>
<string name="status_bind_shape_orientation">
Atención: la matriz de forma unida no está en orientación X-forward estándar.
</string>
<string name="status_material_mismatch">
Error: el material del modelo no es un subconjunto del modelo de referencia.
</string>

View File

@ -422,6 +422,7 @@
<text name="edit_object">
Editar las características del objeto:
</text>
<check_box label="Malla animada" name="Animated Mesh Checkbox Ctrl" tool_tip="Permite que los objetos de malla aparejados estén animados de manera independiente"/>
<check_box label="Flexibilidad" name="Flexible1D Checkbox Ctrl" tool_tip="Permite que el objeto flexione en el eje Z (sólo del lado del cliente)."/>
<spinner label="Blandura" name="FlexNumSections"/>
<spinner label="Gravedad" name="FlexGravity"/>

View File

@ -46,6 +46,8 @@
<menu_item_call label="Respaldo" name="Backup"/>
<menu_item_call label="Collada" name="Collada"/>
</context_menu>
<menu_item_call label="Volcar XML" name="Dump XML"/>
<menu_item_call label="Restablecer esqueleto" name="Reset Skeleton"/>
<menu_item_call label="Eliminar" name="Delete"/>
<menu_item_call label="Bloquear propietario de las partículas" name="Mute Particle"/>
</context_menu>

View File

@ -3,6 +3,7 @@
<menu_item_check label="Ordenar según las intervenciones recientes" name="sort_by_recent_speakers"/>
<menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
<menu_item_check label="Ordenar según distancia" name="sort_distance"/>
<menu_item_check label="Ordenar según Llegada reciente" name="sort_arrival"/>
<menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
<menu_item_check label="Ver mapa" name="view_map"/>
</toggleable_menu>

View File

@ -370,7 +370,6 @@
<menu_item_check label="Mostrar matrices" name="Show Matrices"/>
<menu_item_check label="Color bajo el cursor" name="Show Color Under Cursor"/>
<menu_item_check label="Memoria" name="Show Memory"/>
<menu_item_check label="Mostrar información de memoria privada" name="Show Private Mem Info"/>
<menu_item_check label="Actualizaciones a objetos" name="Show Updates"/>
</menu>
<menu label="Forzar un error" name="Force Errors">
@ -405,6 +404,7 @@
<menu_item_check label="Área de textura" name="Texture Area"/>
<menu_item_check label="Área de cara" name="Face Area"/>
<menu_item_check label="Información sobre el nivel de detalle" name="LOD Info"/>
<menu_item_check label="Recuento de triángulo" name="Triangle Count"/>
<menu_item_check label="Cola de construcción" name="Build Queue"/>
<menu_item_check label="Luces" name="Lights"/>
<menu_item_check label="Armazón de colisión" name="Collision Skeleton"/>
@ -531,6 +531,7 @@
<menu_item_check label="Mostrar armazón de colisión" name="Show Collision Skeleton"/>
<menu_item_check label="Mostrar los huesos" name="Show Bones"/>
<menu_item_check label="Mostrar objetivo del avatar" name="Display Agent Target"/>
<menu_item_check label="Mostrar las medidas impostoras" name="Show Impostor Extents"/>
<menu_item_call label="Volcar objetos anexados" name="Dump Attachments"/>
<menu_item_call label="Depurar texturas del avatar" name="Debug Avatar Textures"/>
<menu_item_call label="Volcar texturas locales" name="Dump Local Textures"/>

View File

@ -3412,6 +3412,9 @@ Por tu seguridad, serán bloqueadas durante unos segundos.
<notification name="PresetNotSaved">
Error al guardar el valor predefinido [NAME].
</notification>
<notification name="DefaultPresetNotSaved">
No se puede sobrescribir el valor predefinido.
</notification>
<notification name="PresetNotDeleted">
Error al eliminar el valor predefinido [NAME].
</notification>
@ -4238,6 +4241,9 @@ Prueba otra vez dentro de un minuto.
<notification name="CantCreateObjectRegionFull">
No se puede crear el objeto solicitado. La región está llena.
</notification>
<notification name="CantCreateAnimatedObjectTooLarge">
No se puede crear el objeto animado solicitado ya que supera el límite de triángulo aparejado.
</notification>
<notification name="CantAttackMultipleObjOneSpot">
No puedes anexar varios objetos a un solo lugar.
</notification>
@ -4286,6 +4292,21 @@ Prueba otra vez dentro de un minuto.
<notification name="CantChangeShape">
No tienes permiso para cambiar esta forma.
</notification>
<notification name="NoPermsTooManyAttachedAnimatedObjects">
Esta operación provocaría que la cantidad de objetos animados adjuntos supere el límite.
</notification>
<notification name="NoPermsLinkAnimatedObjectTooLarge">
No se puede establecer un enlace entre estos objetos porque el objeto animado resultante superaría el límite de triángulo aparejado.
</notification>
<notification name="NoPermsSetFlagAnimatedObjectTooLarge">
No se puede transformar este objeto en un objeto animado ya que superaría el límite de triángulo aparejado.
</notification>
<notification name="CantChangeAnimatedObjectStateInsufficientLand">
No se puede cambiar el estado de objeto animado para este objeto porque provocaría que se exceda el límite de parcela.
</notification>
<notification name="ErrorNoMeshData">
Error del servidor: no se puede completar esta operación ya que los datos de malla no han sido cargados.
</notification>
<notification name="NoAccessToClaimObjects">
Tus privilegios de acceso no te permiten reclamar objetos aquí.
</notification>

View File

@ -4,6 +4,9 @@
<string name="status_parse_error">
Erreur : Problème d&apos;analyse de fichier .dae ; reportez-vous au journal pour plus de détails.
</string>
<string name="status_bind_shape_orientation">
Avertissement : la matrice de formes de reliure n&apos;est pas dans l&apos;orientation standard X-avant.
</string>
<string name="status_material_mismatch">
Erreur : le matériau du modèle ne correspond pas à un sous-ensemble du modèle de référence.
</string>

View File

@ -273,6 +273,7 @@
<text name="select_single">Sélectionnez un prim pour changer ses attributs.</text>
<text name="edit_object">Modifier les attributs de l'objet :</text>
<check_box label="Flexible Path" name="Flexible1D Checkbox Ctrl" tool_tip="Permet à l'objet de se plier le long de l'axe Z (côté client uniquement)"/>
<check_box label="Maillage animé" name="Animated Mesh Checkbox Ctrl" tool_tip="Permet aux objets maillés calés d&apos;être animés indépendamment"/>
<spinner label="Souplesse" name="FlexNumSections"/>
<spinner label="Gravité" name="FlexGravity"/>
<spinner label="Élasticité" name="FlexFriction"/>

View File

@ -48,4 +48,6 @@
</context_menu>
<menu_item_call label="Supprimer" name="Delete"/>
<menu_item_call label="Ignorer le propriétaire des particules" name="Mute Particle"/>
<menu_item_call label="Dump XML" name="Dump XML"/>
<menu_item_call label="Réinitialiser le squelette" name="Reset Skeleton"/>
</context_menu>

View File

@ -3,6 +3,8 @@
<menu_item_check label="Trier par intervenants récents" name="sort_by_recent_speakers"/>
<menu_item_check label="Trier par nom" name="sort_name"/>
<menu_item_check label="Trier par distance" name="sort_distance"/>
<menu_item_check name="view_icons" label="Afficher les icônes des résidents"/>
<menu_item_check name="view_map" label="Afficher la carte"/>
<menu_item_check label="Trier par arrivée récente" name="sort_arrival"/>
<menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
<menu_item_check label="Afficher la carte" name="view_map"/>
<menu_item_check label="Masquer les noms dutilisateur" name="view_usernames"/>
</toggleable_menu>

View File

@ -373,7 +373,6 @@
<menu_item_check label="Show Matrices" name="Show Matrices"/>
<menu_item_check label="Show Color Under Cursor" name="Show Color Under Cursor"/>
<menu_item_check label="Show Memory" name="Show Memory"/>
<menu_item_check label="Show Private Mem Info" name="Show Private Mem Info"/>
<menu_item_check label="Show Updates to Objects" name="Show Updates"/>
</menu>
<menu label="Force an Error" name="Force Errors">
@ -409,6 +408,7 @@
<menu_item_check label="Texture Area" name="Texture Area"/>
<menu_item_check label="Face Area" name="Face Area"/>
<menu_item_check label="LOD Info" name="LOD Info"/>
<menu_item_check label="Nombre de triangles" name="Triangle Count"/>
<menu_item_check label="Build Queue" name="Build Queue"/>
<menu_item_check label="Lights" name="Lights"/>
<menu_item_check label="Particles" name="Particles"/>
@ -536,6 +536,7 @@
<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
<menu_item_check label="Voir les os" name="Show Bones"/>
<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
<menu_item_check label="Afficher les étendues d&apos;imposteur" name="Show Impostor Extents"/>
<menu_item_call label="Dump Attachments" name="Dump Attachments"/>
<menu_item_call label="Debug Avatar Textures" name="Debug Avatar Textures"/>
<menu_item_call label="Dump Local Textures" name="Dump Local Textures"/>

View File

@ -3207,6 +3207,9 @@ Elles vont être bloquées pendant quelques secondes pour votre sécurité.
<notification name="PresetNotSaved">
Erreur denregistrement du préréglage [NAME].
</notification>
<notification name="DefaultPresetNotSaved">
Impossible de remplacer le préréglage par défaut.
</notification>
<notification name="PresetNotDeleted">
Erreur de suppression du préréglage [NAME].
</notification>
@ -3966,6 +3969,9 @@ Veuillez réessayer dans une minute.
<notification name="CantCreateObjectRegionFull">
Création de l&apos;objet demandé impossible. La région est pleine.
</notification>
<notification name="CantCreateAnimatedObjectTooLarge">
Impossible de créer l&apos;objet animé demandé car il dépasserait la limite de triangle calé.
</notification>
<notification name="CantAttackMultipleObjOneSpot">
Vous ne pouvez pas attacher plusieurs objets au même endroit.
</notification>
@ -4014,6 +4020,21 @@ Veuillez réessayer dans une minute.
<notification name="CantChangeShape">
Vous nêtes pas autorisé à modifier cette forme.
</notification>
<notification name="NoPermsTooManyAttachedAnimatedObjects">
Une opération entraînerait le dépassement du nombre d&apos;objets animés attachés.
</notification>
<notification name="NoPermsLinkAnimatedObjectTooLarge">
Impossible de lier ces objets car l&apos;objet animé résultant dépasserait la limite de triangle calé.
</notification>
<notification name="NoPermsSetFlagAnimatedObjectTooLarge">
Impossible de transformer cet objet en objet animé car il dépasserait la limite de triangle calé.
</notification>
<notification name="CantChangeAnimatedObjectStateInsufficientLand">
Impossible de modifier l&apos;état de l&apos;objet animé pour cet objet, car cela entraînerait un dépassement de la limite de parcelles.
</notification>
<notification name="ErrorNoMeshData">
Erreur de serveur : impossible d&apos;effectuer cette opération car les données de maillage ne sont pas chargées.
</notification>
<notification name="NoAccessToClaimObjects">
Vos privilèges d&apos;accès ne vous autorisent pas à revendiquer des objets ici.
</notification>

View File

@ -10,10 +10,10 @@
Cancella ciclo giornata
</string>
<string name="label_water">
Valori predefiniti:
Valore predefinito:
</string>
<string name="label_sky">
Valori predefiniti:
Valore predefinito:
</string>
<string name="label_day_cycle">
Ciclo giornata:
@ -28,7 +28,7 @@
-Seleziona un preset-
</string>
<text name="label">
Preset:
Valore predefinito:
</text>
<button label="Elimina" name="delete"/>
<button label="Annulla" name="cancel"/>

Some files were not shown because too many files have changed in this diff Show More