summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2016-09-02 14:34:06 -0400
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2016-09-02 14:34:06 -0400
commita2875ba53ec02235a0db5734264108c0f0898269 (patch)
treef9dc66183550cda2c3478f72fa7018094da3cd19 /indra/newview
parent227eb6c4a49724fe513f5d67af68d355d173f951 (diff)
parentd07a8b9965b54fca34b239a51af46b996a58d553 (diff)
merge
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/CMakeLists.txt5
-rw-r--r--indra/newview/app_settings/commands.xml2
-rw-r--r--indra/newview/app_settings/keywords_lsl_default.xml30
-rw-r--r--indra/newview/app_settings/settings.xml35
-rw-r--r--indra/newview/character/avatar_lad.xml2280
-rw-r--r--indra/newview/character/avatar_skeleton.xml99
-rw-r--r--indra/newview/featuretable.txt2
-rw-r--r--indra/newview/featuretable_linux.txt2
-rw-r--r--indra/newview/featuretable_mac.txt2
-rw-r--r--indra/newview/installers/windows/installer_template.nsi11
-rw-r--r--indra/newview/installers/windows/lang_en-us.nsibin8510 -> 9096 bytes
-rw-r--r--indra/newview/llaisapi.cpp21
-rw-r--r--indra/newview/llappearancemgr.cpp24
-rw-r--r--indra/newview/llappearancemgr.h4
-rw-r--r--indra/newview/llappviewer.cpp12
-rw-r--r--indra/newview/llavataractions.cpp122
-rw-r--r--indra/newview/llavataractions.h5
-rw-r--r--indra/newview/llavatarlist.cpp17
-rw-r--r--indra/newview/llavatarlist.h4
-rw-r--r--indra/newview/llavatarlistitem.cpp22
-rw-r--r--indra/newview/llavatarlistitem.h4
-rw-r--r--indra/newview/llavatarrenderinfoaccountant.cpp2
-rw-r--r--indra/newview/llavatarrendernotifier.cpp6
-rw-r--r--indra/newview/llchathistory.cpp21
-rw-r--r--indra/newview/llcompilequeue.cpp939
-rw-r--r--indra/newview/llcompilequeue.h86
-rw-r--r--indra/newview/lldrawpoolavatar.cpp1
-rw-r--r--indra/newview/lldrawpoolterrain.cpp17
-rw-r--r--indra/newview/lleventpoll.cpp15
-rw-r--r--indra/newview/lleventpoll.h8
-rw-r--r--indra/newview/llface.cpp1
-rw-r--r--indra/newview/llfasttimerview.cpp3
-rw-r--r--indra/newview/llfeaturemanager.cpp59
-rw-r--r--indra/newview/llfeaturemanager.h4
-rw-r--r--indra/newview/llfloatergesture.cpp3
-rw-r--r--indra/newview/llfloaterimnearbychathandler.cpp25
-rw-r--r--indra/newview/llfloaterimsessiontab.cpp6
-rw-r--r--indra/newview/llfloaterimsessiontab.h2
-rw-r--r--indra/newview/llfloatermodelpreview.cpp27
-rw-r--r--indra/newview/llfloaternamedesc.cpp22
-rw-r--r--indra/newview/llfloaterregioninfo.cpp52
-rw-r--r--indra/newview/llfloaterregioninfo.h7
-rw-r--r--indra/newview/llfloatersnapshot.cpp14
-rw-r--r--indra/newview/llfloatersnapshot.h1
-rw-r--r--indra/newview/llfloaterworldmap.cpp4
-rw-r--r--indra/newview/llfloaterworldmap.h2
-rw-r--r--indra/newview/llinspectremoteobject.cpp2
-rw-r--r--indra/newview/llinventoryfunctions.cpp6
-rw-r--r--indra/newview/llinventorymodel.cpp153
-rw-r--r--indra/newview/llinventorymodel.h2
-rw-r--r--indra/newview/llinventoryobserver.cpp30
-rw-r--r--indra/newview/lllocationinputctrl.cpp25
-rw-r--r--indra/newview/lllocationinputctrl.h1
-rw-r--r--indra/newview/lllogchat.cpp3
-rw-r--r--indra/newview/llmeshrepository.cpp28
-rw-r--r--indra/newview/llmeshrepository.h1
-rw-r--r--indra/newview/llpanelmaininventory.cpp20
-rw-r--r--indra/newview/llpanelmaininventory.h1
-rw-r--r--indra/newview/llpanelpeople.cpp21
-rw-r--r--indra/newview/llpanelpeoplemenus.cpp88
-rw-r--r--indra/newview/llpanelpeoplemenus.h2
-rw-r--r--indra/newview/llpanelprofile.cpp10
-rw-r--r--indra/newview/llpanelsnapshotinventory.cpp17
-rw-r--r--indra/newview/llpanelwearing.cpp2
-rw-r--r--indra/newview/llpresetsmanager.cpp57
-rw-r--r--indra/newview/llpresetsmanager.h2
-rw-r--r--indra/newview/llpreviewnotecard.cpp6
-rw-r--r--indra/newview/llpreviewtexture.cpp38
-rw-r--r--indra/newview/llskinningutil.cpp18
-rw-r--r--indra/newview/llstartup.cpp15
-rw-r--r--indra/newview/lltoast.cpp15
-rw-r--r--indra/newview/lltoast.h2
-rw-r--r--indra/newview/lltoastnotifypanel.cpp9
-rw-r--r--indra/newview/lltoastscriptquestion.cpp19
-rw-r--r--indra/newview/lltoastscriptquestion.h2
-rw-r--r--indra/newview/lltooldraganddrop.cpp60
-rw-r--r--indra/newview/lltoolmgr.cpp9
-rw-r--r--indra/newview/lltoolmgr.h1
-rw-r--r--indra/newview/lltracker.cpp6
-rw-r--r--indra/newview/lltracker.h2
-rw-r--r--indra/newview/llviewerassetupload.cpp7
-rw-r--r--indra/newview/llviewerinventory.cpp320
-rw-r--r--indra/newview/llviewerinventory.h7
-rw-r--r--indra/newview/llviewermenu.cpp13
-rw-r--r--indra/newview/llviewerpartsource.cpp10
-rw-r--r--indra/newview/llviewerregion.cpp5
-rw-r--r--indra/newview/llviewertexture.cpp3
-rw-r--r--indra/newview/llviewertexturelist.cpp22
-rw-r--r--indra/newview/llvoavatar.cpp266
-rw-r--r--indra/newview/llvoavatar.h1
-rw-r--r--indra/newview/llvoicevivox.cpp2
-rw-r--r--indra/newview/llvovolume.cpp9
-rw-r--r--indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_attachment_other.xml1
-rw-r--r--indra/newview/skins/default/xui/de/menu_attachment_self.xml1
-rw-r--r--indra/newview/skins/default/xui/de/menu_avatar_other.xml1
-rw-r--r--indra/newview/skins/default/xui/de/menu_avatar_self.xml1
-rw-r--r--indra/newview/skins/default/xui/de/menu_viewer.xml2
-rw-r--r--indra/newview/skins/default/xui/de/notifications.xml44
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_alerts.xml3
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml5
-rw-r--r--indra/newview/skins/default/xui/de/panel_sound_devices.xml4
-rw-r--r--indra/newview/skins/default/xui/de/strings.xml113
-rw-r--r--indra/newview/skins/default/xui/en/floater_script_queue.xml8
-rw-r--r--indra/newview/skins/default/xui/en/fonts.xml1
-rw-r--r--indra/newview/skins/default/xui/en/menu_login.xml7
-rw-r--r--indra/newview/skins/default/xui/en/menu_object_icon.xml14
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_friends_view.xml8
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_nearby.xml16
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_nearby_view.xml8
-rw-r--r--indra/newview/skins/default/xui/en/menu_url_objectim.xml7
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_wearing_tab.xml7
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml54
-rw-r--r--indra/newview/skins/default/xui/en/panel_login.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_login_first.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml5
-rw-r--r--indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_attachment_other.xml1
-rw-r--r--indra/newview/skins/default/xui/es/menu_attachment_self.xml1
-rw-r--r--indra/newview/skins/default/xui/es/menu_avatar_other.xml1
-rw-r--r--indra/newview/skins/default/xui/es/menu_avatar_self.xml1
-rw-r--r--indra/newview/skins/default/xui/es/menu_viewer.xml1
-rw-r--r--indra/newview/skins/default/xui/es/notifications.xml46
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_alerts.xml3
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml5
-rw-r--r--indra/newview/skins/default/xui/es/panel_sound_devices.xml4
-rw-r--r--indra/newview/skins/default/xui/es/strings.xml115
-rw-r--r--indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_attachment_other.xml1
-rw-r--r--indra/newview/skins/default/xui/fr/menu_attachment_self.xml1
-rw-r--r--indra/newview/skins/default/xui/fr/menu_avatar_other.xml1
-rw-r--r--indra/newview/skins/default/xui/fr/menu_avatar_self.xml1
-rw-r--r--indra/newview/skins/default/xui/fr/menu_viewer.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/notifications.xml48
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml3
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/panel_sound_devices.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/strings.xml113
-rw-r--r--indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_attachment_other.xml1
-rw-r--r--indra/newview/skins/default/xui/it/menu_attachment_self.xml1
-rw-r--r--indra/newview/skins/default/xui/it/menu_avatar_other.xml1
-rw-r--r--indra/newview/skins/default/xui/it/menu_avatar_self.xml1
-rw-r--r--indra/newview/skins/default/xui/it/menu_viewer.xml2
-rw-r--r--indra/newview/skins/default/xui/it/notifications.xml44
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_alerts.xml3
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml5
-rw-r--r--indra/newview/skins/default/xui/it/panel_sound_devices.xml4
-rw-r--r--indra/newview/skins/default/xui/it/strings.xml113
-rw-r--r--indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/menu_attachment_other.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/menu_attachment_self.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/menu_avatar_other.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/menu_avatar_self.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/menu_viewer.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/notifications.xml46
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/panel_sound_devices.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/strings.xml120
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_attachment_other.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/menu_attachment_self.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/menu_avatar_other.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/menu_avatar_self.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/menu_viewer.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/notifications.xml46
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/panel_sound_devices.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/strings.xml115
-rw-r--r--indra/newview/skins/default/xui/ru/menu_attachment_other.xml1
-rw-r--r--indra/newview/skins/default/xui/ru/menu_attachment_self.xml1
-rw-r--r--indra/newview/skins/default/xui/ru/menu_avatar_other.xml1
-rw-r--r--indra/newview/skins/default/xui/ru/menu_avatar_self.xml1
-rw-r--r--indra/newview/skins/default/xui/ru/menu_viewer.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/notifications.xml44
-rw-r--r--indra/newview/skins/default/xui/ru/panel_preferences_alerts.xml3
-rw-r--r--indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml5
-rw-r--r--indra/newview/skins/default/xui/ru/panel_sound_devices.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/strings.xml111
-rw-r--r--indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/menu_attachment_other.xml1
-rw-r--r--indra/newview/skins/default/xui/tr/menu_attachment_self.xml1
-rw-r--r--indra/newview/skins/default/xui/tr/menu_avatar_other.xml1
-rw-r--r--indra/newview/skins/default/xui/tr/menu_avatar_self.xml1
-rw-r--r--indra/newview/skins/default/xui/tr/menu_viewer.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/notifications.xml46
-rw-r--r--indra/newview/skins/default/xui/tr/panel_preferences_alerts.xml3
-rw-r--r--indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml5
-rw-r--r--indra/newview/skins/default/xui/tr/panel_sound_devices.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/strings.xml119
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_attachment_other.xml1
-rw-r--r--indra/newview/skins/default/xui/zh/menu_attachment_self.xml1
-rw-r--r--indra/newview/skins/default/xui/zh/menu_avatar_other.xml1
-rw-r--r--indra/newview/skins/default/xui/zh/menu_avatar_self.xml1
-rw-r--r--indra/newview/skins/default/xui/zh/menu_viewer.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/notifications.xml48
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_alerts.xml3
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml5
-rw-r--r--indra/newview/skins/default/xui/zh/panel_sound_devices.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/strings.xml113
-rwxr-xr-xindra/newview/viewer_manifest.py12
206 files changed, 4615 insertions, 2529 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 769b86c218..20fa23b586 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1317,13 +1317,10 @@ set(viewer_HEADER_FILES
source_group("CMake Rules" FILES ViewerInstall.cmake)
+#summary.json creation moved to viewer_manifest.py MAINT-6413
# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild
-# the summary.json file is created for the benefit of the TeamCity builds, where
-# it is used to provide descriptive information to the build results page
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt"
"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}\n")
-file(WRITE "${CMAKE_BINARY_DIR}/summary.json"
- "{\"Type\":\"viewer\",\"Version\":\"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}\"}\n")
set_source_files_properties(
llversioninfo.cpp tests/llversioninfo_test.cpp
diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml
index 2cd6638042..a0d3dc0f99 100644
--- a/indra/newview/app_settings/commands.xml
+++ b/indra/newview/app_settings/commands.xml
@@ -37,7 +37,7 @@
tooltip_ref="Command_Build_Tooltip"
execute_function="Build.Toggle"
execute_parameters="build"
- is_enabled_function="Build.Enabled"
+ is_enabled_function="Build.EnabledOrActive"
is_enabled_parameters="build"
is_running_function="Floater.IsOpen"
is_running_parameters="build"
diff --git a/indra/newview/app_settings/keywords_lsl_default.xml b/indra/newview/app_settings/keywords_lsl_default.xml
index bb23ec04dc..d641883d5a 100644
--- a/indra/newview/app_settings/keywords_lsl_default.xml
+++ b/indra/newview/app_settings/keywords_lsl_default.xml
@@ -1007,7 +1007,7 @@
<key>type</key>
<string>integer</string>
<key>value</key>
- <integer>0x800</integer>
+ <string>0x800</string>
<key>tooltip</key>
<string/>
</map>
@@ -1617,7 +1617,7 @@
<key>type</key>
<string>string</string>
<key>value</key>
- <string>0x0A0x0A0x0A</string>
+ <string>\\n\\n\\n</string>
<key>tooltip</key>
<string>Indicates the last line of a notecard was read.</string>
</map>
@@ -5511,7 +5511,7 @@
<key>type</key>
<string>integer</string>
<key>value</key>
- <integer>0x40</integer>
+ <string>0x40</string>
<key>tooltip</key>
<string>Controls whether the object can be grabbed.\nA grab is the default action when in third person, and is available as the hand tool in build mode. This is useful for physical objects that you don't want other people to be able to trivially disturb. The default is FALSE</string>
</map>
@@ -5520,7 +5520,7 @@
<key>type</key>
<string>integer</string>
<key>value</key>
- <integer>0x400</integer>
+ <string>0x400</string>
<key>tooltip</key>
<string>Prevent click-and-drag movement on all prims in the object.</string>
</map>
@@ -9802,15 +9802,17 @@
<key>return</key>
<string>string</string>
<key>arguments</key>
- <map>
- <key>Error</key>
- <map>
+ <array>
+ <map>
+ <key>Error</key>
+ <map>
<key>type</key>
<string>integer</string>
<key>tooltip</key>
<string>An Experience error code to translate.</string>
- </map>
- </map>
+ </map>
+ </map>
+ </array>
<key>tooltip</key>
<string>
Returns a string describing the error code passed or the string corresponding with XP_ERROR_UNKNOWN_ERROR if the value is not a valid Experience error code.
@@ -10160,7 +10162,7 @@
<key>Parameters</key>
<map>
<key>type</key>
- <string>integer</string>
+ <string>list</string>
<key>tooltip</key>
<string>A list of PRIM_* property constants to return values of.</string>
</map>
@@ -10251,7 +10253,7 @@
<key>Parameters</key>
<map>
<key>type</key>
- <string>integer</string>
+ <string>list</string>
<key>tooltip</key>
<string>PRIM_* flags.</string>
</map>
@@ -12172,7 +12174,7 @@
<key>First</key>
<map>
<key>type</key>
- <string>string</string>
+ <string>integer</string>
<key>tooltip</key>
<string>Index of the first key to return.</string>
</map>
@@ -12181,7 +12183,7 @@
<key>Count</key>
<map>
<key>type</key>
- <string>string</string>
+ <string>integer</string>
<key>tooltip</key>
<string>The number of keys to return.</string>
</map>
@@ -14797,7 +14799,7 @@
<key>arguments</key>
<array>
<map>
- <key>AvatarID</key>
+ <key>AgentID</key>
<map>
<key>type</key>
<string>key</string>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index a7a15c9c7b..0a9f1a44f0 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3723,6 +3723,17 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>QueueInventoryFetchTimeout</key>
+ <map>
+ <key>Comment</key>
+ <string>Max time llcompilequeue will wait for inventory fetch to complete (in seconds)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>300.0</real>
+ </map>
<key>FindLandArea</key>
<map>
<key>Comment</key>
@@ -6429,7 +6440,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>1</integer>
+ <integer>0</integer>
</map>
<key>MeshUploadLogXML</key>
<map>
@@ -11087,6 +11098,28 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>FriendsListHideUsernames</key>
+ <map>
+ <key>Comment</key>
+ <string>Show both Display name and Username in Friend list</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>NearbyListHideUsernames</key>
+ <map>
+ <key>Comment</key>
+ <string>Show both Display name and Username in Nearby list</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>NearbyListShowMap</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index 23c5352015..a9f506d80b 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
<linden_avatar
- version="2.0" wearable_definition_version="22">
+ version="2.0" wearable_definition_version="22">
<!-- The wearable_definition_version is checked during asset upload. -->
<!-- If you increment it, check indra/lib/python/indra/assetutil.py. -->
<skeleton
@@ -430,7 +430,7 @@
hud="true"
max_attachment_offset="2.0"
visible_in_first_person="true" />
-
+
<attachment_point
id="39"
group="6"
@@ -441,7 +441,7 @@
position="0 0 0"
rotation="0 0 0"
visible_in_first_person="true" />
-
+
<attachment_point
id="40"
group="6"
@@ -452,7 +452,7 @@
position="0 0 0"
rotation="0 0 0"
visible_in_first_person="true" />
-
+
<!-- BENTO ADDITIONS -->
<attachment_point
@@ -708,9 +708,11 @@
name="mHindLimb2Right"
scale=".05 .05 .1" />
- <bone name="mWingsRoot" scale="1 0 0" offset="0 0 0" />
- <bone name="mWing1Right" scale="0 0 0" offset="0.02 0 0" />
- <bone name="mWing1Left" scale="0 0 0" offset="0.02 0 0" />
+ <bone name="mWingsRoot" scale="0 0 0" offset="0 0 0" />
+
+ <bone name="mWing1Right" scale="0 0 0" offset="-0.05 0 0" />
+
+ <bone name="mWing1Left" scale="0 0 0" offset="-0.05 0 0" />
</param_skeleton>
</param>
@@ -805,6 +807,80 @@
<bone
name="mHindLimb2Right"
scale="0 0 0.1" />
+
+ <bone
+ name="mWing1Left"
+ scale="0 0 0"
+ offset="0 0 0" />
+ <bone
+ name="mWing2Left"
+ scale="0 0 0"
+ offset="-0.015 0.015 0" />
+ <bone
+ name="mWing3Left"
+ scale="0 0 0"
+ offset="-0.025 0.025 0" />
+ <bone
+ name="mWing4Left"
+ scale="0 0 0"
+ offset="-0.03 0.03 0" />
+ <bone
+ name="mWing4FanLeft"
+ scale="0 0 0"
+ offset="-0.03 0.03 0" />
+
+ <bone
+ name="mWing1Right"
+ scale="0 0 0"
+ offset="0 0 0" />
+ <bone
+ name="mWing2Right"
+ scale="0 0 0"
+ offset="-0.015 -0.015 0" />
+ <bone
+ name="mWing3Right"
+ scale="0 0 0"
+ offset="-0.025 -0.025 0" />
+ <bone
+ name="mWing4Right"
+ scale="0 0 0"
+ offset="-0.03 -0.03 0" />
+ <bone
+ name="mWing4FanRight"
+ scale="0 0 0"
+ offset="-0.03 -0.03 0" />
+
+ <bone
+ name="mTail1"
+ scale ="0 0 0"
+ offset="-0.02 0 0" />
+
+ <bone
+ name="mTail2"
+ scale ="0 0 0"
+ offset="-0.02 0 0" />
+
+ <bone
+ name="mTail3"
+ scale ="0 0 0"
+ offset="-0.02 0 0" />
+
+ <bone
+ name="mTail4"
+ scale ="0 0 0"
+ offset="-0.02 0 0" />
+
+ <bone
+ name="mTail5"
+ scale ="0 0 0"
+ offset="-0.02 0 0" />
+
+ <bone
+ name="mTail6"
+ scale ="0 0 0"
+ offset="-0.02 0 0" />
+
+
</param_skeleton>
</param>
@@ -878,7 +954,7 @@
<bone
name="mSpine2"
scale="0.1 0.1 0" />
-
+
<bone
name="mHipLeft"
scale="0.13 0.13 0" />
@@ -969,7 +1045,7 @@
scale="0.0 0.0 0.0"
offset="0 -0.02 0" />
- <bone
+ <bone
name="mWing1Left"
scale="0.0 0.0 0.0"
offset="0 0.02 0" />
@@ -1162,56 +1238,57 @@
scale="0 0 0"
offset="0 -.009 0" />
- <bone
+ <bone
name="mFaceEyeAltLeft"
scale="0 0 0 "
- offset="0 .009 0" />
+ offset="0 .0090 0" />
<bone
name="mFaceEyeAltRight"
scale="0 0 0 "
- offset="0 -.009 0" />
-
+ offset="0 -.0090 0" />
+
<bone
name="mFaceEyeLidLowerLeft"
scale="0 0 0 "
- offset="0 .009 0" />
+ offset="0 .0090 0" />
<bone
name="mFaceEyeLidLowerRight"
scale="0 0 0 "
- offset="0 -.009 0" />
+ offset="0 -.0090 0" />
+
<bone
name="mFaceEyeLidUpperLeft"
scale="0 0 0 "
- offset="0 .009 0" />
+ offset="0 .0090 0" />
<bone
name="mFaceEyeLidUpperRight"
scale="0 0 0 "
- offset="0 -.009 0" />
-
+ offset="0 -.0090 0" />
+
<bone
name="mFaceEyebrowInnerLeft"
scale="0 0 0 "
- offset="0 .009 0" />
+ offset="0 .0090 0" />
<bone
name="mFaceEyebrowInnerRight"
scale="0 0 0 "
- offset="0 -.009 0" />
-
+ offset="0 -.0090 0" />
+
<bone
name="mFaceEyebrowCenterLeft"
scale="0 0 0 "
- offset="0 .009 0" />
+ offset="0 .0090 0" />
<bone
name="mFaceEyebrowCenterRight"
scale="0 0 0 "
- offset="0 -.009 0" />
-
+ offset="0 -.0090 0" />
+
<bone
name="mFaceEyebrowOuterLeft"
scale="0 0 0 "
@@ -1221,7 +1298,7 @@
name="mFaceEyebrowOuterRight"
scale="0 0 0 "
offset="0 -.005 0" />
-
+
<bone
name="mFaceEyecornerInnerLeft"
scale="0 0 0 "
@@ -1231,7 +1308,7 @@
name="mFaceEyecornerInnerRight"
scale="0 0 0 "
offset="0 -.008 0" />
-
+
</param_skeleton>
</param>
@@ -1256,12 +1333,12 @@
scale="0 0 0"
offset="0 0 -.004" />
- <bone
+ <bone
name="mFaceEyeAltLeft"
scale="0 0 0"
offset="0 0 .004" />
- <bone
+ <bone
name="mFaceEyeAltRight"
scale="0 0 0"
offset="0 0 -.004" />
@@ -1289,27 +1366,27 @@
name="mFaceLipUpperLeft"
scale="0 0 0"
offset="0 0 .004" />
-
+
<bone
name="mFaceLipUpperRight"
scale="0 0 0"
offset="0 0 -.004" />
-
+
<bone
name="mFaceLipLowerLeft"
scale="0 0 0"
offset="0 0 .004" />
-
+
<bone
name="mFaceLipLowerRight"
scale="0 0 0"
offset="0 0 -.004" />
-
+
<bone
name="mFaceLipCornerRight"
scale="0 0 0"
offset="0 0 -.004" />
-
+
<bone
name="mFaceLipCornerLeft"
scale="0 0 0"
@@ -1324,7 +1401,7 @@
name="mFaceCheekLowerRight"
scale="0 0 0"
offset="0 0 -.004" />
-
+
<bone
name="mFaceCheekUpperLeft"
scale="0 0 0"
@@ -1334,7 +1411,7 @@
name="mFaceCheekUpperRight"
scale="0 0 0"
offset="0 0 -.004" />
-
+
<bone
name="mFaceEyeLidUpperLeft"
scale="0 0 0"
@@ -1344,7 +1421,7 @@
name="mFaceEyeLidUpperRight"
scale="0 0 0"
offset="0 0 -.004" />
-
+
<bone
name="mFaceEyeLidLowerLeft"
scale="0 0 0"
@@ -1354,7 +1431,7 @@
name="mFaceEyeLidLowerRight"
scale="0 0 0"
offset="0 0 -.004" />
-
+
<bone
name="mFaceEyebrowInnerLeft"
scale="0 0 0"
@@ -1364,7 +1441,7 @@
name="mFaceEyebrowInnerRight"
scale="0 0 0"
offset="0 0 -.004" />
-
+
<bone
name="mFaceEyebrowCenterLeft"
scale="0 0 0"
@@ -1384,17 +1461,17 @@
name="mFaceEyebrowOuterRight"
scale="0 0 0"
offset="0 0 -.004" />
-
+
<bone
name="mFaceEyecornerInnerRight"
scale="0 0 0"
offset="0 0 -.004" />
-
+
<bone
name="mFaceEyecornerInnerLeft"
scale="0 0 0"
offset="0 0 0.004" />
-
+
<bone
name="mFaceForeheadLeft"
scale="0 0 0"
@@ -1404,7 +1481,7 @@
name="mFaceForeheadRight"
scale="0 0 0"
offset="0 0 -.004" />
-
+
</param_skeleton>
</param>
@@ -1429,109 +1506,9 @@
scale="0 0 0"
offset=".016 0 0" />
- <bone
- name="mFaceEyeAltLeft"
- scale="0 0 0"
- offset=".016 0 0" />
-
- <bone
- name="mFaceEyeAltRight"
- scale="0 0 0"
- offset=".016 0 0" />
-
- <bone
- name="mFaceRoot"
- scale="0.25 0 0"
- offset="0 0 0" />
-
- <bone
- name="mFaceNoseCenter"
- scale="0 0 0"
- offset=".01 0 0" />
-
- <bone
- name="mFaceNoseRight"
- scale="0 0 0"
- offset=".005 0 0" />
-
- <bone
- name="mFaceNoseLeft"
- scale="0 0 0"
- offset=".005 0 0" />
-
- <bone
- name="mFaceNoseBase"
- scale="0 0 0"
- offset=".005 0 0" />
-
- <bone
- name="mFaceLipUpperCenter"
- scale="0 0 0"
- offset="0.005 0 0" />
-
- <bone
- name="mFaceLipLowerCenter"
- scale="0 0 0"
- offset="0.01 0 0" />
-
- <bone
- name="mFaceLipUpperLeft"
- scale="0 0 0"
- offset="0.005 0 0" />
-
- <bone
- name="mFaceLipUpperRight"
- scale="0 0 0"
- offset="0.005 0 0" />
-
- <bone
- name="mFaceLipLowerLeft"
- scale="0 0 0"
- offset="0.004 0 0" />
-
- <bone
- name="mFaceLipLowerRight"
- scale="0 0 0"
- offset="0.004 0 0" />
-
- <bone
- name="mFaceLipCornerRight"
- scale="0 0 0"
- offset="0.004 0 0" />
-
- <bone
- name="mFaceLipCornerLeft"
- scale="0 0 0"
- offset="0.004 0 0" />
-
- <bone
- name="mFaceCheekLowerLeft"
- scale="0 0 0"
- offset="0.007 0 0" />
-
- <bone
- name="mFaceCheekLowerRight"
- scale="0 0 0"
- offset="-0.007 0 0" />
-
- <bone
- name="mFaceTeethUpper"
- scale="0 0 0"
- offset="0.012 0 0" />
-
- <bone
- name="mFaceTeethLower"
- scale="0 0 0"
- offset="0.012 0 0" />
-
- <bone
- name="mFaceJaw"
- scale="0 0 0"
- offset="0.01 0 0" />
-
</param_skeleton>
</param>
-
+
<param
id="768"
group="1"
@@ -1552,6 +1529,7 @@
name="mEyeRight"
scale="0 0 0"
offset=".005 0 0" />
+
<bone
name="mFaceEyeAltLeft"
scale="0 0 0"
@@ -1561,7 +1539,7 @@
name="mFaceEyeAltRight"
scale="0 0 0"
offset=".005 0 0" />
-
+
<bone
name="mFaceEyeLidLowerLeft"
scale="0 0 0 "
@@ -1621,10 +1599,10 @@
name="mFaceEyebrowOuterLeft"
scale="0 0 0 "
offset=".0013 0 0" />
+
+
-
-
-
+
</param_skeleton>
</param>
@@ -1646,27 +1624,27 @@
name = "mFaceTeethLower"
scale = "1 1 1"
offset = "0 0 0" />
-
+
<bone
name = "mFaceTeethUpper"
scale = "1 1 1"
offset = "0 0 0" />
-
+
<bone
name = "mFaceEyecornerInnerLeft"
scale = "1 1 1"
offset = "0 0 0" />
-
+
<bone
name = "mFaceEyecornerInnerRight"
scale = "1 1 1"
offset = "0 0 0" />
-
+
<bone
name = "mFaceNoseBridge"
scale = "1 1 1"
offset = "0 0 0" />
-
+
<bone
name = "mFaceNoseBase"
scale = "1 1 1"
@@ -1685,7 +1663,7 @@
name="mFaceRoot"
scale="1 1 1"
offset="0 0 0" />
-
+
<bone
name="mEyeLeft"
scale="1 1 1"
@@ -1695,17 +1673,17 @@
name="mEyeRight"
scale="1 1 1"
offset="0 0 0" />
-
+
<bone
name="mFaceEyeAltLeft"
scale="1 1 1"
- offset="0 0 0" />
+ offset="0 0 -0.001" />
<bone
name="mFaceEyeAltRight"
scale="1 1 1"
- offset="0 0 0" />
-
+ offset="0 0 -0.001" />
+
<bone
name="mFaceForeheadLeft"
scale="1 1 1"
@@ -1740,42 +1718,42 @@
name="mFaceEyebrowOuterRight"
scale="1 1 1"
offset="0 0 0" />
-
+
<bone
name="mFaceEyebrowCenterRight"
scale="1 1 1"
offset="0 0 0" />
-
+
<bone
name="mFaceEyebrowInnerRight"
scale="1 1 1"
offset="0 0 0" />
-
+
<bone
name="mFaceEyeLidUpperLeft"
scale="1 1 1"
offset="0 0 0" />
-
+
<bone
name="mFaceEyeLidLowerLeft"
scale="1 1 1"
offset="0 0 0" />
-
+
<bone
name="mFaceEyeLidUpperRight"
scale="1 1 1"
offset="0 0 0" />
-
+
<bone
name="mFaceEyeLidLowerRight"
scale="1 1 1"
offset="0 0 0" />
-
+
<bone
name="mFaceNoseLeft"
scale="1 1 1"
offset="0 0 0" />
-
+
<bone
name="mFaceNoseCenter"
scale="1 1 1"
@@ -1807,10 +1785,25 @@
offset="0 0 0" />
<bone
+ name="mFaceTongueBase"
+ scale="1 1 1"
+ offset="0 0 0" />
+
+ <bone
+ name="mFaceTongueTip"
+ scale="1 1 1"
+ offset="0 0 0" />
+
+ <bone
name="mFaceJaw"
scale="1 1 1"
offset="0 0 0" />
+ <bone
+ name="mFaceJawShaper"
+ scale="1 1 1"
+ offset="0 0 0" />
+
<bone
name="mFaceChin"
scale="1 1 1"
@@ -2028,6 +2021,7 @@
value_min="-1"
value_max="1">
<param_skeleton>
+
<bone
name="mEyeLeft"
scale="0 0 0"
@@ -2037,8 +2031,9 @@
name="mEyeRight"
scale="0 0 0"
offset="-.005 0 0" />
-
- <bone
+
+
+<bone
name="mFaceEyeAltLeft"
scale="0 0 0"
offset="-.005 0 0" />
@@ -2047,37 +2042,37 @@
name="mFaceEyeAltRight"
scale="0 0 0"
offset="-.005 0 0" />
-
+
<bone
name="mFaceEyeLidLowerRight"
- scale="0 0.7 0.5"
- offset="-.003 0 -0.003" />
+ scale="0 0.3 0.7"
+ offset=" 0 0 0" />
<bone
name="mFaceEyeLidLowerLeft"
- scale="0 0.7 0.5"
- offset="-.003 0 -0.003" />
+ scale="0 0.3 0.7"
+ offset="0 0 0" />
- <bone
+ <bone
name="mFaceEyeLidUpperRight"
- scale="0 0.7 0.5"
- offset="-.003 0 0.003" />
+ scale="0 0.3 0.7"
+ offset=" 0 0 0" />
<bone
name="mFaceEyeLidUpperLeft"
- scale="0 0.7 0.5"
- offset="-.003 0 0.003" />
-
+ scale="0 0.3 0.7"
+ offset=" 0 0 0" />
+
<bone
name="mFaceEyecornerInnerLeft"
scale="0 0 0"
offset="-0.005 -0.008 0.0" />
-
+
<bone
name="mFaceEyecornerInnerRight"
scale="0 0 0"
offset="-0.005 0.008 0.0" />
-
+
</param_skeleton>
</param>
@@ -2181,7 +2176,7 @@
scale="0 0 .5" />
</param_skeleton>
</param>
-
+
<param
id="11001"
group="0"
@@ -2197,7 +2192,7 @@
camera_distance="2.5">
<param_skeleton />
</param>
-
+
<param
id="30002"
group="1"
@@ -2207,16 +2202,16 @@
<param_skeleton>
<bone
name = "mFaceNoseCenter"
- offset = "0.01 0.0 0.0"
- scale = "0.10 0.3 0.0" />
+ offset = "0.0 0.0 0.0"
+ scale = "0.50 0.3 0.1" />
<bone
name = "mFaceNoseLeft"
- offset = "0 0.0025 0"
- scale = "0.0 0.0 0.0" />
+ offset = "0 0 0"
+ scale = "0.0 0.3 0.0" />
<bone
name = "mFaceNoseRight"
- offset = "0 -0.0025 0"
- scale = "0.0 0.0 0.0" />
+ offset = "0 0 0"
+ scale = "0.0 0.3 0.0" />
<bone
name = "mFaceNoseBridge"
offset = "0.006 0.0 0.0"
@@ -2224,7 +2219,7 @@
</param_skeleton>
</param>
-
+
<param
id="30004"
group="1"
@@ -2242,7 +2237,7 @@
scale = "0.0 0.0 0.0" />
</param_skeleton>
</param>
-
+
<param
id="30020"
group="1"
@@ -2265,7 +2260,7 @@
scale = "0 0.3 0"
offset = "0 -0.0015 0"
/>
-
+
</param_skeleton>
</param>
@@ -2278,16 +2273,16 @@
<param_skeleton>
<bone
name = "mFaceNoseCenter"
- offset = "0.00 0.0 0.0"
+ offset = "0 0 0"
scale = "0.10 0.85 0.0" />
<bone
name = "mFaceNoseLeft"
scale = "0 0 0"
- offset = "0.001 0.010 0"/>
+ offset = "0.001 0.013 0"/>
<bone
name = "mFaceNoseRight"
scale = "0 0 0"
- offset = "-0.001 -0.01 0" />
+ offset = "-0.001 -0.013 0" />
</param_skeleton>
</param>
@@ -2300,44 +2295,44 @@
<param_skeleton>
<bone
name = "mFaceNoseCenter"
- scale = "0.0 0.00 0.0"
+ scale = "0.0 0.00 0.0"
offset = "0.0 0.009 0.0" />
-
+
<bone
name = "mFaceNoseBase"
- scale = "0.0 0.00 0.0"
+ scale = "0.0 0.00 0.0"
offset = "0.0 0.007 0.0" />
-
+
<bone
name = "mFaceNoseLeft"
scale = "0.0 0.00 0.0"
offset = "0.0 0.005 0.0"/>
-
+
<bone
name = "mFaceNoseRight"
scale = "0.0 0.00 0.0"
offset = "0.0 0.005 0.0" />
-
+
<bone
name = "mFaceLipCornerLeft"
scale = "0.0 0.00 0.0"
offset = "0.0 0.001 0.0" />
-
+
<bone
name = "mFaceLipUpperLeft"
scale = "0.0 0.00 0.0"
offset = "0.0 0.002 0.0" />
-
+
<bone
name = "mFaceLipUpperCenter"
scale = "0.0 0.00 0.0"
offset = "0.0 0.003 0.0" />
-
+
<bone
name = "mFaceLipUpperRight"
scale = "0.0 0.00 0.0"
offset = "0.0 0.002 0.0" />
-
+
<bone
name = "mFaceLipCornerRight"
scale = "0.0 0.00 0.0"
@@ -2352,22 +2347,22 @@
name = "mFaceEyebrowInnerLeft"
scale = "0.0 0.00 0.0"
offset = "0.0 0.0008 0.0" />
-
+
<bone
name = "mFaceNoseBridge"
scale = "0.0 0.00 0.0"
offset = "0.0 0.004 0.0" />
-
+
<bone
name = "mFaceTeethUpper"
scale = "0.0 0.00 0.0"
offset = "0.0 0.003 0.0" />
-
+
<bone
name = "mFaceEyecornerInnerRight"
scale = "0.0 0.00 0.0"
offset = "0.0 0.001 0.0" />
-
+
<bone
name = "mFaceEyecornerInnerLeft"
scale = "0.0 0.00 0.0"
@@ -2375,7 +2370,7 @@
</param_skeleton>
</param>
-
+
<param
id="30155"
group="1"
@@ -2388,27 +2383,27 @@
name = "mFaceLipCornerLeft"
scale = "0.0 0.00 0.0"
offset = "0.0 0.005 0.0" />
-
+
<bone
name = "mFaceLipUpperLeft"
scale = "0.0 0.00 0.0"
offset = "0.0 0.003 0.0" />
-
+
<bone
name = "mFaceLipUpperRight"
scale = "0.0 0.00 0.0"
offset = "0.0 -0.003 0.0" />
-
+
<bone
name = "mFaceLipLowerLeft"
scale = "0.0 0.00 0.0"
offset = "0.0 0.003 0.0" />
-
+
<bone
name = "mFaceLipLowerRight"
scale = "0.0 0.00 0.0"
offset = "0.0 -0.003 0.0" />
-
+
<bone
name = "mFaceLipCornerRight"
scale = "0.0 0.00 0.0"
@@ -2427,46 +2422,46 @@
<bone
name = "mFaceLipCornerLeft"
scale = "0.2 0.00 0.2"
- offset = "-0.01 0.00 0.0" />
-
+ offset = "-0.008 0.00 0.0" />
+
<bone
name = "mFaceLipUpperLeft"
scale = "0.2 0.00 0.2"
- offset = "-0.01 0.00 0.0015" />
-
+ offset = "-0.009 0.00 0.0025" />
+
<bone
name = "mFaceLipUpperCenter"
scale = "0.2 0.00 0.2"
- offset = "-0.01 0.00 0.0025" />
-
+ offset = "-0.009 0.00 0.0025" />
+
<bone
name = "mFaceLipUpperRight"
scale = "0.2 0.00 0.2"
- offset = "-0.01 0.00 0.0015" />
-
+ offset = "-0.009 0.00 0.0025" />
+
<bone
name = "mFaceLipCornerRight"
scale = "0.2 0.00 0.2"
- offset = "-0.01 0.00 0.0" />
-
+ offset = "-0.008 0.00 0.0" />
+
<bone
name = "mFaceLipLowerLeft"
scale = "0.2 0.00 0.2"
- offset = "-0.01 0.00 -0.0015" />
-
+ offset = "-0.008 0.00 -0.0015" />
+
<bone
name = "mFaceLipLowerCenter"
scale = "0.2 0.00 0.2"
- offset = "-0.01 0.00 -0.0025" />
+ offset = "-0.008 0.00 -0.0025" />
<bone
name = "mFaceLipLowerRight"
scale = "0.2 0.00 0.2"
- offset = "-0.01 0.00 -0.0015" />
-
+ offset = "-0.008 0.00 -0.0015" />
+
</param_skeleton>
</param>
-
+
<param
id="30505"
group="1"
@@ -2479,32 +2474,32 @@
name = "mFaceLipCornerLeft"
scale = "0.2 0.00 -0.6"
offset = "-0.01 0.00 0.0" />
-
+
<bone
name = "mFaceLipUpperLeft"
scale = "0.2 0.00 -0.6"
offset = "-0.012 0.00 -0.005" />
-
+
<bone
name = "mFaceLipUpperCenter"
- scale = "0.2 0.00 -0.6"
+ scale = "0.2 0.00 -0.3"
offset = "-0.015 0.00 -0.005" />
-
+
<bone
name = "mFaceLipUpperRight"
- scale = "0.2 0.00 -0.6"
+ scale = "0.2 0.00 -0.3"
offset = "-0.012 0.00 -0.005" />
-
+
<bone
name = "mFaceLipCornerRight"
- scale = "0.2 0.00 -0.6"
+ scale = "0.2 0.00 -0.3"
offset = "-0.01 0.00 0.0" />
-
+
<bone
name = "mFaceLipLowerLeft"
scale = "0.2 0.00 -0.6"
offset = "-0.01 0.00 0.008" />
-
+
<bone
name = "mFaceLipLowerCenter"
scale = "0.2 0.00 -0.6"
@@ -2517,7 +2512,7 @@
</param_skeleton>
</param>
-
+
<param
id="31505"
group="1"
@@ -2530,32 +2525,32 @@
name = "mFaceLipCornerLeft"
scale = "0.2 0.00 0.1"
offset = "0.005 0.00 0.0" />
-
+
<bone
name = "mFaceLipUpperLeft"
- scale = "0.2 0.00 0.7"
- offset = "0.004 0.00 0.006" />
-
+ scale = "0.2 0.00 0.4"
+ offset = "0.004 0.00 0.004" />
+
<bone
name = "mFaceLipUpperCenter"
- scale = "0.2 0.00 0.7"
- offset = "0.004 0.00 0.006" />
-
+ scale = "0.2 0.00 0.4"
+ offset = "0.004 0.00 0.004" />
+
<bone
name = "mFaceLipUpperRight"
- scale = "0.2 0.00 0.7"
- offset = "0.004 0.00 0.006" />
-
+ scale = "0.2 0.00 0.4"
+ offset = "0.004 0.00 0.004" />
+
<bone
name = "mFaceLipCornerRight"
scale = "0.2 0.00 0.1"
offset = "0.005 0.00 0.0" />
-
+
<bone
name = "mFaceLipLowerLeft"
scale = "0.2 0.00 0.3"
offset = "0.006 0.00 -0.003" />
-
+
<bone
name = "mFaceLipLowerCenter"
scale = "0.2 0.00 0.3"
@@ -2568,7 +2563,7 @@
</param_skeleton>
</param>
-
+
<param
id="30797"
group="1"
@@ -2576,7 +2571,7 @@
value_min="0"
value_max="1.5">
<param_skeleton>
-
+
<bone
name = "mFaceLipCornerLeft"
scale = "0 0 0"
@@ -2590,23 +2585,23 @@
<bone
name = "mFaceLipUpperLeft"
scale = " 0.1 0 0.6"
- offset = "-0.006 0.00 0.006" />
-
+ offset = "-0.004 0.00 0.006" />
+
<bone
name = "mFaceLipUpperCenter"
scale = " 0.1 0 0.4"
- offset = "-0.006 0.00 0.003" />
+ offset = "-0.004 0.00 0.003" />
<bone
name = "mFaceLipUpperRight"
scale = " 0.1 0 0.6"
- offset = "-0.006 0.00 0.006" />
+ offset = "-0.004 0.00 0.006" />
<bone
name = "mFaceLipLowerLeft"
- scale = " 0 0 0"
+ scale = " 0 0 0"
offset = "-0.002 0.00 0.001" />
-
+
<bone
name = "mFaceLipLowerCenter"
scale = " 0 0 0"
@@ -2627,7 +2622,7 @@
value_min="0"
value_max="1.5">
<param_skeleton>
-
+
<bone
name = "mFaceLipCornerLeft"
scale = "0 0 0"
@@ -2642,7 +2637,7 @@
name = "mFaceLipUpperLeft"
scale = " 0 0 0"
offset = "-0.002 0.00 -0.003" />
-
+
<bone
name = "mFaceLipUpperCenter"
scale = " 0 0 0"
@@ -2652,12 +2647,12 @@
name = "mFaceLipUpperRight"
scale = " 0 0 0"
offset = "-0.002 0.00 -0.003" />
-
+
<bone
name = "mFaceLipLowerLeft"
scale = " 0.1 0 0.25"
offset = "-0.005 0.00 -0.004" />
-
+
<bone
name = "mFaceLipLowerCenter"
scale = " 0.1 0 0.25"
@@ -2670,7 +2665,7 @@
</param_skeleton>
</param>
-
+
<param
id="30506"
group="1"
@@ -2680,51 +2675,6 @@
<param_skeleton>
<bone
- name = "mFaceLipCornerLeft"
- scale = "0 0 0"
- offset = "0 0 -0.006" />
-
- <bone
- name = "mFaceLipCornerRight"
- scale = "0 0 0"
- offset = "0 0 -0.006" />
-
- <bone
- name = "mFaceLipUpperLeft"
- scale = " 0 0 0"
- offset = "0 0 -0.006" />
-
- <bone
- name = "mFaceLipUpperCenter"
- scale = " 0 0 0"
- offset = "0 0 -0.006" />
-
- <bone
- name = "mFaceLipUpperRight"
- scale = " 0 0 0"
- offset = "0 0 -0.006" />
-
- <bone
- name = "mFaceLipLowerLeft"
- scale = " 0 0 0"
- offset = "0 0 -0.006" />
-
- <bone
- name = "mFaceLipLowerCenter"
- scale = " 0 0 0"
- offset = "0 0 -0.006" />
-
- <bone
- name = "mFaceLipLowerRight"
- scale = " 0 0 0"
- offset = "0 0 -0.006" />
-
- <bone
- name = "mFaceTongueBase"
- scale = "0.0 0.00 0.0"
- offset = "0 0 -0.006" />
-
- <bone
name = "mFaceTeethUpper"
scale = "0.0 0.00 0.0"
offset = "0 0 -0.006" />
@@ -2733,7 +2683,7 @@
name = "mFaceTeethLower"
scale = "0.0 0.00 0.0"
offset = "0 0 -0.006" />
-
+
<bone
name = "mFaceNoseBase"
scale = "0.0 0.00 0.0"
@@ -2741,7 +2691,7 @@
</param_skeleton>
</param>
-
+
<param
id="30658"
group="1"
@@ -2763,7 +2713,7 @@
name = "mFaceLipUpperLeft"
scale = "0 0 0"
offset = "0 0 0" />
-
+
<bone
name = "mFaceLipUpperCenter"
scale = "0 0 0"
@@ -2773,12 +2723,12 @@
name = "mFaceLipUpperRight"
scale = "0 0 0"
offset = "0 0 0" />
-
+
<bone
name = "mFaceLipLowerLeft"
scale = "0 0 0"
offset = "0 0 0.001" />
-
+
<bone
name = "mFaceLipLowerCenter"
scale = "0 0 0"
@@ -2798,7 +2748,7 @@
value_min="0"
value_max="1.4">
<param_skeleton>
-
+
<bone
name = "mFaceLipCornerLeft"
scale = "0 0 0"
@@ -2813,7 +2763,7 @@
name = "mFaceLipUpperLeft"
scale = "0 0 0"
offset = "0 0.002 0" />
-
+
<bone
name = "mFaceLipUpperCenter"
scale = "0 0 0"
@@ -2823,12 +2773,12 @@
name = "mFaceLipUpperRight"
scale = "0 0 0"
offset = "0 -0.002 0" />
-
+
<bone
name = "mFaceLipLowerLeft"
scale = "0 0 0"
offset = "0 0.001 0" />
-
+
<bone
name = "mFaceLipLowerCenter"
scale = "0 0 0"
@@ -2841,54 +2791,64 @@
</param_skeleton>
</param>
+
+<param
+ id="30764"
+ group="1"
+ name="Lip_Cleft_Deep"
+ value_min="-1"
+ value_max="1.2">
+ <param_skeleton>
+
+ <bone
+ name = "mFaceLipUpperLeft"
+ scale = "0 0 0.3"
+ offset = "0 0 0.003" />
+
+ <bone
+ name = "mFaceLipUpperCenter"
+ scale = "0 0 -0.1"
+ offset = "0 0 -0.001" />
+
+ <bone
+ name = "mFaceLipUpperRight"
+ scale = "0 0 0.3"
+ offset = "0 0 0.003" />
+
+ </param_skeleton>
+ </param>
+
+<param
+ id="30025"
+ group="1"
+ name="Wide_Lip_Cleft"
+ value_min="-.8"
+ value_max="1.5">
+ <param_skeleton>
- <param
- id="30764"
- group="1"
- name="Lip_Cleft_Deep"
- value_min="-1"
- value_max="1.2">
- <param_skeleton>
-
- <bone
- name = "mFaceLipUpperLeft"
- scale = "0 0 0"
- offset = "0 0 0.002" />
+ <bone
+ name = "mFaceLipUpperLeft"
+ scale = "0 0.1 0"
+ offset = "0 0.0 0" />
+
+ <bone
+ name = "mFaceLipUpperRight"
+ scale = "0 0.1 0"
+ offset = "0 0.0 0" />
<bone
- name = "mFaceLipUpperCenter"
- scale = "0 0 0"
- offset = "0 0 -0.001" />
+ name = "mFaceLipCornerRight"
+ scale = "0.0 0 0"
+ offset = "0 0.001 0" />
<bone
- name = "mFaceLipUpperRight"
- scale = "0 0 0"
- offset = "0 0 0.002" />
-
+ name = "mFaceLipCornerLeft"
+ scale = "0.0 0 0"
+ offset = "0 -0.001 0" />
+
</param_skeleton>
- </param>
-
- <param
- id="30025"
- group="1"
- name="Wide_Lip_Cleft"
- value_min="-.8"
- value_max="1.5">
- <param_skeleton>
-
- <bone
- name = "mFaceLipUpperLeft"
- scale = "0 0 0"
- offset = "0 0.004 0" />
-
- <bone
- name = "mFaceLipUpperRight"
- scale = "0 0 0"
- offset = "0 -0.004 0" />
-
- </param_skeleton>
- </param>
-
+ </param>
+
<param
id="31663"
group="1"
@@ -2898,14 +2858,14 @@
<param_skeleton>
<bone
name = "mFaceNoseCenter"
- scale = "0.0 0.00 0.0"
+ scale = "0.0 0.00 0.0"
offset = "0.0 -0.003 0.0" />
<bone
name = "mFaceNoseBase"
- scale = "0.0 0.00 0.0"
+ scale = "0.0 0.00 0.0"
offset = "0.0 -0.004 0.0" />
-
+
<bone
name = "mFaceNoseLeft"
scale = "0.0 0.00 0.0"
@@ -2917,56 +2877,16 @@
offset = "0.0 -0.003 0.0" />
<bone
- name = "mFaceLipCornerLeft"
- scale = "0.0 0.00 0.0"
- offset = "0.0 -0.005 0.0" />
-
- <bone
- name = "mFaceLipUpperLeft"
- scale = "0.0 0.00 0.0"
- offset = "0.0 -0.005 0.0" />
-
- <bone
- name = "mFaceLipUpperCenter"
- scale = "0.0 0.00 0.0"
- offset = "0.0 -0.006 0.0" />
-
- <bone
- name = "mFaceLipUpperRight"
- scale = "0.0 0.00 0.0"
- offset = "-0.002 -0.005 0.0" />
-
- <bone
- name = "mFaceLipCornerRight"
- scale = "0.0 0.00 0.0"
- offset = "-0.002 -0.005 0.0" />
-
- <bone
- name = "mFaceLipLowerLeft"
- scale = "0.0 0.00 0.0"
- offset = "0.0 -0.007 0.0" />
-
- <bone
- name = "mFaceLipLowerCenter"
- scale = "0.0 0.00 0.0"
- offset = "0.0 -0.01 0.0" />
-
- <bone
- name = "mFaceLipLowerRight"
- scale = "0.0 0.00 0.0"
- offset = "-0.002 -0.005 0.0" />
-
- <bone
name = "mFaceTeethUpper"
scale = "0.0 0.00 0.0"
- offset = "-0.002 -0.005 0.0" />
-
+ offset = "0.0 -0.006 0.0" />
+
<bone
name = "mFaceTeethLower"
scale = "0.0 0.00 0.0"
- offset = "-0.002 -0.006 0.0" />
-
-
+ offset = "0.0 -0.006 0.0" />
+
+
</param_skeleton>
</param>
@@ -2980,14 +2900,14 @@
<param_skeleton>
<bone
name = "mFaceNoseCenter"
- scale = "0.0 0.00 0.0"
+ scale = "0.0 0.00 0.0"
offset = "0.0 0.003 0.0" />
<bone
name = "mFaceNoseBase"
- scale = "0.0 0.00 0.0"
+ scale = "0.0 0.00 0.0"
offset = "0.0 0.004 0.0" />
-
+
<bone
name = "mFaceNoseLeft"
scale = "0.0 0.00 0.0"
@@ -2999,55 +2919,15 @@
offset = "0.0 0.003 0.0" />
<bone
- name = "mFaceLipCornerLeft"
- scale = "0.0 0.00 0.0"
- offset = "-0.002 0.005 0.0" />
-
- <bone
- name = "mFaceLipUpperLeft"
- scale = "0.0 0.00 0.0"
- offset = "-0.002 0.005 0.0" />
-
- <bone
- name = "mFaceLipUpperCenter"
- scale = "0.0 0.00 0.0"
- offset = "0.0 0.006 0.0" />
-
- <bone
- name = "mFaceLipUpperRight"
- scale = "0.0 0.00 0.0"
- offset = "0.0 0.005 0.0" />
-
- <bone
- name = "mFaceLipCornerRight"
- scale = "0.0 0.00 0.0"
- offset = "0.0 0.005 0.0" />
-
- <bone
- name = "mFaceLipLowerLeft"
- scale = "0.0 0.00 0.0"
- offset = "-0.002 0.005 0.0" />
-
- <bone
- name = "mFaceLipLowerCenter"
- scale = "0.0 0.00 0.0"
- offset = "0.0 0.01 0.0" />
-
- <bone
- name = "mFaceLipLowerRight"
- scale = "0.0 0.00 0.0"
- offset = "0.0 0.007 0.0" />
-
- <bone
name = "mFaceTeethUpper"
scale = "0.0 0.00 0.0"
- offset = "-0.002 0.005 0.0" />
-
+ offset = "0.0 0.006 0.0" />
+
<bone
name = "mFaceTeethLower"
scale = "0.0 0.00 0.0"
- offset = "-0.002 0.006 0.0" />
-
+ offset = "0.0 0.006 0.0" />
+
</param_skeleton>
</param>
@@ -3061,15 +2941,15 @@
<param_skeleton>
<bone
name = "mFaceEar1Left"
- scale = "0.55 0.55 0.55"
+ scale = "0.55 0.55 0.55"
offset = "0.0 -0.002 0.001" />
<bone
name = "mFaceEar1Right"
- scale = "0.55 0.55 0.55"
+ scale = "0.55 0.55 0.55"
offset = "0.0 0.002 0.001" />
</param_skeleton>
</param>
-
+
<param
id="30015"
group="1"
@@ -3088,7 +2968,7 @@
scale = "0.0 0.0 0.0" />
</param_skeleton>
</param>
-
+
<param
id="30796"
group="1"
@@ -3106,39 +2986,19 @@
scale = "0.0 0.0 0.0" />
</param_skeleton>
</param>
-
+
<param
id="30185"
group="1"
name="Deep_Chin"
value_min="-1"
value_max="1">
+ <!-- used for the chin depth slider -->
<param_skeleton>
<bone
- name = "mFaceJaw"
- offset = "0.0 0.00 -0.02"
- scale = "0.0 0.0 0.0" />
-
- <bone
- name = "mFaceLipLowerLeft"
- offset = "0.0 0.00 0.02"
- scale = "0.0 0.0 0.0" />
-
- <bone
- name = "mFaceLipLowerRight"
- offset = "0.0 0.00 0.02"
- scale = "0.0 0.0 0.0" />
-
- <bone
- name = "mFaceLipLowerCenter"
- offset = "0.0 0.00 0.02"
- scale = "0.0 0.0 0.0" />
-
- <bone
- name = "mFaceTongueBase"
- offset = "0.0 0.00 0.02"
+ name = "mFaceChin"
+ offset = "0.0 0.00 -0.025"
scale = "0.0 0.0 0.0" />
-
</param_skeleton>
</param>
<param
@@ -3147,77 +3007,31 @@
name="Deep_Chin"
value_min="-1"
value_max="1">
+ <!-- used for the head shape slider -->
<param_skeleton>
<bone
- name = "mFaceJaw"
+ name = "mFaceChin"
offset = "0.0 0.00 -0.02"
scale = "0.0 0.0 0.0" />
-
- <bone
- name = "mFaceLipLowerLeft"
- offset = "0.0 0.00 0.02"
- scale = "0.0 0.0 0.0" />
-
- <bone
- name = "mFaceLipLowerRight"
- offset = "0.0 0.00 0.02"
- scale = "0.0 0.0 0.0" />
-
- <bone
- name = "mFaceLipLowerCenter"
- offset = "0.0 0.00 0.02"
- scale = "0.0 0.0 0.0" />
-
- <bone
- name = "mFaceTongueBase"
- offset = "0.0 0.00 0.02"
- scale = "0.0 0.0 0.0" />
-
</param_skeleton>
</param>
-
+
<param
id="30760"
group="1"
name="Jaw_Angle"
- value_min="-2"
+ value_min="-1.2"
value_max="2"
- value_default="0">
+ value_default="0">
<param_skeleton>
<bone
- name = "mFaceJaw"
+ name = "mFaceJawShaper"
offset = "0.0 0.00 0.03"
scale = "0.0 0.0 0.0" />
-
- <bone
- name = "mFaceLipLowerLeft"
- offset = "0.0 0.00 -0.03"
- scale = "0.0 0.0 0.0" />
-
- <bone
- name = "mFaceLipLowerRight"
- offset = "0.0 0.00 -0.03"
- scale = "0.0 0.0 0.0" />
-
- <bone
- name = "mFaceLipLowerCenter"
- offset = "0.0 0.00 -0.03"
- scale = "0.0 0.0 0.0" />
-
- <bone
- name = "mFaceTongueBase"
- offset = "0.0 0.00 -0.03"
- scale = "0.0 0.0 0.0" />
-
- <bone
- name = "mFaceChin"
- offset = "0.0 0.00 -0.03"
- scale = "0.0 0.0 0.0" />
-
</param_skeleton>
</param>
-
-
+
+
<param
id="30665"
group="1"
@@ -3225,19 +3039,20 @@
value_min="-2"
value_max="2">
<param_skeleton>
+
<bone
- name = "mFaceJaw"
- offset = "0.0085 0.00 0"
+ name = "mFaceTeethLower"
+ offset = "0.008 0 0"
scale = "0.0 0.0 0.0" />
<bone
- name = "mFaceTeethLower"
- offset = "0.008 0 0"
- scale = "0.0 0.0 0.0" />
+ name = "mFaceChin"
+ offset = "0.008 0.00 0"
+ scale = "0.0 0.0 0.0" />
</param_skeleton>
</param>
-
+
<param
id="30006"
group="1"
@@ -3249,10 +3064,10 @@
name = "mFaceNoseCenter"
offset = "0.0 0.00 0.0"
scale = "0.1 0.1 0.1" />
-
+
</param_skeleton>
</param>
-
+
<param
id="30007"
group="1"
@@ -3262,12 +3077,12 @@
<param_skeleton>
<bone
name = "mFaceChin"
- offset = "-0.025 0.00 0.005"
+ offset = "-0.06 0.00 0.01"
scale = "0.0 0.0 0.0" />
-
+
</param_skeleton>
</param>
-
+
<param
id="40007"
group="1"
@@ -3279,10 +3094,10 @@
name = "mFaceChin"
offset = "-0.025 0.00 0.005"
scale = "0.0 0.0 0.0" />
-
+
</param_skeleton>
</param>
-
+
<param
id="30008"
group="1"
@@ -3290,15 +3105,14 @@
value_min="-.5"
value_max="1.5">
<param_skeleton>
- <bone
- name = "mFaceChin"
- offset = "-0.002 0.0 -0.01"
- scale = "0.0 0.0 0.0" />
-
+ <bone
+ name = "mFaceJawShaper"
+ offset = "0 0 0"
+ scale = "0.0 0.125 0.5" />
</param_skeleton>
</param>
-
-
+
+
<param
id="30024"
group="1"
@@ -3307,29 +3121,39 @@
value_max="2">
<param_skeleton>
- <bone
- name="mFaceEyeLidUpperLeft"
- scale="0 0 0"
- offset="0 0 .003" />
+ <bone
+ name="mFaceEyeLidLowerRight"
+ scale="0 0.1 0.2"
+ offset=" 0 0 0" />
- <bone
+ <bone
+ name="mFaceEyeLidLowerLeft"
+ scale="0 0.1 0.2"
+ offset=" 0 0 0" />
+
+ <bone
name="mFaceEyeLidUpperRight"
- scale="0 0 0"
- offset="0 0 .003" />
+ scale="0 0.1 0.2"
+ offset=" 0 0 0" />
- <bone
- name="mFaceEyeLidLowerLeft"
+ <bone
+ name="mFaceEyeLidUpperLeft"
+ scale="0 0.1 0.2"
+ offset=" 0 0 0" />
+
+ <bone
+ name="mFaceEyeAltLeft"
scale="0 0 0"
- offset="0 0 -.003" />
+ offset="0 0 0" />
- <bone
- name="mFaceEyeLidLowerRight"
+ <bone
+ name="mFaceEyeAltRight"
scale="0 0 0"
- offset="0 0 -.003" />
+ offset="0 0 0" />
</param_skeleton>
</param>
-
+
<param
id="30650"
group="1"
@@ -3346,9 +3170,9 @@
name="mFaceEyebrowOuterRight"
scale="0 0 0"
offset="0 0 .004" />
- </param_skeleton>
+ </param_skeleton>
</param>
-
+
<param
id="30880"
group="1"
@@ -3365,9 +3189,9 @@
name="mFaceEyecornerInnerRight"
scale="0 0 0"
offset="0 0 .004" />
- </param_skeleton>
+ </param_skeleton>
</param>
-
+
<param
id="30765"
group="1"
@@ -3379,12 +3203,12 @@
<bone
name="mFaceEyeLidLowerLeft"
scale="0.05 0.05 0.05"
- offset="0 0 .0003" />
+ offset="0 0 0" />
<bone
name="mFaceEyeLidLowerRight"
scale="0.05 0.05 0.05"
- offset="0 0 .0003" />
+ offset="0 0 0" />
<bone
name="mFaceEyecornerInnerLeft"
@@ -3396,7 +3220,7 @@
scale="0.05 0.05 0.05"
offset="0 0 0" />
- </param_skeleton>
+ </param_skeleton>
</param>
<param
@@ -3422,9 +3246,9 @@
scale="0 0 0.08"
offset="0.02 0 0" />
- </param_skeleton>
+ </param_skeleton>
</param>
-
+
<param
id="41629"
group="1"
@@ -3448,9 +3272,9 @@
scale="0 0 0.08"
offset="0.02 0 0" />
- </param_skeleton>
+ </param_skeleton>
</param>
-
+
<param
id="30647"
group="1"
@@ -3459,333 +3283,142 @@
value_max="1"
value_default="0">
<param_skeleton>
-
+
<bone
name="mFaceRoot"
- scale="0 -0.07 0.07"
- offset="0 0 -0.005" />
-
- <bone
- name="mFaceEyeLidLowerRight"
- scale="0 0 0"
- offset="0 -0.0033 0.0025" />
-
- <bone
- name="mFaceEyeLidUpperRight"
- scale="0 0 0"
- offset="0 -0.0033 0.002" />
-
- <bone
- name="mFaceEyecornerInnerRight"
- scale="0 0 0"
- offset="0 -0.0017 0.0025" />
-
- <bone
- name="mFaceEyebrowOuterRight"
- scale="0 0 0"
- offset="0 -0.004 0.0014" />
-
- <bone
- name="mFaceEyebrowCenterRight"
- scale="0 0 0"
- offset="0 -0.00377 0.00061" />
-
- <bone
- name="mFaceEyebrowInnerRight"
- scale="0 0 0"
- offset="0 -0.00225 0.001" />
-
- <bone
- name="mFaceLipUpperRight"
- scale="0 0 0"
- offset="0 -0.0014 0.007" />
- <bone
- name="mFaceLipUpperCenter"
- scale="0 0 0"
- offset="0 0 0.007" />
-
- <bone
- name="mFaceTeethUpper"
- scale="0 0 0"
- offset="0 0 0.007" />
-
- <bone
- name="mFaceLipLowerRight"
- scale="0 0 0"
- offset="0 0 0.0005" />
- <bone
- name="mFaceLipCornerRight"
- scale="0 0 0"
- offset="0 -0.00225 0.0075" />
-
+ scale="0 -0.1 0.1"
+ offset="0 0 0" />
+
<bone
- name="mFaceEyeLidLowerLeft"
- scale="0 0 0"
- offset="0 0.0033 0.0025" />
-
+ name="mFaceChin"
+ scale="0 -0.1 0.5"
+ offset="0 0 -0.005" />
+
<bone
- name="mFaceEyeLidUpperLeft"
- scale="0 0 0"
- offset="0 0.0033 0.002" />
-
+ name="mFaceForeheadCenter"
+ scale="0 0 0"
+ offset="0 0 -0.006" />
+
<bone
- name="mFaceEyecornerInnerLeft"
- scale="0 0 0"
- offset="0 0.0017 0.0025" />
+ name="mFaceEyebrowOuterRight"
+ scale="0 0 0"
+ offset="0 -0.0053 -0.0047" />
<bone
- name="mFaceEyebrowOuterLeft"
- scale="0 0 0"
- offset="0 0.004 0.0014" />
+ name="mFaceEyebrowCenterRight"
+ scale="0 0 0"
+ offset="0 -0.0045 -0.0053" />
<bone
- name="mFaceEyebrowCenterLeft"
- scale="0 0 0"
- offset="0 0.00377 0.00061" />
-
+ name="mFaceEyebrowInnerRight"
+ scale="0 0 0"
+ offset="0 -0.00225 -0.0048" />
+
<bone
- name="mFaceEyebrowInnerLeft"
- scale="0 0 0"
- offset="0 0.00225 0.001" />
+ name="mFaceEyebrowOuterLeft"
+ scale="0 0 0"
+ offset="0 0.0053 -0.0047" />
<bone
- name="mFaceLipUpperLeft"
- scale="0 0 0"
- offset="0 0.0014 0.007" />
- <bone
- name="mFaceLipLowerCenter"
- scale="0 0 0"
- offset="0 0 0.001" />
- <bone
- name="mFaceTeethLower"
- scale="0 0 0"
- offset="0 0 0.008" />
- <bone
- name="mFaceLipLowerLeft"
- scale="0 0 0"
- offset="0 0.000 0.0005" />
- <bone
- name="mFaceLipCornerLeft"
- scale="0 0 0"
- offset="0 0.00225 0.0075" />
+ name="mFaceEyebrowCenterLeft"
+ scale="0 0 0"
+ offset="0 0.0045 -0.0053" />
<bone
- name="mFaceTongueBase"
- scale="0 0 0"
- offset="0 0 0.00" />
-
+ name="mFaceEyebrowInnerLeft"
+ scale="0 0 0"
+ offset="0 0.00225 -0.0048" />
+
<bone
- name="mFaceJaw"
- scale="0 0 0"
- offset="0 0 0.0085" />
+ name="mFaceEyeAltRight"
+ scale="0 0 0"
+ offset="0 -0.0042 -0.0035" />
<bone
- name="mFaceCheekLowerRight"
- scale="0 0 0"
- offset="0 0 0.0085" />
- <bone
- name="mFaceCheekLowerLeft"
- scale="0 0 0"
- offset="0 0 0.0085" />
+ name="mFaceEyeAltLeft"
+ scale="0 0 0"
+ offset="0 0.0042 -0.0035" />
<bone
- name="mFaceCheekUpperRight"
- scale="0 0 0"
- offset="0 0 0.005" />
- <bone
- name="mFaceCheekUpperLeft"
- scale="0 0 0"
- offset="0 0 0.005" />
+ name="mFaceEyeLidUpperRight"
+ scale="0 0 0"
+ offset="0 -0.0039 -0.0032" />
<bone
- name="mFaceNoseCenter"
- scale="0 0 0"
- offset="0 0 0.005" />
+ name="mFaceEyeLidUpperLeft"
+ scale="0 0 0"
+ offset="0 0.0039 -0.0032" />
<bone
- name="mFaceNoseRight"
- scale="0 0 0"
- offset="0 0 0.005" />
+ name="mFaceEyeLidLowerRight"
+ scale="0 0 0"
+ offset="0 -0.0039 -0.0032" />
<bone
- name="mFaceNoseLeft"
- scale="0 0 0"
- offset="0 0 0.005" />
+ name="mFaceEyeLidLowerLeft"
+ scale="0 0 0"
+ offset="0 0.0039 -0.0032" />
<bone
- name="mFaceNoseBase"
- scale="0 0 0"
- offset="0 0 0.006" />
-
- </param_skeleton>
- </param>
- <param
- id="40647"
- group="1"
- name="Squash_Stretch_Head"
- value_min="-0.5"
- value_max="1"
- value_default="0">
- <param_skeleton>
+ name="mFaceEyecornerInnerRight"
+ scale="0 0 0"
+ offset="0 -0.00225 -0.0032" />
<bone
- name="mFaceRoot"
- scale="0 -0.07 0.07"
- offset="0 0 -0.005" />
-
+ name="mFaceEyecornerInnerLeft"
+ scale="0 0 0"
+ offset="0 0.00225 -0.0032" />
+
<bone
- name="mFaceEyeLidLowerRight"
- scale="0 0 0"
- offset="0 -0.0033 0.0025" />
-
+ name="mFaceNoseBridge"
+ scale="0 0 0"
+ offset="0 0 -0.002" />
+
<bone
- name="mFaceEyeLidUpperRight"
- scale="0 0 0"
- offset="0 -0.0033 0.002" />
-
+ name="mFaceNoseRight"
+ scale="0 0 0"
+ offset="0 -0.002 0" />
+
<bone
- name="mFaceEyecornerInnerRight"
- scale="0 0 0"
- offset="0 -0.0017 0.0025" />
-
+ name="mFaceNoseLeft"
+ scale="0 0 0"
+ offset="0 0.002 0" />
+
<bone
- name="mFaceEyebrowOuterRight"
- scale="0 0 0"
- offset="0 -0.004 0.0014" />
-
+ name="mFaceNoseBase"
+ scale="0 0 0"
+ offset="0 0 0.002" />
+
<bone
- name="mFaceEyebrowCenterRight"
- scale="0 0 0"
- offset="0 -0.00377 0.00061" />
-
+ name="mFaceCheekUpperRight"
+ scale="0 0 0"
+ offset="0 -0.003 0" />
+
<bone
- name="mFaceEyebrowInnerRight"
- scale="0 0 0"
- offset="0 -0.00225 0.001" />
-
+ name="mFaceCheekUpperLeft"
+ scale="0 0 0"
+ offset="0 0.003 0" />
+
<bone
- name="mFaceLipUpperRight"
- scale="0 0 0"
- offset="0 -0.0014 0.007" />
+ name="mFaceCheekLowerRight"
+ scale="0 0 0"
+ offset="0 -0.003 0.0032" />
+
<bone
- name="mFaceLipUpperCenter"
- scale="0 0 0"
- offset="0 0 0.007" />
+ name="mFaceCheekLowerLeft"
+ scale="0 0 0"
+ offset="0 0.003 0.0032" />
- <bone
+ <bone
name="mFaceTeethUpper"
scale="0 0 0"
- offset="0 0 0.007" />
-
- <bone
- name="mFaceLipLowerRight"
- scale="0 0 0"
- offset="0 -0.00225 0.0005" />
- <bone
- name="mFaceLipCornerRight"
- scale="0 0 0"
- offset="0 -0.00225 0.0075" />
-
- <bone
- name="mFaceEyeLidLowerLeft"
- scale="0 0 0"
- offset="0 0.0033 0.0025" />
-
- <bone
- name="mFaceEyeLidUpperLeft"
- scale="0 0 0"
- offset="0 0.0033 0.002" />
-
- <bone
- name="mFaceEyecornerInnerLeft"
- scale="0 0 0"
- offset="0 0.0017 0.0025" />
-
- <bone
- name="mFaceEyebrowOuterLeft"
- scale="0 0 0"
- offset="0 0.004 0.0014" />
-
- <bone
- name="mFaceEyebrowCenterLeft"
- scale="0 0 0"
- offset="0 0.00377 0.00061" />
-
- <bone
- name="mFaceEyebrowInnerLeft"
- scale="0 0 0"
- offset="0 0.00225 0.001" />
-
- <bone
- name="mFaceLipUpperLeft"
- scale="0 0 0"
- offset="0 0.0014 0.007" />
- <bone
- name="mFaceLipLowerCenter"
- scale="0 0 0"
- offset="0 0 0.001" />
- <bone
+ offset="0 0 0.0032" />
+ <bone
name="mFaceTeethLower"
scale="0 0 0"
- offset="0 0 0.008" />
- <bone
- name="mFaceLipLowerLeft"
- scale="0 0 0"
- offset="0 0.00225 0.0004" />
- <bone
- name="mFaceLipCornerLeft"
- scale="0 0 0"
- offset="0 0.00225 0.0075" />
-
- <bone
- name="mFaceTongueBase"
- scale="0 0 0"
- offset="0 0 0.00" />
-
- <bone
- name="mFaceJaw"
- scale="0 0 0"
- offset="0 0 0.0085" />
-
- <bone
- name="mFaceCheekLowerRight"
- scale="0 0 0"
- offset="0 0 0.0085" />
- <bone
- name="mFaceCheekLowerLeft"
- scale="0 0 0"
- offset="0 0 0.0085" />
-
- <bone
- name="mFaceCheekUpperRight"
- scale="0 0 0"
- offset="0 0 0.005" />
- <bone
- name="mFaceCheekUpperLeft"
- scale="0 0 0"
- offset="0 0 0.005" />
-
- <bone
- name="mFaceNoseCenter"
- scale="0 0 0"
- offset="0 0 0.005" />
-
- <bone
- name="mFaceNoseRight"
- scale="0 0 0"
- offset="0 0 0.005" />
-
- <bone
- name="mFaceNoseLeft"
- scale="0 0 0"
- offset="0 0 0.005" />
-
- <bone
- name="mFaceNoseBase"
- scale="0 0 0"
- offset="0 0 0.006" />
+ offset="0 0 0.0016" />
- </param_skeleton>
+ </param_skeleton>
</param>
<param
@@ -3810,28 +3443,28 @@
name="mFaceForeheadRight"
scale="0 0 0.2"
offset="-0.01 0 -0.01" />
-
+
<bone
name="mFaceEyebrowInnerRight"
scale="0 0 0"
offset="0 0 0.002" />
-
+
<bone
name="mFaceEyebrowInnerLeft"
scale="0 0 0"
offset="0 0 0.002" />
-
+
<bone
name="mFaceEyebrowCenterRight"
scale="0 0 0"
offset="0 0 0.003" />
-
+
<bone
name="mFaceEyebrowCenterLeft"
scale="0 0 0"
offset="0 0 0.003" />
- </param_skeleton>
+ </param_skeleton>
</param>
<param
@@ -3856,28 +3489,28 @@
name="mFaceForeheadRight"
scale="0 0 0.2"
offset="-0.01 0 -0.01" />
-
+
<bone
name="mFaceEyebrowInnerRight"
scale="0 0 0"
offset="0 0 0.002" />
-
+
<bone
name="mFaceEyebrowInnerLeft"
scale="0 0 0"
offset="0 0 0.002" />
-
+
<bone
name="mFaceEyebrowCenterRight"
scale="0 0 0"
offset="0 0 0.003" />
-
+
<bone
name="mFaceEyebrowCenterLeft"
scale="0 0 0"
offset="0 0 0.003" />
- </param_skeleton>
+ </param_skeleton>
</param>
<param
@@ -3897,35 +3530,35 @@
name="mFaceEyebrowInnerRight"
scale="0.1 0 0"
offset="0.004 0 0" />
-
+
<bone
name="mFaceEyebrowInnerLeft"
scale="0.1 0 0"
offset="0.004 0 0" />
-
+
<bone
name="mFaceEyebrowCenterRight"
scale="0.1 0 0"
offset="0.004 0 0" />
-
+
<bone
name="mFaceEyebrowCenterLeft"
scale="0.1 0 0"
offset="0.004 0 0" />
-
+
<bone
name="mFaceEyebrowOuterRight"
scale="0 0 0"
offset="0.004 0 0" />
-
+
<bone
name="mFaceEyebrowOuterLeft"
scale="0 0 0"
offset="0.004 0 0" />
- </param_skeleton>
+ </param_skeleton>
</param>
-
+
<param
id="30011"
group="1"
@@ -3983,7 +3616,7 @@
</param_skeleton>
</param>
-
+
<param
id="30759"
group="1"
@@ -4001,8 +3634,8 @@
</param_skeleton>
</param>
-
-
+
+
<param
id="30010"
group="1"
@@ -4011,15 +3644,14 @@
value_max="3">
<param_skeleton>
- <bone
- name="mFaceCheekLowerLeft"
- scale="0 0.1 0"
- offset="0.001 -0.01 0" />
-
- <bone
- name="mFaceCheekLowerRight"
- scale="0 0.1 0"
- offset="0.001 0.01 0" />
+ <bone
+ name="mFaceCheekLowerLeft"
+ scale="0 -0.12 0"
+ offset="0.0 0.0 0" />
+ <bone
+ name="mFaceCheekLowerRight"
+ scale="0 -0.12 0"
+ offset="0 0 0" />
</param_skeleton>
</param>
@@ -4034,7 +3666,7 @@
<bone
name="mFaceChin"
- scale="0.0 0.7 0.0"
+ scale="0.0 0.5 0.0"
offset="0.0 0.0 0.0" />
</param_skeleton>
@@ -4052,7 +3684,12 @@
name="mFaceJaw"
scale="0.0 0.5 0.0"
offset="0.0 0.0 0.0" />
-
+
+ <bone
+ name="mFaceJawShaper"
+ scale="0.0 0.5 0.0"
+ offset="0.0 0.0 0.0" />
+
<bone
name="mFaceLipLowerRight"
scale="0.0 0.0 0.0"
@@ -4065,8 +3702,8 @@
</param_skeleton>
</param>
-
-
+
+
<param
id="30018"
group="1"
@@ -4087,7 +3724,7 @@
</param_skeleton>
</param>
-
+
<param
id="30021"
group="1"
@@ -4150,7 +3787,7 @@
</param_skeleton>
</param>
-
+
<param
id="30019"
group="1"
@@ -4181,7 +3818,7 @@
</param_skeleton>
</param>
-
+
<param
id="30879"
group="1"
@@ -4198,7 +3835,7 @@
</param_skeleton>
</param>
-
+
<param
id="30193"
group="1"
@@ -4209,31 +3846,606 @@
<bone
name="mFaceChin"
- scale="0.0 0.3 0.0"
+ scale="0.0 -0.2 0.0"
+ offset="0.0 0.0 0.0" />
+
+ <bone
+ name="mFaceRoot"
+ scale="0.0 0 0.0"
offset="0.0 0.0 0.0" />
<bone
name="mFaceCheekLowerRight"
- scale="0.0 0.0 0.0"
- offset="0.0 -0.005 0.0" />
+ scale="0.0 -0.2 0.0"
+ offset="0.0 0 0.0" />
<bone
name="mFaceCheekLowerLeft"
- scale="0.0 0.0 0.0"
- offset="0.0 0.005 0.0" />
+ scale="0.0 -0.2 0.0"
+ offset="0.0 0 0.0" />
<bone
name="mFaceForeheadRight"
- scale="0.0 0.7 0.0"
- offset="0.0 -0.005 0.0" />
+ scale="0.0 -1.0 0.0"
+ offset="0.0 0.01 -0.01" />
<bone
name="mFaceForeheadLeft"
- scale="0.0 0.7 0.0"
- offset="0.0 0.005 0.0" />
+ scale="0.0 -0.8 0.0"
+ offset="0.0 -0.01 -0.01" />
+
+ <bone
+ name="mFaceJawShaper"
+ scale="0.0 -0.3 0.0"
+ offset="0.0 0 0" />
</param_skeleton>
</param>
+
+ <param
+ id="30646"
+ group="1"
+ name="Egg_Head"
+ value_min="-1.3"
+ value_max="1"
+ value_default="0">
+ <param_skeleton>
+
+ <bone
+ name="mFaceRoot"
+ scale="0 -0.07 0.07"
+ offset="0 0 -0.005" />
+
+ <bone
+ name="mFaceForeheadLeft"
+ scale="0 0 0.2"
+ offset="-0.01 0 -0.01" />
+
+ <bone
+ name="mFaceForeheadCenter"
+ scale="0 0 0"
+ offset="-0.001 0 0.001" />
+
+ <bone
+ name="mFaceForeheadRight"
+ scale="0 0 0.2"
+ offset="-0.01 0 -0.01" />
+
+ <bone
+ name = "mFaceChin"
+ offset = "0.015 0.00 0.005"
+ scale = "0.0 0.0 0.0" />
+
+ <bone
+ name="mFaceEyeAltRight"
+ scale="0 0 0"
+ offset="0 -0.0033 0.0025" />
+
+ <bone
+ name="mFaceEyeAltLeft"
+ scale="0 0 0"
+ offset="0 0.0033 0.0025" />
+
+ <bone
+ name="mFaceEyeLidLowerRight"
+ scale="0 0 0"
+ offset="0 -0.0033 0.0025" />
+
+ <bone
+ name="mFaceEyeLidUpperRight"
+ scale="0 0 0"
+ offset="0 -0.0033 0.002" />
+
+ <bone
+ name="mFaceEyecornerInnerRight"
+ scale="0 0 0"
+ offset="0 -0.0017 0.0025" />
+
+ <bone
+ name="mFaceEyebrowOuterRight"
+ scale="0 0 0"
+ offset="0 -0.004 0.0014" />
+
+ <bone
+ name="mFaceEyebrowCenterRight"
+ scale="0 0 0"
+ offset="0 -0.00377 0.00061" />
+
+ <bone
+ name="mFaceEyebrowInnerRight"
+ scale="0 0 0"
+ offset="0 -0.00225 0.001" />
+
+
+
+ <bone
+ name="mFaceEyeLidLowerLeft"
+ scale="0 0 0"
+ offset="0 0.0033 0.0025" />
+
+ <bone
+ name="mFaceEyeLidUpperLeft"
+ scale="0 0 0"
+ offset="0 0.0033 0.002" />
+
+ <bone
+ name="mFaceEyecornerInnerLeft"
+ scale="0 0 0"
+ offset="0 0.0017 0.0025" />
+
+ <bone
+ name="mFaceEyebrowOuterLeft"
+ scale="0 0 0"
+ offset="0 0.004 0.0014" />
+
+ <bone
+ name="mFaceEyebrowCenterLeft"
+ scale="0 0 0"
+ offset="0 0.00377 0.00061" />
+
+ <bone
+ name="mFaceEyebrowInnerLeft"
+ scale="0 0 0"
+ offset="0 0.00225 0.001" />
+
+ <bone
+ name="mFaceLipLowerRight"
+ scale="0 0 0"
+ offset="0 0 0" />
+ <bone
+ name="mFaceLipLowerCenter"
+ scale="0 0 0"
+ offset="0 0 0" />
+ <bone
+ name="mFaceLipLowerLeft"
+ scale="0 0 0"
+ offset="0 0 0" />
+
+ <bone
+ name="mFaceTeethUpper"
+ scale="0 0 0"
+ offset="0 0 0.0075" />
+
+ <bone
+ name="mFaceTeethLower"
+ scale="0 0 0"
+ offset="0 0 0.0061" />
+
+ <bone
+ name="mFaceTongueBase"
+ scale="0 0 0"
+ offset="0 0 -0.00" />
+
+ <bone
+ name="mFaceCheekLowerRight"
+ scale="0 0 0"
+ offset="0 0 0.0085" />
+
+ <bone
+ name="mFaceCheekLowerLeft"
+ scale="0 0 0"
+ offset="0 0 0.0085" />
+
+ <bone
+ name="mFaceCheekUpperRight"
+ scale="0 0 0"
+ offset="0 0 0.005" />
+
+ <bone
+ name="mFaceCheekUpperLeft"
+ scale="0 0 0"
+ offset="0 0 0.005" />
+
+ <bone
+ name="mFaceNoseCenter"
+ scale="0 0 0"
+ offset="0 0 0.005" />
+
+ <bone
+ name="mFaceNoseRight"
+ scale="0 0 0"
+ offset="0 0 0.005" />
+
+ <bone
+ name="mFaceNoseLeft"
+ scale="0 0 0"
+ offset="0 0 0.005" />
+
+ <bone
+ name="mFaceNoseBase"
+ scale="0 0 0"
+ offset="0 0 0.006" />
+
+ <bone
+ name="mFaceJawShaper"
+ scale="0 0.2 0"
+ offset="0 0 0" />
+
+ </param_skeleton>
+ </param>
+
+ <param
+ id="30689"
+ group="1"
+ name="EyeBone_Big_Eyes"
+ value_min="-1.1"
+ value_max="1.1">
+ <param_skeleton>
+
+ <!-- Experimental: Added Scale to the System eyes. From first look this affects only custom meshes.
+ | The result is: Custom eyes now scale in the same way as system eyes do
+ | Revert by setting scale to scale="0 0 0" for mEyeLeft and mEyeRight
+ -->
+ <bone
+ name="mEyeLeft"
+ scale="0.248 0.25 0.25"
+ offset="0 0 0" />
+
+ <bone
+ name="mEyeRight"
+ scale="0.248 0.25 0.25"
+ offset="0 0 0" />
+
+ <bone
+ name="mFaceEyeAltLeft"
+ scale="0.248 0.25 0.25"
+ offset="0 0 0" />
+
+ <bone
+ name="mFaceEyeAltRight"
+ scale="0.248 0.25 0.25"
+ offset="0 0 0" />
+
+ </param_skeleton>
+ </param>
+
+ <param
+ id="30772"
+ group="1"
+ name="EyeBone_Head_Elongate"
+ value_min="-1"
+ value_max="1">
+ <param_skeleton>
+
+ <bone
+ name="mFaceRoot"
+ scale="0.25 0 0"
+ offset="0 0 0" />
+
+ <bone
+ name="mFaceEyeLidUpperLeft"
+ scale="0 0 0"
+ offset="-0.0038 0 0" />
+
+ <bone
+ name="mFaceEyeLidUpperRight"
+ scale="0 0 0"
+ offset="-0.0038 0 0" />
+
+ <bone
+ name="mFaceEyeLidLowerLeft"
+ scale="0 0 0"
+ offset="-0.0038 0 0" />
+
+ <bone
+ name="mFaceEyeLidLowerRight"
+ scale="0 0 0"
+ offset="-0.0038 0 0" />
+
+ <bone
+ name="mFaceNoseCenter"
+ scale="0 0 0"
+ offset=".01 0 0" />
+
+ <bone
+ name="mFaceNoseRight"
+ scale="0 0 0"
+ offset=".005 0 0" />
+
+ <bone
+ name="mFaceNoseLeft"
+ scale="0 0 0"
+ offset=".005 0 0" />
+
+ <bone
+ name="mFaceNoseBase"
+ scale="0 0 0"
+ offset=".005 0 0" />
+
+ <bone
+ name="mFaceLipUpperLeft"
+ scale="0 0 0"
+ offset="0.005 0 0" />
+
+ <bone
+ name="mFaceLipUpperCenter"
+ scale="0 0 0"
+ offset="0.005 0 0" />
+
+ <bone
+ name="mFaceLipUpperRight"
+ scale="0 0 0"
+ offset="0.005 0 0" />
+
+ <bone
+ name="mFaceLipCornerRight"
+ scale="0 0 0"
+ offset="0.005 0 0" />
+
+ <bone
+ name="mFaceLipCornerLeft"
+ scale="0 0 0"
+ offset="0.005 0 0" />
+
+ <bone
+ name="mFaceLipLowerLeft"
+ scale="0 0 0"
+ offset="0.01 0 0" />
+
+ <bone
+ name="mFaceLipLowerCenter"
+ scale="0 0 0"
+ offset="0.01 0 0" />
+
+ <bone
+ name="mFaceLipLowerRight"
+ scale="0 0 0"
+ offset="0.01 0 0" />
+
+
+ <bone
+ name="mFaceCheekLowerLeft"
+ scale="0 0 0"
+ offset="0.007 0 0" />
+
+ <bone
+ name="mFaceCheekLowerRight"
+ scale="0 0 0"
+ offset="0.007 0 0" />
+
+ <bone
+ name="mFaceChin"
+ scale="0 0 0"
+ offset="0.014 0 0" />
+
+ <bone
+ name="mFaceTeethUpper"
+ scale="0.28 0 0"
+ offset="0 0 0" />
+ <bone
+ name="mFaceTeethLower"
+ scale="0.28 0 0"
+ offset="0 0 0" />
+
+ <bone
+ name="mFaceTongueBase"
+ scale="0.3 0 0"
+ offset="0 0 0" />
+
+ <bone
+ name="mFaceTongueTip"
+ scale="0 0 0"
+ offset="0.004 0 0" />
+
+ </param_skeleton>
+ </param>
+
+ <param
+ id="31772"
+ group="1"
+ name="EyeBone_Head_Elongate"
+ value_min="0"
+ value_max="1">
+ <param_skeleton>
+
+ <bone
+ name="mFaceEyeAltLeft"
+ scale="0 0 0"
+ offset="0.0058 0 0" />
+
+ <bone
+ name="mFaceEyeAltRight"
+ scale="0 0 0"
+ offset="0.0058 0 0" />
+
+ </param_skeleton>
+ </param>
+
+ <param
+ id="32772"
+ group="1"
+ name="EyeBone_Head_Elongate"
+ value_min="0"
+ value_max="1">
+ <param_skeleton>
+
+ <bone
+ name="mFaceEyeAltLeft"
+ scale="0 0 0"
+ offset="-0.0032 0 0" />
+
+ <bone
+ name="mFaceEyeAltRight"
+ scale="0 0 0"
+ offset="-0.0032 0 0" />
+
+ </param_skeleton>
+ </param>
+
+
+ <!-- Eye Brow sliders -->
+
+ <param
+ id="30119"
+ group="1"
+ name="Eyebrow Size"
+ value_min="0"
+ value_max="1"
+ value_default="0.5">
+
+ <param_skeleton>
+
+ <bone
+ name="mFaceEyebrowOuterRight"
+ scale="0 0 0.5"
+ offset="0.0 0.0 0.0" />
+
+ <bone
+ name="mFaceEyebrowCenterRight"
+ scale="0 0 0.5"
+ offset="0 0 0" />
+
+ <bone
+ name="mFaceEyebrowInnerRight"
+ scale="0 0 0.5"
+ offset="0 0 0" />
+
+ <bone
+ name="mFaceEyebrowOuterLeft"
+ scale="0 0 0.5"
+ offset="0 0 0" />
+
+ <bone
+ name="mFaceEyebrowCenterLeft"
+ scale="0 0 0.5"
+ offset="0 0 0" />
+
+ <bone
+ name="mFaceEyebrowInnerLeft"
+ scale="0 0 0.5"
+ offset="0 0 0" />
+
+ </param_skeleton>
+ </param>
+
+ <param
+ id="30031"
+ group="1"
+ name="Arced_Eyebrows"
+ value_min="0"
+ value_max="2"
+ value_default=".5">
+
+ <param_skeleton>
+
+ <bone
+ name="mFaceEyebrowOuterRight"
+ scale="0 0 0 "
+ offset="0.0 0.0 0.0" />
+
+ <bone
+ name="mFaceEyebrowCenterRight"
+ scale="0 0 0 "
+ offset="0.0 0.0 0.005" />
+
+ <bone
+ name="mFaceEyebrowInnerRight"
+ scale="0 0 0 "
+ offset="0.0 0.0 0.001" />
+
+ <bone
+ name="mFaceEyebrowOuterLeft"
+ scale="0 0 0 "
+ offset="0.0 0.0 0.0" />
+
+ <bone
+ name="mFaceEyebrowCenterLeft"
+ scale="0 0 0 "
+ offset="0.0 0.0 0.005" />
+
+ <bone
+ name="mFaceEyebrowInnerLeft"
+ scale="0 0 0 "
+ offset="0.0 0.0 0.001" />
+
+ </param_skeleton>
+ </param>
+
+ <param
+ id="30757"
+ group="1"
+ name="Lower_Eyebrows"
+ value_min="-4"
+ value_max="2"
+ value_default="-1">
+
+ <param_skeleton>
+
+ <bone
+ name="mFaceEyebrowOuterRight"
+ scale="0 0 0 "
+ offset="0.0 0.0 -0.001" />
+
+ <bone
+ name="mFaceEyebrowCenterRight"
+ scale="0 0 0 "
+ offset="0.0 0.0 -0.002" />
+
+ <bone
+ name="mFaceEyebrowInnerRight"
+ scale="0 0 0 "
+ offset="0.0 0.0 -0.001" />
+
+ <bone
+ name="mFaceEyebrowOuterLeft"
+ scale="0 0 0 "
+ offset="0.0 0.0 -0.001" />
+
+ <bone
+ name="mFaceEyebrowCenterLeft"
+ scale="0 0 0 "
+ offset="0.0 0.0 -0.002" />
+
+ <bone
+ name="mFaceEyebrowInnerLeft"
+ scale="0 0 0 "
+ offset="0.0 0.0 -0.001" />
+
+ </param_skeleton>
+ </param>
+
+ <param
+ id="30016"
+ group="1"
+ name="Pointy_Eyebrows"
+ value_min="-.5"
+ value_max="3">
+
+ <param_skeleton>
+
+ <bone
+ name="mFaceEyebrowOuterRight"
+ scale="0 0 0 "
+ offset="0.0 0.0 0.0" />
+
+ <bone
+ name="mFaceEyebrowCenterRight"
+ scale="0 0 0 "
+ offset="0.0 -0.001 0.0035" />
+
+ <bone
+ name="mFaceEyebrowInnerRight"
+ scale="0 0 0 "
+ offset="0.0 0.0 -0.002" />
+
+ <bone
+ name="mFaceEyebrowOuterLeft"
+ scale="0 0 0 "
+ offset="0.0 0.0 0.0" />
+
+ <bone
+ name="mFaceEyebrowCenterLeft"
+ scale="0 0 0 "
+ offset="0.0 0.001 0.0035" />
+
+ <bone
+ name="mFaceEyebrowInnerLeft"
+ scale="0 0 0 "
+ offset="0.0 0.0 -0.002" />
+
+ </param_skeleton>
+ </param>
+
</skeleton>
<mesh
@@ -5047,11 +5259,11 @@
lod="0"
file_name="avatar_head.llm"
min_pixel_width="320">
- <!--
+ <!--
begin morph targets
#############
tweakable morphs
- #############
+ #############
-->
<param
id="20001"
@@ -5088,7 +5300,7 @@
value_max="1.5">
<param_morph />
</param>
-
+
<param
id="20656"
group="1"
@@ -5097,7 +5309,7 @@
value_max="2">
<param_morph />
</param>
-
+
<param
id="20004"
group="1"
@@ -5115,7 +5327,7 @@
value_max="2">
<param_morph />
</param>
-
+
<param
id="20506"
group="1"
@@ -5124,7 +5336,7 @@
value_max="2">
<param_morph />
</param>
-
+
<param
id="20764"
group="1"
@@ -5142,7 +5354,7 @@
value_max="1.5">
<param_morph/>
</param>
-
+
<param
id="20663"
group="1"
@@ -5152,7 +5364,7 @@
value_default="0">
<param_morph />
</param>
-
+
<param
id="20035"
group="1"
@@ -5161,7 +5373,7 @@
value_max="2">
<param_morph/>
</param>
-
+
<param
id="20015"
group="1"
@@ -5170,7 +5382,7 @@
value_max="1.5">
<param_morph/>
</param>
-
+
<param
id="20796"
group="1"
@@ -5179,7 +5391,7 @@
value_max="3">
<param_morph />
</param>
-
+
<param
id="20185"
group="1"
@@ -5188,7 +5400,7 @@
value_max="1">
<param_morph />
</param>
-
+
<param
id="20665"
group="1"
@@ -5197,7 +5409,7 @@
value_max="2">
<param_morph />
</param>
-
+
<param
id="20024"
group="1"
@@ -5206,7 +5418,7 @@
value_max="2">
<param_morph />
</param>
-
+
<param
id="20650"
group="1"
@@ -5215,7 +5427,7 @@
value_max="1.2">
<param_morph />
</param>
-
+
<param
id="20765"
group="1"
@@ -5395,7 +5607,7 @@
value_max="1">
<param_morph />
</param>
-
+
<param
id="20021"
group="1"
@@ -5663,7 +5875,7 @@
value_max="1.2">
<param_morph />
</param>
-
+
<param
id="657"
group="1"
@@ -5833,7 +6045,7 @@
-->
<!--
##############
- # Facial Expression morphs
+ # Facial Expression morphs
##############
-->
<param
@@ -6311,7 +6523,7 @@
label_max="Anime Eyes"
value_min="-2"
value_max="2"
- show_simple="true"
+ show_simple="true"
value_default="0">
<param_morph />
</param>
@@ -6333,9 +6545,49 @@
<param_morph />
</param>
+ <param
+ shared="1"
+ id="20021"
+ group="1"
+ name="Upper_Eyelid_Fold"
+ value_min="-0.2"
+ value_max="1.3">
+ <param_morph />
+ </param>
+
+ <param
+ shared="1"
+ id="20024"
+ group="1"
+ name="Wide_Eyes"
+ value_min="-1.5"
+ value_max="2">
+ <param_morph />
+ </param>
+
+ <param
+ shared="1"
+ id="20650"
+ group="1"
+ name="Eyelid_Corner_Up"
+ value_min="-1.3"
+ value_max="1.2">
+ <param_morph />
+ </param>
+
+ <param
+ shared="1"
+ id="20880"
+ group="1"
+ name="Eyelid_Inner_Corner_Up"
+ value_min="-1.3"
+ value_max="1.2">
+ <param_morph />
+ </param>
+
<!--
##############
- # Facial Expression morphs
+ # Facial Expression morphs
##############
-->
<param
@@ -6633,7 +6885,7 @@
<volume_morph
name="RIGHT_PEC"
scale="-0.05 0.0 0.0"
- pos="-0.01 -0.01 -0.02"/>
+ pos="-0.01 0.01 -0.02"/>
</param_morph>
</param>
@@ -6659,7 +6911,7 @@
<volume_morph
name="RIGHT_PEC"
scale="-0.051 0.0 0.0"
- pos="-0.02 -0.01 -0.03"/>
+ pos="-0.02 0.01 -0.03"/>
</param_morph>
</param>
@@ -6964,7 +7216,7 @@
pos="0.004 0.0 -0.01"/>
</param_morph>
</param>
-
+
<param
id="628"
group="1"
@@ -7051,7 +7303,7 @@
pos="0.0 0.026 0.0"/>
</param_morph>
</param>
-
+
<param
id="685"
group="0"
@@ -7080,8 +7332,8 @@
</param_morph>
</param>
- <!-- ############# #
- other morphs (not user controlled)
+ <!-- ############# #
+ other morphs (not user controlled)
############# -->
<param
id="100"
@@ -7867,7 +8119,7 @@
<param_morph />
</param>
-
+
<param
id="1205"
group="1"
@@ -8269,9 +8521,9 @@
name="skirt_male"
wearable="skirt"
edit_group="driven"
- cross_wearable="true"
- value_min="0"
- value_max="1">
+ cross_wearable="true"
+ value_min="0"
+ value_max="1">
<param_morph />
</param>
@@ -8712,7 +8964,7 @@
<layer
name="head bump definition"
render_pass="bump">
-
+
<texture
tga_file="bump_head_base.tga"
@@ -10784,7 +11036,7 @@ render_pass="bump">
<texture
local_texture="upper_jacket"
local_texture_alpha_only="true" />
-
+
<param
id="875"
@@ -11802,7 +12054,7 @@ render_pass="bump">
<texture
local_texture="lower_jacket"
local_texture_alpha_only="true" />
-
+
<param
id="876"
@@ -12215,7 +12467,7 @@ render_pass="bump">
id="30004" />
</param_driver>
</param>
-
+
<param
id="517"
group="0"
@@ -12238,8 +12490,8 @@ render_pass="bump">
<driven
id="30517" />
</param_driver>
- </param>
-
+ </param>
+
<param
id="20"
group="0"
@@ -12285,7 +12537,7 @@ render_pass="bump">
id="30656" />
</param_driver>
</param>
-
+
<param
id="653"
group="0"
@@ -12331,7 +12583,7 @@ render_pass="bump">
id="30506" />
</param_driver>
</param>
-
+
<param
id="764"
group="0"
@@ -12353,7 +12605,7 @@ render_pass="bump">
id="30764" />
</param_driver>
</param>
-
+
<param
id="25"
group="0"
@@ -12395,7 +12647,7 @@ render_pass="bump">
<param_driver>
<driven
id="20663" />
-
+
<driven
id="31663"
min1="-2"
@@ -12433,7 +12685,7 @@ render_pass="bump">
id="30035" />
</param_driver>
</param>
-
+
<param
id="15"
group="0"
@@ -12456,7 +12708,7 @@ render_pass="bump">
id="30015" />
</param_driver>
</param>
-
+
<param
id="796"
group="0"
@@ -12479,7 +12731,7 @@ render_pass="bump">
id="30796" />
</param_driver>
</param>
-
+
<param
id="185"
group="0"
@@ -12502,7 +12754,7 @@ render_pass="bump">
id="30185" />
</param_driver>
</param>
-
+
<param
id="760"
group="0"
@@ -12526,8 +12778,8 @@ render_pass="bump">
id="30760" />
</param_driver>
</param>
-
-
+
+
<param
id="665"
group="0"
@@ -12551,7 +12803,7 @@ render_pass="bump">
id="30665" />
</param_driver>
</param>
-
+
<param
id="6"
group="0"
@@ -12572,9 +12824,9 @@ render_pass="bump">
id="20006" />
<driven
id="30006" />
- </param_driver>
+ </param_driver>
</param>
-
+
<param
id="7"
group="0"
@@ -12595,7 +12847,7 @@ render_pass="bump">
id="20007" />
<driven
id="30007" />
- </param_driver>
+ </param_driver>
</param>
<param
@@ -12618,10 +12870,10 @@ render_pass="bump">
id="20008" />
<driven
id="30008" />
- </param_driver>
+ </param_driver>
</param>
-
-
+
+
<param
id="24"
group="0"
@@ -12666,7 +12918,7 @@ render_pass="bump">
id="30650" />
</param_driver>
</param>
-
+
<param
id="880"
group="0"
@@ -12688,7 +12940,7 @@ render_pass="bump">
id="30880" />
</param_driver>
</param>
-
+
<param
id="21"
group="0"
@@ -12754,7 +13006,7 @@ render_pass="bump">
id="30765" />
</param_driver>
</param>
-
+
<param
id="1"
group="0"
@@ -12777,7 +13029,7 @@ render_pass="bump">
id="30001" />
</param_driver>
</param>
-
+
<param
id="11"
group="0"
@@ -12823,7 +13075,7 @@ render_pass="bump">
id="30758" />
</param_driver>
</param>
-
+
<param
id="27"
group="0"
@@ -12846,7 +13098,7 @@ render_pass="bump">
id="30027" />
</param_driver>
</param>
-
+
<param
id="759"
group="0"
@@ -12870,7 +13122,7 @@ render_pass="bump">
id="30759" />
</param_driver>
</param>
-
+
<param
id="10"
@@ -12895,7 +13147,7 @@ render_pass="bump">
id="30010" />
</param_driver>
</param>
-
+
<param
id="17"
group="0"
@@ -12918,7 +13170,7 @@ render_pass="bump">
id="30017" />
</param_driver>
</param>
-
+
<param
id="18"
group="0"
@@ -12941,7 +13193,7 @@ render_pass="bump">
id="30018" />
</param_driver>
</param>
-
+
<param
id="14"
group="0"
@@ -12964,7 +13216,7 @@ render_pass="bump">
id="30014" />
</param_driver>
</param>
-
+
<param
id="19"
group="0"
@@ -13412,7 +13664,7 @@ render_pass="bump">
max1="1"
max2="1"
min2="1" />
-
+
<driven
id="30505"
min1="0"
@@ -13460,7 +13712,7 @@ render_pass="bump">
max1="1"
max2="1"
min2="1" />
-
+
<driven
id="30797"
min1="0"
@@ -13474,7 +13726,7 @@ render_pass="bump">
max1="1"
max2="1"
min2="1" />
-
+
</param_driver>
</param>
@@ -13500,7 +13752,7 @@ render_pass="bump">
<driven
id="30" />
-
+
<driven
id="30155" />
@@ -14190,7 +14442,7 @@ render_pass="bump">
max1="1"
max2="1"
min2="1" />
-
+
<driven
id="31629"
min1="0"
@@ -14204,7 +14456,7 @@ render_pass="bump">
max1="1"
max2="1"
min2="1" />
-
+
</param_driver>
</param>
@@ -14231,28 +14483,13 @@ render_pass="bump">
<driven
id="186" />
-
+
<driven
min1="-1.3"
max1="-1.3"
max2="-1.3"
min2="1"
- id="40017" />
-
- <driven
- id="40185" />
-
- <driven
- id="41629" />
-
- <driven
- id="42629" />
-
- <driven
- id="40007" />
-
- <driven
- id="40647" />
+ id="30646" />
</param_driver>
</param>
@@ -14280,7 +14517,7 @@ render_pass="bump">
<driven
id="187" />
-
+
<driven
id="30647" />
@@ -14511,6 +14748,24 @@ render_pass="bump">
<driven
id="772" />
+
+ <driven
+ id="30772" />
+
+ <driven
+ min1="0"
+ max1="0"
+ max2="0"
+ min2="0.45"
+ id="31772" />
+
+ <driven
+ min1="0.5"
+ max1="1"
+ max2="1"
+ min2="1"
+ id="32772" />
+
</param_driver>
</param>
@@ -14565,6 +14820,7 @@ render_pass="bump">
camera_elevation=".1"
camera_distance=".35">
<param_driver>
+
<driven
id="686" />
@@ -14582,6 +14838,10 @@ render_pass="bump">
<driven
id="689" />
+
+ <driven
+ id="30689" />
+
</param_driver>
</param>
@@ -15026,6 +15286,10 @@ render_pass="bump">
<driven
id="1001" />
+
+ <driven
+ id="30119" />
+
</param_driver>
</param>
@@ -15490,6 +15754,8 @@ render_pass="bump">
<param_driver>
<driven
id="870" />
+ <driven
+ id="30016"/>
</param_driver>
</param>
@@ -15513,6 +15779,8 @@ render_pass="bump">
<param_driver>
<driven
id="871" />
+ <driven
+ id="30757"/>
</param_driver>
</param>
@@ -15535,9 +15803,11 @@ render_pass="bump">
<param_driver>
<driven
id="872" />
+ <driven
+ id="30031"/>
</param_driver>
</param>
-
+
<param
id="877"
@@ -15557,13 +15827,13 @@ render_pass="bump">
<param_driver>
<driven
id="875" />
-
+
<driven
id="876" />
</param_driver>
</param>
-
+
<param
id="1071"
group="2"
@@ -15620,7 +15890,7 @@ render_pass="bump">
max1="1"
max2="1"
min2="1" />
-
+
<driven
id="1069"
min1="0"
diff --git a/indra/newview/character/avatar_skeleton.xml b/indra/newview/character/avatar_skeleton.xml
index 350ba7b841..2241a12545 100644
--- a/indra/newview/character/avatar_skeleton.xml
+++ b/indra/newview/character/avatar_skeleton.xml
@@ -1,4 +1,4 @@
-<linden_skeleton num_bones="132" num_collision_volumes="26" version="2.0">
+<linden_skeleton num_bones="133" num_collision_volumes="26" version="2.0">
<bone aliases="hip avatar_mPelvis" connected="false" end="0.000 0.000 0.084" group="Torso" name="mPelvis" pivot="0.000000 0.000000 1.067015" pos="0.000 0.000 1.067" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
<collision_volume end="0.030 0.000 0.095" group="Collision" name="PELVIS" pos="-0.01 0 -0.02" rot="0.000000 8.00000 0.000000" scale="0.12 0.16 0.17" support="base"/>
<collision_volume end="-0.100 0.000 0.000" group="Collision" name="BUTT" pos="-0.06 0 -0.1" rot="0.000000 0.00000 0.000000" scale="0.1 0.1 0.1" support="base"/>
@@ -21,11 +21,11 @@
<bone aliases="head avatar_mHead" connected="true" end="0.000 0.000 0.079" group="Torso" name="mHead" pivot="0.000000 -0.000000 0.075630" pos="0.000 -0.000 0.076" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
<collision_volume end="0.000 0.000 0.100" group="Collision" name="HEAD" pos="0.02 0 0.07" rot="0.000000 0.000000 0.000000" scale="0.11 0.09 0.12" support="base"/>
<bone aliases="figureHair avatar_mSkull" connected="false" end="0.000 0.000 0.033" group="Extra" name="mSkull" pivot="0.000000 0.000000 0.079000" pos="0.000 0.000 0.079" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
- <bone aliases="avatar_mEyeRight" connected="false" end="0.100 0.000 0.000" group="Extra" name="mEyeRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" support="base"/>
- <bone aliases="avatar_mEyeLeft" connected="false" end="0.100 0.000 0.000" group="Extra" name="mEyeLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
- <bone connected="false" end="0.100 0.000 0.000" group="Face" name="mFaceEyeAltRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.100 0.000 0.000" group="Face" name="mFaceEyeAltLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.020 0.000 0.000" group="Face" name="mFaceRoot" pivot="0.025 0.000 0.045" pos="0.025 0.000 0.045" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone aliases="avatar_mEyeRight" connected="false" end="0.025 0.000 0.000" group="Extra" name="mEyeRight" pivot="0.098466 -0.036000 0.079000" pos="0.098 -0.036 0.079" rot="0.000000 0.000000 -0.000000" scale="1.000 1.000 1.000" support="base"/>
+ <bone aliases="avatar_mEyeLeft" connected="false" end="0.025 0.000 0.000" group="Extra" name="mEyeLeft" pivot="0.098461 0.036000 0.079000" pos="0.098 0.036 0.079" rot="0.000000 -0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
+ <bone connected="false" end="0.020 0.000 0.000" group="Face" name="mFaceRoot" pivot="0.025000 0.000000 0.045000" pos="0.025 0.000 0.045" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="false" end="0.025 0.000 0.000" group="Face" name="mFaceEyeAltRight" pivot="0.073466 -0.036000 0.0339300" pos="0.073 -0.036 0.034" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.025 0.000 0.000" group="Face" name="mFaceEyeAltLeft" pivot="0.073461 0.036000 0.0339300" pos="0.073 0.036 0.034" rot="0.000000 0.000000 0.000000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.024 0.004 0.018" group="Face" name="mFaceForeheadLeft" pivot="0.061 0.035 0.083" pos="0.061 0.035 0.083" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.024 -0.004 0.018" group="Face" name="mFaceForeheadRight" pivot="0.061 -0.035 0.083" pos="0.061 -0.035 0.083" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.023 0.013 0.000" group="Eyes" name="mFaceEyebrowOuterLeft" pivot="0.064 0.051 0.048" pos="0.064 0.051 0.048" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
@@ -34,10 +34,10 @@
<bone connected="false" end="0.023 -0.013 0.000" group="Eyes" name="mFaceEyebrowOuterRight" pivot="0.064 -0.051 0.048" pos="0.064 -0.051 0.048" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.027 0.000 0.000" group="Eyes" name="mFaceEyebrowCenterRight" pivot="0.070 -0.043 0.056" pos="0.070 -0.043 0.056" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.026 0.000 0.000" group="Eyes" name="mFaceEyebrowInnerRight" pivot="0.075 -0.022 0.051" pos="0.075 -0.022 0.051" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.038 0.000 0.000" group="Eyes" name="mFaceEyeLidUpperLeft" pivot="0.062 0.036 0.039" pos="0.062 0.036 0.039" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.036 0.000 0.000" group="Eyes" name="mFaceEyeLidLowerLeft" pivot="0.061 0.036 0.027" pos="0.061 0.036 0.027" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.038 0.000 0.000" group="Eyes" name="mFaceEyeLidUpperRight" pivot="0.062 -0.036 0.039" pos="0.062 -0.036 0.039" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.036 0.000 0.000" group="Eyes" name="mFaceEyeLidLowerRight" pivot="0.061 -0.036 0.027" pos="0.061 -0.036 0.027" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.027 0.000 0.005" group="Eyes" name="mFaceEyeLidUpperLeft" pivot="0.073 0.036 0.034" pos="0.073 0.036 0.034" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.024 0.000 -0.007" group="Eyes" name="mFaceEyeLidLowerLeft" pivot="0.073 0.036 0.034" pos="0.073 0.036 0.034" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.027 0.000 0.005" group="Eyes" name="mFaceEyeLidUpperRight" pivot="0.073 -0.036 0.034" pos="0.073 -0.036 0.034" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.024 0.000 -0.007" group="Eyes" name="mFaceEyeLidLowerRight" pivot="0.073 -0.036 0.034" pos="0.073 -0.036 0.034" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="-0.019 0.018 0.025" group="Ears" name="mFaceEar1Left" pivot="0.000 0.080 0.002" pos="0.000 0.080 0.002" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
<bone connected="true" end="0.000 0.000 0.033" group="Ears" name="mFaceEar2Left" pivot="-0.019 0.018 0.025" pos="-0.019 0.018 0.025" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
</bone>
@@ -48,27 +48,30 @@
<bone connected="false" end="0.025 0.000 0.000" group="Face" name="mFaceNoseCenter" pivot="0.102 0.000 0.000" pos="0.102 0.000 0.000" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.015 -0.004 0.000" group="Face" name="mFaceNoseRight" pivot="0.086 -0.015 -0.004" pos="0.086 -0.015 -0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.013 0.030 0.000" group="Face" name="mFaceCheekLowerLeft" pivot="0.050 0.034 -0.031" pos="0.050 0.034 -0.031" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.022 0.015 0.001" group="Face" name="mFaceCheekUpperLeft" pivot="0.070 0.034 -0.005" pos="0.070 0.034 -0.005" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.022 0.015 0.000" group="Face" name="mFaceCheekUpperLeft" pivot="0.070 0.034 -0.005" pos="0.070 0.034 -0.005" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.013 -0.030 0.000" group="Face" name="mFaceCheekLowerRight" pivot="0.050 -0.034 -0.031" pos="0.050 -0.034 -0.031" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.022 -0.015 0.001" group="Face" name="mFaceCheekUpperRight" pivot="0.070 -0.034 -0.005" pos="0.070 -0.034 -0.005" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.048 0.003 0.000" group="Lips" name="mFaceLipUpperLeft" pivot="0.058 0.012 -0.033" pos="0.058 0.012 -0.033" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.048 -0.003 0.000" group="Lips" name="mFaceLipUpperRight" pivot="0.058 -0.012 -0.033" pos="0.058 -0.012 -0.033" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.045 0.008 0.000" group="Lips" name="mFaceLipCornerLeft" pivot="0.048 0.024 -0.040" pos="0.048 0.024 -0.040" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.045 -0.008 0.000" group="Lips" name="mFaceLipCornerRight" pivot="0.048 -0.024 -0.040" pos="0.048 -0.024 -0.040" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.044 0.000 -0.021" group="Mouth" name="mFaceJaw" pivot="0.020 0.000 -0.037" pos="0.020 0.000 -0.037" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
- <bone connected="true" end="0.020 0.000 0.008" group="Mouth" name="mFaceTongueBase" pivot="0.044 0.000 -0.021" pos="0.044 0.000 -0.021" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
- <bone connected="true" end="0.007 0.000 0.003" group="Mouth" name="mFaceTongueTip" pivot="0.020 0.000 0.008" pos="0.020 0.000 0.008" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.022 -0.015 0.000" group="Face" name="mFaceCheekUpperRight" pivot="0.070 -0.034 -0.005" pos="0.070 -0.034 -0.005" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.059 0.000 -0.039" group="Mouth" name="mFaceJaw" pivot="-0.001 0.000 -0.015" pos="-0.001 0.000 -0.015" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="false" end="0.021 0.000 -0.018" group="Mouth" name="mFaceChin" pivot="0.074 0.000 -0.054" pos="0.074 0.000 -0.054" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.035 0.000 0.000" group="Mouth" name="mFaceTeethLower" pivot="0.021 0.000 -0.039" pos="0.021 0.000 -0.039" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="false" end="0.034 0.017 0.005" group="Lips" name="mFaceLipLowerLeft" pivot="0.045 0.000 0.000" pos="0.045 0.000 0.000" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.034 -0.017 0.005" group="Lips" name="mFaceLipLowerRight" pivot="0.045 0.000 0.000" pos="0.045 0.000 0.000" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.040 0.000 0.002" group="Lips" name="mFaceLipLowerCenter" pivot="0.045 0.000 0.000" pos="0.045 0.000 0.000" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.022 0.000 0.007" group="Mouth" name="mFaceTongueBase" pivot="0.039 0.000 0.005" pos="0.039 0.000 0.005" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="true" end="0.010 0.000 0.000" group="Mouth" name="mFaceTongueTip" pivot="0.022 0.000 0.007" pos="0.022 0.000 0.007" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ </bone>
</bone>
- <bone connected="false" end="0.047 0.003 0.000" group="Lips" name="mFaceLipLowerLeft" pivot="0.032 0.014 -0.012" pos="0.032 0.014 -0.012" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.047 -0.003 0.000" group="Lips" name="mFaceLipLowerRight" pivot="0.032 -0.014 -0.012" pos="0.032 -0.014 -0.012" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.048 0.000 0.000" group="Lips" name="mFaceLipLowerCenter" pivot="0.037 0.000 -0.017" pos="0.037 0.000 -0.017" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.021 0.000 -0.018" group="Mouth" name="mFaceChin" pivot="0.053 0.000 -0.032" pos="0.053 0.000 -0.032" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
</bone>
+ <bone connected="false" end="-0.017 0.000 0.000" group="Face" name="mFaceJawShaper" pivot="0.000 0.000 0.000" pos="0.000 0.000 0.000" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.036 0.000 0.000" group="Face" name="mFaceForeheadCenter" pivot="0.069 0.000 0.065" pos="0.069 0.000 0.065" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.048 0.000 0.000" group="Lips" name="mFaceLipUpperCenter" pivot="0.060 0.000 -0.030" pos="0.060 0.000 -0.030" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.014 0.000 0.000" group="Nose" name="mFaceNoseBase" pivot="0.094 0.000 -0.016" pos="0.094 0.000 -0.016" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.061 0.000 -0.010" group="Mouth" name="mFaceTeethLower" pivot="0.020 0.000 -0.044" pos="0.020 0.000 -0.044" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
- <bone connected="false" end="0.061 0.000 0.000" group="Mouth" name="mFaceTeethUpper" pivot="0.020 0.000 -0.030" pos="0.020 0.000 -0.030" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.035 0.000 0.000" group="Mouth" name="mFaceTeethUpper" pivot="0.020 0.000 -0.030" pos="0.020 0.000 -0.030" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="false" end="0.041 0.015 0.000" group="Lips" name="mFaceLipUpperLeft" pivot="0.045 0.000 -0.003" pos="0.045 0.000 -0.003" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.041 -0.015 0.000" group="Lips" name="mFaceLipUpperRight" pivot="0.045 0.000 -0.003" pos="0.045 0.000 -0.003" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.045 0.051 0.000" group="Lips" name="mFaceLipCornerLeft" pivot="0.028 -0.019 -0.010" pos="0.028 -0.019 -0.010" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.045 -0.051 0.000" group="Lips" name="mFaceLipCornerRight" pivot="0.028 0.019 -0.010" pos="0.028 0.019 -0.010" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.043 0.000 0.002" group="Lips" name="mFaceLipUpperCenter" pivot="0.045 0.000 -0.003" pos="0.045 0.000 -0.003" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ </bone>
<bone connected="false" end="0.016 0.000 0.000" group="Face" name="mFaceEyecornerInnerLeft" pivot="0.075 0.017 0.032" pos="0.075 0.017 0.032" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.016 0.000 0.000" group="Face" name="mFaceEyecornerInnerRight" pivot="0.075 -0.017 0.032" pos="0.075 -0.017 0.032" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="0.015 0.000 0.008" group="Nose" name="mFaceNoseBridge" pivot="0.091 0.000 0.020" pos="0.091 0.000 0.020" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
@@ -103,9 +106,9 @@
<bone connected="true" end="-0.013 0.016 -0.004" group="Hand" name="mHandPinky3Left" pivot="-0.015 0.018 -0.004" pos="-0.015 0.018 -0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
</bone>
</bone>
- <bone connected="false" end="0.028 0.032 -0.001" group="Hand" name="mHandThumb1Left" pivot="0.031 0.026 0.004" pos="0.031 0.026 0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
- <bone connected="true" end="0.023 0.031 -0.001" group="Hand" name="mHandThumb2Left" pivot="0.028 0.032 -0.001" pos="0.028 0.032 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
- <bone connected="true" end="0.015 0.025 0.001" group="Hand" name="mHandThumb3Left" pivot="0.023 0.031 -0.001" pos="0.023 0.031 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.028 0.032 0.000" group="Hand" name="mHandThumb1Left" pivot="0.031 0.026 0.004" pos="0.031 0.026 0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="true" end="0.023 0.031 0.000" group="Hand" name="mHandThumb2Left" pivot="0.028 0.032 -0.001" pos="0.028 0.032 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="true" end="0.015 0.025 0.000" group="Hand" name="mHandThumb3Left" pivot="0.023 0.031 -0.001" pos="0.023 0.031 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
</bone>
</bone>
</bone>
@@ -140,9 +143,9 @@
<bone connected="true" end="-0.013 -0.016 -0.004" group="Hand" name="mHandPinky3Right" pivot="-0.015 -0.018 -0.004" pos="-0.015 -0.018 -0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
</bone>
</bone>
- <bone connected="false" end="0.028 -0.032 -0.001" group="Hand" name="mHandThumb1Right" pivot="0.031 -0.026 0.004" pos="0.031 -0.026 0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
- <bone connected="true" end="0.023 -0.031 -0.001" group="Hand" name="mHandThumb2Right" pivot="0.028 -0.032 -0.001" pos="0.028 -0.032 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
- <bone connected="true" end="0.015 -0.025 0.001" group="Hand" name="mHandThumb3Right" pivot="0.023 -0.031 -0.001" pos="0.023 -0.031 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.028 -0.032 0.000" group="Hand" name="mHandThumb1Right" pivot="0.031 -0.026 0.004" pos="0.031 -0.026 0.004" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="true" end="0.023 -0.031 0.000" group="Hand" name="mHandThumb2Right" pivot="0.028 -0.032 -0.001" pos="0.028 -0.032 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="true" end="0.015 -0.025 0.000" group="Hand" name="mHandThumb3Right" pivot="0.023 -0.031 -0.001" pos="0.023 -0.031 -0.001" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
</bone>
</bone>
</bone>
@@ -179,8 +182,8 @@
<collision_volume end="-0.010 0.000 -0.150" group="Collision" name="R_LOWER_LEG" pos="-0.02 0.0 -0.2" rot="0.000000 0.00000 0.000000" scale="0.06 0.06 0.25" support="base"/>
<bone aliases="rFoot avatar_mAnkleRight" connected="true" end="0.112 0.000 -0.061" group="Legs" name="mAnkleRight" pivot="-0.028869 0.000000 -0.468494" pos="-0.029 0.000 -0.468" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
<collision_volume end="0.089 0.000 -0.026" group="Collision" name="R_FOOT" pos="0.077 0.0 -0.041" rot="0.000000 10.00000 0.000000" scale="0.13 0.05 0.05" support="base"/>
- <bone aliases="avatar_mFootRight" connected="true" end="0.105 -0.010 -0.000" group="Extra" name="mFootRight" pivot="0.111956 -0.000000 -0.060637" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
- <bone aliases="avatar_mToeRight" connected="true" end="0.020 0.000 0.000" group="Extra" name="mToeRight" pivot="0.105399 -0.010408 -0.000104" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
+ <bone aliases="avatar_mFootRight" connected="true" end="0.105 -0.010 0.000" group="Extra" name="mFootRight" pivot="0.111956 -0.000000 -0.060637" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
+ <bone aliases="avatar_mToeRight" connected="false" end="0.020 0.000 0.000" group="Extra" name="mToeRight" pivot="0.105399 -0.010408 -0.000104" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
</bone>
</bone>
</bone>
@@ -192,7 +195,7 @@
<bone aliases="lFoot avatar_mAnkleLeft" connected="true" end="0.112 0.000 -0.061" group="Legs" name="mAnkleLeft" pivot="-0.028887 0.001378 -0.468449" pos="-0.029 0.001 -0.468" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
<collision_volume end="0.089 0.000 -0.026" group="Collision" name="L_FOOT" pos="0.077 0.0 -0.041" rot="0.000000 10.00000 0.000000" scale="0.13 0.05 0.05" support="base"/>
<bone aliases="avatar_mFootLeft" connected="true" end="0.105 0.008 0.001" group="Extra" name="mFootLeft" pivot="0.111956 -0.000000 -0.060620" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base">
- <bone aliases="avatar_mToeLeft" connected="true" end="0.020 0.000 0.000" group="Extra" name="mToeLeft" pivot="0.105387 0.008270 0.000871" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
+ <bone aliases="avatar_mToeLeft" connected="false" end="0.020 0.000 0.000" group="Extra" name="mToeLeft" pivot="0.105387 0.008270 0.000871" pos="0.109 0.000 0.000" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="base"/>
</bone>
</bone>
</bone>
@@ -210,20 +213,20 @@
</bone>
<bone connected="false" end="0.004 0.000 -0.066" group="Groin" name="mGroin" pivot="0.064 0.000 -0.097" pos="0.064 0.000 -0.097" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
<bone connected="false" end="-0.204 0.000 0.000" group="Limb" name="mHindLimbsRoot" pivot="-0.200 0.000 0.084" pos="-0.200 0.000 0.084" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
- <bone connected="false" end="0.002 -0.046 -0.491" group="Limb" name="mHindLimb1Left" pivot="-0.204 0.129 -0.125" pos="-0.204 0.129 -0.125" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
- <bone connected="true" end="-0.030 -0.003 -0.468" group="Limb" name="mHindLimb2Left" pivot="0.002 -0.046 -0.491" pos="0.002 -0.046 -0.491" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
- <bone connected="true" end="0.112 0.000 -0.061" group="Limb" name="mHindLimb3Left" pivot="-0.030 -0.003 -0.468" pos="-0.030 -0.003 -0.468" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
- <bone connected="true" end="0.105 0.008 0.001" group="Limb" name="mHindLimb4Left" pivot="0.112 0.000 -0.061" pos="0.112 0.000 -0.061" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ <bone connected="false" end="0.002 -0.046 -0.491" group="Limb" name="mHindLimb1Left" pivot="-0.204 0.129 -0.125" pos="-0.204 0.129 -0.125" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="true" end="-0.030 -0.003 -0.468" group="Limb" name="mHindLimb2Left" pivot="0.002 -0.046 -0.491" pos="0.002 -0.046 -0.491" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="true" end="0.112 0.000 -0.061" group="Limb" name="mHindLimb3Left" pivot="-0.030 -0.003 -0.468" pos="-0.030 -0.003 -0.468" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="true" end="0.105 0.008 0.000" group="Limb" name="mHindLimb4Left" pivot="0.112 0.000 -0.061" pos="0.112 0.000 -0.061" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ </bone>
</bone>
- </bone>
- </bone>
- <bone connected="false" end="0.002 0.046 -0.491" group="Limb" name="mHindLimb1Right" pivot="-0.204 -0.129 -0.125" pos="-0.204 -0.129 -0.125" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
- <bone connected="true" end="-0.030 0.003 -0.468" group="Limb" name="mHindLimb2Right" pivot="0.002 0.046 -0.491" pos="0.002 0.046 -0.491" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
- <bone connected="true" end="0.112 0.000 -0.061" group="Limb" name="mHindLimb3Right" pivot="-0.030 0.003 -0.468" pos="-0.030 0.003 -0.468" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
- <bone connected="true" end="0.105 0.008 0.001" group="Limb" name="mHindLimb4Right" pivot="0.112 -0.000 -0.061" pos="0.112 -0.000 -0.061" rot="0.000000 0.000000 0.000000" scale="1.000 1.000 1.000" support="extended" />
+ </bone>
+ <bone connected="false" end="0.002 0.046 -0.491" group="Limb" name="mHindLimb1Right" pivot="-0.204 -0.129 -0.125" pos="-0.204 -0.129 -0.125" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="true" end="-0.030 0.003 -0.468" group="Limb" name="mHindLimb2Right" pivot="0.002 0.046 -0.491" pos="0.002 0.046 -0.491" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="true" end="0.112 0.000 -0.061" group="Limb" name="mHindLimb3Right" pivot="-0.030 0.003 -0.468" pos="-0.030 0.003 -0.468" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended">
+ <bone connected="true" end="0.105 -0.008 0.000" group="Limb" name="mHindLimb4Right" pivot="0.112 0.000 -0.061" pos="0.112 0.000 -0.061" rot="0.000 0.000 0.000" scale="1.00 1.00 1.00" support="extended"/>
+ </bone>
</bone>
- </bone>
- </bone>
+ </bone>
</bone>
- </bone>
+ </bone>
</linden_skeleton>
diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index be8ea2bab9..e99b94f150 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -32,7 +32,7 @@ RenderAvatarCloth 1 1
RenderAvatarLODFactor 1 1.0
RenderAvatarPhysicsLODFactor 1 1.0
RenderAvatarMaxNonImpostors 1 16
-RenderAvatarMaxComplexity 1 80000
+RenderAvatarMaxComplexity 1 350000
RenderAvatarVP 1 1
RenderAutoMuteSurfaceAreaLimit 1 1000.0
RenderCubeMap 1 1
diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt
index ca6c00951d..801a622e93 100644
--- a/indra/newview/featuretable_linux.txt
+++ b/indra/newview/featuretable_linux.txt
@@ -32,7 +32,7 @@ RenderAvatarCloth 1 1
RenderAvatarLODFactor 1 1.0
RenderAvatarPhysicsLODFactor 1 1.0
RenderAvatarMaxNonImpostors 1 16
-RenderAvatarMaxComplexity 1 80000
+RenderAvatarMaxComplexity 1 350000
RenderAvatarVP 1 1
RenderAutoMuteSurfaceAreaLimit 1 1000.0
RenderCubeMap 1 1
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index ea69b088f9..1f891ee4d7 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -32,7 +32,7 @@ RenderAvatarCloth 1 1
RenderAvatarLODFactor 1 1.0
RenderAvatarPhysicsLODFactor 1 1.0
RenderAvatarMaxNonImpostors 1 16
-RenderAvatarMaxComplexity 1 80000
+RenderAvatarMaxComplexity 1 350000
RenderAvatarVP 1 1
RenderAutoMuteSurfaceAreaLimit 1 1000.0
RenderCubeMap 1 1
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index b8677fd9e4..89317f2793 100644
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -648,6 +648,7 @@ Function un.ProgramFiles
%%DELETE_FILES%%
# Optional/obsolete files. Delete won't fail if they don't exist.
+Delete "$INSTDIR\autorun.bat"
Delete "$INSTDIR\dronesettings.ini"
Delete "$INSTDIR\message_template.msg"
Delete "$INSTDIR\newview.pdb"
@@ -679,6 +680,16 @@ FOLDERFOUND:
NOFOLDER:
+MessageBox MB_YESNO $(DeleteRegistryKeysMB) IDYES DeleteKeys IDNO NoDelete
+
+DeleteKeys:
+ DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Classes\x-grid-location-info"
+ DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Classes\secondlife"
+ DeleteRegKey HKEY_CLASSES_ROOT "x-grid-location-info"
+ DeleteRegKey HKEY_CLASSES_ROOT "secondlife"
+
+NoDelete:
+
FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsi
index 343c312ddc..aa403a961c 100644
--- a/indra/newview/installers/windows/lang_en-us.nsi
+++ b/indra/newview/installers/windows/lang_en-us.nsi
Binary files differ
diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp
index 3e3d5c7456..648212177b 100644
--- a/indra/newview/llaisapi.cpp
+++ b/indra/newview/llaisapi.cpp
@@ -838,11 +838,11 @@ void AISUpdate::parseEmbeddedCategories(const LLSD& categories)
void AISUpdate::doUpdate()
{
- // Do version/descendent accounting.
+ // Do version/descendant accounting.
for (std::map<LLUUID,S32>::const_iterator catit = mCatDescendentDeltas.begin();
catit != mCatDescendentDeltas.end(); ++catit)
{
- LL_DEBUGS("Inventory") << "descendent accounting for " << catit->first << LL_ENDL;
+ LL_DEBUGS("Inventory") << "descendant accounting for " << catit->first << LL_ENDL;
const LLUUID cat_id(catit->first);
// Don't account for update if we just created this category.
@@ -859,13 +859,13 @@ void AISUpdate::doUpdate()
continue;
}
- // If we have a known descendent count, set that now.
+ // If we have a known descendant count, set that now.
LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id);
if (cat)
{
S32 descendent_delta = catit->second;
S32 old_count = cat->getDescendentCount();
- LL_DEBUGS("Inventory") << "Updating descendent count for "
+ LL_DEBUGS("Inventory") << "Updating descendant count for "
<< cat->getName() << " " << cat_id
<< " with delta " << descendent_delta << " from "
<< old_count << " to " << (old_count+descendent_delta) << LL_ENDL;
@@ -896,7 +896,7 @@ void AISUpdate::doUpdate()
LLUUID category_id(update_it->first);
LLPointer<LLViewerInventoryCategory> new_category = update_it->second;
// Since this is a copy of the category *before* the accounting update, above,
- // we need to transfer back the updated version/descendent count.
+ // we need to transfer back the updated version/descendant count.
LLViewerInventoryCategory* curr_cat = gInventory.getCategory(new_category->getUUID());
if (!curr_cat)
{
@@ -961,7 +961,16 @@ void AISUpdate::doUpdate()
{
LL_WARNS() << "Possible version mismatch for category " << cat->getName()
<< ", viewer version " << cat->getVersion()
- << " server version " << version << LL_ENDL;
+ << " AIS version " << version << " !!!Adjusting local version!!!" << LL_ENDL;
+
+ // the AIS version should be considered the true version. Adjust
+ // our local category model to reflect this version number. Otherwise
+ // it becomes possible to get stuck with the viewer being out of
+ // sync with the inventory system. Under normal circumstances
+ // inventory COF is maintained on the viewer through calls to
+ // LLInventoryModel::accountForUpdate when a changing operation
+ // is performed. This occasionally gets out of sync however.
+ cat->setVersion(version);
}
}
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index b1a6edad35..3b71dd5b1f 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -60,6 +60,8 @@
#include "llcoros.h"
#include "lleventcoro.h"
+#include "llavatarpropertiesprocessor.h"
+
#if LL_MSVC
// disable boost::lexical_cast warning
#pragma warning (disable:4702)
@@ -3359,15 +3361,9 @@ void LLAppearanceMgr::requestServerAppearanceUpdate()
{
if (!mOutstandingAppearanceBakeRequest)
{
-#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
mRerequestAppearanceBake = false;
LLCoprocedureManager::CoProcedure_t proc = boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this, _1);
LLCoprocedureManager::instance().enqueueCoprocedure("AIS", "LLAppearanceMgr::serverAppearanceUpdateCoro", proc);
-#else
- LLCoros::instance().launch("serverAppearanceUpdateCoro",
- boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this));
-
-#endif
}
else
{
@@ -3375,17 +3371,8 @@ void LLAppearanceMgr::requestServerAppearanceUpdate()
}
}
-#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter)
-#else
-void LLAppearanceMgr::serverAppearanceUpdateCoro()
-#endif
{
-#ifndef APPEARANCEBAKE_AS_IN_AIS_QUEUE
- LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(
- new LLCoreHttpUtil::HttpCoroutineAdapter("serverAppearanceUpdateCoro", LLCore::HttpRequest::DEFAULT_POLICY_ID));
-#endif
-
mRerequestAppearanceBake = false;
if (!gAgent.getRegion())
{
@@ -3493,10 +3480,15 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro()
// on multiple machines.
if (result.has("expected"))
{
-
S32 expectedCofVersion = result["expected"].asInteger();
LL_WARNS("Avatar") << "Server expected " << expectedCofVersion << " as COF version" << LL_ENDL;
+ // Force an update texture request for ourself. The message will return
+ // through the UDP and be handled in LLVOAvatar::processAvatarAppearance
+ // this should ensure that we receive a new canonical COF from the sim
+ // host. Hopefully it will return before the timeout.
+ LLAvatarPropertiesProcessor::getInstance()->sendAvatarTexturesRequest(gAgent.getID());
+
bRetry = true;
// Wait for a 1/2 second before trying again. Just to keep from asking too quickly.
if (++retryCount > BAKE_RETRY_MAX_COUNT)
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index bf181cb4ad..7069da7352 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -228,11 +228,7 @@ public:
private:
-#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
void serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter);
-#else
- void serverAppearanceUpdateCoro();
-#endif
static void debugAppearanceUpdateCOF(const LLSD& content);
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 5287f98827..2ae6f472d3 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3442,6 +3442,12 @@ std::string LLAppViewer::getViewerInfoString() const
{
support << '\n' << LLTrans::getString("AboutTraffic", args);
}
+
+ // SLT timestamp
+ LLSD substitution;
+ substitution["datetime"] = (S32)time(NULL);//(S32)time_corrected();
+ support << "\n" << LLTrans::getString("AboutTime", substitution);
+
return support.str();
}
@@ -5829,7 +5835,6 @@ void LLAppViewer::metricsUpdateRegion(U64 region_handle)
}
}
-
/**
* Attempts to start a multi-threaded metrics report to be sent back to
* the grid for consumption.
@@ -5847,6 +5852,11 @@ void LLAppViewer::metricsSend(bool enable_reporting)
{
std::string caps_url = regionp->getCapability("ViewerMetrics");
+ if (gSavedSettings.getBOOL("QAModeMetrics"))
+ {
+ dump_sequential_xml("metric_asset_stats",gViewerAssetStats->asLLSD(true));
+ }
+
// Make a copy of the main stats to send into another thread.
// Receiving thread takes ownership.
LLViewerAssetStats * main_stats(new LLViewerAssetStats(*gViewerAssetStats));
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 00bc8ebe87..a6e745448a 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -476,13 +476,63 @@ void LLAvatarActions::kick(const LLUUID& id)
}
// static
+void LLAvatarActions::freezeAvatar(const LLUUID& id)
+{
+ std::string fullname;
+ gCacheName->getFullName(id, fullname);
+ LLSD payload;
+ payload["avatar_id"] = id;
+
+ if (!fullname.empty())
+ {
+ LLSD args;
+ args["AVATAR_NAME"] = fullname;
+ LLNotificationsUtil::add("FreezeAvatarFullname", args, payload, handleFreezeAvatar);
+ }
+ else
+ {
+ LLNotificationsUtil::add("FreezeAvatar", LLSD(), payload, handleFreezeAvatar);
+ }
+}
+
+// static
+void LLAvatarActions::ejectAvatar(const LLUUID& id, bool ban_enabled)
+{
+ std::string fullname;
+ gCacheName->getFullName(id, fullname);
+ LLSD payload;
+ payload["avatar_id"] = id;
+ payload["ban_enabled"] = ban_enabled;
+ LLSD args;
+ if (!fullname.empty())
+ {
+ args["AVATAR_NAME"] = fullname;
+ }
+
+ if (ban_enabled)
+ {
+ LLNotificationsUtil::add("EjectAvatarFullname", args, payload, handleEjectAvatar);
+ }
+ else
+ {
+ if (!fullname.empty())
+ {
+ LLNotificationsUtil::add("EjectAvatarFullnameNoBan", args, payload, handleEjectAvatar);
+ }
+ else
+ {
+ LLNotificationsUtil::add("EjectAvatarNoBan", LLSD(), payload, handleEjectAvatar);
+ }
+ }
+}
+
+// static
void LLAvatarActions::freeze(const LLUUID& id)
{
LLSD payload;
payload["avatar_id"] = id;
LLNotifications::instance().add("FreezeUser", LLSD(), payload, handleFreeze);
}
-
// static
void LLAvatarActions::unfreeze(const LLUUID& id)
{
@@ -1133,10 +1183,77 @@ bool LLAvatarActions::handleKick(const LLSD& notification, const LLSD& response)
}
return false;
}
-bool LLAvatarActions::handleFreeze(const LLSD& notification, const LLSD& response)
+
+bool LLAvatarActions::handleFreezeAvatar(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotification::getSelectedOption(notification, response);
+ if (0 == option || 1 == option)
+ {
+ U32 flags = 0x0;
+ if (1 == option)
+ {
+ // unfreeze
+ flags |= 0x1;
+ }
+ LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID();
+ LLMessageSystem* msg = gMessageSystem;
+
+ msg->newMessage("FreezeUser");
+ msg->nextBlock("AgentData");
+ msg->addUUID("AgentID", gAgent.getID());
+ msg->addUUID("SessionID", gAgent.getSessionID());
+ msg->nextBlock("Data");
+ msg->addUUID("TargetID", avatar_id );
+ msg->addU32("Flags", flags );
+ gAgent.sendReliableMessage();
+ }
+ return false;
+}
+
+bool LLAvatarActions::handleEjectAvatar(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (2 == option)
+ {
+ return false;
+ }
+ LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID();
+ bool ban_enabled = notification["payload"]["ban_enabled"].asBoolean();
+
+ if (0 == option)
+ {
+ LLMessageSystem* msg = gMessageSystem;
+ U32 flags = 0x0;
+ msg->newMessage("EjectUser");
+ msg->nextBlock("AgentData");
+ msg->addUUID("AgentID", gAgent.getID() );
+ msg->addUUID("SessionID", gAgent.getSessionID() );
+ msg->nextBlock("Data");
+ msg->addUUID("TargetID", avatar_id );
+ msg->addU32("Flags", flags );
+ gAgent.sendReliableMessage();
+ }
+ else if (ban_enabled)
+ {
+ LLMessageSystem* msg = gMessageSystem;
+
+ U32 flags = 0x1;
+ msg->newMessage("EjectUser");
+ msg->nextBlock("AgentData");
+ msg->addUUID("AgentID", gAgent.getID() );
+ msg->addUUID("SessionID", gAgent.getSessionID() );
+ msg->nextBlock("Data");
+ msg->addUUID("TargetID", avatar_id );
+ msg->addU32("Flags", flags );
+ gAgent.sendReliableMessage();
+ }
+ return false;
+}
+
+bool LLAvatarActions::handleFreeze(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotification::getSelectedOption(notification, response);
if (option == 0)
{
LLUUID avatar_id = notification["payload"]["avatar_id"].asUUID();
@@ -1153,6 +1270,7 @@ bool LLAvatarActions::handleFreeze(const LLSD& notification, const LLSD& respons
}
return false;
}
+
bool LLAvatarActions::handleUnfreeze(const LLSD& notification, const LLSD& response)
{
S32 option = LLNotification::getSelectedOption(notification, response);
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index bd0ac24e93..256d44d820 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -173,6 +173,9 @@ public:
*/
static void inviteToGroup(const LLUUID& id);
+ static void freezeAvatar(const LLUUID& id);
+
+ static void ejectAvatar(const LLUUID& id, bool ban_enabled = false);
/**
* Kick avatar off grid
*/
@@ -242,6 +245,8 @@ private:
static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response);
static bool handleRemove(const LLSD& notification, const LLSD& response);
static bool handlePay(const LLSD& notification, const LLSD& response, LLUUID avatar_id);
+ static bool handleFreezeAvatar(const LLSD& notification, const LLSD& response);
+ static bool handleEjectAvatar(const LLSD& notification, const LLSD& response);
static bool handleKick(const LLSD& notification, const LLSD& response);
static bool handleFreeze(const LLSD& notification, const LLSD& response);
static bool handleUnfreeze(const LLSD& notification, const LLSD& response);
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 8846d1317d..513f25e301 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -140,6 +140,7 @@ LLAvatarList::LLAvatarList(const Params& p)
, mShowProfileBtn(p.show_profile_btn)
, mShowSpeakingIndicator(p.show_speaking_indicator)
, mShowPermissions(p.show_permissions_granted)
+, mShowCompleteName(false)
{
setCommitOnSelectionChange(true);
@@ -174,6 +175,11 @@ void LLAvatarList::setShowIcons(std::string param_name)
mShowIcons = gSavedSettings.getBOOL(mIconParamName);
}
+std::string LLAvatarList::getAvatarName(LLAvatarName av_name)
+{
+ return mShowCompleteName? av_name.getCompleteName(false) : av_name.getDisplayName();
+}
+
// virtual
void LLAvatarList::draw()
{
@@ -279,7 +285,7 @@ void LLAvatarList::refresh()
LLAvatarName av_name;
have_names &= LLAvatarNameCache::get(buddy_id, &av_name);
- if (!have_filter || findInsensitive(av_name.getDisplayName(), mNameFilter))
+ if (!have_filter || findInsensitive(getAvatarName(av_name), mNameFilter))
{
if (nadded >= ADD_LIMIT)
{
@@ -297,7 +303,7 @@ void LLAvatarList::refresh()
}
else
{
- std::string display_name = av_name.getDisplayName();
+ std::string display_name = getAvatarName(av_name);
addNewItem(buddy_id,
display_name.empty() ? waiting_str : display_name,
LLAvatarTracker::instance().isBuddyOnline(buddy_id));
@@ -327,7 +333,7 @@ void LLAvatarList::refresh()
const LLUUID& buddy_id = it->asUUID();
LLAvatarName av_name;
have_names &= LLAvatarNameCache::get(buddy_id, &av_name);
- if (!findInsensitive(av_name.getDisplayName(), mNameFilter))
+ if (!findInsensitive(getAvatarName(av_name), mNameFilter))
{
removeItemByUUID(buddy_id);
modified = true;
@@ -381,6 +387,7 @@ void LLAvatarList::updateAvatarNames()
for( std::vector<LLPanel*>::const_iterator it = items.begin(); it != items.end(); it++)
{
LLAvatarListItem* item = static_cast<LLAvatarListItem*>(*it);
+ item->setShowCompleteName(mShowCompleteName);
item->updateAvatarName();
}
mNeedUpdateNames = false;
@@ -400,7 +407,7 @@ bool LLAvatarList::filterHasMatches()
// If name has not been loaded yet we consider it as a match.
// When the name will be loaded the filter will be applied again(in refresh()).
- if (have_name && !findInsensitive(av_name.getDisplayName(), mNameFilter))
+ if (have_name && !findInsensitive(getAvatarName(av_name), mNameFilter))
{
continue;
}
@@ -434,6 +441,7 @@ S32 LLAvatarList::notifyParent(const LLSD& info)
void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos)
{
LLAvatarListItem* item = new LLAvatarListItem();
+ item->setShowCompleteName(mShowCompleteName);
// This sets the name as a side effect
item->setAvatarId(id, mSessionID, mIgnoreOnlineStatus);
item->setOnline(mIgnoreOnlineStatus ? true : is_online);
@@ -445,6 +453,7 @@ void LLAvatarList::addNewItem(const LLUUID& id, const std::string& name, BOOL is
item->showSpeakingIndicator(mShowSpeakingIndicator);
item->setShowPermissions(mShowPermissions);
+
item->setDoubleClickCallback(boost::bind(&LLAvatarList::onItemDoubleClicked, this, _1, _2, _3, _4));
addItem(item, id, pos);
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
index 3542577ae3..1a672c279b 100644
--- a/indra/newview/llavatarlist.h
+++ b/indra/newview/llavatarlist.h
@@ -83,6 +83,7 @@ public:
void setShowIcons(std::string param_name);
bool getIconsVisible() const { return mShowIcons; }
const std::string getIconParamName() const{return mIconParamName;}
+ std::string getAvatarName(LLAvatarName av_name);
virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleMouseDown( S32 x, S32 y, MASK mask );
/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
@@ -100,6 +101,8 @@ public:
void addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name);
void handleDisplayNamesOptionChanged();
+ void setShowCompleteName(bool show) { mShowCompleteName = show;};
+
protected:
void refresh();
@@ -126,6 +129,7 @@ private:
bool mShowProfileBtn;
bool mShowSpeakingIndicator;
bool mShowPermissions;
+ bool mShowCompleteName;
LLTimer* mLITUpdateTimer; // last interaction time update timer
std::string mIconParamName;
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 3e6c817dd6..af3fac91bc 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -77,8 +77,10 @@ LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/)
mShowInfoBtn(true),
mShowProfileBtn(true),
mShowPermissions(false),
+ mShowCompleteName(false),
mHovered(false),
- mAvatarNameCacheConnection()
+ mAvatarNameCacheConnection(),
+ mGreyOutUsername("")
{
if (not_from_ui_factory)
{
@@ -399,14 +401,28 @@ void LLAvatarListItem::updateAvatarName()
void LLAvatarListItem::setNameInternal(const std::string& name, const std::string& highlight)
{
- LLTextUtil::textboxSetHighlightedVal(mAvatarName, mAvatarNameStyle, name, highlight);
+ if(mShowCompleteName && highlight.empty())
+ {
+ LLTextUtil::textboxSetGreyedVal(mAvatarName, mAvatarNameStyle, name, mGreyOutUsername);
+ }
+ else
+ {
+ LLTextUtil::textboxSetHighlightedVal(mAvatarName, mAvatarNameStyle, name, highlight);
+ }
}
void LLAvatarListItem::onAvatarNameCache(const LLAvatarName& av_name)
{
mAvatarNameCacheConnection.disconnect();
- setAvatarName(av_name.getDisplayName());
+ mGreyOutUsername = "";
+ std::string name_string = mShowCompleteName? av_name.getCompleteName(false) : av_name.getDisplayName();
+ if(av_name.getCompleteName() != av_name.getUserName())
+ {
+ mGreyOutUsername = "[ " + av_name.getUserName(true) + " ]";
+ LLStringUtil::toLower(mGreyOutUsername);
+ }
+ setAvatarName(name_string);
setAvatarToolTip(av_name.getUserName());
//requesting the list to resort
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index 7ef35a746e..36d18114aa 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -106,6 +106,7 @@ public:
void setShowPermissions(bool show) { mShowPermissions = show; };
void showLastInteractionTime(bool show);
void setAvatarIconVisible(bool visible);
+ void setShowCompleteName(bool show) { mShowCompleteName = show;};
const LLUUID& getAvatarId() const;
std::string getAvatarName() const;
@@ -218,6 +219,9 @@ private:
/// true when the mouse pointer is hovering over this item
bool mHovered;
+ bool mShowCompleteName;
+ std::string mGreyOutUsername;
+
void fetchAvatarName();
boost::signals2::connection mAvatarNameCacheConnection;
diff --git a/indra/newview/llavatarrenderinfoaccountant.cpp b/indra/newview/llavatarrenderinfoaccountant.cpp
index 5431daca32..7413dbed20 100644
--- a/indra/newview/llavatarrenderinfoaccountant.cpp
+++ b/indra/newview/llavatarrenderinfoaccountant.cpp
@@ -354,7 +354,7 @@ void LLAvatarRenderInfoAccountant::resetRenderInfoScanTimer()
// are returned for a new LLViewerRegion, and is the earliest time to get render info
void LLAvatarRenderInfoAccountant::scanNewRegion(const LLUUID& region_id)
{
- LL_INFOS("AvatarRenderInfo") << region_id << LL_ENDL;
+ LL_DEBUGS("AvatarRenderInfo") << region_id << LL_ENDL;
// Reset the global timer so it will scan regions on the next call to ::idle
LLAvatarRenderInfoAccountant::getInstance()->resetRenderInfoScanTimer();
diff --git a/indra/newview/llavatarrendernotifier.cpp b/indra/newview/llavatarrendernotifier.cpp
index a13e142e16..24934fdb73 100644
--- a/indra/newview/llavatarrendernotifier.cpp
+++ b/indra/newview/llavatarrendernotifier.cpp
@@ -63,7 +63,7 @@ mLatestAgentComplexity(0),
mLatestOverLimitPct(0.0f),
mShowOverLimitAgents(false),
mNotifyOutfitLoading(false),
-mLastCofVersion(-1),
+mLastCofVersion(LLViewerInventoryCategory::VERSION_UNKNOWN),
mLastOutfitRezStatus(-1),
mLastSkeletonSerialNum(-1)
{
@@ -207,8 +207,8 @@ void LLAvatarRenderNotifier::updateNotificationState()
mLastSkeletonSerialNum = gAgentAvatarp->mLastSkeletonSerialNum;
}
else if (mLastCofVersion >= 0
- && (mLastCofVersion != gAgentAvatarp->mLastUpdateRequestCOFVersion
- || mLastSkeletonSerialNum != gAgentAvatarp->mLastSkeletonSerialNum))
+ && (mLastCofVersion != LLAppearanceMgr::instance().getCOFVersion()
+ || mLastSkeletonSerialNum != gAgentAvatarp->mLastSkeletonSerialNum))
{
// version mismatch in comparison to previous outfit - outfit changed
mNotifyOutfitLoading = true;
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 4b426081d0..5d2997688f 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -156,6 +156,10 @@ public:
LLFloaterSidePanelContainer::showPanel("people", "panel_people",
LLSD().with("people_panel_tab_name", "blocked_panel").with("blocked_to_select", getAvatarId()));
}
+ else if (level == "unblock")
+ {
+ LLMuteList::getInstance()->remove(LLMute(getAvatarId(), mFrom, LLMute::OBJECT));
+ }
else if (level == "map")
{
std::string url = "secondlife://" + mObjectData["slurl"].asString();
@@ -169,6 +173,20 @@ public:
}
+ bool onObjectIconContextMenuItemVisible(const LLSD& userdata)
+ {
+ std::string level = userdata.asString();
+ if (level == "is_blocked")
+ {
+ return LLMuteList::getInstance()->isMuted(getAvatarId(), mFrom, LLMute::flagTextChat);
+ }
+ else if (level == "not_blocked")
+ {
+ return !LLMuteList::getInstance()->isMuted(getAvatarId(), mFrom, LLMute::flagTextChat);
+ }
+ return false;
+ }
+
void onAvatarIconContextMenuItemClicked(const LLSD& userdata)
{
std::string level = userdata.asString();
@@ -275,6 +293,7 @@ public:
registrar.add("AvatarIcon.Action", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemClicked, this, _2));
registrar_enable.add("AvatarIcon.Check", boost::bind(&LLChatHistoryHeader::onAvatarIconContextMenuItemChecked, this, _2));
registrar.add("ObjectIcon.Action", boost::bind(&LLChatHistoryHeader::onObjectIconContextMenuItemClicked, this, _2));
+ registrar_enable.add("ObjectIcon.Visible", boost::bind(&LLChatHistoryHeader::onObjectIconContextMenuItemVisible, this, _2));
LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_avatar_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
mPopupMenuHandleAvatar = menu->getHandle();
@@ -719,6 +738,8 @@ LLChatHistory::LLChatHistory(const LLChatHistory::Params& p)
editor_params.trusted_content = false;
mEditor = LLUICtrlFactory::create<LLTextEditor>(editor_params, this);
mEditor->setIsFriendCallback(LLAvatarActions::isFriend);
+ mEditor->setIsObjectBlockedCallback(boost::bind(&LLMuteList::isMuted, LLMuteList::getInstance(), _1, _2, 0));
+
}
LLSD LLChatHistory::getValue() const
diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp
index 219bcf0eb0..7721e67290 100644
--- a/indra/newview/llcompilequeue.cpp
+++ b/indra/newview/llcompilequeue.cpp
@@ -62,6 +62,57 @@
#include "llviewerassetupload.h"
#include "llcorehttputil.h"
+namespace
+{
+
+ const std::string QUEUE_EVENTPUMP_NAME("ScriptActionQueue");
+
+
+ class ObjectInventoryFetcher: public LLVOInventoryListener
+ {
+ public:
+ typedef boost::shared_ptr<ObjectInventoryFetcher> ptr_t;
+
+ ObjectInventoryFetcher(LLEventPump &pump, LLViewerObject* object, void* user_data) :
+ mPump(pump),
+ LLVOInventoryListener()
+ {
+ registerVOInventoryListener(object, this);
+ }
+
+ virtual void inventoryChanged(LLViewerObject* object,
+ LLInventoryObject::object_list_t* inventory,
+ S32 serial_num,
+ void* user_data);
+
+ void fetchInventory()
+ {
+ requestVOInventory();
+ }
+
+ const LLInventoryObject::object_list_t & getInventoryList() const { return mInventoryList; }
+
+ private:
+ LLInventoryObject::object_list_t mInventoryList;
+ LLEventPump & mPump;
+ };
+
+ class HandleScriptUserData
+ {
+ public:
+ HandleScriptUserData(const std::string &pumpname) :
+ mPumpname(pumpname)
+ { }
+
+ const std::string &getPumpName() const { return mPumpname; }
+
+ private:
+ std::string mPumpname;
+ };
+
+
+}
+
// *NOTE$: A minor specialization of LLScriptAssetUpload, it does not require a buffer
// (and does not save a buffer to the vFS) and it finds the compile queue window and
// displays a compiling message.
@@ -149,47 +200,6 @@ BOOL LLFloaterScriptQueue::postBuild()
return TRUE;
}
-// This is the callback method for the viewer object currently being
-// worked on.
-// NOT static, virtual!
-void LLFloaterScriptQueue::inventoryChanged(LLViewerObject* viewer_object,
- LLInventoryObject::object_list_t* inv,
- S32,
- void* q_id)
-{
- LL_INFOS() << "LLFloaterScriptQueue::inventoryChanged() for object "
- << viewer_object->getID() << LL_ENDL;
-
- //Remove this listener from the object since its
- //listener callback is now being executed.
-
- //We remove the listener here because the function
- //removeVOInventoryListener removes the listener from a ViewerObject
- //which it internally stores.
-
- //If we call this further down in the function, calls to handleInventory
- //and nextObject may update the internally stored viewer object causing
- //the removal of the incorrect listener from an incorrect object.
-
- //Fixes SL-6119:Recompile scripts fails to complete
- removeVOInventoryListener();
-
- if (viewer_object && inv && (viewer_object->getID() == mCurrentObjectID) )
- {
- handleInventory(viewer_object, inv);
- }
- else
- {
- // something went wrong...
- // note that we're not working on this one, and move onto the
- // next object in the list.
- LL_WARNS() << "No inventory for " << mCurrentObjectID
- << LL_ENDL;
- nextObject();
- }
-}
-
-
// static
void LLFloaterScriptQueue::onCloseBtn(void* user_data)
{
@@ -197,9 +207,10 @@ void LLFloaterScriptQueue::onCloseBtn(void* user_data)
self->closeFloater();
}
-void LLFloaterScriptQueue::addObject(const LLUUID& id)
+void LLFloaterScriptQueue::addObject(const LLUUID& id, std::string name)
{
- mObjectIDs.push_back(id);
+ ObjectData obj = { id, name };
+ mObjectList.push_back(obj);
}
BOOL LLFloaterScriptQueue::start()
@@ -208,7 +219,7 @@ BOOL LLFloaterScriptQueue::start()
LLStringUtil::format_map_t args;
args["[START]"] = mStartString;
- args["[COUNT]"] = llformat ("%d", mObjectIDs.size());
+ args["[COUNT]"] = llformat ("%d", mObjectList.size());
buffer = getString ("Starting", args);
getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
@@ -216,74 +227,24 @@ BOOL LLFloaterScriptQueue::start()
return startQueue();
}
-BOOL LLFloaterScriptQueue::isDone() const
+void LLFloaterScriptQueue::addProcessingMessage(const std::string &message, const LLSD &args)
{
- return (mCurrentObjectID.isNull() && (mObjectIDs.size() == 0));
-}
+ std::string buffer(LLTrans::getString(message, args));
-// go to the next object. If no objects left, it falls out silently
-// and waits to be killed by the window being closed.
-BOOL LLFloaterScriptQueue::nextObject()
-{
- U32 count;
- BOOL successful_start = FALSE;
- do
- {
- count = mObjectIDs.size();
- LL_INFOS() << "LLFloaterScriptQueue::nextObject() - " << count
- << " objects left to process." << LL_ENDL;
- mCurrentObjectID.setNull();
- if(count > 0)
- {
- successful_start = popNext();
- }
- LL_INFOS() << "LLFloaterScriptQueue::nextObject() "
- << (successful_start ? "successful" : "unsuccessful")
- << LL_ENDL;
- } while((mObjectIDs.size() > 0) && !successful_start);
- if(isDone() && !mDone)
- {
- mDone = true;
- getChild<LLScrollListCtrl>("queue output")->addSimpleElement(getString("Done"), ADD_BOTTOM);
- getChildView("close")->setEnabled(TRUE);
- }
- return successful_start;
+ getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
}
-// returns true if the queue has started, otherwise false. This
-// method pops the top object off of the queue.
-BOOL LLFloaterScriptQueue::popNext()
+void LLFloaterScriptQueue::addStringMessage(const std::string &message)
{
- // get the first element off of the container, and attempt to get
- // the inventory.
- BOOL rv = FALSE;
- S32 count = mObjectIDs.size();
- if(mCurrentObjectID.isNull() && (count > 0))
- {
- mCurrentObjectID = mObjectIDs.at(0);
- LL_INFOS() << "LLFloaterScriptQueue::popNext() - mCurrentID: "
- << mCurrentObjectID << LL_ENDL;
- mObjectIDs.erase(mObjectIDs.begin());
- LLViewerObject* obj = gObjectList.findObject(mCurrentObjectID);
- if(obj)
- {
- LL_INFOS() << "LLFloaterScriptQueue::popNext() requesting inv for "
- << mCurrentObjectID << LL_ENDL;
- LLUUID* id = new LLUUID(getKey().asUUID());
- registerVOInventoryListener(obj,id);
- requestVOInventory();
- rv = TRUE;
- }
- }
- return rv;
+ getChild<LLScrollListCtrl>("queue output")->addSimpleElement(message, ADD_BOTTOM);
}
-BOOL LLFloaterScriptQueue::startQueue()
+
+BOOL LLFloaterScriptQueue::isDone() const
{
- return nextObject();
+ return (mCurrentObjectID.isNull() && (mObjectList.size() == 0));
}
-
///----------------------------------------------------------------------------
/// Class LLFloaterCompileQueue
///----------------------------------------------------------------------------
@@ -306,7 +267,7 @@ void LLFloaterCompileQueue::experienceIdsReceived( const LLSD& content )
{
mExperienceIds.insert(it->asUUID());
}
- nextObject();
+// nextObject();
}
BOOL LLFloaterCompileQueue::hasExperience( const LLUUID& id ) const
@@ -314,188 +275,289 @@ BOOL LLFloaterCompileQueue::hasExperience( const LLUUID& id ) const
return mExperienceIds.find(id) != mExperienceIds.end();
}
+// //Attempt to record this asset ID. If it can not be inserted into the set
+// //then it has already been processed so return false.
+// bool LLFloaterCompileQueue::checkAssetId(const LLUUID &assetId)
+// {
+// std::pair<uuid_list_t::iterator, bool> result = mAssetIds.insert(assetId);
+// return result.second;
+// }
-void LLFloaterCompileQueue::handleInventory(LLViewerObject *viewer_object,
- LLInventoryObject::object_list_t* inv)
+void LLFloaterCompileQueue::handleHTTPResponse(std::string pumpName, const LLSD &expresult)
{
- // find all of the lsl, leaving off duplicates. We'll remove
- // all matching asset uuids on compilation success.
+ LLEventPumps::instance().post(pumpName, expresult);
+}
- typedef std::multimap<LLUUID, LLPointer<LLInventoryItem> > uuid_item_map;
- uuid_item_map asset_item_map;
+// *TODO: handleSCriptRetrieval is passed into the VFS via a legacy C function pointer
+// future project would be to convert these to C++ callables (std::function<>) so that
+// we can use bind and remove the userData parameter.
+//
+void LLFloaterCompileQueue::handleScriptRetrieval(LLVFS *vfs, const LLUUID& assetId,
+ LLAssetType::EType type, void* userData, S32 status, LLExtStat extStatus)
+{
+ LLSD result(LLSD::emptyMap());
- LLInventoryObject::object_list_t::const_iterator it = inv->begin();
- LLInventoryObject::object_list_t::const_iterator end = inv->end();
- for ( ; it != end; ++it)
- {
- if((*it)->getType() == LLAssetType::AT_LSL_TEXT)
- {
- LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
- // Check permissions before allowing the user to retrieve data.
- if (item->getPermissions().allowModifyBy(gAgent.getID(), gAgent.getGroupID()) &&
- item->getPermissions().allowCopyBy(gAgent.getID(), gAgent.getGroupID()) )
- {
- LLPointer<LLViewerInventoryItem> script = new LLViewerInventoryItem(item);
- mCurrentScripts.push_back(script);
- asset_item_map.insert(std::make_pair(item->getAssetUUID(), item));
- }
- }
- }
+ result["asset_id"] = assetId;
+ if (status)
+ {
+ result["error"] = status;
+
+ if (status == LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE)
+ {
+ result["message"] = LLTrans::getString("CompileQueueProblemDownloading") + (":");
+ result["alert"] = LLTrans::getString("CompileQueueScriptNotFound");
+ }
+ else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
+ {
+ result["message"] = LLTrans::getString("CompileQueueInsufficientPermFor") + (":");
+ result["alert"] = LLTrans::getString("CompileQueueInsufficientPermDownload");
+ }
+ else
+ {
+ result["message"] = LLTrans::getString("CompileQueueUnknownFailure");
+ }
+ }
- if (asset_item_map.empty())
- {
- // There are no scripts in this object. move on.
- nextObject();
- }
- else
- {
- // request all of the assets.
- uuid_item_map::iterator iter;
- for(iter = asset_item_map.begin(); iter != asset_item_map.end(); iter++)
- {
- LLInventoryItem *itemp = iter->second;
- LLScriptQueueData* datap = new LLScriptQueueData(getKey().asUUID(),
- viewer_object->getID(), itemp);
-
- LLExperienceCache::instance().fetchAssociatedExperience(itemp->getParentUUID(), itemp->getUUID(),
- boost::bind(&LLFloaterCompileQueue::requestAsset, datap, _1));
- }
- }
-}
+ LLEventPumps::instance().post(((HandleScriptUserData *)userData)->getPumpName(), result);
+}
-void LLFloaterCompileQueue::requestAsset( LLScriptQueueData* datap, const LLSD& experience )
+/*static*/
+void LLFloaterCompileQueue::processExperienceIdResults(LLSD result, LLUUID parent)
{
- LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", datap->mQueueID);
- if(!queue)
- {
- delete datap;
- return;
- }
- if(experience.has(LLExperienceCache::EXPERIENCE_ID))
- {
- datap->mExperienceId=experience[LLExperienceCache::EXPERIENCE_ID].asUUID();
- if(!queue->hasExperience(datap->mExperienceId))
- {
- std::string buffer = LLTrans::getString("CompileNoExperiencePerm", LLSD::emptyMap()
- .with("SCRIPT", datap->mItem->getName())
- .with("EXPERIENCE", experience[LLExperienceCache::NAME].asString()));
-
- queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
- queue->removeItemByItemID(datap->mItem->getUUID());
- delete datap;
- return;
- }
- }
- //LL_INFOS() << "ITEM NAME 2: " << names.get(i) << LL_ENDL;
- gAssetStorage->getInvItemAsset(datap->mHost,
- gAgent.getID(),
- gAgent.getSessionID(),
- datap->mItem->getPermissions().getOwner(),
- datap->mTaskId,
- datap->mItem->getUUID(),
- datap->mItem->getAssetUUID(),
- datap->mItem->getType(),
- LLFloaterCompileQueue::scriptArrived,
- (void*)datap);
+ LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", parent);
+ if (!queue)
+ return;
+
+ queue->experienceIdsReceived(result["experience_ids"]);
+
+ LLHandle<LLFloaterScriptQueue> hFloater(queue->getDerivedHandle<LLFloaterScriptQueue>());
+
+ fnQueueAction_t fn = boost::bind(LLFloaterCompileQueue::processScript,
+ queue->getDerivedHandle<LLFloaterCompileQueue>(), _1, _2, _3);
+
+
+ LLCoros::instance().launch("ScriptQueueCompile", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro,
+ queue->mStartString,
+ hFloater,
+ queue->mObjectList,
+ fn));
+
}
-/*static*/
-void LLFloaterCompileQueue::finishLSLUpload(LLUUID itemId, LLUUID taskId, LLUUID newAssetId, LLSD response, std::string scriptName, LLUUID queueId)
+bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloater,
+ const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump)
{
+ LLSD result;
+ LLFloaterCompileQueue *that = hfloater.get();
+ bool monocompile = that->mMono;
+ F32 fetch_timeout = gSavedSettings.getF32("QueueInventoryFetchTimeout");
+
+ if (!that)
+ return false;
- LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", LLSD(queueId));
- if (queue)
+ // Initial test to see if we can (or should) attempt to compile the script.
+ LLInventoryItem *item = dynamic_cast<LLInventoryItem *>(inventory);
{
- // Bytecode save completed
- if (response["compiled"])
+
+ if (!item->getPermissions().allowModifyBy(gAgent.getID(), gAgent.getGroupID()) ||
+ !item->getPermissions().allowCopyBy(gAgent.getID(), gAgent.getGroupID()))
{
- std::string message = std::string("Compilation of \"") + scriptName + std::string("\" succeeded");
+ std::string buffer = "Skipping: " + item->getName() + "(Permissions)";
+ that->addStringMessage(buffer);
+ return true;
+ }
- queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(message, ADD_BOTTOM);
- LL_INFOS() << message << LL_ENDL;
+// if (!that->checkAssetId(item->getAssetUUID()))
+// {
+// std::string buffer = "Skipping: " + item->getName() + "(Repeat)";
+// that->addStringMessage(buffer);
+// return true;
+// }
+ }
+ that = NULL;
+
+ // Attempt to retrieve the experience
+ LLUUID experienceId;
+ {
+ LLExperienceCache::instance().fetchAssociatedExperience(inventory->getParentUUID(), inventory->getUUID(),
+ boost::bind(&LLFloaterCompileQueue::handleHTTPResponse, pump.getName(), _1));
+
+ result = llcoro::suspendUntilEventOnWithTimeout(pump, fetch_timeout,
+ LLSD().with("timeout", LLSD::Boolean(true)));
+
+ that = hfloater.get();
+ if (!that)
+ {
+ return false;
}
- else
+
+ if (result.has("timeout") && result["timeout"].asBoolean())
{
- LLSD compile_errors = response["errors"];
- for (LLSD::array_const_iterator line = compile_errors.beginArray();
- line < compile_errors.endArray(); line++)
- {
- std::string str = line->asString();
- str.erase(std::remove(str.begin(), str.end(), '\n'), str.end());
+ LLStringUtil::format_map_t args;
+ args["[OBJECT_NAME]"] = inventory->getName();
+ std::string buffer = that->getString("Timeout", args);
+ that->addStringMessage(buffer);
+ return true;
+ }
- queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(str, ADD_BOTTOM);
+ if (result.has(LLExperienceCache::EXPERIENCE_ID))
+ {
+ experienceId = result[LLExperienceCache::EXPERIENCE_ID].asUUID();
+ if (!that->hasExperience(experienceId))
+ {
+ that->addProcessingMessage("CompileNoExperiencePerm", LLSD()
+ .with("SCRIPT", inventory->getName())
+ .with("EXPERIENCE", result[LLExperienceCache::NAME].asString()));
+ return true;
}
- LL_INFOS() << response["errors"] << LL_ENDL;
}
}
+ that = NULL;
+
+ {
+ HandleScriptUserData userData(pump.getName());
+
+
+ // request the asset
+ gAssetStorage->getInvItemAsset(LLHost(),
+ gAgent.getID(),
+ gAgent.getSessionID(),
+ item->getPermissions().getOwner(),
+ object->getID(),
+ item->getUUID(),
+ item->getAssetUUID(),
+ item->getType(),
+ &LLFloaterCompileQueue::handleScriptRetrieval,
+ &userData);
+
+ result = llcoro::suspendUntilEventOnWithTimeout(pump, fetch_timeout,
+ LLSD().with("timeout", LLSD::Boolean(true)));
+ }
+
+ that = hfloater.get();
+ if (!that)
+ {
+ return false;
+ }
+
+ if (result.has("timeout"))
+ {
+ if (result.has("timeout") && result["timeout"].asBoolean())
+ {
+ LLStringUtil::format_map_t args;
+ args["[OBJECT_NAME]"] = inventory->getName();
+ std::string buffer = that->getString("Timeout", args);
+ that->addStringMessage(buffer);
+ return true;
+ }
+ }
+
+ if (result.has("error"))
+ {
+ LL_WARNS("SCRIPTQ") << "Inventory fetch returned with error. Code: " << result["error"].asString() << LL_ENDL;
+ std::string buffer = result["message"].asString() + " " + inventory->getName();
+ that->addStringMessage(buffer);
+
+ if (result.has("alert"))
+ {
+ LLSD args;
+ args["MESSAGE"] = result["alert"].asString();
+ LLNotificationsUtil::add("SystemMessage", args);
+ }
+ return true;
+ }
+
+ LLUUID assetId = result["asset_id"];
+ that = NULL;
+
+
+ std::string url = object->getRegion()->getCapability("UpdateScriptTask");
+
+
+ {
+ LLResourceUploadInfo::ptr_t uploadInfo(new LLQueuedScriptAssetUpload(object->getID(),
+ inventory->getUUID(),
+ assetId,
+ monocompile ? LLScriptAssetUpload::MONO : LLScriptAssetUpload::LSL2,
+ true,
+ inventory->getName(),
+ LLUUID(),
+ experienceId,
+ boost::bind(&LLFloaterCompileQueue::handleHTTPResponse, pump.getName(), _4)));
+
+ LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo);
+ }
+
+ result = llcoro::suspendUntilEventOnWithTimeout(pump, fetch_timeout, LLSD().with("timeout", LLSD::Boolean(true)));
+
+ that = hfloater.get();
+ if (!that)
+ {
+ return false;
+ }
+
+ if (result.has("timeout"))
+ {
+ if (result.has("timeout") && result["timeout"].asBoolean())
+ {
+ LLStringUtil::format_map_t args;
+ args["[OBJECT_NAME]"] = inventory->getName();
+ std::string buffer = that->getString("Timeout", args);
+ that->addStringMessage(buffer);
+ return true;
+ }
+ }
+
+ // Bytecode save completed
+ if (result["compiled"])
+ {
+ std::string buffer = std::string("Compilation of \"") + inventory->getName() + std::string("\" succeeded");
+
+ that->addStringMessage(buffer);
+ LL_INFOS() << buffer << LL_ENDL;
+ }
+ else
+ {
+ LLSD compile_errors = result["errors"];
+ std::string buffer = std::string("Compilation of \"") + inventory->getName() + std::string("\" failed:");
+ that->addStringMessage(buffer);
+ for (LLSD::array_const_iterator line = compile_errors.beginArray();
+ line < compile_errors.endArray(); line++)
+ {
+ std::string str = line->asString();
+ str.erase(std::remove(str.begin(), str.end(), '\n'), str.end());
+
+ that->addStringMessage(str);
+ }
+ LL_INFOS() << result["errors"] << LL_ENDL;
+ }
+
+ return true;
}
-// This is the callback for when each script arrives
-// static
-void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
- LLAssetType::EType type,
- void* user_data, S32 status, LLExtStat ext_status)
+bool LLFloaterCompileQueue::startQueue()
{
- LL_INFOS() << "LLFloaterCompileQueue::scriptArrived()" << LL_ENDL;
- LLScriptQueueData* data = (LLScriptQueueData*)user_data;
- if(!data)
- {
- return;
- }
- LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", data->mQueueID);
-
- std::string buffer;
- if(queue && (0 == status))
- {
- LLViewerObject* object = gObjectList.findObject(data->mTaskId);
- if (object)
+ LLViewerRegion* region = gAgent.getRegion();
+ if (region)
+ {
+ std::string lookup_url = region->getCapability("GetCreatorExperiences");
+ if (!lookup_url.empty())
{
- std::string url = object->getRegion()->getCapability("UpdateScriptTask");
- std::string scriptName = data->mItem->getName();
-
- LLBufferedAssetUploadInfo::taskUploadFinish_f proc = boost::bind(&LLFloaterCompileQueue::finishLSLUpload, _1, _2, _3, _4,
- scriptName, data->mQueueID);
+ LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t success =
+ boost::bind(&LLFloaterCompileQueue::processExperienceIdResults, _1, getKey().asUUID());
- LLResourceUploadInfo::ptr_t uploadInfo(new LLQueuedScriptAssetUpload(data->mTaskId, data->mItem->getUUID(), asset_id,
- (queue->mMono) ? LLScriptAssetUpload::MONO : LLScriptAssetUpload::LSL2,
- true, scriptName, data->mQueueID, data->mExperienceId, proc));
+ LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t failure =
+ boost::bind(&LLFloaterCompileQueue::processExperienceIdResults, LLSD(), getKey().asUUID());
- LLViewerAssetUpload::EnqueueInventoryUpload(url, uploadInfo);
+ LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(lookup_url,
+ success, failure);
+ return TRUE;
}
- }
- else
- {
- if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status )
- {
- LLSD args;
- args["MESSAGE"] = LLTrans::getString("CompileQueueScriptNotFound");
- LLNotificationsUtil::add("SystemMessage", args);
-
- buffer = LLTrans::getString("CompileQueueProblemDownloading") + (": ") + data->mItem->getName();
- }
- else if (LL_ERR_INSUFFICIENT_PERMISSIONS == status)
- {
- LLSD args;
- args["MESSAGE"] = LLTrans::getString("CompileQueueInsufficientPermDownload");
- LLNotificationsUtil::add("SystemMessage", args);
-
- buffer = LLTrans::getString("CompileQueueInsufficientPermFor") + (": ") + data->mItem->getName();
- }
- else
- {
- buffer = LLTrans::getString("CompileQueueUnknownFailure") + (" ") + data->mItem->getName();
- }
-
- LL_WARNS() << "Problem downloading script asset." << LL_ENDL;
- if(queue) queue->removeItemByItemID(data->mItem->getUUID());
- }
- if(queue && (buffer.size() > 0))
- {
- queue->getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
- }
- delete data;
+ }
+
+ return true;
}
@@ -514,40 +576,42 @@ LLFloaterResetQueue::~LLFloaterResetQueue()
{
}
-void LLFloaterResetQueue::handleInventory(LLViewerObject* viewer_obj,
- LLInventoryObject::object_list_t* inv)
+bool LLFloaterResetQueue::resetObjectScripts(LLHandle<LLFloaterScriptQueue> hfloater,
+ const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump)
+{
+ LLFloaterScriptQueue *that = hfloater.get();
+ if (that)
+ {
+ std::string buffer;
+ buffer = that->getString("Resetting") + (": ") + inventory->getName();
+ that->addStringMessage(buffer);
+ }
+
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessageFast(_PREHASH_ScriptReset);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->nextBlockFast(_PREHASH_Script);
+ msg->addUUIDFast(_PREHASH_ObjectID, object->getID());
+ msg->addUUIDFast(_PREHASH_ItemID, inventory->getUUID());
+ msg->sendReliable(object->getRegion()->getHost());
+
+ return true;
+}
+
+bool LLFloaterResetQueue::startQueue()
{
- // find all of the lsl, leaving off duplicates. We'll remove
- // all matching asset uuids on compilation success.
+ fnQueueAction_t fn = boost::bind(LLFloaterResetQueue::resetObjectScripts,
+ getDerivedHandle<LLFloaterScriptQueue>(), _1, _2, _3);
- LLInventoryObject::object_list_t::const_iterator it = inv->begin();
- LLInventoryObject::object_list_t::const_iterator end = inv->end();
- for ( ; it != end; ++it)
- {
- if((*it)->getType() == LLAssetType::AT_LSL_TEXT)
- {
- LLViewerObject* object = gObjectList.findObject(viewer_obj->getID());
-
- if (object)
- {
- LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
- std::string buffer;
- buffer = getString("Resetting") + (": ") + item->getName();
- getChild<LLScrollListCtrl>("queue output")->addSimpleElement(buffer, ADD_BOTTOM);
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_ScriptReset);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->nextBlockFast(_PREHASH_Script);
- msg->addUUIDFast(_PREHASH_ObjectID, viewer_obj->getID());
- msg->addUUIDFast(_PREHASH_ItemID, (*it)->getUUID());
- msg->sendReliable(object->getRegion()->getHost());
- }
- }
- }
+ LLCoros::instance().launch("ScriptResetQueue", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro,
+ mStartString,
+ getDerivedHandle<LLFloaterScriptQueue>(),
+ mObjectList,
+ fn));
- nextObject();
+ return true;
}
///----------------------------------------------------------------------------
@@ -565,44 +629,46 @@ LLFloaterRunQueue::~LLFloaterRunQueue()
{
}
-void LLFloaterRunQueue::handleInventory(LLViewerObject* viewer_obj,
- LLInventoryObject::object_list_t* inv)
+bool LLFloaterRunQueue::runObjectScripts(LLHandle<LLFloaterScriptQueue> hfloater,
+ const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump)
{
- // find all of the lsl, leaving off duplicates. We'll remove
- // all matching asset uuids on compilation success.
- LLInventoryObject::object_list_t::const_iterator it = inv->begin();
- LLInventoryObject::object_list_t::const_iterator end = inv->end();
- for ( ; it != end; ++it)
- {
- if((*it)->getType() == LLAssetType::AT_LSL_TEXT)
- {
- LLViewerObject* object = gObjectList.findObject(viewer_obj->getID());
-
- if (object)
- {
- LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
- LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
- std::string buffer;
- buffer = getString("Running") + (": ") + item->getName();
- list->addSimpleElement(buffer, ADD_BOTTOM);
-
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_SetScriptRunning);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->nextBlockFast(_PREHASH_Script);
- msg->addUUIDFast(_PREHASH_ObjectID, viewer_obj->getID());
- msg->addUUIDFast(_PREHASH_ItemID, (*it)->getUUID());
- msg->addBOOLFast(_PREHASH_Running, TRUE);
- msg->sendReliable(object->getRegion()->getHost());
- }
- }
- }
+ LLFloaterScriptQueue *that = hfloater.get();
+ if (that)
+ {
+ std::string buffer;
+ buffer = that->getString("Running") + (": ") + inventory->getName();
+ that->addStringMessage(buffer);
+ }
- nextObject();
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessageFast(_PREHASH_SetScriptRunning);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->nextBlockFast(_PREHASH_Script);
+ msg->addUUIDFast(_PREHASH_ObjectID, object->getID());
+ msg->addUUIDFast(_PREHASH_ItemID, inventory->getUUID());
+ msg->addBOOLFast(_PREHASH_Running, TRUE);
+ msg->sendReliable(object->getRegion()->getHost());
+
+ return true;
}
+bool LLFloaterRunQueue::startQueue()
+{
+ LLHandle<LLFloaterScriptQueue> hFloater(getDerivedHandle<LLFloaterScriptQueue>());
+ fnQueueAction_t fn = boost::bind(LLFloaterRunQueue::runObjectScripts, hFloater, _1, _2, _3);
+
+ LLCoros::instance().launch("ScriptRunQueue", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro,
+ mStartString,
+ hFloater,
+ mObjectList,
+ fn));
+
+ return true;
+}
+
+
///----------------------------------------------------------------------------
/// Class LLFloaterNotRunQueue
///----------------------------------------------------------------------------
@@ -618,96 +684,171 @@ LLFloaterNotRunQueue::~LLFloaterNotRunQueue()
{
}
-void LLFloaterCompileQueue::removeItemByItemID(const LLUUID& asset_id)
+bool LLFloaterNotRunQueue::stopObjectScripts(LLHandle<LLFloaterScriptQueue> hfloater,
+ const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump)
{
- LL_INFOS() << "LLFloaterCompileQueue::removeItemByAssetID()" << LL_ENDL;
- for(S32 i = 0; i < mCurrentScripts.size(); )
- {
- if(asset_id == mCurrentScripts.at(i)->getUUID())
- {
- vector_replace_with_last(mCurrentScripts, mCurrentScripts.begin() + i);
- }
- else
- {
- ++i;
- }
- }
- if(mCurrentScripts.empty())
- {
- nextObject();
- }
+ LLFloaterScriptQueue *that = hfloater.get();
+ if (that)
+ {
+ std::string buffer;
+ buffer = that->getString("NotRunning") + (": ") + inventory->getName();
+ that->addStringMessage(buffer);
+ }
+
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessageFast(_PREHASH_SetScriptRunning);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->nextBlockFast(_PREHASH_Script);
+ msg->addUUIDFast(_PREHASH_ObjectID, object->getID());
+ msg->addUUIDFast(_PREHASH_ItemID, inventory->getUUID());
+ msg->addBOOLFast(_PREHASH_Running, FALSE);
+ msg->sendReliable(object->getRegion()->getHost());
+
+ return true;
}
-BOOL LLFloaterCompileQueue::startQueue()
+bool LLFloaterNotRunQueue::startQueue()
{
- LLViewerRegion* region = gAgent.getRegion();
- if (region)
- {
- std::string lookup_url=region->getCapability("GetCreatorExperiences");
- if(!lookup_url.empty())
- {
- LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t success =
- boost::bind(&LLFloaterCompileQueue::processExperienceIdResults, _1, getKey().asUUID());
+ LLHandle<LLFloaterScriptQueue> hFloater(getDerivedHandle<LLFloaterScriptQueue>());
- LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t failure =
- boost::bind(&LLFloaterCompileQueue::processExperienceIdResults, LLSD(), getKey().asUUID());
+ fnQueueAction_t fn = boost::bind(&LLFloaterNotRunQueue::stopObjectScripts, hFloater, _1, _2, _3);
+ LLCoros::instance().launch("ScriptQueueNotRun", boost::bind(LLFloaterScriptQueue::objectScriptProcessingQueueCoro,
+ mStartString,
+ hFloater,
+ mObjectList,
+ fn));
- LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(lookup_url,
- success, failure);
- return TRUE;
- }
- }
- return nextObject();
+ return true;
}
-/*static*/
-void LLFloaterCompileQueue::processExperienceIdResults(LLSD result, LLUUID parent)
+///----------------------------------------------------------------------------
+/// Local function definitions
+///----------------------------------------------------------------------------
+void ObjectInventoryFetcher::inventoryChanged(LLViewerObject* object,
+ LLInventoryObject::object_list_t* inventory, S32 serial_num, void* user_data)
{
- LLFloaterCompileQueue* queue = LLFloaterReg::findTypedInstance<LLFloaterCompileQueue>("compile_queue", parent);
- if (!queue)
- return;
+ mInventoryList.clear();
+ mInventoryList.assign(inventory->begin(), inventory->end());
+
+ mPump.post(LLSD().with("changed", LLSD::Boolean(true)));
- queue->experienceIdsReceived(result["experience_ids"]);
}
-void LLFloaterNotRunQueue::handleInventory(LLViewerObject* viewer_obj,
- LLInventoryObject::object_list_t* inv)
+void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, LLHandle<LLFloaterScriptQueue> hfloater,
+ object_data_list_t objectList, fnQueueAction_t func)
{
- // find all of the lsl, leaving off duplicates. We'll remove
- // all matching asset uuids on compilation success.
- LLInventoryObject::object_list_t::const_iterator it = inv->begin();
- LLInventoryObject::object_list_t::const_iterator end = inv->end();
- for ( ; it != end; ++it)
- {
- if((*it)->getType() == LLAssetType::AT_LSL_TEXT)
- {
- LLViewerObject* object = gObjectList.findObject(viewer_obj->getID());
-
- if (object)
- {
- LLInventoryItem* item = (LLInventoryItem*)((LLInventoryObject*)(*it));
- LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
- std::string buffer;
- buffer = getString("NotRunning") + (": ") +item->getName();
- list->addSimpleElement(buffer, ADD_BOTTOM);
-
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_SetScriptRunning);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->nextBlockFast(_PREHASH_Script);
- msg->addUUIDFast(_PREHASH_ObjectID, viewer_obj->getID());
- msg->addUUIDFast(_PREHASH_ItemID, (*it)->getUUID());
- msg->addBOOLFast(_PREHASH_Running, FALSE);
- msg->sendReliable(object->getRegion()->getHost());
- }
- }
- }
+ LLCoros::set_consuming(true);
+ LLFloaterScriptQueue * floater(NULL);
+ LLEventMailDrop maildrop(QUEUE_EVENTPUMP_NAME, true);
+ F32 fetch_timeout = gSavedSettings.getF32("QueueInventoryFetchTimeout");
+
+// floater = hfloater.get();
+// floater->addProcessingMessage("Starting",
+// LLSD()
+// .with("[START]", action)
+// .with("[COUNT]", LLSD::Integer(objectList.size())));
+// floater = NULL;
+
+ for (object_data_list_t::iterator itObj(objectList.begin()); (itObj != objectList.end()); ++itObj)
+ {
+ bool firstForObject = true;
+ LLUUID object_id = (*itObj).mObjectId;
+ LL_INFOS("SCRIPTQ") << "Next object in queue with ID=" << object_id.asString() << LL_ENDL;
- nextObject();
-}
+ LLPointer<LLViewerObject> obj = gObjectList.findObject(object_id);
+ LLInventoryObject::object_list_t inventory;
+ if (obj)
+ {
+ ObjectInventoryFetcher::ptr_t fetcher(new ObjectInventoryFetcher(maildrop, obj, NULL));
-///----------------------------------------------------------------------------
-/// Local function definitions
-///----------------------------------------------------------------------------
+ fetcher->fetchInventory();
+
+ floater = hfloater.get();
+ if (floater)
+ {
+ LLStringUtil::format_map_t args;
+ args["[OBJECT_NAME]"] = (*itObj).mObjectName;
+ floater->addStringMessage(floater->getString("LoadingObjInv", args));
+ }
+
+ LLSD result = llcoro::suspendUntilEventOnWithTimeout(maildrop, fetch_timeout,
+ LLSD().with("timeout", LLSD::Boolean(true)));
+
+ if (result.has("timeout") && result["timeout"].asBoolean())
+ {
+ LL_WARNS("SCRIPTQ") << "Unable to retrieve inventory for object " << object_id.asString() <<
+ ". Skipping to next object." << LL_ENDL;
+
+ // floater could have been closed
+ floater = hfloater.get();
+ if (floater)
+ {
+ LLStringUtil::format_map_t args;
+ args["[OBJECT_NAME]"] = (*itObj).mObjectName;
+ floater->addStringMessage(floater->getString("Timeout", args));
+ }
+
+ continue;
+ }
+
+ inventory.assign(fetcher->getInventoryList().begin(), fetcher->getInventoryList().end());
+ }
+ else
+ {
+ LL_WARNS("SCRIPTQ") << "Unable to retrieve object with ID of " << object_id <<
+ ". Skipping to next." << LL_ENDL;
+ continue;
+ }
+
+ // TODO: Get the name of the object we are looking at here so that we can display it below.
+ //std::string objName = (dynamic_cast<LLInventoryObject *>(obj.get()))->getName();
+ LL_DEBUGS("SCRIPTQ") << "Object has " << inventory.size() << " items." << LL_ENDL;
+
+ for (LLInventoryObject::object_list_t::iterator itInv = inventory.begin();
+ itInv != inventory.end(); ++itInv)
+ {
+ floater = hfloater.get();
+ if (!floater)
+ {
+ LL_WARNS("SCRIPTQ") << "Script Queue floater closed! Canceling remaining ops" << LL_ENDL;
+ break;
+ }
+
+ // note, we have a smart pointer to the obj above... but if we didn't we'd check that
+ // it still exists here.
+
+ if (((*itInv)->getType() == LLAssetType::AT_LSL_TEXT))
+ {
+ LL_DEBUGS("SCRIPTQ") << "Inventory item " << (*itInv)->getUUID().asString() << "\"" << (*itInv)->getName() << "\"" << LL_ENDL;
+ if (firstForObject)
+ {
+ //floater->addStringMessage(objName + ":");
+ firstForObject = false;
+ }
+
+ if (!func(obj, (*itInv), maildrop))
+ {
+ continue;
+ }
+ }
+
+ llcoro::suspend();
+ }
+ // Just test to be sure the floater is still present before calling the func
+ if (!hfloater.get())
+ {
+ LL_WARNS("SCRIPTQ") << "Script Queue floater dismissed." << LL_ENDL;
+ break;
+ }
+
+ }
+
+ floater = hfloater.get();
+ if (floater)
+ {
+ floater->addStringMessage("Done");
+ floater->getChildView("close")->setEnabled(TRUE);
+ }
+}
diff --git a/indra/newview/llcompilequeue.h b/indra/newview/llcompilequeue.h
index 46bcb9746b..1b3d8f83a0 100644
--- a/indra/newview/llcompilequeue.h
+++ b/indra/newview/llcompilequeue.h
@@ -37,6 +37,8 @@
#include "llviewerinventory.h"
+#include "llevents.h"
+
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLFloaterScriptQueue
//
@@ -48,7 +50,7 @@
// scripts manipulated.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLFloaterScriptQueue : public LLFloater, public LLVOInventoryListener
+class LLFloaterScriptQueue : public LLFloater/*, public LLVOInventoryListener*/
{
public:
LLFloaterScriptQueue(const LLSD& key);
@@ -59,34 +61,23 @@ public:
void setMono(bool mono) { mMono = mono; }
// addObject() accepts an object id.
- void addObject(const LLUUID& id);
+ void addObject(const LLUUID& id, std::string name);
// start() returns TRUE if the queue has started, otherwise FALSE.
BOOL start();
-protected:
- // This is the callback method for the viewer object currently
- // being worked on.
- /*virtual*/ void inventoryChanged(LLViewerObject* obj,
- LLInventoryObject::object_list_t* inv,
- S32 serial_num,
- void* queue);
-
- // This is called by inventoryChanged
- virtual void handleInventory(LLViewerObject* viewer_obj,
- LLInventoryObject::object_list_t* inv) = 0;
+ void addProcessingMessage(const std::string &message, const LLSD &args);
+ void addStringMessage(const std::string &message);
+ std::string getStartString() const { return mStartString; }
+
+protected:
static void onCloseBtn(void* user_data);
// returns true if this is done
BOOL isDone() const;
- virtual BOOL startQueue();
-
- // go to the next object. If no objects left, it falls out
- // silently and waits to be killed by the deleteIfDone() callback.
- BOOL nextObject();
- BOOL popNext();
+ virtual bool startQueue() = 0;
void setStartString(const std::string& s) { mStartString = s; }
@@ -96,12 +87,23 @@ protected:
LLButton* mCloseBtn;
// Object Queue
- std::vector<LLUUID> mObjectIDs;
+ struct ObjectData
+ {
+ LLUUID mObjectId;
+ std::string mObjectName;
+ };
+ typedef std::vector<ObjectData> object_data_list_t;
+
+ object_data_list_t mObjectList;
LLUUID mCurrentObjectID;
bool mDone;
std::string mStartString;
bool mMono;
+
+ typedef boost::function<bool(const LLPointer<LLViewerObject> &, LLInventoryObject*, LLEventPump &)> fnQueueAction_t;
+ static void objectScriptProcessingQueueCoro(std::string action, LLHandle<LLFloaterScriptQueue> hfloater, object_data_list_t objectList, fnQueueAction_t func);
+
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -122,8 +124,6 @@ class LLFloaterCompileQueue : public LLFloaterScriptQueue
{
friend class LLFloaterReg;
public:
- // remove any object in mScriptScripts with the matching uuid.
- void removeItemByItemID(const LLUUID& item_id);
void experienceIdsReceived( const LLSD& content );
BOOL hasExperience(const LLUUID& id)const;
@@ -132,27 +132,17 @@ protected:
LLFloaterCompileQueue(const LLSD& key);
virtual ~LLFloaterCompileQueue();
- // This is called by inventoryChanged
- virtual void handleInventory(LLViewerObject* viewer_obj,
- LLInventoryObject::object_list_t* inv);
-
- static void requestAsset(struct LLScriptQueueData* datap, const LLSD& experience);
+ virtual bool startQueue();
+ static bool processScript(LLHandle<LLFloaterCompileQueue> hfloater, const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump);
- static void finishLSLUpload(LLUUID itemId, LLUUID taskId, LLUUID newAssetId, LLSD response, std::string scriptName, LLUUID queueId);
-
- // This is the callback for when each script arrives
- static void scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
- LLAssetType::EType type,
- void* user_data, S32 status, LLExtStat ext_status);
-
- virtual BOOL startQueue();
-protected:
- LLViewerInventoryItem::item_array_t mCurrentScripts;
+ //bool checkAssetId(const LLUUID &assetId);
+ static void handleHTTPResponse(std::string pumpName, const LLSD &expresult);
+ static void handleScriptRetrieval(LLVFS *vfs, const LLUUID& assetId, LLAssetType::EType type, void* userData, S32 status, LLExtStat extStatus);
private:
static void processExperienceIdResults(LLSD result, LLUUID parent);
-
+ //uuid_list_t mAssetIds; // list of asset IDs processed.
uuid_list_t mExperienceIds;
};
@@ -169,9 +159,9 @@ protected:
LLFloaterResetQueue(const LLSD& key);
virtual ~LLFloaterResetQueue();
- // This is called by inventoryChanged
- virtual void handleInventory(LLViewerObject* viewer_obj,
- LLInventoryObject::object_list_t* inv);
+ static bool resetObjectScripts(LLHandle<LLFloaterScriptQueue> hfloater, const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump);
+
+ virtual bool startQueue();
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -186,10 +176,10 @@ class LLFloaterRunQueue : public LLFloaterScriptQueue
protected:
LLFloaterRunQueue(const LLSD& key);
virtual ~LLFloaterRunQueue();
-
- // This is called by inventoryChanged
- virtual void handleInventory(LLViewerObject* viewer_obj,
- LLInventoryObject::object_list_t* inv);
+
+ static bool runObjectScripts(LLHandle<LLFloaterScriptQueue> hfloater, const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump);
+
+ virtual bool startQueue();
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -205,9 +195,9 @@ protected:
LLFloaterNotRunQueue(const LLSD& key);
virtual ~LLFloaterNotRunQueue();
- // This is called by inventoryChanged
- virtual void handleInventory(LLViewerObject* viewer_obj,
- LLInventoryObject::object_list_t* inv);
+ static bool stopObjectScripts(LLHandle<LLFloaterScriptQueue> hfloater, const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump);
+
+ virtual bool startQueue();
};
#endif // LL_LLCOMPILEQUEUE_H
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index 843cd9b249..e9524189ed 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -1628,6 +1628,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(
LLSkinningUtil::getPerVertexSkinMatrix(weight[j].getF32ptr(), mat, false, final_mat, max_joints);
LLVector4a& v = vol_face.mPositions[j];
+
LLVector4a t;
LLVector4a dst;
bind_shape_matrix.affineTransform(v, t);
diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp
index 33675bd261..b716a76543 100644
--- a/indra/newview/lldrawpoolterrain.cpp
+++ b/indra/newview/lldrawpoolterrain.cpp
@@ -62,28 +62,15 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) :
LLFacePool(POOL_TERRAIN),
mTexturep(texturep)
{
- U32 format = GL_ALPHA8;
- U32 int_format = GL_ALPHA;
-
// Hack!
sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale");
sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
- mAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient.tga",
- FTT_LOCAL_FILE,
- TRUE, LLGLTexture::BOOST_UI,
- LLViewerTexture::FETCHED_TEXTURE,
- format, int_format,
- LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb"));
+ mAlphaRampImagep = LLViewerTextureManager::getFetchedTexture(IMG_ALPHA_GRAD);
//gGL.getTexUnit(0)->bind(mAlphaRampImagep.get());
mAlphaRampImagep->setAddressMode(LLTexUnit::TAM_CLAMP);
- m2DAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c",
- FTT_LOCAL_FILE,
- TRUE, LLGLTexture::BOOST_UI,
- LLViewerTexture::FETCHED_TEXTURE,
- format, int_format,
- LLUUID("38b86f85-2575-52a9-a531-23108d8da837"));
+ m2DAlphaRampImagep = LLViewerTextureManager::getFetchedTexture(IMG_ALPHA_GRAD_2D);
//gGL.getTexUnit(0)->bind(m2DAlphaRampImagep.get());
m2DAlphaRampImagep->setAddressMode(LLTexUnit::TAM_CLAMP);
diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp
index 7178042b32..5e0f3ab7f9 100644
--- a/indra/newview/lleventpoll.cpp
+++ b/indra/newview/lleventpoll.cpp
@@ -40,12 +40,14 @@
#include "llcorehttputil.h"
#include "lleventfilter.h"
+#include "boost/make_shared.hpp"
+
namespace LLEventPolling
{
namespace Details
{
- class LLEventPollImpl
+ class LLEventPollImpl: public boost::enable_shared_from_this<LLEventPollImpl>
{
public:
LLEventPollImpl(const LLHost &sender);
@@ -113,7 +115,7 @@ namespace Details
{
std::string coroname =
LLCoros::instance().launch("LLEventPollImpl::eventPollCoro",
- boost::bind(&LLEventPollImpl::eventPollCoro, this, url));
+ boost::bind(&LLEventPollImpl::eventPollCoro, this->shared_from_this(), url));
LL_INFOS("LLEventPollImpl") << coroname << " with url '" << url << LL_ENDL;
}
}
@@ -142,7 +144,7 @@ namespace Details
int errorCount = 0;
int counter = mCounter; // saved on the stack for logging.
- LL_INFOS("LLEventPollImpl") << " <" << counter << "> entering coroutine." << LL_ENDL;
+ LL_DEBUGS("LLEventPollImpl") << " <" << counter << "> entering coroutine." << LL_ENDL;
mAdapter = httpAdapter;
@@ -170,7 +172,7 @@ namespace Details
{
if (status == LLCore::HttpStatus(LLCore::HttpStatus::EXT_CURL_EASY, CURLE_OPERATION_TIMEDOUT))
{ // A standard timeout response we get this when there are no events.
- LL_INFOS("LLEventPollImpl") << "All is very quiet on target server. It may have gone idle?" << LL_ENDL;
+ LL_DEBUGS("LLEventPollImpl") << "All is very quiet on target server. It may have gone idle?" << LL_ENDL;
errorCount = 0;
continue;
}
@@ -264,7 +266,7 @@ namespace Details
}
}
}
- LL_INFOS("LLEventPollImpl") << " <" << counter << "> Leaving coroutine." << LL_ENDL;
+ LL_DEBUGS("LLEventPollImpl") << " <" << counter << "> Leaving coroutine." << LL_ENDL;
}
}
@@ -273,8 +275,7 @@ namespace Details
LLEventPoll::LLEventPoll(const std::string& poll_url, const LLHost& sender):
mImpl()
{
- mImpl = boost::unique_ptr<LLEventPolling::Details::LLEventPollImpl>
- (new LLEventPolling::Details::LLEventPollImpl(sender));
+ mImpl = boost::make_shared<LLEventPolling::Details::LLEventPollImpl>(sender);
mImpl->start(poll_url);
}
diff --git a/indra/newview/lleventpoll.h b/indra/newview/lleventpoll.h
index e2afd9226b..65766dbb2a 100644
--- a/indra/newview/lleventpoll.h
+++ b/indra/newview/lleventpoll.h
@@ -27,12 +27,6 @@
#ifndef LL_LLEVENTPOLL_H
#define LL_LLEVENTPOLL_H
-#include "boost/move/unique_ptr.hpp"
-
-namespace boost
-{
- using ::boost::movelib::unique_ptr; // move unique_ptr into the boost namespace.
-}
class LLHost;
@@ -57,7 +51,7 @@ public:
private:
- boost::unique_ptr<LLEventPolling::Details::LLEventPollImpl> mImpl;
+ boost::shared_ptr<LLEventPolling::Details::LLEventPollImpl> mImpl;
};
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index de349a03d4..3d5e2d356e 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -573,6 +573,7 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)
LLRiggedVolume* rigged = volume->getRiggedVolume();
if (rigged)
{
+ // called when selecting a face during edit of a mesh object
LLGLEnable offset(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(-1.f, -1.f);
gGL.multMatrix((F32*) volume->getRelativeXform().mMatrix);
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 4a059fdc67..d1e77f57e2 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -904,7 +904,8 @@ void LLFastTimerView::doAnalysisDefault(std::string baseline, std::string target
base[label]["Samples"].asInteger());
}
- exportCharts(baseline, target);
+ // This currently crashes, possibly due to a race condition in shutdown:
+ // exportCharts(baseline, target);
os.flush();
os.close();
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index 7f1c981a3c..d4ba230feb 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -809,3 +809,62 @@ void LLFeatureManager::applyBaseMasks()
maskFeatures("safe");
}
}
+
+LLSD LLFeatureManager::getRecommendedSettingsMap()
+{
+ // Create the map and fill it with the hardware recommended settings.
+ // It's needed to create an initial Default graphics preset (MAINT-6435).
+ // The process is similar to the one LLFeatureManager::applyRecommendedSettings() does.
+
+ LLSD map(LLSD::emptyMap());
+
+ loadGPUClass();
+ U32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_5));
+ LL_INFOS("RenderInit") << "Getting the map of recommended settings for level " << level << LL_ENDL;
+
+ applyBaseMasks();
+ std::string features(isValidGraphicsLevel(level) ? getNameForGraphicsLevel(level) : "Low");
+
+ maskFeatures(features);
+
+ LLControlVariable* ctrl = gSavedSettings.getControl("RenderQualityPerformance"); // include the quality value for correct preset loading
+ map["RenderQualityPerformance"]["Value"] = (LLSD::Integer)level;
+ map["RenderQualityPerformance"]["Comment"] = ctrl->getComment();;
+ map["RenderQualityPerformance"]["Persist"] = 1;
+ map["RenderQualityPerformance"]["Type"] = LLControlGroup::typeEnumToString(ctrl->type());
+
+
+
+ for (feature_map_t::iterator mIt = mFeatures.begin(); mIt != mFeatures.end(); ++mIt)
+ {
+ LLControlVariable* ctrl = gSavedSettings.getControl(mIt->first);
+ if (ctrl == NULL)
+ {
+ LL_WARNS() << "AHHH! Control setting " << mIt->first << " does not exist!" << LL_ENDL;
+ continue;
+ }
+
+ if (ctrl->isType(TYPE_BOOLEAN))
+ {
+ map[mIt->first]["Value"] = (LLSD::Boolean)getRecommendedValue(mIt->first);
+ }
+ else if (ctrl->isType(TYPE_S32) || ctrl->isType(TYPE_U32))
+ {
+ map[mIt->first]["Value"] = (LLSD::Integer)getRecommendedValue(mIt->first);
+ }
+ else if (ctrl->isType(TYPE_F32))
+ {
+ map[mIt->first]["Value"] = (LLSD::Real)getRecommendedValue(mIt->first);
+ }
+ else
+ {
+ LL_WARNS() << "AHHH! Control variable is not a numeric type!" << LL_ENDL;
+ continue;
+ }
+ map[mIt->first]["Comment"] = ctrl->getComment();;
+ map[mIt->first]["Persist"] = 1;
+ map[mIt->first]["Type"] = LLControlGroup::typeEnumToString(ctrl->type());
+ }
+
+ return map;
+}
diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h
index 12ea691b49..c3d87cea0b 100644
--- a/indra/newview/llfeaturemanager.h
+++ b/indra/newview/llfeaturemanager.h
@@ -157,7 +157,9 @@ public:
// load the dynamic GPU/feature table from a website
void fetchHTTPTables();
-
+
+ LLSD getRecommendedSettingsMap();
+
protected:
bool loadGPUClass();
diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index 7da65a9a7c..d842106146 100644
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -528,7 +528,8 @@ void LLFloaterGesture::onCopyPasteAction(const LLSD& command)
LLInventoryItem* item = gInventory.getItem(*it);
if(item && item->getInventoryType() == LLInventoryType::IT_GESTURE)
{
- LLClipboard::instance().addToClipboard(item->getUUID(),LLAssetType::AT_GESTURE);
+ LLWString item_name = utf8str_to_wstring(item->getName());
+ LLClipboard::instance().addToClipboard(item_name, 0, item_name.size());
}
}
}
diff --git a/indra/newview/llfloaterimnearbychathandler.cpp b/indra/newview/llfloaterimnearbychathandler.cpp
index 1f85c5ac1b..9fd731ed56 100644
--- a/indra/newview/llfloaterimnearbychathandler.cpp
+++ b/indra/newview/llfloaterimnearbychathandler.cpp
@@ -601,12 +601,31 @@ void LLFloaterIMNearbyChatHandler::processChat(const LLChat& chat_msg,
toast_msg = chat_msg.mText;
}
+ bool chat_overlaps = false;
+ if(nearby_chat->getChatHistory())
+ {
+ LLRect chat_rect = nearby_chat->getChatHistory()->calcScreenRect();
+ for (std::list<LLView*>::const_iterator child_iter = gFloaterView->getChildList()->begin();
+ child_iter != gFloaterView->getChildList()->end(); ++child_iter)
+ {
+ LLView *view = *child_iter;
+ const LLRect& rect = view->getRect();
+ if(view->isInVisibleChain() && (rect.overlaps(chat_rect)))
+ {
+ if(!nearby_chat->getChatHistory()->hasAncestor(view))
+ {
+ chat_overlaps = true;
+ }
+ break;
+ }
+ }
+ }
//Don't show nearby toast, if conversation is visible and selected
if ((nearby_chat->hasFocus()) ||
(LLFloater::isVisible(nearby_chat) && nearby_chat->isTornOff() && !nearby_chat->isMinimized()) ||
- ((im_box->getSelectedSession().isNull() &&
- ((LLFloater::isVisible(im_box) && !im_box->isMinimized() && im_box->isFrontmost())
- || (LLFloater::isVisible(nearby_chat) && !nearby_chat->isMinimized() && nearby_chat->isFrontmost())))))
+ ((im_box->getSelectedSession().isNull() && !chat_overlaps &&
+ ((LLFloater::isVisible(im_box) && !nearby_chat->isTornOff() && !im_box->isMinimized())
+ || (LLFloater::isVisible(nearby_chat) && nearby_chat->isTornOff() && !nearby_chat->isMinimized())))))
{
if(nearby_chat->isMessagePaneExpanded())
{
diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp
index 357b635594..2cd94c592a 100644
--- a/indra/newview/llfloaterimsessiontab.cpp
+++ b/indra/newview/llfloaterimsessiontab.cpp
@@ -1094,6 +1094,12 @@ void LLFloaterIMSessionTab::saveCollapsedState()
gSavedPerAccountSettings.setBOOL("NearbyChatIsNotCollapsed", isMessagePaneExpanded());
}
}
+
+LLView* LLFloaterIMSessionTab::getChatHistory()
+{
+ return mChatHistory;
+}
+
BOOL LLFloaterIMSessionTab::handleKeyHere(KEY key, MASK mask )
{
BOOL handled = FALSE;
diff --git a/indra/newview/llfloaterimsessiontab.h b/indra/newview/llfloaterimsessiontab.h
index e7b05a584b..1b4922fd73 100644
--- a/indra/newview/llfloaterimsessiontab.h
+++ b/indra/newview/llfloaterimsessiontab.h
@@ -103,6 +103,8 @@ public:
void restoreFloater();
void saveCollapsedState();
+ LLView* getChatHistory();
+
protected:
// callback for click on any items of the visual states menu
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index d7a773673f..c1ec86b110 100644
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -1656,22 +1656,17 @@ void LLModelPreview::saveUploadData(bool save_skinweights, bool save_joint_posit
if (!mLODFile[LLModel::LOD_HIGH].empty())
{
std::string filename = mLODFile[LLModel::LOD_HIGH];
-
- std::string::size_type i = filename.rfind(".");
- if (i != std::string::npos)
- {
- filename.replace(i, filename.size()-1, ".slm");
- saveUploadData(filename, save_skinweights, save_joint_positions);
+ std::string slm_filename;
+
+ if (LLModelLoader::getSLMFilename(filename, slm_filename))
+ {
+ saveUploadData(slm_filename, save_skinweights, save_joint_positions);
}
}
}
void LLModelPreview::saveUploadData(const std::string& filename, bool save_skinweights, bool save_joint_positions)
{
- if (!gSavedSettings.getBOOL("MeshImportUseSLM"))
- {
- return;
- }
std::set<LLPointer<LLModel> > meshes;
std::map<LLModel*, std::string> mesh_binary;
@@ -1818,6 +1813,12 @@ void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable
}
else
{
+ // For MAINT-6647, we have set force_disable_slm to true,
+ // which means this code path will never be taken. Trying to
+ // re-use SLM files has never worked properly; in particular,
+ // it tends to force the UI into strange checkbox options
+ // which cannot be altered.
+
//only try to load from slm if viewer is configured to do so and this is the
//initial model load (not an LoD or physics shape)
mModelLoader->mTrySLM = gSavedSettings.getBOOL("MeshImportUseSLM") && mUploadData.empty();
@@ -4239,7 +4240,11 @@ void LLFloaterModelPreview::onUpload(void* user_data)
bool upload_skinweights = mp->childGetValue("upload_skin").asBoolean();
bool upload_joint_positions = mp->childGetValue("upload_joints").asBoolean();
- mp->mModelPreview->saveUploadData(upload_skinweights, upload_joint_positions);
+
+ if (gSavedSettings.getBOOL("MeshImportUseSLM"))
+ {
+ mp->mModelPreview->saveUploadData(upload_skinweights, upload_joint_positions);
+ }
gMeshRepo.uploadModel(mp->mModelPreview->mUploadData, mp->mModelPreview->mPreviewScale,
mp->childGetValue("upload_textures").asBoolean(), upload_skinweights, upload_joint_positions, mp->mUploadModelUrl,
diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp
index 135bbb335e..4a5732aecf 100644
--- a/indra/newview/llfloaternamedesc.cpp
+++ b/indra/newview/llfloaternamedesc.cpp
@@ -42,6 +42,8 @@
#include "llfloaterperms.h"
#include "llviewercontrol.h"
#include "llviewermenufile.h" // upload_new_resource()
+#include "llstatusbar.h" // can_afford_transaction()
+#include "llnotificationsutil.h"
#include "lluictrlfactory.h"
#include "llstring.h"
#include "lleconomy.h"
@@ -161,12 +163,15 @@ void LLFloaterNameDesc::onBtnOK( )
LLAssetStorage::LLStoreAssetCallback callback = NULL;
S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); // kinda hack - assumes that unsubclassed LLFloaterNameDesc is only used for uploading chargeable assets, which it is right now (it's only used unsubclassed for the sound upload dialog, and THAT should be a subclass).
- void *nruserdata = NULL;
- std::string display_name = LLStringUtil::null;
- LLResourceUploadInfo::ptr_t uploadInfo(new LLNewFileResourceUploadInfo(
+ if (can_afford_transaction(expected_upload_cost))
+ {
+ void *nruserdata = NULL;
+ std::string display_name = LLStringUtil::null;
+
+ LLResourceUploadInfo::ptr_t uploadInfo(new LLNewFileResourceUploadInfo(
mFilenameAndPath,
- getChild<LLUICtrl>("name_form")->getValue().asString(),
+ getChild<LLUICtrl>("name_form")->getValue().asString(),
getChild<LLUICtrl>("description_form")->getValue().asString(), 0,
LLFolderType::FT_NONE, LLInventoryType::IT_NONE,
LLFloaterPerms::getNextOwnerPerms("Uploads"),
@@ -174,7 +179,14 @@ void LLFloaterNameDesc::onBtnOK( )
LLFloaterPerms::getEveryonePerms("Uploads"),
expected_upload_cost));
- upload_new_resource(uploadInfo, callback, nruserdata);
+ upload_new_resource(uploadInfo, callback, nruserdata);
+ }
+ else
+ {
+ LLSD args;
+ args["COST"] = llformat("%d", expected_upload_cost);
+ LLNotificationsUtil::add("ErrorTextureCannotAfford", args);
+ }
closeFloater(false);
}
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 4eacd728c3..843dbbf25e 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -412,6 +412,11 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
panel->getChild<LLUICtrl>("object_bonus_spin")->setValue(LLSD(object_bonus_factor) );
panel->getChild<LLUICtrl>("access_combo")->setValue(LLSD(sim_access) );
+ LLPanelRegionGeneralInfo* panel_general = LLFloaterRegionInfo::getPanelGeneral();
+ if (panel)
+ {
+ panel_general->setObjBonusFactor(object_bonus_factor);
+ }
// detect teen grid for maturity
@@ -465,6 +470,16 @@ LLPanelEstateCovenant* LLFloaterRegionInfo::getPanelCovenant()
}
// static
+LLPanelRegionGeneralInfo* LLFloaterRegionInfo::getPanelGeneral()
+{
+ LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
+ if (!floater) return NULL;
+ LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
+ LLPanelRegionGeneralInfo* panel = (LLPanelRegionGeneralInfo*)tab->getChild<LLPanel>("General");
+ return panel;
+}
+
+// static
LLPanelRegionTerrainInfo* LLFloaterRegionInfo::getPanelRegionTerrain()
{
LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
@@ -717,7 +732,42 @@ BOOL LLPanelRegionGeneralInfo::postBuild()
childSetAction("im_btn", onClickMessage, this);
// childSetAction("manage_telehub_btn", onClickManageTelehub, this);
- return LLPanelRegionInfo::postBuild();
+ LLUICtrl* apply_btn = findChild<LLUICtrl>("apply_btn");
+ if (apply_btn)
+ {
+ apply_btn->setCommitCallback(boost::bind(&LLPanelRegionGeneralInfo::onBtnSet, this));
+ }
+
+ refresh();
+ return TRUE;
+}
+
+void LLPanelRegionGeneralInfo::onBtnSet()
+{
+ if(mObjBonusFactor == getChild<LLUICtrl>("object_bonus_spin")->getValue().asReal())
+ {
+ if (sendUpdate())
+ {
+ disableButton("apply_btn");
+ }
+ }
+ else
+ {
+ LLNotificationsUtil::add("ChangeObjectBonusFactor", LLSD(), LLSD(), boost::bind(&LLPanelRegionGeneralInfo::onChangeObjectBonus, this, _1, _2));
+ }
+}
+
+bool LLPanelRegionGeneralInfo::onChangeObjectBonus(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (option == 0)
+ {
+ if (sendUpdate())
+ {
+ disableButton("apply_btn");
+ }
+ }
+ return false;
}
void LLPanelRegionGeneralInfo::onClickKick()
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 46f2b42137..dbb0ad05e9 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -95,6 +95,7 @@ public:
static LLPanelEstateCovenant* getPanelCovenant();
static LLPanelRegionTerrainInfo* getPanelRegionTerrain();
static LLPanelRegionExperiences* getPanelExperiences();
+ static LLPanelRegionGeneralInfo* getPanelGeneral();
// from LLPanel
virtual void refresh();
@@ -183,6 +184,9 @@ public:
// LLPanel
virtual BOOL postBuild();
+ void onBtnSet();
+ void setObjBonusFactor(F32 object_bonus_factor) {mObjBonusFactor = object_bonus_factor;}
+
protected:
virtual BOOL sendUpdate();
void onClickKick();
@@ -191,6 +195,9 @@ protected:
bool onKickAllCommit(const LLSD& notification, const LLSD& response);
static void onClickMessage(void* userdata);
bool onMessageCommit(const LLSD& notification, const LLSD& response);
+ bool onChangeObjectBonus(const LLSD& notification, const LLSD& response);
+
+ F32 mObjBonusFactor;
};
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index afec981d56..b906671c7f 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -1418,6 +1418,20 @@ void LLFloaterSnapshot::postPanelSwitch()
}
// static
+void LLFloaterSnapshot::inventorySaveFailed()
+{
+ LLFloaterSnapshot* instance = findInstance();
+ if (!instance)
+ {
+ llassert(instance != NULL);
+ return;
+ }
+
+ instance->impl.updateControls(instance);
+ instance->impl.setStatus(Impl::STATUS_FINISHED, false, "inventory");
+}
+
+// static
LLPointer<LLImageFormatted> LLFloaterSnapshot::getImageData()
{
// FIXME: May not work for textures.
diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h
index 0bb9474bb5..eb3a94999b 100644
--- a/indra/newview/llfloatersnapshot.h
+++ b/indra/newview/llfloatersnapshot.h
@@ -61,6 +61,7 @@ public:
static BOOL saveLocal();
static void postSave();
static void postPanelSwitch();
+ static void inventorySaveFailed();
static LLPointer<LLImageFormatted> getImageData();
static const LLVector3d& getPosTakenGlobal();
static void setAgentEmail(const std::string& email);
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index ece3e10faa..c67feb8158 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -963,10 +963,10 @@ F32 LLFloaterWorldMap::getDistanceToDestination(const LLVector3d &destination,
}
-void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui)
+void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui, BOOL dest_reached)
{
LLCtrlListInterface *list = mListSearchResults;
- if (list)
+ if (list && (!dest_reached || (list->getItemCount() == 1)))
{
list->operateOnAll(LLCtrlListInterface::OP_DELETE);
}
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index 7ce8dae9a9..c5801c8819 100644
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -94,7 +94,7 @@ public:
// A z_attenuation of 0.0f collapses the distance into the X-Y plane
F32 getDistanceToDestination(const LLVector3d& pos_global, F32 z_attenuation = 0.5f) const;
- void clearLocationSelection(BOOL clear_ui = FALSE);
+ void clearLocationSelection(BOOL clear_ui = FALSE, BOOL dest_reached = FALSE);
void clearAvatarSelection(BOOL clear_ui = FALSE);
void clearLandmarkSelection(BOOL clear_ui = FALSE);
diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp
index a12ec390af..b64df2bd47 100644
--- a/indra/newview/llinspectremoteobject.cpp
+++ b/indra/newview/llinspectremoteobject.cpp
@@ -181,7 +181,7 @@ void LLInspectRemoteObject::update()
getChild<LLUICtrl>("map_btn")->setEnabled(! mSLurl.empty());
// disable the Block button if we don't have the object ID (will this ever happen?)
- getChild<LLUICtrl>("block_btn")->setEnabled(! mObjectID.isNull());
+ getChild<LLUICtrl>("block_btn")->setEnabled(!mObjectID.isNull() && !LLMuteList::getInstance()->isMuted(mObjectID));
}
//////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index e3cb4d57ef..d8f019374e 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -287,7 +287,11 @@ void update_marketplace_category(const LLUUID& cur_uuid, bool perform_consistenc
LL_INFOS("SLM") << "Unlist and clear version folder as the version folder is not at the right place anymore!!" << LL_ENDL;
LLMarketplaceData::instance().setVersionFolder(listing_uuid, LLUUID::null,1);
}
- else if (version_folder_uuid.notNull() && LLMarketplaceData::instance().getActivationState(version_folder_uuid) && (count_descendants_items(version_folder_uuid) == 0) && !LLMarketplaceData::instance().isUpdating(version_folder_uuid,version_depth))
+ else if (version_folder_uuid.notNull()
+ && gInventory.isCategoryComplete(version_folder_uuid)
+ && LLMarketplaceData::instance().getActivationState(version_folder_uuid)
+ && (count_descendants_items(version_folder_uuid) == 0)
+ && !LLMarketplaceData::instance().isUpdating(version_folder_uuid,version_depth))
{
LL_INFOS("SLM") << "Unlist as the version folder is empty of any item!!" << LL_ENDL;
LLNotificationsUtil::add("AlertMerchantVersionFolderEmpty");
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index cada2d7cf2..9a33e210ff 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -2726,24 +2726,13 @@ void LLInventoryModel::registerCallbacks(LLMessageSystem* msg)
msg->setHandlerFuncFast(_PREHASH_RemoveInventoryObjects,
processRemoveInventoryObjects,
NULL);
- //msg->setHandlerFuncFast(_PREHASH_ExchangeCallingCard,
- // processExchangeCallingcard,
- // NULL);
- //msg->setHandlerFuncFast(_PREHASH_AddCallingCard,
- // processAddCallingcard,
- // NULL);
- //msg->setHandlerFuncFast(_PREHASH_DeclineCallingCard,
- // processDeclineCallingcard,
- // NULL);
msg->setHandlerFuncFast(_PREHASH_SaveAssetIntoInventory,
processSaveAssetIntoInventory,
NULL);
msg->setHandlerFuncFast(_PREHASH_BulkUpdateInventory,
processBulkUpdateInventory,
NULL);
- msg->setHandlerFunc("InventoryDescendents", processInventoryDescendents);
msg->setHandlerFunc("MoveInventoryItem", processMoveInventoryItem);
- msg->setHandlerFunc("FetchInventoryReply", processFetchInventoryReply);
}
@@ -2763,14 +2752,6 @@ void LLInventoryModel::processUpdateCreateInventoryItem(LLMessageSystem* msg, vo
}
-// static
-void LLInventoryModel::processFetchInventoryReply(LLMessageSystem* msg, void**)
-{
- // no accounting
- gInventory.messageUpdateCore(msg, false);
-}
-
-
bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account, U32 mask)
{
//make sure our added inventory observer is active
@@ -3213,85 +3194,6 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
InventoryCallbackInfo cbinfo = (*inv_it);
gInventoryCallbacks.fire(cbinfo.mCallback, cbinfo.mInvID);
}
-
- //gInventory.validate();
-
- // Don't show the inventory. We used to call showAgentInventory here.
- //LLFloaterInventory* view = LLFloaterInventory::getActiveInventory();
- //if(view)
- //{
- // const BOOL take_keyboard_focus = FALSE;
- // view->setSelection(category.getUUID(), take_keyboard_focus );
- // LLView* focus_view = gFocusMgr.getKeyboardFocus();
- // LLFocusMgr::FocusLostCallback callback = gFocusMgr.getFocusCallback();
- // // HACK to open inventory offers that are accepted. This information
- // // really needs to flow through the instant messages and inventory
- // // transfer/update messages.
- // if (LLFloaterInventory::sOpenNextNewItem)
- // {
- // view->openSelected();
- // LLFloaterInventory::sOpenNextNewItem = FALSE;
- // }
- //
- // // restore keyboard focus
- // gFocusMgr.setKeyboardFocus(focus_view);
- //}
-}
-
-// static
-void LLInventoryModel::processInventoryDescendents(LLMessageSystem* msg,void**)
-{
- LLUUID agent_id;
- msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
- if(agent_id != gAgent.getID())
- {
- LL_WARNS() << "Got a UpdateInventoryItem for the wrong agent." << LL_ENDL;
- return;
- }
- LLUUID parent_id;
- msg->getUUID("AgentData", "FolderID", parent_id);
- LLUUID owner_id;
- msg->getUUID("AgentData", "OwnerID", owner_id);
- S32 version;
- msg->getS32("AgentData", "Version", version);
- S32 descendents;
- msg->getS32("AgentData", "Descendents", descendents);
-
- S32 i;
- S32 count = msg->getNumberOfBlocksFast(_PREHASH_FolderData);
- LLPointer<LLViewerInventoryCategory> tcategory = new LLViewerInventoryCategory(owner_id);
- for(i = 0; i < count; ++i)
- {
- tcategory->unpackMessage(msg, _PREHASH_FolderData, i);
- gInventory.updateCategory(tcategory);
- }
-
- count = msg->getNumberOfBlocksFast(_PREHASH_ItemData);
- LLPointer<LLViewerInventoryItem> titem = new LLViewerInventoryItem;
- for(i = 0; i < count; ++i)
- {
- titem->unpackMessage(msg, _PREHASH_ItemData, i);
- // If the item has already been added (e.g. from link prefetch), then it doesn't need to be re-added.
- if (gInventory.getItem(titem->getUUID()))
- {
- LL_DEBUGS("Inventory") << "Skipping prefetched item [ Name: " << titem->getName()
- << " | Type: " << titem->getActualType() << " | ItemUUID: " << titem->getUUID() << " ] " << LL_ENDL;
- continue;
- }
- gInventory.updateItem(titem);
- }
-
- // set version and descendentcount according to message.
- LLViewerInventoryCategory* cat = gInventory.getCategory(parent_id);
- if(cat)
- {
- cat->setVersion(version);
- cat->setDescendentCount(descendents);
- // Get this UUID on the changed list so that whatever's listening for it
- // will get triggered.
- gInventory.addChangedMask(LLInventoryObserver::INTERNAL, cat->getUUID());
- }
- gInventory.notifyObservers();
}
// static
@@ -3578,30 +3480,6 @@ void LLInventoryModel::updateItemsOrder(LLInventoryModel::item_array_t& items, c
}
}
-//* @param[in] items vector of items in order to be saved.
-/*
-void LLInventoryModel::saveItemsOrder(const LLInventoryModel::item_array_t& items)
-{
- int sortField = 0;
-
- // current order is saved by setting incremental values (1, 2, 3, ...) for the sort field
- for (item_array_t::const_iterator i = items.begin(); i != items.end(); ++i)
- {
- LLViewerInventoryItem* item = *i;
-
- item->setSortField(++sortField);
- item->setComplete(TRUE);
- item->updateServer(FALSE);
-
- updateItem(item);
-
- // Tell the parent folder to refresh its sort order.
- addChangedMask(LLInventoryObserver::SORT, item->getParentUUID());
- }
-
- notifyObservers();
-}
-*/
// See also LLInventorySort where landmarks in the Favorites folder are sorted.
class LLViewerInventoryItemSort
{
@@ -3612,37 +3490,6 @@ public:
}
};
-/**
- * Sorts passed items by LLViewerInventoryItem sort field.
- *
- * @param[in, out] items - array of items, not sorted.
- */
-//static void rearrange_item_order_by_sort_field(LLInventoryModel::item_array_t& items)
-//{
-// static LLViewerInventoryItemSort sort_functor;
-// std::sort(items.begin(), items.end(), sort_functor);
-//}
-
-// * @param source_item_id - LLUUID of the source item to be moved into new position
-// * @param target_item_id - LLUUID of the target item before which source item should be placed.
-/*
-void LLInventoryModel::rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id)
-{
- LLInventoryModel::cat_array_t cats;
- LLInventoryModel::item_array_t items;
- LLIsType is_type(LLAssetType::AT_LANDMARK);
- LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
- gInventory.collectDescendentsIf(favorites_id, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type);
-
- // ensure items are sorted properly before changing order. EXT-3498
- rearrange_item_order_by_sort_field(items);
-
- // update order
- updateItemsOrder(items, source_item_id, target_item_id);
-
- saveItemsOrder(items);
-}
-*/
//----------------------------------------------------------------------------
// *NOTE: DEBUG functionality
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index 3004eaf7c1..826d1f880d 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -630,9 +630,7 @@ public:
static void processRemoveInventoryObjects(LLMessageSystem* msg, void**);
static void processSaveAssetIntoInventory(LLMessageSystem* msg, void**);
static void processBulkUpdateInventory(LLMessageSystem* msg, void**);
- static void processInventoryDescendents(LLMessageSystem* msg, void**);
static void processMoveInventoryItem(LLMessageSystem* msg, void**);
- static void processFetchInventoryReply(LLMessageSystem* msg, void**);
protected:
bool messageUpdateCore(LLMessageSystem* msg, bool do_accounting, U32 mask = 0x0);
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 72ec092ed4..ce8705b7ac 100644
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -241,33 +241,11 @@ void fetch_items_from_llsd(const LLSD& items_llsd)
gInventory.requestPost(true, url, body[i], handler, (i ? "Library Item" : "Inventory Item"));
continue;
}
+ else
+ {
+ LL_WARNS("INVENTORY") << "Failed to get capability." << LL_ENDL;
+ }
- LLMessageSystem* msg = gMessageSystem;
- BOOL start_new_message = TRUE;
- for (S32 j=0; j<body[i]["items"].size(); j++)
- {
- LLSD item_entry = body[i]["items"][j];
- if (start_new_message)
- {
- start_new_message = FALSE;
- msg->newMessageFast(_PREHASH_FetchInventory);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- }
- msg->nextBlockFast(_PREHASH_InventoryData);
- msg->addUUIDFast(_PREHASH_OwnerID, item_entry["owner_id"].asUUID());
- msg->addUUIDFast(_PREHASH_ItemID, item_entry["item_id"].asUUID());
- if (msg->isSendFull(NULL))
- {
- start_new_message = TRUE;
- gAgent.sendReliableMessage();
- }
- }
- if (!start_new_message)
- {
- gAgent.sendReliableMessage();
- }
}
}
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 8d21fda8f9..53b2ca2b74 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -64,6 +64,9 @@
#include "llurllineeditorctrl.h"
#include "llagentui.h"
+#include "llmenuoptionpathfindingrebakenavmesh.h"
+#include "llpathfindingmanager.h"
+
//============================================================================
/*
* "ADD LANDMARK" BUTTON UPDATING LOGIC
@@ -1194,6 +1197,18 @@ bool LLLocationInputCtrl::onLocationContextMenuItemEnabled(const LLSD& userdata)
return false;
}
+void LLLocationInputCtrl::callbackRebakeRegion(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (option == 0) // OK
+ {
+ if (LLPathfindingManager::getInstance() != NULL)
+ {
+ LLMenuOptionPathfindingRebakeNavmesh::getInstance()->sendRequestRebakeNavmesh();
+ }
+ }
+}
+
void LLLocationInputCtrl::onParcelIconClick(EParcelIcon icon)
{
switch (icon)
@@ -1211,6 +1226,16 @@ void LLLocationInputCtrl::onParcelIconClick(EParcelIcon icon)
LLNotificationsUtil::add("NoBuild");
break;
case PATHFINDING_DIRTY_ICON:
+ if (LLPathfindingManager::getInstance() != NULL)
+ {
+ LLMenuOptionPathfindingRebakeNavmesh *rebakeInstance = LLMenuOptionPathfindingRebakeNavmesh::getInstance();
+ if (rebakeInstance && rebakeInstance->canRebakeRegion() && (rebakeInstance->getMode() == LLMenuOptionPathfindingRebakeNavmesh::kRebakeNavMesh_Available))
+ {
+ LLNotificationsUtil::add("PathfindingDirtyRebake", LLSD(), LLSD(),
+ boost::bind(&LLLocationInputCtrl::callbackRebakeRegion, this, _1, _2));
+ break;
+ }
+ }
LLNotificationsUtil::add("PathfindingDirty");
break;
case PATHFINDING_DISABLED_ICON:
diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h
index cd6fd24077..da71bab6c1 100644
--- a/indra/newview/lllocationinputctrl.h
+++ b/indra/newview/lllocationinputctrl.h
@@ -166,6 +166,7 @@ private:
// callbacks
bool onLocationContextMenuItemEnabled(const LLSD& userdata);
void onLocationContextMenuItemClicked(const LLSD& userdata);
+ void callbackRebakeRegion(const LLSD& notification, const LLSD& response);
void onParcelIconClick(EParcelIcon icon);
void createNavMeshStatusListenerForCurrentRegion();
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 4116e38f11..639641d1c2 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -904,7 +904,7 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params
std::string stuff = matches[IDX_STUFF];
boost::match_results<std::string::const_iterator> name_and_text;
if (!boost::regex_match(stuff, name_and_text, NAME_AND_TEXT)) return false;
-
+
bool has_name = name_and_text[IDX_NAME].matched;
std::string name = name_and_text[IDX_NAME];
@@ -956,7 +956,6 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im, const LLSD& parse_params
im[LL_IM_FROM] = name;
}
-
im[LL_IM_TEXT] = name_and_text[IDX_TEXT];
return true; //parsed name and message text, maybe have a timestamp too
}
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 0aaed3e286..54f8fb93d0 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -3935,7 +3935,7 @@ LLSD& LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id)
{
LLMutexLock lock(mHeaderMutex);
mesh_header_map::iterator iter = mMeshHeader.find(mesh_id);
- if (iter != mMeshHeader.end())
+ if (iter != mMeshHeader.end() && mMeshHeaderSize[mesh_id] > 0)
{
return iter->second;
}
@@ -3956,10 +3956,11 @@ void LLMeshRepository::uploadModel(std::vector<LLModelInstance>& data, LLVector3
S32 LLMeshRepository::getMeshSize(const LLUUID& mesh_id, S32 lod)
{
- if (mThread)
+ if (mThread && mesh_id.notNull())
{
+ LLMutexLock lock(mThread->mHeaderMutex);
LLMeshRepoThread::mesh_header_map::iterator iter = mThread->mMeshHeader.find(mesh_id);
- if (iter != mThread->mMeshHeader.end())
+ if (iter != mThread->mMeshHeader.end() && mThread->mMeshHeaderSize[mesh_id] > 0)
{
LLSD& header = iter->second;
@@ -4031,9 +4032,30 @@ void LLMeshRepository::uploadError(LLSD& args)
mUploadErrorQ.push(args);
}
+F32 LLMeshRepository::getStreamingCost(LLUUID mesh_id, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value)
+{
+ if (mThread && mesh_id.notNull())
+ {
+ LLMutexLock lock(mThread->mHeaderMutex);
+ LLMeshRepoThread::mesh_header_map::iterator iter = mThread->mMeshHeader.find(mesh_id);
+ if (iter != mThread->mMeshHeader.end() && mThread->mMeshHeaderSize[mesh_id] > 0)
+ {
+ return getStreamingCost(iter->second, radius, bytes, bytes_visible, lod, unscaled_value);
+ }
+ }
+ return 0.f;
+}
+
//static
F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value)
{
+ if (header.has("404")
+ || !header.has("lowest_lod")
+ || (header.has("version") && header["version"].asInteger() > MAX_MESH_VERSION))
+ {
+ return 0.f;
+ }
+
F32 max_distance = 512.f;
F32 dlowest = llmin(radius/0.03f, max_distance);
diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h
index d35c44397b..a762042597 100644
--- a/indra/newview/llmeshrepository.h
+++ b/indra/newview/llmeshrepository.h
@@ -475,6 +475,7 @@ public:
static LLDeadmanTimer sQuiescentTimer; // Time-to-complete-mesh-downloads after significant events
+ F32 getStreamingCost(LLUUID mesh_id, F32 radius, S32* bytes = NULL, S32* visible_bytes = NULL, S32 detail = -1, F32 *unscaled_value = NULL);
static F32 getStreamingCost(LLSD& header, F32 radius, S32* bytes = NULL, S32* visible_bytes = NULL, S32 detail = -1, F32 *unscaled_value = NULL);
LLMeshRepository();
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 4229419fce..c779ba5cdd 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -150,6 +150,7 @@ BOOL LLPanelMainInventory::postBuild()
LLInventoryPanel* recent_items_panel = getChild<LLInventoryPanel>("Recent Items");
if (recent_items_panel)
{
+ // assign default values until we will be sure that we have setting to restore
recent_items_panel->setSinceLogoff(TRUE);
recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE);
recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
@@ -181,6 +182,7 @@ BOOL LLPanelMainInventory::postBuild()
LLParamSDParser parser;
parser.readSD(recent_items, p);
recent_items_panel->getFilter().fromParams(p);
+ recent_items_panel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::RECENTITEMS_SORT_ORDER));
}
}
@@ -372,7 +374,14 @@ void LLPanelMainInventory::setSortBy(const LLSD& userdata)
}
getActivePanel()->setSortOrder(sort_order_mask);
- gSavedSettings.setU32("InventorySortOrder", sort_order_mask);
+ if ("Recent Items" == getActivePanel()->getName())
+ {
+ gSavedSettings.setU32("RecentItemsSortOrder", sort_order_mask);
+ }
+ else
+ {
+ gSavedSettings.setU32("InventorySortOrder", sort_order_mask);
+ }
}
// static
@@ -1143,6 +1152,15 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
}
}
+void LLPanelMainInventory::onVisibilityChange( BOOL new_visibility )
+{
+ if(!new_visibility)
+ {
+ mMenuAdd->setVisible(FALSE);
+ getActivePanel()->getRootFolder()->finishRenamingItem();
+ }
+}
+
bool LLPanelMainInventory::isSaveTextureEnabled(const LLSD& userdata)
{
LLFolderViewItem* current_item = getActivePanel()->getRootFolder()->getCurSelectedItem();
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index 21f0ca0cae..290e2e5f47 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -72,6 +72,7 @@ public:
std::string& tooltip_msg);
/*virtual*/ void changed(U32);
/*virtual*/ void draw();
+ /*virtual*/ void onVisibilityChange ( BOOL new_visibility );
LLInventoryPanel* getPanel() { return mActivePanel; }
LLInventoryPanel* getActivePanel() { return mActivePanel; }
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 73b928f014..bc177abc57 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -611,9 +611,11 @@ BOOL LLPanelPeople::postBuild()
mOnlineFriendList->setNoItemsCommentText(getString("no_friends_online"));
mOnlineFriendList->setShowIcons("FriendsListShowIcons");
mOnlineFriendList->showPermissions("FriendsListShowPermissions");
+ mOnlineFriendList->setShowCompleteName(!gSavedSettings.getBOOL("FriendsListHideUsernames"));
mAllFriendList->setNoItemsCommentText(getString("no_friends"));
mAllFriendList->setShowIcons("FriendsListShowIcons");
mAllFriendList->showPermissions("FriendsListShowPermissions");
+ mAllFriendList->setShowCompleteName(!gSavedSettings.getBOOL("FriendsListHideUsernames"));
LLPanel* nearby_tab = getChild<LLPanel>(NEARBY_TAB_NAME);
nearby_tab->setVisibleCallback(boost::bind(&Updater::setActive, mNearbyListUpdater, _2));
@@ -622,6 +624,7 @@ BOOL LLPanelPeople::postBuild()
mNearbyList->setNoItemsMsg(getString("no_one_near"));
mNearbyList->setNoFilteredItemsMsg(getString("no_one_filtered_near"));
mNearbyList->setShowIcons("NearbyListShowIcons");
+ mNearbyList->setShowCompleteName(!gSavedSettings.getBOOL("NearbyListHideUsernames"));
mMiniMap = (LLNetMap*)getChildView("Net Map",true);
mMiniMap->setToolTipMsg(gSavedSettings.getBOOL("DoubleClickTeleport") ?
getString("AltMiniMapToolTipMsg") : getString("MiniMapToolTipMsg"));
@@ -1342,6 +1345,16 @@ void LLPanelPeople::onFriendsViewSortMenuItemClicked(const LLSD& userdata)
mAllFriendList->showPermissions(show_permissions);
mOnlineFriendList->showPermissions(show_permissions);
}
+ else if (chosen_item == "view_usernames")
+ {
+ bool hide_usernames = !gSavedSettings.getBOOL("FriendsListHideUsernames");
+ gSavedSettings.setBOOL("FriendsListHideUsernames", hide_usernames);
+
+ mAllFriendList->setShowCompleteName(!hide_usernames);
+ mAllFriendList->handleDisplayNamesOptionChanged();
+ mOnlineFriendList->setShowCompleteName(!hide_usernames);
+ mOnlineFriendList->handleDisplayNamesOptionChanged();
+ }
}
void LLPanelPeople::onGroupsViewSortMenuItemClicked(const LLSD& userdata)
@@ -1374,6 +1387,14 @@ void LLPanelPeople::onNearbyViewSortMenuItemClicked(const LLSD& userdata)
{
setSortOrder(mNearbyList, E_SORT_BY_DISTANCE);
}
+ else if (chosen_item == "view_usernames")
+ {
+ bool hide_usernames = !gSavedSettings.getBOOL("NearbyListHideUsernames");
+ gSavedSettings.setBOOL("NearbyListHideUsernames", hide_usernames);
+
+ mNearbyList->setShowCompleteName(!hide_usernames);
+ mNearbyList->handleDisplayNamesOptionChanged();
+ }
}
bool LLPanelPeople::onNearbyViewSortMenuItemCheck(const LLSD& userdata)
diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp
index a5f59dbf4a..65769ff526 100644
--- a/indra/newview/llpanelpeoplemenus.cpp
+++ b/indra/newview/llpanelpeoplemenus.cpp
@@ -38,9 +38,14 @@
#include "llavataractions.h"
#include "llcallingcard.h" // for LLAvatarTracker
#include "lllogchat.h"
+#include "llparcel.h"
#include "llviewermenu.h" // for gMenuHolder
#include "llconversationmodel.h"
#include "llviewerobjectlist.h"
+#include "llviewerparcelmgr.h"
+#include "llviewerregion.h"
+#include "llvoavatarself.h"
+#include "roles_constants.h"
namespace LLPanelPeopleMenus
{
@@ -77,9 +82,13 @@ LLContextMenu* PeopleContextMenu::createMenu()
registrar.add("Avatar.InviteToGroup", boost::bind(&LLAvatarActions::inviteToGroup, id));
registrar.add("Avatar.TeleportRequest", boost::bind(&PeopleContextMenu::requestTeleport, this));
registrar.add("Avatar.Calllog", boost::bind(&LLAvatarActions::viewChatHistory, id));
+ registrar.add("Avatar.Freeze", boost::bind(&LLAvatarActions::freezeAvatar, id));
+ registrar.add("Avatar.Eject", boost::bind(&PeopleContextMenu::eject, this));
+
enable_registrar.add("Avatar.EnableItem", boost::bind(&PeopleContextMenu::enableContextMenuItem, this, _2));
enable_registrar.add("Avatar.CheckItem", boost::bind(&PeopleContextMenu::checkContextMenuItem, this, _2));
+ enable_registrar.add("Avatar.EnableFreezeEject", boost::bind(&PeopleContextMenu::enableFreezeEject, this, _2));
// create the context menu from the XUI
menu = createFromFile("menu_people_nearby.xml");
@@ -258,6 +267,50 @@ bool PeopleContextMenu::checkContextMenuItem(const LLSD& userdata)
return false;
}
+bool PeopleContextMenu::enableFreezeEject(const LLSD& userdata)
+{
+ if((gAgent.getID() == mUUIDs.front()) || (mUUIDs.size() != 1))
+ {
+ return false;
+ }
+
+ const LLUUID& id = mUUIDs.front();
+
+ // Use avatar_id if available, otherwise default to right-click avatar
+ LLVOAvatar* avatar = NULL;
+ if (id.notNull())
+ {
+ LLViewerObject* object = gObjectList.findObject(id);
+ if (object)
+ {
+ if( !object->isAvatar() )
+ {
+ object = NULL;
+ }
+ avatar = (LLVOAvatar*) object;
+ }
+ }
+ if (!avatar) return false;
+
+ // Gods can always freeze
+ if (gAgent.isGodlike()) return true;
+
+ // Estate owners / managers can freeze
+ // Parcel owners can also freeze
+ const LLVector3& pos = avatar->getPositionRegion();
+ const LLVector3d& pos_global = avatar->getPositionGlobal();
+ LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos_global)->getParcel();
+ LLViewerRegion* region = avatar->getRegion();
+ if (!region) return false;
+
+ bool new_value = region->isOwnedSelf(pos);
+ if (!new_value || region->isOwnedGroup(pos))
+ {
+ new_value = LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_ADMIN);
+ }
+ return new_value;
+}
+
void PeopleContextMenu::requestTeleport()
{
// boost::bind cannot recognize overloaded method LLAvatarActions::teleportRequest(),
@@ -272,6 +325,39 @@ void PeopleContextMenu::offerTeleport()
LLAvatarActions::offerTeleport(mUUIDs);
}
+void PeopleContextMenu::eject()
+{
+ if((gAgent.getID() == mUUIDs.front()) || (mUUIDs.size() != 1))
+ {
+ return;
+ }
+
+ const LLUUID& id = mUUIDs.front();
+
+ // Use avatar_id if available, otherwise default to right-click avatar
+ LLVOAvatar* avatar = NULL;
+ if (id.notNull())
+ {
+ LLViewerObject* object = gObjectList.findObject(id);
+ if (object)
+ {
+ if( !object->isAvatar() )
+ {
+ object = NULL;
+ }
+ avatar = (LLVOAvatar*) object;
+ }
+ }
+ if (!avatar) return;
+ LLSD payload;
+ payload["avatar_id"] = avatar->getID();
+ std::string fullname = avatar->getFullname();
+
+ const LLVector3d& pos = avatar->getPositionGlobal();
+ LLParcel* parcel = LLViewerParcelMgr::getInstance()->selectParcelAt(pos)->getParcel();
+ LLAvatarActions::ejectAvatar(id ,LLViewerParcelMgr::getInstance()->isParcelOwnedByAgent(parcel,GP_LAND_MANAGE_BANNED));
+}
+
void PeopleContextMenu::startConference()
{
uuid_vec_t uuids;
@@ -320,6 +406,8 @@ void NearbyPeopleContextMenu::buildContextMenu(class LLMenuGL& menu, U32 flags)
items.push_back(std::string("share"));
items.push_back(std::string("pay"));
items.push_back(std::string("block_unblock"));
+ items.push_back(std::string("freeze"));
+ items.push_back(std::string("eject"));
}
hide_context_entries(menu, items, disabled_items);
diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h
index 9767bab89f..5ed20e0064 100644
--- a/indra/newview/llpanelpeoplemenus.h
+++ b/indra/newview/llpanelpeoplemenus.h
@@ -46,7 +46,9 @@ protected:
private:
bool enableContextMenuItem(const LLSD& userdata);
bool checkContextMenuItem(const LLSD& userdata);
+ bool enableFreezeEject(const LLSD& userdata);
void offerTeleport();
+ void eject();
void startConference();
void requestTeleport();
};
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index e795e7eedb..184238c40c 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -176,6 +176,16 @@ public:
return true;
}
+ if (verb == "unblock")
+ {
+ if (params.size() > 2)
+ {
+ const std::string object_name = params[2].asString();
+ LLMute mute(avatar_id, object_name, LLMute::OBJECT);
+ LLMuteList::getInstance()->remove(mute);
+ }
+ return true;
+ }
return false;
}
};
diff --git a/indra/newview/llpanelsnapshotinventory.cpp b/indra/newview/llpanelsnapshotinventory.cpp
index c55e230b5e..a2d1752c6a 100644
--- a/indra/newview/llpanelsnapshotinventory.cpp
+++ b/indra/newview/llpanelsnapshotinventory.cpp
@@ -34,6 +34,8 @@
#include "llfloatersnapshot.h" // FIXME: replace with a snapshot storage model
#include "llpanelsnapshot.h"
#include "llviewercontrol.h" // gSavedSettings
+#include "llstatusbar.h" // can_afford_transaction()
+#include "llnotificationsutil.h"
/**
* The panel provides UI for saving snapshot as an inventory texture.
@@ -102,6 +104,17 @@ void LLPanelSnapshotInventory::onResolutionCommit(LLUICtrl* ctrl)
void LLPanelSnapshotInventory::onSend()
{
- LLFloaterSnapshot::saveTexture();
- LLFloaterSnapshot::postSave();
+ S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
+ if (can_afford_transaction(expected_upload_cost))
+ {
+ LLFloaterSnapshot::saveTexture();
+ LLFloaterSnapshot::postSave();
+ }
+ else
+ {
+ LLSD args;
+ args["COST"] = llformat("%d", expected_upload_cost);
+ LLNotificationsUtil::add("ErrorPhotoCannotAfford", args);
+ LLFloaterSnapshot::inventorySaveFailed();
+ }
}
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index d86a8b4480..d0353259a5 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -94,6 +94,7 @@ protected:
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
registrar.add("Wearing.Edit", boost::bind(&edit_outfit));
+ registrar.add("Wearing.ShowOriginal", boost::bind(show_item_original, mUUIDs.front()));
registrar.add("Wearing.TakeOff",
boost::bind(&LLAppearanceMgr::removeItemsFromAvatar, LLAppearanceMgr::getInstance(), mUUIDs));
registrar.add("Wearing.Detach",
@@ -144,6 +145,7 @@ protected:
menu->setItemVisible("take_off", allow_take_off);
menu->setItemVisible("detach", allow_detach);
menu->setItemVisible("edit_outfit_separator", allow_take_off || allow_detach);
+ menu->setItemVisible("show_original", mUUIDs.size() == 1);
}
};
diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp
index d95546f11d..9957039f72 100644
--- a/indra/newview/llpresetsmanager.cpp
+++ b/indra/newview/llpresetsmanager.cpp
@@ -38,6 +38,7 @@
#include "llviewercontrol.h"
#include "llfloaterpreference.h"
#include "llfloaterreg.h"
+#include "llfeaturemanager.h"
LLPresetsManager::LLPresetsManager()
{
@@ -60,7 +61,7 @@ void LLPresetsManager::createMissingDefault()
LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL;
// Write current graphic settings as the default
- savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT);
+ savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT, true);
}
else
{
@@ -134,7 +135,7 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam
presets = mPresetNames;
}
-bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name)
+bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name, bool createDefault)
{
if (LLTrans::getString(PRESETS_DEFAULT) == name)
{
@@ -146,11 +147,10 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
if(PRESETS_GRAPHIC == subdirectory)
{
- gSavedSettings.setString("PresetGraphicActive", name);
-
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
- if (instance)
+ if (instance && !createDefault)
{
+ gSavedSettings.setString("PresetGraphicActive", name);
instance->getControlNames(name_list);
LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL;
name_list.push_back("PresetGraphicActive");
@@ -170,23 +170,36 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL;
}
- if (name_list.size() > 1) // if the active preset name is the only thing in the list, don't save the list
+ if (name_list.size() > 1 // if the active preset name is the only thing in the list, don't save the list
+ || (createDefault && name == PRESETS_DEFAULT && subdirectory == PRESETS_GRAPHIC)) // or create a default graphics preset from hw recommended settings
{
// make an empty llsd
LLSD paramsData(LLSD::emptyMap());
- for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
+ if (createDefault)
+ {
+ paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap();
+ if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0)
+ {
+ // use the recommended setting as an initial one (MAINT-6435)
+ gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger());
+ }
+ }
+ else
{
- std::string ctrl_name = *it;
- LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
- std::string comment = ctrl->getComment();
- std::string type = LLControlGroup::typeEnumToString(ctrl->type());
- LLSD value = ctrl->getValue();
-
- paramsData[ctrl_name]["Comment"] = comment;
- paramsData[ctrl_name]["Persist"] = 1;
- paramsData[ctrl_name]["Type"] = type;
- paramsData[ctrl_name]["Value"] = value;
+ for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
+ {
+ std::string ctrl_name = *it;
+ LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
+ std::string comment = ctrl->getComment();
+ std::string type = LLControlGroup::typeEnumToString(ctrl->type());
+ LLSD value = ctrl->getValue();
+
+ paramsData[ctrl_name]["Comment"] = comment;
+ paramsData[ctrl_name]["Persist"] = 1;
+ paramsData[ctrl_name]["Type"] = type;
+ paramsData[ctrl_name]["Value"] = value;
+ }
}
std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml");
@@ -203,10 +216,12 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL;
- gSavedSettings.setString("PresetGraphicActive", name);
-
- // signal interested parties
- triggerChangeSignal();
+ if (!createDefault)
+ {
+ gSavedSettings.setString("PresetGraphicActive", name);
+ // signal interested parties
+ triggerChangeSignal();
+ }
}
else
{
diff --git a/indra/newview/llpresetsmanager.h b/indra/newview/llpresetsmanager.h
index ac4f0c010c..21f9885f27 100644
--- a/indra/newview/llpresetsmanager.h
+++ b/indra/newview/llpresetsmanager.h
@@ -56,7 +56,7 @@ public:
static std::string getPresetsDir(const std::string& subdirectory);
void setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option);
void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option);
- bool savePreset(const std::string& subdirectory, std::string name);
+ bool savePreset(const std::string& subdirectory, std::string name, bool createDefault = false);
void loadPreset(const std::string& subdirectory, std::string name);
bool deletePreset(const std::string& subdirectory, std::string name);
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index 20c43bc432..ba9845ef04 100644
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -94,7 +94,8 @@ BOOL LLPreviewNotecard::postBuild()
if (item)
{
getChild<LLUICtrl>("desc")->setValue(item->getDescription());
- getChildView("Delete")->setEnabled(true);
+ BOOL source_library = mObjectUUID.isNull() && gInventory.isObjectDescendentOf(item->getUUID(), gInventory.getLibraryRootFolderID());
+ getChildView("Delete")->setEnabled(!source_library);
}
getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
@@ -219,6 +220,7 @@ void LLPreviewNotecard::loadAsset()
BOOL is_owner = gAgent.allowOperation(PERM_OWNER, perm, GP_OBJECT_MANIPULATE);
BOOL allow_copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
BOOL allow_modify = canModify(mObjectUUID, item);
+ BOOL source_library = mObjectUUID.isNull() && gInventory.isObjectDescendentOf(mItemUUID, gInventory.getLibraryRootFolderID());
if (allow_copy || gAgent.isGodlike())
{
@@ -288,7 +290,7 @@ void LLPreviewNotecard::loadAsset()
getChildView("lock")->setVisible( TRUE);
}
- if(allow_modify || is_owner)
+ if((allow_modify || is_owner) && !source_library)
{
getChildView("Delete")->setEnabled(TRUE);
}
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 2a2c51be40..645a77e42a 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -38,6 +38,7 @@
#include "llimagetga.h"
#include "llimagepng.h"
#include "llinventory.h"
+#include "llinventorymodel.h"
#include "llnotificationsutil.h"
#include "llresmgr.h"
#include "lltrans.h"
@@ -120,18 +121,22 @@ BOOL LLPreviewTexture::postBuild()
childSetAction("save_tex_btn", LLPreviewTexture::onSaveAsBtn, this);
getChildView("save_tex_btn")->setVisible( true);
getChildView("save_tex_btn")->setEnabled(canSaveAs());
-
- if (!mCopyToInv)
- {
- const LLInventoryItem* item = getItem();
-
- if (item)
- {
- childSetCommitCallback("desc", LLPreview::onText, this);
- getChild<LLUICtrl>("desc")->setValue(item->getDescription());
- getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
- }
- }
+
+ const LLInventoryItem* item = getItem();
+ if (item)
+ {
+ if (!mCopyToInv)
+ {
+ childSetCommitCallback("desc", LLPreview::onText, this);
+ getChild<LLUICtrl>("desc")->setValue(item->getDescription());
+ getChild<LLLineEditor>("desc")->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
+ }
+ BOOL source_library = mObjectUUID.isNull() && gInventory.isObjectDescendentOf(item->getUUID(), gInventory.getLibraryRootFolderID());
+ if (source_library)
+ {
+ getChildView("Discard")->setEnabled(false);
+ }
+ }
// Fill in ratios list with common aspect ratio values
mRatiosList.clear();
@@ -526,6 +531,15 @@ void LLPreviewTexture::loadAsset()
// check that we can copy inworld items into inventory
getChildView("Keep")->setEnabled(mIsCopyable);
}
+ else
+ {
+ // check that we can remove item
+ BOOL source_library = gInventory.isObjectDescendentOf(mItemUUID, gInventory.getLibraryRootFolderID());
+ if (source_library)
+ {
+ getChildView("Discard")->setEnabled(false);
+ }
+ }
}
LLPreview::EAssetStatus LLPreviewTexture::getAssetStatus()
diff --git a/indra/newview/llskinningutil.cpp b/indra/newview/llskinningutil.cpp
index b36bfc870f..d69432ad21 100644
--- a/indra/newview/llskinningutil.cpp
+++ b/indra/newview/llskinningutil.cpp
@@ -72,7 +72,7 @@ U32 get_valid_joint_index(const std::string& name, LLVOAvatar *avatar, std::vect
return j;
}
}
- // BENTO how to handle?
+ // Shouldn't ever get here, because of the name cleanup pass in remapSkinInfoJoints()
LL_ERRS() << "no valid joints in joint_names" << LL_ENDL;
return 0;
}
@@ -118,7 +118,7 @@ U32 LLSkinningUtil::getMaxJointCount()
U32 result = LL_MAX_JOINTS_PER_MESH_OBJECT;
if (!sIncludeEnhancedSkeleton)
{
- // BENTO - currently the remap logic does not guarantee joint count <= 52;
+ // Currently the remap logic does not guarantee joint count <= 52;
// if one of the base ancestors is not rigged in a given mesh, an extended
// joint can still be included.
result = llmin(result,(U32)52);
@@ -160,6 +160,16 @@ void LLSkinningUtil::remapSkinInfoJoints(LLVOAvatar *avatar, LLMeshSkinInfo* ski
U32 max_joints = getMeshJointCount(skin);
// Compute the remap
+ for (U32 j = 0; j < skin->mJointNames.size(); ++j)
+ {
+ // Fix invalid names to "mPelvis". Currently meshes with
+ // invalid names will be blocked on upload, so this is just
+ // needed for handling of any legacy bad data.
+ if (!avatar->getJoint(skin->mJointNames[j]))
+ {
+ skin->mJointNames[j] = "mPelvis";
+ }
+ }
std::vector<U32> j_proxy(skin->mJointNames.size());
for (U32 j = 0; j < skin->mJointNames.size(); ++j)
{
@@ -179,8 +189,6 @@ void LLSkinningUtil::remapSkinInfoJoints(LLVOAvatar *avatar, LLMeshSkinInfo* ski
{
top++;
}
-
-
}
}
// Then use j_proxy to fill in j_remap for the joints that will be discarded
@@ -285,7 +293,7 @@ void LLSkinningUtil::remapSkinWeights(LLVector4a* weights, U32 num_vertices, con
void LLSkinningUtil::checkSkinWeights(LLVector4a* weights, U32 num_vertices, const LLMeshSkinInfo* skin)
{
#ifndef LL_RELEASE_FOR_DOWNLOAD
- const S32 max_joints = skin->mJointNames.size();
+ const S32 max_joints = skin->mJointRemap.size();
if (skin->mJointRemap.size()>0)
{
// Check the weights are consistent with the current remap.
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 79b5130bd3..7631f59e8f 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -690,6 +690,11 @@ bool idle_startup()
gRememberPassword = gSavedSettings.getBOOL("RememberPassword");
show_connect_box = TRUE;
}
+
+ //setup map of datetime strings to codes and slt & local time offset from utc
+ // *TODO: Does this need to be here?
+ LLStringOps::setupDatetimeInfo(false);
+
// Go to the next startup state
LLStartUp::setStartupState( STATE_BROWSER_INIT );
return FALSE;
@@ -1142,9 +1147,6 @@ bool idle_startup()
LLNotificationsUtil::add("ErrorMessage", args, LLSD(), login_alert_done);
}
}
- //setup map of datetime strings to codes and slt & local time offset from utc
- // *TODO: Does this need to be here?
- LLStringOps::setupDatetimeInfo (false);
transition_back_to_login_panel(emsg.str());
show_connect_box = true;
}
@@ -3313,6 +3315,13 @@ bool process_login_success_response()
{
time_t now = time(NULL);
gUTCOffset = (server_utc_time - now);
+
+ // Print server timestamp
+ LLSD substitution;
+ substitution["datetime"] = (S32)server_utc_time;
+ std::string timeStr = "[month, datetime, slt] [day, datetime, slt] [year, datetime, slt] [hour, datetime, slt]:[min, datetime, slt]:[second, datetime, slt]";
+ LLStringUtil::format(timeStr, substitution);
+ LL_INFOS("AppInit") << "Server SLT timestamp: " << timeStr << ". Server-viewer time offset before correction: " << gUTCOffset << "s" << LL_ENDL;
}
}
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index 7020ac0c65..edde7c8076 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -202,6 +202,21 @@ void LLToast::hide()
}
}
+/*virtual*/
+void LLToast::setFocus(BOOL b)
+{
+ if (b && !hasFocus() && mPanel)
+ {
+ LLModalDialog::setFocus(TRUE);
+ // mostly for buttons
+ mPanel->setFocus(TRUE);
+ }
+ else
+ {
+ LLModalDialog::setFocus(b);
+ }
+}
+
void LLToast::onFocusLost()
{
if(mWrapperPanel && !isBackgroundVisible())
diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h
index f02d7c2a1a..cd92189012 100644
--- a/indra/newview/lltoast.h
+++ b/indra/newview/lltoast.h
@@ -150,6 +150,8 @@ public:
//
virtual void hide();
+ /*virtual*/ void setFocus(BOOL b);
+
/*virtual*/ void onFocusLost();
/*virtual*/ void onFocusReceived();
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 98ed2f0fc4..e3a856be5c 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -103,7 +103,7 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
p.image_color_disabled(LLUIColorTable::instance().getColor("ButtonCautionImageColor"));
}
// for the scriptdialog buttons we use fixed button size. This is a limit!
- if (!mIsScriptDialog && font->getWidth(form_element["text"].asString()) > BUTTON_WIDTH)
+ if (!mIsScriptDialog && font->getWidth(form_element["text"].asString()) > (BUTTON_WIDTH-2*HPAD))
{
p.rect.width = 1;
p.auto_resize = true;
@@ -160,7 +160,11 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair
}
LLButton* btn = it->second;
LLRect btn_rect(btn->getRect());
- if (left + btn_rect.getWidth() > max_width)// whether there is still some place for button+h_pad in the mControlPanel
+ if (buttons.size() == 1) // for the one-button forms, center that button
+ {
+ left = (max_width - btn_rect.getWidth()) / 2;
+ }
+ else if (left + btn_rect.getWidth() > max_width)// whether there is still some place for button+h_pad in the mControlPanel
{
// looks like we need to add button to the next row
left = 0;
@@ -321,6 +325,7 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images )
mTextBox->setContentTrusted(is_content_trusted);
mTextBox->setValue(mNotification->getMessage());
mTextBox->setIsFriendCallback(LLAvatarActions::isFriend);
+ mTextBox->setIsObjectBlockedCallback(boost::bind(&LLMuteList::isMuted, LLMuteList::getInstance(), _1, _2, 0));
// add buttons for a script notification
if (mIsTip)
diff --git a/indra/newview/lltoastscriptquestion.cpp b/indra/newview/lltoastscriptquestion.cpp
index 91ba8c0247..7a3a1d8fd7 100644
--- a/indra/newview/lltoastscriptquestion.cpp
+++ b/indra/newview/lltoastscriptquestion.cpp
@@ -54,6 +54,19 @@ BOOL LLToastScriptQuestion::postBuild()
return TRUE;
}
+
+// virtual
+void LLToastScriptQuestion::setFocus(BOOL b)
+{
+ LLToastPanel::setFocus(b);
+ // toast can fade out and disappear with focus ON, so reset to default anyway
+ LLButton* dfbutton = getDefaultButton();
+ if (dfbutton && dfbutton->getVisible() && dfbutton->getEnabled())
+ {
+ dfbutton->setFocus(b);
+ }
+}
+
void LLToastScriptQuestion::snapToMessageHeight()
{
LLTextBox* mMessage = getChild<LLTextBox>("top_info_message");
@@ -118,6 +131,12 @@ void LLToastScriptQuestion::createButtons()
button->setRect(rect);
buttons_width += rect.getWidth() + LEFT_PAD;
+
+ if (form_element.has("default") && form_element["default"].asBoolean())
+ {
+ button->setFocus(TRUE);
+ setDefaultBtn(button);
+ }
}
}
}
diff --git a/indra/newview/lltoastscriptquestion.h b/indra/newview/lltoastscriptquestion.h
index 3a557f60f6..a756f88415 100644
--- a/indra/newview/lltoastscriptquestion.h
+++ b/indra/newview/lltoastscriptquestion.h
@@ -39,6 +39,8 @@ public:
virtual BOOL postBuild();
virtual ~LLToastScriptQuestion(){};
+ /*virtual*/ void setFocus(BOOL b);
+
private:
void snapToMessageHeight();
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 98586e3b3d..27c4c90857 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -223,66 +223,6 @@ void LLCategoryDropObserver::done()
}
delete this;
}
-/* Doesn't seem to be used anymore.
-class LLCategoryDropDescendentsObserver : public LLInventoryFetchDescendentsObserver
-{
-public:
- LLCategoryDropDescendentsObserver(
- const LLUUID& obj_id, LLToolDragAndDrop::ESource src) :
- mObjectID(obj_id),
- mSource(src)
- {}
- ~LLCategoryDropDescendentsObserver() {}
- virtual void done();
-
-protected:
- LLUUID mObjectID;
- LLToolDragAndDrop::ESource mSource;
-};
-
-void LLCategoryDropDescendentsObserver::done()
-{
-
- gInventory.removeObserver(this);
- uuid_vec_t::iterator it = mComplete.begin();
- uuid_vec_t::iterator end = mComplete.end();
- LLViewerInventoryCategory::cat_array_t cats;
- LLViewerInventoryItem::item_array_t items;
- for(; it != end; ++it)
- {
- gInventory.collectDescendents(
- (*it),
- cats,
- items,
- LLInventoryModel::EXCLUDE_TRASH);
- }
-
- S32 count = items.size();
- if (count)
- {
- std::set<LLUUID> unique_ids;
- for(S32 i = 0; i < count; ++i)
- {
- unique_ids.insert(items.get(i)->getUUID());
- }
- uuid_vec_t ids;
- std::back_insert_iterator<uuid_vec_t> copier(ids);
- std::copy(unique_ids.begin(), unique_ids.end(), copier);
- LLCategoryDropObserver* dropper;
- dropper = new LLCategoryDropObserver(ids, mObjectID, mSource);
- dropper->startFetch();
- if (dropper->isDone())
- {
- dropper->done();
- }
- else
- {
- gInventory.addObserver(dropper);
- }
- }
- delete this;
-}
-*/
S32 LLToolDragAndDrop::sOperationId = 0;
diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp
index 2f8e464b71..b0e3b5bf89 100644
--- a/indra/newview/lltoolmgr.cpp
+++ b/indra/newview/lltoolmgr.cpp
@@ -83,6 +83,7 @@ LLToolMgr::LLToolMgr()
// Not a panel, register these callbacks globally.
LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.Active", boost::bind(&LLToolMgr::inEdit, this));
LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.Enabled", boost::bind(&LLToolMgr::canEdit, this));
+ LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Build.EnabledOrActive", boost::bind(&LLToolMgr::buildEnabledOrActive, this));
LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Build.Toggle", boost::bind(&LLToolMgr::toggleBuildMode, this, _2));
LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Marketplace.Enabled", boost::bind(&LLToolMgr::canAccessMarketplace, this));
LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Marketplace.Toggle", boost::bind(&LLToolMgr::toggleMarketplace, this, _2));
@@ -264,17 +265,21 @@ bool LLToolMgr::canEdit()
return LLViewerParcelMgr::getInstance()->allowAgentBuild();
}
+bool LLToolMgr::buildEnabledOrActive()
+{
+ return inEdit() || canEdit();
+}
+
void LLToolMgr::toggleBuildMode(const LLSD& sdname)
{
const std::string& param = sdname.asString();
+ LLFloaterReg::toggleInstanceOrBringToFront("build");
if (param == "build" && !canEdit())
{
return;
}
- LLFloaterReg::toggleInstanceOrBringToFront("build");
-
bool build_visible = LLFloaterReg::instanceVisible("build");
if (build_visible)
{
diff --git a/indra/newview/lltoolmgr.h b/indra/newview/lltoolmgr.h
index a3c1045aac..e5b45750d9 100644
--- a/indra/newview/lltoolmgr.h
+++ b/indra/newview/lltoolmgr.h
@@ -54,6 +54,7 @@ public:
bool inEdit();
bool canEdit();
+ bool buildEnabledOrActive();
bool canAccessMarketplace();
void toggleBuildMode(const LLSD& sdname);
void toggleMarketplace(const LLSD& sdname);
diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp
index f611d0503f..b015cde45d 100644
--- a/indra/newview/lltracker.cpp
+++ b/indra/newview/lltracker.cpp
@@ -183,7 +183,7 @@ void LLTracker::render3D()
F32 dist = gFloaterWorldMap->getDistanceToDestination(pos_global, 0.5f);
if (dist < DESTINATION_REACHED_RADIUS)
{
- instance()->stopTrackingLocation();
+ instance()->stopTrackingLocation(FALSE,TRUE);
}
else
{
@@ -655,13 +655,13 @@ void LLTracker::stopTrackingLandmark(BOOL clear_ui)
}
-void LLTracker::stopTrackingLocation(BOOL clear_ui)
+void LLTracker::stopTrackingLocation(BOOL clear_ui, BOOL dest_reached)
{
purgeBeaconText();
mTrackedLocationName.assign("");
mIsTrackingLocation = FALSE;
mTrackedPositionGlobal.zeroVec();
- gFloaterWorldMap->clearLocationSelection(clear_ui);
+ gFloaterWorldMap->clearLocationSelection(clear_ui, dest_reached);
mTrackingStatus = TRACKING_NOTHING;
mTrackingLocationType = LOCATION_NOTHING;
}
diff --git a/indra/newview/lltracker.h b/indra/newview/lltracker.h
index 218f3430a6..a1c5052c1b 100644
--- a/indra/newview/lltracker.h
+++ b/indra/newview/lltracker.h
@@ -116,7 +116,7 @@ protected:
void stopTrackingAll(BOOL clear_ui = FALSE);
void stopTrackingAvatar(BOOL clear_ui = FALSE);
- void stopTrackingLocation(BOOL clear_ui = FALSE);
+ void stopTrackingLocation(BOOL clear_ui = FALSE, BOOL dest_reached = FALSE);
void stopTrackingLandmark(BOOL clear_ui = FALSE);
void drawMarker(const LLVector3d& pos_global, const LLColor4& color);
diff --git a/indra/newview/llviewerassetupload.cpp b/indra/newview/llviewerassetupload.cpp
index f0dafec240..497ff4d2bf 100644
--- a/indra/newview/llviewerassetupload.cpp
+++ b/indra/newview/llviewerassetupload.cpp
@@ -837,5 +837,12 @@ void LLViewerAssetUpload::HandleUploadError(LLCore::HttpStatus status, LLSD &res
}
}
+ // Let the Snapshot floater know we have failed uploading.
+ LLFloater* floater_snapshot = LLFloaterReg::findInstance("snapshot");
+ if (uploadInfo->getAssetType() == LLAssetType::AT_TEXTURE && floater_snapshot)
+ {
+ floater_snapshot->notify(LLSD().with("set-finished", LLSD().with("ok", false).with("msg", "inventory")));
+ }
+
}
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 0ee873d7a1..d0813544f8 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -384,16 +384,26 @@ void LLViewerInventoryItem::updateServer(BOOL is_new) const
LLInventoryModel::LLCategoryUpdate up(mParentUUID, is_new ? 1 : 0);
gInventory.accountForUpdate(up);
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_UpdateInventoryItem);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->addUUIDFast(_PREHASH_TransactionID, mTransactionID);
- msg->nextBlockFast(_PREHASH_InventoryData);
- msg->addU32Fast(_PREHASH_CallbackID, 0);
- packMessage(msg);
- gAgent.sendReliableMessage();
+ LLSD updates = asLLSD();
+ // Replace asset_id and/or shadow_id with transaction_id (hash_id)
+ if (updates.has("asset_id"))
+ {
+ updates.erase("asset_id");
+ if(getTransactionID().notNull())
+ {
+ updates["hash_id"] = getTransactionID();
+ }
+ }
+ if (updates.has("shadow_id"))
+ {
+ updates.erase("shadow_id");
+ if(getTransactionID().notNull())
+ {
+ updates["hash_id"] = getTransactionID();
+ }
+ }
+ AISAPI::completion_t cr = boost::bind(&doInventoryCb, (LLPointer<LLInventoryCallback>)NULL, _1);
+ AISAPI::UpdateItem(getUUID(), updates, cr);
}
void LLViewerInventoryItem::fetchFromServer(void) const
@@ -636,17 +646,9 @@ void LLViewerInventoryCategory::updateServer(BOOL is_new) const
return;
}
- LLInventoryModel::LLCategoryUpdate up(mParentUUID, is_new ? 1 : 0);
- gInventory.accountForUpdate(up);
-
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_UpdateInventoryFolder);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->nextBlockFast(_PREHASH_FolderData);
- packMessage(msg);
- gAgent.sendReliableMessage();
+ LLSD new_llsd = asLLSD();
+ AISAPI::completion_t cr = boost::bind(&doInventoryCb, (LLPointer<LLInventoryCallback>)NULL, _1);
+ AISAPI::UpdateCategory(getUUID(), new_llsd, cr);
}
S32 LLViewerInventoryCategory::getVersion() const
@@ -669,18 +671,6 @@ bool LLViewerInventoryCategory::fetch()
mDescendentsRequested.reset();
mDescendentsRequested.setTimerExpirySec(FETCH_TIMER_EXPIRY);
- // bitfield
- // 1 = by date
- // 2 = folders by date
- // Need to mask off anything but the first bit.
- // This comes from LLInventoryFilter from llfolderview.h
- U32 sort_order = gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER) & 0x1;
-
- // *NOTE: For bug EXT-2879, originally commented out
- // gAgent.getRegion()->getCapability in order to use the old
- // message-based system. This has been uncommented now that
- // AIS folks are aware of the issue and have a fix in process.
- // see ticket for details.
std::string url;
if (gAgent.getRegion())
@@ -695,24 +685,6 @@ bool LLViewerInventoryCategory::fetch()
{
LLInventoryModelBackgroundFetch::instance().start(mUUID, false);
}
- else
- { //Deprecated, but if we don't have a capability, use the old system.
- LL_INFOS(LOG_INV) << "FetchInventoryDescendents2 capability not found. Using deprecated UDP message." << LL_ENDL;
-
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessage("FetchInventoryDescendents");
- msg->nextBlock("AgentData");
- msg->addUUID("AgentID", gAgent.getID());
- msg->addUUID("SessionID", gAgent.getSessionID());
- msg->nextBlock("InventoryData");
- msg->addUUID("FolderID", mUUID);
- msg->addUUID("OwnerID", mOwnerID);
-
- msg->addS32("SortOrder", sort_order);
- msg->addBOOL("FetchFolders", FALSE);
- msg->addBOOL("FetchItems", TRUE);
- gAgent.sendReliableMessage();
- }
return true;
}
return false;
@@ -905,17 +877,16 @@ void LLViewerInventoryCategory::changeType(LLFolderType::EType new_folder_type)
const LLUUID &parent_id = getParentUUID();
const std::string &name = getName();
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_UpdateInventoryFolder);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->nextBlockFast(_PREHASH_FolderData);
- msg->addUUIDFast(_PREHASH_FolderID, folder_id);
- msg->addUUIDFast(_PREHASH_ParentID, parent_id);
- msg->addS8Fast(_PREHASH_Type, new_folder_type);
- msg->addStringFast(_PREHASH_Name, name);
- gAgent.sendReliableMessage();
+ LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(folder_id,
+ parent_id,
+ new_folder_type,
+ name,
+ gAgent.getID());
+
+
+ LLSD new_llsd = new_cat->asLLSD();
+ AISAPI::completion_t cr = boost::bind(&doInventoryCb, (LLPointer<LLInventoryCallback>) NULL, _1);
+ AISAPI::UpdateCategory(folder_id, new_llsd, cr);
setPreferredType(new_folder_type);
gInventory.addChangedMask(LLInventoryObserver::LABEL, folder_id);
@@ -1289,40 +1260,10 @@ void link_inventory_array(const LLUUID& category,
<< " UUID:" << category << " ] " << LL_ENDL;
#endif
}
-
- if (AISAPI::isAvailable())
- {
- LLSD new_inventory = LLSD::emptyMap();
- new_inventory["links"] = links;
- AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
- AISAPI::CreateInventory(category, new_inventory, cr);
- }
- else
- {
- LLMessageSystem* msg = gMessageSystem;
- for (LLSD::array_iterator iter = links.beginArray(); iter != links.endArray(); ++iter )
- {
- msg->newMessageFast(_PREHASH_LinkInventoryItem);
- msg->nextBlock(_PREHASH_AgentData);
- {
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- }
- msg->nextBlock(_PREHASH_InventoryBlock);
- {
- LLSD link = (*iter);
- msg->addU32Fast(_PREHASH_CallbackID, gInventoryCallbacks.registerCB(cb));
- msg->addUUIDFast(_PREHASH_FolderID, category);
- msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null);
- msg->addUUIDFast(_PREHASH_OldItemID, link["linked_id"].asUUID());
- msg->addS8Fast(_PREHASH_Type, link["type"].asInteger());
- msg->addS8Fast(_PREHASH_InvType, link["inv_type"].asInteger());
- msg->addStringFast(_PREHASH_Name, link["name"].asString());
- msg->addStringFast(_PREHASH_Description, link["desc"].asString());
- }
- gAgent.sendReliableMessage();
- }
- }
+ LLSD new_inventory = LLSD::emptyMap();
+ new_inventory["links"] = links;
+ AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+ AISAPI::CreateInventory(category, new_inventory, cr);
}
void move_inventory_item(
@@ -1354,49 +1295,21 @@ void update_inventory_item(
LLPointer<LLInventoryCallback> cb)
{
const LLUUID& item_id = update_item->getUUID();
- if (AISAPI::isAvailable())
- {
- LLSD updates = update_item->asLLSD();
- // Replace asset_id and/or shadow_id with transaction_id (hash_id)
- if (updates.has("asset_id"))
- {
- updates.erase("asset_id");
- updates["hash_id"] = update_item->getTransactionID();
- }
- if (updates.has("shadow_id"))
- {
- updates.erase("shadow_id");
- updates["hash_id"] = update_item->getTransactionID();
- }
- AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
- AISAPI::UpdateItem(item_id, updates, cr);
- }
- else
- {
- LLPointer<LLViewerInventoryItem> obj = gInventory.getItem(item_id);
- LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << (update_item ? update_item->getName() : "(NOT FOUND)") << LL_ENDL;
- if(obj)
- {
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_UpdateInventoryItem);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->addUUIDFast(_PREHASH_TransactionID, update_item->getTransactionID());
- msg->nextBlockFast(_PREHASH_InventoryData);
- msg->addU32Fast(_PREHASH_CallbackID, 0);
- update_item->packMessage(msg);
- gAgent.sendReliableMessage();
-
- LLInventoryModel::LLCategoryUpdate up(update_item->getParentUUID(), 0);
- gInventory.accountForUpdate(up);
- gInventory.updateItem(update_item);
- if (cb)
- {
- cb->fire(item_id);
- }
- }
- }
+
+ LLSD updates = update_item->asLLSD();
+ // Replace asset_id and/or shadow_id with transaction_id (hash_id)
+ if (updates.has("asset_id"))
+ {
+ updates.erase("asset_id");
+ updates["hash_id"] = update_item->getTransactionID();
+ }
+ if (updates.has("shadow_id"))
+ {
+ updates.erase("shadow_id");
+ updates["hash_id"] = update_item->getTransactionID();
+ }
+ AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+ AISAPI::UpdateItem(item_id, updates, cr);
}
// Note this only supports updating an existing item. Goes through AISv3
@@ -1407,41 +1320,8 @@ void update_inventory_item(
const LLSD& updates,
LLPointer<LLInventoryCallback> cb)
{
- if (AISAPI::isAvailable())
- {
- AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
- AISAPI::UpdateItem(item_id, updates, cr);
- }
- else
- {
- LLPointer<LLViewerInventoryItem> obj = gInventory.getItem(item_id);
- LL_DEBUGS(LOG_INV) << "item_id: [" << item_id << "] name " << (obj ? obj->getName() : "(NOT FOUND)") << LL_ENDL;
- if(obj)
- {
- LLPointer<LLViewerInventoryItem> new_item(new LLViewerInventoryItem);
- new_item->copyViewerItem(obj);
- new_item->fromLLSD(updates,false);
-
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_UpdateInventoryItem);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->addUUIDFast(_PREHASH_TransactionID, new_item->getTransactionID());
- msg->nextBlockFast(_PREHASH_InventoryData);
- msg->addU32Fast(_PREHASH_CallbackID, 0);
- new_item->packMessage(msg);
- gAgent.sendReliableMessage();
-
- LLInventoryModel::LLCategoryUpdate up(new_item->getParentUUID(), 0);
- gInventory.accountForUpdate(up);
- gInventory.updateItem(new_item);
- if (cb)
- {
- cb->fire(item_id);
- }
- }
- }
+ AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+ AISAPI::UpdateItem(item_id, updates, cr);
}
void update_inventory_category(
@@ -1461,32 +1341,9 @@ void update_inventory_category(
LLPointer<LLViewerInventoryCategory> new_cat = new LLViewerInventoryCategory(obj);
new_cat->fromLLSD(updates);
- // FIXME - restore this once the back-end work has been done.
- if (AISAPI::isAvailable())
- {
- LLSD new_llsd = new_cat->asLLSD();
- AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
- AISAPI::UpdateCategory(cat_id, new_llsd, cr);
- }
- else // no cap
- {
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_UpdateInventoryFolder);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->nextBlockFast(_PREHASH_FolderData);
- new_cat->packMessage(msg);
- gAgent.sendReliableMessage();
-
- LLInventoryModel::LLCategoryUpdate up(new_cat->getParentUUID(), 0);
- gInventory.accountForUpdate(up);
- gInventory.updateCategory(new_cat);
- if (cb)
- {
- cb->fire(cat_id);
- }
- }
+ LLSD new_llsd = new_cat->asLLSD();
+ AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+ AISAPI::UpdateCategory(cat_id, new_llsd, cr);
}
}
@@ -1604,41 +1461,8 @@ void remove_inventory_category(
LLNotificationsUtil::add("CannotRemoveProtectedCategories");
return;
}
- if (AISAPI::isAvailable())
- {
- AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
- AISAPI::RemoveCategory(cat_id, cr);
- }
- else // no cap
- {
- // RemoveInventoryFolder does not remove children, so must
- // clear descendents first.
- LLInventoryModel::EHasChildren children = gInventory.categoryHasChildren(cat_id);
- if(children != LLInventoryModel::CHILDREN_NO)
- {
- LL_DEBUGS(LOG_INV) << "Will purge descendents first before deleting category " << cat_id << LL_ENDL;
- LLPointer<LLInventoryCallback> wrap_cb = new LLRemoveCategoryOnDestroy(cat_id, cb);
- purge_descendents_of(cat_id, wrap_cb);
- return;
- }
-
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_RemoveInventoryFolder);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->nextBlockFast(_PREHASH_FolderData);
- msg->addUUIDFast(_PREHASH_FolderID, cat_id);
- gAgent.sendReliableMessage();
-
- // Update inventory and call callback immediately since
- // message-based system has no callback mechanism (!)
- gInventory.onObjectDeletedFromServer(cat_id);
- if (cb)
- {
- cb->fire(cat_id);
- }
- }
+ AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+ AISAPI::RemoveCategory(cat_id, cr);
}
else
{
@@ -1857,29 +1681,11 @@ void slam_inventory_folder(const LLUUID& folder_id,
const LLSD& contents,
LLPointer<LLInventoryCallback> cb)
{
- if (AISAPI::isAvailable())
- {
- LL_DEBUGS(LOG_INV) << "using AISv3 to slam folder, id " << folder_id
- << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << "using AISv3 to slam folder, id " << folder_id
+ << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL;
- AISAPI::completion_t cr = (cb) ? boost::bind(&doInventoryCb, cb, _1) : AISAPI::completion_t();
- AISAPI::SlamFolder(folder_id, contents, cr);
- }
- else // no cap
- {
- LL_DEBUGS(LOG_INV) << "using item-by-item calls to slam folder, id " << folder_id
- << " new contents: " << ll_pretty_print_sd(contents) << LL_ENDL;
- for (LLSD::array_const_iterator it = contents.beginArray();
- it != contents.endArray();
- ++it)
- {
- const LLSD& item_contents = *it;
- LLViewerInventoryItem *item = new LLViewerInventoryItem;
- item->fromLLSD(item_contents);
- link_inventory_object(folder_id, item, cb);
- }
- remove_folder_contents(folder_id,false,cb);
- }
+ AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
+ AISAPI::SlamFolder(folder_id, contents, cr);
}
void remove_folder_contents(const LLUUID& category, bool keep_outfit_links,
diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h
index 4e91e4110a..5194679a0c 100644
--- a/indra/newview/llviewerinventory.h
+++ b/indra/newview/llviewerinventory.h
@@ -38,6 +38,7 @@ class LLInventoryPanel;
class LLFolderView;
class LLFolderBridge;
class LLViewerInventoryCategory;
+class LLInventoryCallback;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLViewerInventoryItem
@@ -387,9 +388,9 @@ void update_inventory_item(
LLPointer<LLInventoryCallback> cb);
void update_inventory_category(
- const LLUUID& cat_id,
- const LLSD& updates,
- LLPointer<LLInventoryCallback> cb);
+ const LLUUID& cat_id,
+ const LLSD& updates,
+ LLPointer<LLInventoryCallback> cb);
void remove_inventory_items(
LLInventoryObject::object_list_t& items,
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 0b0d12c5b8..670ce7df56 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -6998,20 +6998,25 @@ class LLAvatarCall : public view_listener_t
namespace
{
- struct QueueObjects : public LLSelectedObjectFunctor
+ struct QueueObjects : public LLSelectedNodeFunctor
{
BOOL scripted;
BOOL modifiable;
LLFloaterScriptQueue* mQueue;
QueueObjects(LLFloaterScriptQueue* q) : mQueue(q), scripted(FALSE), modifiable(FALSE) {}
- virtual bool apply(LLViewerObject* obj)
+ virtual bool apply(LLSelectNode* node)
{
+ LLViewerObject* obj = node->getObject();
+ if (!obj)
+ {
+ return true;
+ }
scripted = obj->flagScripted();
modifiable = obj->permModify();
if( scripted && modifiable )
{
- mQueue->addObject(obj->getID());
+ mQueue->addObject(obj->getID(), node->mName);
return false;
}
else
@@ -7027,7 +7032,7 @@ void queue_actions(LLFloaterScriptQueue* q, const std::string& msg)
QueueObjects func(q);
LLSelectMgr *mgr = LLSelectMgr::getInstance();
LLObjectSelectionHandle selectHandle = mgr->getSelection();
- bool fail = selectHandle->applyToObjects(&func);
+ bool fail = selectHandle->applyToNodes(&func);
if(fail)
{
if ( !func.scripted )
diff --git a/indra/newview/llviewerpartsource.cpp b/indra/newview/llviewerpartsource.cpp
index 7efa821bbf..814060f4f2 100644
--- a/indra/newview/llviewerpartsource.cpp
+++ b/indra/newview/llviewerpartsource.cpp
@@ -441,10 +441,20 @@ LLPointer<LLViewerPartSourceScript> LLViewerPartSourceScript::unpackPSS(LLViewer
return NULL;
}
+ F32 prev_max_age = pssp->mPartSysData.mMaxAge;
+ F32 prev_start_age = pssp->mPartSysData.mStartAge;
if (!pssp->mPartSysData.unpackBlock(block_num))
{
return NULL;
}
+ else if (pssp->mPartSysData.mMaxAge
+ && (prev_max_age != pssp->mPartSysData.mMaxAge || prev_start_age != pssp->mPartSysData.mStartAge))
+ {
+ // reusing existing pss, so reset time to allow particles to start again
+ pssp->mLastUpdateTime = 0.f;
+ pssp->mLastPartTime = 0.f;
+ }
+
if (pssp->mPartSysData.mTargetUUID.notNull())
{
LLViewerObject *target_objp = gObjectList.findObject(pssp->mPartSysData.mTargetUUID);
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index cac2ed8585..899ab3a371 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -264,17 +264,18 @@ void LLViewerRegionImpl::requestBaseCapabilitiesCoro(U64 regionHandle)
}
S32 id = ++mHttpResponderID;
- ++mSeedCapAttempts;
LLSD capabilityNames = LLSD::emptyArray();
buildCapabilityNames(capabilityNames);
LL_INFOS("AppInit", "Capabilities") << "Requesting seed from " << url
- << " (attempt #" << mSeedCapAttempts << ")" << LL_ENDL;
+ << " (attempt #" << mSeedCapAttempts + 1 << ")" << LL_ENDL;
regionp = NULL;
result = httpAdapter->postAndSuspend(httpRequest, url, capabilityNames);
+ ++mSeedCapAttempts;
+
regionp = LLWorld::getInstance()->getRegionFromHandle(regionHandle);
if (!regionp) //region was removed
{
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index db4b555eca..ed719ae418 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -1875,7 +1875,8 @@ bool LLViewerFetchedTexture::updateFetch()
static LLCachedControl<bool> textures_decode_disabled(gSavedSettings,"TextureDecodeDisabled", false);
static LLCachedControl<F32> sCameraMotionThreshold(gSavedSettings,"TextureCameraMotionThreshold", 0.2);
static LLCachedControl<S32> sCameraMotionBoost(gSavedSettings,"TextureCameraMotionBoost", 3);
- if(textures_decode_disabled)
+ if(textures_decode_disabled ||
+ (gUseWireframe && mBoostLevel < LLGLTexture::BOOST_AVATAR_BAKED_SELF)) // don't fetch the surface textures in wireframe mode
{
return false;
}
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 08f6143861..d7080051da 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -171,13 +171,27 @@ void LLViewerTextureList::doPreloadImages()
mImagePreloads.insert(image);
}
image = LLViewerTextureManager::getFetchedTextureFromFile("transparent.j2c", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
- 0,0,LLUUID("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"));
+ 0, 0, IMG_TRANSPARENT);
if (image)
{
image->setAddressMode(LLTexUnit::TAM_WRAP);
mImagePreloads.insert(image);
}
-
+ image = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient.tga", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
+ GL_ALPHA8, GL_ALPHA, IMG_ALPHA_GRAD);
+ if (image)
+ {
+ image->setAddressMode(LLTexUnit::TAM_CLAMP);
+ mImagePreloads.insert(image);
+ }
+ image = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
+ GL_ALPHA8, GL_ALPHA, IMG_ALPHA_GRAD_2D);
+ if (image)
+ {
+ image->setAddressMode(LLTexUnit::TAM_CLAMP);
+ mImagePreloads.insert(image);
+ }
+
LLPointer<LLImageRaw> img_blak_square_tex(new LLImageRaw(2, 2, 3));
memset(img_blak_square_tex->getData(), 0, img_blak_square_tex->getDataSize());
LLPointer<LLViewerFetchedTexture> img_blak_square(new LLViewerFetchedTexture(img_blak_square_tex, FTT_DEFAULT, FALSE));
@@ -188,7 +202,7 @@ void LLViewerTextureList::doPreloadImages()
static std::string get_texture_list_name()
{
- return gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "texture_list_" + gSavedSettings.getString("LoginLocation") + ".xml");
+ return gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "texture_list_" + gSavedSettings.getString("LoginLocation") + "." + gDirUtilp->getUserName() + ".xml");
}
void LLViewerTextureList::doPrefetchImages()
@@ -293,7 +307,7 @@ void LLViewerTextureList::shutdown()
break;
}
- if (count > 0 && !gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "").empty())
+ if (count > 0 && !gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "").empty())
{
std::string filename = get_texture_list_name();
llofstream file;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 94d54a0660..3354678af9 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -1428,12 +1428,15 @@ void LLVOAvatar::renderBones()
avatar_joint_list_t::iterator iter = mSkeleton.begin();
avatar_joint_list_t::iterator end = mSkeleton.end();
- static LLVector3 BASE_COLOR_OCCLUDED(1.0f, 0.0f, 0.0f);
- static LLVector3 BASE_COLOR_VISIBLE(0.5f, 0.5f, 0.5f);
- static LLVector3 EXTENDED_COLOR_OCCLUDED(0.0f, 1.0f, 0.0f);
- static LLVector3 EXTENDED_COLOR_VISIBLE(0.5f, 0.5f, 0.5f);
+ // For bones with position overrides defined
+ static LLVector3 OVERRIDE_COLOR_OCCLUDED(1.0f, 0.0f, 0.0f);
+ static LLVector3 OVERRIDE_COLOR_VISIBLE(0.5f, 0.5f, 0.5f);
+ // For bones which are rigged to by at least one attachment
static LLVector3 RIGGED_COLOR_OCCLUDED(0.0f, 1.0f, 1.0f);
static LLVector3 RIGGED_COLOR_VISIBLE(0.5f, 0.5f, 0.5f);
+ // For bones not otherwise colored
+ static LLVector3 OTHER_COLOR_OCCLUDED(0.0f, 1.0f, 0.0f);
+ static LLVector3 OTHER_COLOR_VISIBLE(0.5f, 0.5f, 0.5f);
static F32 SPHERE_SCALEF = 0.001f;
@@ -1446,25 +1449,27 @@ void LLVOAvatar::renderBones()
}
jointp->updateWorldMatrix();
- LLJoint::SupportCategory sc = jointp->getSupport();
+
LLVector3 occ_color, visible_color;
- if (jointIsRiggedTo(jointp->getName()))
+ LLVector3 pos;
+ LLUUID mesh_id;
+ if (jointp->hasAttachmentPosOverride(pos,mesh_id))
{
- occ_color = RIGGED_COLOR_OCCLUDED;
- visible_color = RIGGED_COLOR_VISIBLE;
+ occ_color = OVERRIDE_COLOR_OCCLUDED;
+ visible_color = OVERRIDE_COLOR_VISIBLE;
}
else
{
- if (sc == LLJoint::SUPPORT_BASE)
+ if (jointIsRiggedTo(jointp->getName()))
{
- occ_color = BASE_COLOR_OCCLUDED;
- visible_color = BASE_COLOR_VISIBLE;
+ occ_color = RIGGED_COLOR_OCCLUDED;
+ visible_color = RIGGED_COLOR_VISIBLE;
}
else
{
- occ_color = EXTENDED_COLOR_OCCLUDED;
- visible_color = EXTENDED_COLOR_VISIBLE;
+ occ_color = OTHER_COLOR_OCCLUDED;
+ visible_color = OTHER_COLOR_VISIBLE;
}
}
LLVector3 begin_pos(0,0,0);
@@ -1907,16 +1912,6 @@ void LLVOAvatar::resetSkeleton()
// Restore attachment pos overrides
rebuildAttachmentOverrides();
- // Restore mPelvis state
- //getJoint("mPelvis")->setRotation(pelvis_rot);
- //getJoint("mPelvis")->setPosition(pelvis_pos);
-
- // Restart animations BENTO - not needed? Removing this fixes a
- // problem seen if avatar is sitting and animated relative to sit
- // point.
-
- //resetAnimations();
-
LL_DEBUGS("Avatar") << avString() << " reset ends" << LL_ENDL;
}
@@ -3356,23 +3351,31 @@ void LLVOAvatar::updateDebugText()
{
debug_line += llformat(" - cof rcv:%d", last_received_cof_version);
}
- debug_line += llformat(" bsz-z: %f avofs-z: %f", mBodySize[2], mAvatarOffset[2]);
+ debug_line += llformat(" bsz-z: %.3f", mBodySize[2]);
+ if (mAvatarOffset[2] != 0.0f)
+ {
+ debug_line += llformat("avofs-z: %.3f", mAvatarOffset[2]);
+ }
bool hover_enabled = getRegion() && getRegion()->avatarHoverHeightEnabled();
debug_line += hover_enabled ? " H" : " h";
const LLVector3& hover_offset = getHoverOffset();
if (hover_offset[2] != 0.0)
{
- debug_line += llformat(" hov_z: %f", hover_offset[2]);
+ debug_line += llformat(" hov_z: %.3f", hover_offset[2]);
debug_line += llformat(" %s", (mIsSitting ? "S" : "T"));
debug_line += llformat("%s", (isMotionActive(ANIM_AGENT_SIT_GROUND_CONSTRAINED) ? "G" : "-"));
}
- F32 elapsed = mLastAppearanceMessageTimer.getElapsedTimeF32();
- static const char *elapsed_chars = "Xx*...";
- U32 bucket = U32(elapsed*2);
- if (bucket < strlen(elapsed_chars))
- {
- debug_line += llformat(" %c", elapsed_chars[bucket]);
- }
+ LLVector3 ankle_right_pos_agent = mFootRightp->getWorldPosition();
+ LLVector3 normal;
+ LLVector3 ankle_right_ground_agent = ankle_right_pos_agent;
+ resolveHeightAgent(ankle_right_pos_agent, ankle_right_ground_agent, normal);
+ F32 rightElev = llmax(-0.2f, ankle_right_pos_agent.mV[VZ] - ankle_right_ground_agent.mV[VZ]);
+ debug_line += llformat(" relev %.3f", rightElev);
+
+ LLVector3 root_pos = mRoot->getPosition();
+ LLVector3 pelvis_pos = mPelvisp->getPosition();
+ debug_line += llformat(" rp %.3f pp %.3f", root_pos[2], pelvis_pos[2]);
+
addDebugText(debug_line);
}
if (gSavedSettings.getBOOL("DebugAvatarCompositeBaked"))
@@ -3598,6 +3601,13 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
}
mInAir = in_air;
+ // SL-402: with the ability to animate the position of joints
+ // that affect the body size calculation, computed body size
+ // can get stale much more easily. Simplest fix is to update
+ // it frequently.
+ // SL-427: this appears to be too frequent, moving to only do on animation state change.
+ //computeBodySize();
+
// correct for the fact that the pelvis is not necessarily the center
// of the agent's physical representation
root_pos.mdV[VZ] -= (0.5f * mBodySize.mV[VZ]) - mPelvisToFoot;
@@ -3923,10 +3933,78 @@ void LLVOAvatar::updateHeadOffset()
mHeadOffset = lerp(midEyePt, mHeadOffset, u);
}
}
+
+void LLVOAvatar::debugBodySize() const
+{
+ LLVector3 pelvis_scale = mPelvisp->getScale();
+
+ // some of the joints have not been cached
+ LLVector3 skull = mSkullp->getPosition();
+ LL_DEBUGS("Avatar") << "skull pos " << skull << LL_ENDL;
+ //LLVector3 skull_scale = mSkullp->getScale();
+
+ LLVector3 neck = mNeckp->getPosition();
+ LLVector3 neck_scale = mNeckp->getScale();
+ LL_DEBUGS("Avatar") << "neck pos " << neck << " neck_scale " << neck_scale << LL_ENDL;
+
+ LLVector3 chest = mChestp->getPosition();
+ LLVector3 chest_scale = mChestp->getScale();
+ LL_DEBUGS("Avatar") << "chest pos " << chest << " chest_scale " << chest_scale << LL_ENDL;
+
+ // the rest of the joints have been cached
+ LLVector3 head = mHeadp->getPosition();
+ LLVector3 head_scale = mHeadp->getScale();
+ LL_DEBUGS("Avatar") << "head pos " << head << " head_scale " << head_scale << LL_ENDL;
+
+ LLVector3 torso = mTorsop->getPosition();
+ LLVector3 torso_scale = mTorsop->getScale();
+ LL_DEBUGS("Avatar") << "torso pos " << torso << " torso_scale " << torso_scale << LL_ENDL;
+
+ LLVector3 hip = mHipLeftp->getPosition();
+ LLVector3 hip_scale = mHipLeftp->getScale();
+ LL_DEBUGS("Avatar") << "hip pos " << hip << " hip_scale " << hip_scale << LL_ENDL;
+
+ LLVector3 knee = mKneeLeftp->getPosition();
+ LLVector3 knee_scale = mKneeLeftp->getScale();
+ LL_DEBUGS("Avatar") << "knee pos " << knee << " knee_scale " << knee_scale << LL_ENDL;
+
+ LLVector3 ankle = mAnkleLeftp->getPosition();
+ LLVector3 ankle_scale = mAnkleLeftp->getScale();
+ LL_DEBUGS("Avatar") << "ankle pos " << ankle << " ankle_scale " << ankle_scale << LL_ENDL;
+
+ LLVector3 foot = mFootLeftp->getPosition();
+ LL_DEBUGS("Avatar") << "foot pos " << foot << LL_ENDL;
+
+ F32 new_offset = (const_cast<LLVOAvatar*>(this))->getVisualParamWeight(AVATAR_HOVER);
+ LL_DEBUGS("Avatar") << "new_offset " << new_offset << LL_ENDL;
+
+ F32 new_pelvis_to_foot = hip.mV[VZ] * pelvis_scale.mV[VZ] -
+ knee.mV[VZ] * hip_scale.mV[VZ] -
+ ankle.mV[VZ] * knee_scale.mV[VZ] -
+ foot.mV[VZ] * ankle_scale.mV[VZ];
+ LL_DEBUGS("Avatar") << "new_pelvis_to_foot " << new_pelvis_to_foot << LL_ENDL;
+
+ LLVector3 new_body_size;
+ new_body_size.mV[VZ] = new_pelvis_to_foot +
+ // the sqrt(2) correction below is an approximate
+ // correction to get to the top of the head
+ F_SQRT2 * (skull.mV[VZ] * head_scale.mV[VZ]) +
+ head.mV[VZ] * neck_scale.mV[VZ] +
+ neck.mV[VZ] * chest_scale.mV[VZ] +
+ chest.mV[VZ] * torso_scale.mV[VZ] +
+ torso.mV[VZ] * pelvis_scale.mV[VZ];
+
+ // TODO -- measure the real depth and width
+ new_body_size.mV[VX] = DEFAULT_AGENT_DEPTH;
+ new_body_size.mV[VY] = DEFAULT_AGENT_WIDTH;
+
+ LL_DEBUGS("Avatar") << "new_body_size " << new_body_size << LL_ENDL;
+}
+
//------------------------------------------------------------------------
// postPelvisSetRecalc
//------------------------------------------------------------------------
-void LLVOAvatar::postPelvisSetRecalc( void )
+void LLVOAvatar::postPelvisSetRecalc()
{
mRoot->updateWorldMatrixChildren();
computeBodySize();
@@ -5016,6 +5094,12 @@ void LLVOAvatar::processAnimationStateChanges()
//-----------------------------------------------------------------------------
BOOL LLVOAvatar::processSingleAnimationStateChange( const LLUUID& anim_id, BOOL start )
{
+ // SL-402, SL-427 - we need to update body size often enough to
+ // keep appearances in sync, but not so often that animations
+ // cause constant jiggling of the body or camera. Possible
+ // compromise is to do it on animation changes:
+ computeBodySize();
+
BOOL result = FALSE;
if ( start ) // start animation
@@ -5455,20 +5539,31 @@ void LLVOAvatar::addAttachmentOverridesForObject(LLViewerObject *vo)
{
pJoint->setId( currentId );
const LLVector3& jointPos = pSkinData->mAlternateBindMatrix[i].getTranslation();
- //Set the joint position
- pJoint->addAttachmentPosOverride( jointPos, mesh_id, avString() );
-
- //If joint is a pelvis then handle old/new pelvis to foot values
- if ( lookingForJoint == "mPelvis" )
- {
- pelvisGotSet = true;
- }
+ bool override_changed;
+ pJoint->addAttachmentPosOverride( jointPos, mesh_id, avString(), override_changed );
+
+ if (override_changed)
+ {
+ //If joint is a pelvis then handle old/new pelvis to foot values
+ if ( lookingForJoint == "mPelvis" )
+ {
+ pelvisGotSet = true;
+ }
+ }
}
}
if (pelvisZOffset != 0.0F)
{
+ F32 pelvis_fixup_before;
+ bool has_fixup_before = hasPelvisFixup(pelvis_fixup_before);
addPelvisFixup( pelvisZOffset, mesh_id );
- pelvisGotSet = true;
+ F32 pelvis_fixup_after;
+ hasPelvisFixup(pelvis_fixup_after); // Don't have to check bool here because we just added it...
+ if (!has_fixup_before || (pelvis_fixup_before != pelvis_fixup_after))
+ {
+ pelvisGotSet = true;
+ }
+
}
}
}
@@ -5554,7 +5649,7 @@ void LLVOAvatar::showAttachmentOverrides(bool verbose) const
}
else
{
- LL_INFOS() << getFullname() << " no attachment positions defined for any joints" << "\n" << LL_ENDL;
+ LL_DEBUGS("Avatar") << getFullname() << " no attachment positions defined for any joints" << "\n" << LL_ENDL;
}
if (scale_names.size())
{
@@ -5658,8 +5753,9 @@ void LLVOAvatar::resetJointsOnDetach(const LLUUID& mesh_id)
//Reset joints except for pelvis
if ( pJoint )
{
+ bool dummy; // unused
pJoint->setId( LLUUID::null );
- pJoint->removeAttachmentPosOverride(mesh_id, avString());
+ pJoint->removeAttachmentPosOverride(mesh_id, avString(),dummy);
pJoint->removeAttachmentScaleOverride(mesh_id, avString());
}
if ( pJoint && pJoint == pJointPelvis)
@@ -5880,7 +5976,7 @@ void LLVOAvatar::initAttachmentPoints(bool ignore_hud_joints)
attachment->setVisibleInFirstPerson(info->mVisibleFirstPerson);
attachment->setIsHUDAttachment(info->mIsHUDAttachment);
// attachment can potentially be animated, needs a number.
- attachment->setJointNum(mSkeleton.size() + attachmentID - 1);
+ attachment->setJointNum(mNextJointNum++);
if (newly_created)
{
@@ -7757,7 +7853,7 @@ bool resolve_appearance_version(const LLAppearanceMessageContents& contents, S32
//-----------------------------------------------------------------------------
void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
{
- static S32 largest_self_cof_seen(LLViewerInventoryCategory::VERSION_UNKNOWN);
+ LL_DEBUGS("Avatar") << "starts" << LL_ENDL;
bool enable_verbose_dumps = gSavedSettings.getBOOL("DebugAvatarAppearanceMessage");
std::string dump_prefix = getFullname() + "_" + (isSelf()?"s":"o") + "_";
@@ -7789,43 +7885,34 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
return;
}
- S32 this_update_cof_version = contents->mCOFVersion;
- S32 last_update_request_cof_version = mLastUpdateRequestCOFVersion;
+ S32 thisAppearanceVersion(contents->mCOFVersion);
+ if (isSelf())
+ { // In the past this was considered to be the canonical COF version,
+ // that is no longer the case. The canonical version is maintained
+ // by the AIS code and should match the COF version there. Even so,
+ // we must prevent rolling this one backwards backwards or processing
+ // stale versions.
- if( isSelf() )
- {
- LL_DEBUGS("Avatar") << "this_update_cof_version " << this_update_cof_version
- << " last_update_request_cof_version " << last_update_request_cof_version
- << " my_cof_version " << LLAppearanceMgr::instance().getCOFVersion() << LL_ENDL;
+ S32 aisCOFVersion(LLAppearanceMgr::instance().getCOFVersion());
+
+ LL_DEBUGS("Avatar") << "handling self appearance message #" << thisAppearanceVersion <<
+ " (highest seen #" << mLastUpdateReceivedCOFVersion <<
+ ") (AISCOF=#" << aisCOFVersion << ")" << LL_ENDL;
- if (largest_self_cof_seen > this_update_cof_version)
+ if (mLastUpdateReceivedCOFVersion >= thisAppearanceVersion)
{
- LL_WARNS("Avatar") << "Already processed appearance for COF version " <<
- largest_self_cof_seen << ", discarding appearance with COF " << this_update_cof_version << LL_ENDL;
+ LL_WARNS("Avatar") << "Stale appearance received #" << thisAppearanceVersion <<
+ " attempt to roll back from #" << mLastUpdateReceivedCOFVersion <<
+ "... dropping." << LL_ENDL;
+ return;
+ }
+ if (isEditingAppearance())
+ {
+ LL_DEBUGS("Avatar") << "Editing appearance. Dropping appearance update." << LL_ENDL;
return;
}
- largest_self_cof_seen = this_update_cof_version;
-
- }
- else
- {
- //LL_DEBUGS("Avatar") << "appearance message received" << LL_ENDL;
- }
-
- // Check for stale update.
- if (isSelf()
- && (this_update_cof_version < last_update_request_cof_version))
- {
- LL_WARNS() << "Stale appearance update, wanted version " << last_update_request_cof_version
- << ", got " << this_update_cof_version << LL_ENDL;
- return;
- }
- if (isSelf() && isEditingAppearance())
- {
- LL_DEBUGS("Avatar") << "ignoring appearance message while in appearance edit" << LL_ENDL;
- return;
- }
+ }
// SUNSHINE CLEANUP - is this case OK now?
S32 num_params = contents->mParamWeights.size();
@@ -7840,13 +7927,19 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
}
// No backsies zone - if we get here, the message should be valid and usable, will be processed.
- LL_INFOS("Avatar") << "Processing appearance message version " << this_update_cof_version << LL_ENDL;
-
// Note:
// RequestAgentUpdateAppearanceResponder::onRequestRequested()
// assumes that cof version is only updated with server-bake
// appearance messages.
- mLastUpdateReceivedCOFVersion = this_update_cof_version;
+ LL_INFOS("Avatar") << "Processing appearance message version " << thisAppearanceVersion << LL_ENDL;
+
+ // Note:
+ // locally the COF is maintained via LLInventoryModel::accountForUpdate
+ // which is called from various places. This should match the simhost's
+ // idea of what the COF version is. AIS however maintains its own version
+ // of the COF that should be considered canonical.
+ mLastUpdateReceivedCOFVersion = thisAppearanceVersion;
+
mLastProcessedAppearance = contents;
bool slam_params = false;
@@ -7979,7 +8072,7 @@ void LLVOAvatar::applyParsedAppearanceMessage(LLAppearanceMessageContents& conte
// Got an update for some other avatar
// Ignore updates for self, because we have a more authoritative value in the preferences.
setHoverOffset(contents.mHoverOffset);
- LL_INFOS("Avatar") << avString() << "setting hover to " << contents.mHoverOffset[2] << LL_ENDL;
+ LL_DEBUGS("Avatar") << avString() << "setting hover to " << contents.mHoverOffset[2] << LL_ENDL;
}
if (!contents.mHoverOffsetWasSet && !isSelf())
@@ -8344,6 +8437,12 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara
}
}
+ // Root joint
+ const LLVector3& pos = mRoot->getPosition();
+ const LLVector3& scale = mRoot->getScale();
+ apr_file_printf( file, "\t\t<root name=\"%s\" position=\"%f %f %f\" scale=\"%f %f %f\"/>\n",
+ mRoot->getName().c_str(), pos[0], pos[1], pos[2], scale[0], scale[1], scale[2]);
+
// Bones
avatar_joint_list_t::iterator iter = mSkeleton.begin();
avatar_joint_list_t::iterator end = mSkeleton.end();
@@ -8625,6 +8724,7 @@ U32 LLVOAvatar::getPartitionType() const
//static
void LLVOAvatar::updateImpostors()
{
+ LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;
LLCharacter::sAllowInstancesChange = FALSE;
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
@@ -8927,7 +9027,7 @@ void LLVOAvatar::calculateUpdateRenderComplexity()
&& (all_textures.find(image_id) == all_textures.end()))
{
// attachment texture not previously seen.
- LL_INFOS() << "attachment_texture: " << image_id.asString() << LL_ENDL;
+ LL_DEBUGS("ARCdetail") << "attachment_texture: " << image_id.asString() << LL_ENDL;
all_textures.insert(image_id);
}
}
@@ -8947,7 +9047,7 @@ void LLVOAvatar::calculateUpdateRenderComplexity()
continue;
if (all_textures.find(image_id) == all_textures.end())
{
- LL_INFOS() << "local_texture: " << texture_dict->mName << ": " << image_id << LL_ENDL;
+ LL_DEBUGS("ARCdetail") << "local_texture: " << texture_dict->mName << ": " << image_id << LL_ENDL;
all_textures.insert(image_id);
}
}
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index f456b66a8d..64171e7243 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -368,6 +368,7 @@ protected:
/*virtual*/ LLAvatarJointMesh* createAvatarJointMesh(); // Returns LLViewerJointMesh
public:
void updateHeadOffset();
+ void debugBodySize() const;
void postPelvisSetRecalc( void );
/*virtual*/ BOOL loadSkeletonNode();
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 07427e0377..189ed54993 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -427,7 +427,7 @@ void LLVivoxVoiceClient::connectorCreate()
void LLVivoxVoiceClient::connectorShutdown()
{
- if(!mConnectorEstablished)
+ if(mConnectorEstablished)
{
std::ostringstream stream;
stream
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 8e6a15b67f..6d3e2e4a39 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -3628,10 +3628,8 @@ F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes, F32* unscaled_v
F32 radius = getScale().length()*0.5f;
if (isMesh())
- {
- LLSD& header = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID());
-
- return LLMeshRepository::getStreamingCost(header, radius, bytes, visible_bytes, mLOD, unscaled_value);
+ {
+ return gMeshRepo.getStreamingCost(getVolume()->getParams().getSculptID(), radius, bytes, visible_bytes, mLOD, unscaled_value);
}
else
{
@@ -4783,7 +4781,8 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
pAvatarVO->addAttachmentOverridesForObject(vobj);
if (pAvatarVO->isSelf())
{
- //pAvatarVO->showAttachmentOverrides();
+ bool verbose = true;
+ pAvatarVO->showAttachmentOverrides(verbose);
}
}
diff --git a/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml
index 2c141f616f..65a7e255f9 100644
--- a/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
<text name="AvatarText">
Avatar
</text>
- <slider label="Maximale Komplexität:" name="IndirectMaxComplexity" tool_tip="Bestimmt, an welchem Punkt ein visuell komplexer Avatar als „Gummibärchen“ dargestellt wird"/>
+ <slider label="Maximale Komplexität:" name="IndirectMaxComplexity" tool_tip="Bestimmt, an welchem Punkt ein visuell komplexer Avatar als JellyDoll dargestellt wird"/>
<text name="IndirectMaxComplexityText">
0
</text>
diff --git a/indra/newview/skins/default/xui/de/menu_attachment_other.xml b/indra/newview/skins/default/xui/de/menu_attachment_other.xml
index ddb1e7b0b1..ba1b36db06 100644
--- a/indra/newview/skins/default/xui/de/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/de/menu_attachment_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="Anrufen" name="Call"/>
<menu_item_call label="In Gruppe einladen" name="Invite..."/>
+ <menu_item_call label="Skelett zurücksetzen" name="Reset Skeleton"/>
<menu_item_call label="Ignorieren" name="Avatar Mute"/>
<menu_item_call label="Melden" name="abuse"/>
<menu_item_call label="Einfrieren" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/de/menu_attachment_self.xml b/indra/newview/skins/default/xui/de/menu_attachment_self.xml
index e0f37b28af..cd24e6ad3f 100644
--- a/indra/newview/skins/default/xui/de/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/de/menu_attachment_self.xml
@@ -9,6 +9,7 @@
<menu_item_call label="Mein Outfit bearbeiten" name="Edit Outfit"/>
<menu_item_call label="Meine Form bearbeiten" name="Edit My Shape"/>
<menu_item_call label="Schwebehöhe" name="Hover Height"/>
+ <menu_item_call label="Skelett zurücksetzen" name="Reset Skeleton"/>
<menu_item_call label="Meine Freunde" name="Friends..."/>
<menu_item_call label="Meine Gruppen" name="Groups..."/>
<menu_item_call label="Mein Profil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_other.xml b/indra/newview/skins/default/xui/de/menu_avatar_other.xml
index 7242ba1495..447655cde7 100644
--- a/indra/newview/skins/default/xui/de/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/de/menu_avatar_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="Anrufen" name="Call"/>
<menu_item_call label="In Gruppe einladen" name="Invite..."/>
+ <menu_item_call label="Skelett zurücksetzen" name="Reset Skeleton"/>
<menu_item_call label="Ignorieren" name="Avatar Mute"/>
<menu_item_call label="Melden" name="abuse"/>
<menu_item_call label="Einfrieren" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_self.xml b/indra/newview/skins/default/xui/de/menu_avatar_self.xml
index b53f8cd6af..f4a3cc17b8 100644
--- a/indra/newview/skins/default/xui/de/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/de/menu_avatar_self.xml
@@ -26,6 +26,7 @@
<menu_item_call label="Mein Outfit bearbeiten" name="Edit Outfit"/>
<menu_item_call label="Meine Form bearbeiten" name="Edit My Shape"/>
<menu_item_call label="Schwebehöhe" name="Hover Height"/>
+ <menu_item_call label="Skelett zurücksetzen" name="Reset Skeleton"/>
<menu_item_call label="Meine Freunde" name="Friends..."/>
<menu_item_call label="Meine Gruppen" name="Groups..."/>
<menu_item_call label="Mein Profil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index d83a6071f6..319162db34 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -22,7 +22,6 @@
<menu_item_check label="Nicht stören" name="Do Not Disturb"/>
</menu>
<menu_item_call label="L$ kaufen..." name="Buy and Sell L$"/>
- <menu_item_call label="Händler-Outbox..." name="MerchantOutbox"/>
<menu_item_call label="Marktplatz-Auflistungen..." name="MarketplaceListings"/>
<menu_item_call label="Kontoübersicht..." name="Manage My Account">
<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=de"/>
@@ -415,6 +414,7 @@
<menu_item_check label="LOD deaktiveren" name="Disable LOD"/>
<menu_item_check label="Fehler für sichtbare Agenten beseitigen" name="Debug Character Vis"/>
<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_call label="Anhänge ausgeben" name="Dump Attachments"/>
<menu_item_call label="Fehler in Avatar-Texturen beseitigen" name="Debug Avatar Textures"/>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index 6fcd025a94..0af00ab705 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -487,6 +487,9 @@ Der Outfit-Ordner enthält keine Kleidung, Körperteile oder Anhänge.
<notification name="CannotWearInfoNotComplete">
Sie können das Objekt nicht anziehen, weil es noch nicht geladen wurde. Warten Sie kurz und versuchen Sie es dann noch einmal.
</notification>
+ <notification name="MustEnterPasswordToLogIn">
+ Bitte geben Sie zur Anmeldung Ihr Kennwort ein.
+ </notification>
<notification name="MustHaveAccountToLogIn">
Sue haben ein Feld leer gelassen.
Sie müssen den Benutzernamen Ihres Avatars eingeben.
@@ -555,6 +558,9 @@ Hinweis: Der Cache wird dabei gelöscht/geleert.
<notification name="ChangeConnectionPort">
Die Port-Einstellungen werden nach einem Neustart von [APP_NAME] wirksam.
</notification>
+ <notification name="ChangeDeferredDebugSetting">
+ Die Debug-Einstellung tritt nach Neustart von [APP_NAME] in Kraft.
+ </notification>
<notification name="ChangeSkin">
Die neue Benutzeroberfläche wird nach einem Neustart von [APP_NAME] angezeigt.
</notification>
@@ -1380,12 +1386,13 @@ Sie können [SECOND_LIFE] normal verwenden. Andere Benutzer können Sie korrekt
<ignore name="ignore" text="Das Herunterladen der Kleidung dauert lange"/>
</form>
</notification>
- <notification name="RegionAndAgentComplexity">
- Ihre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 visuelle Komplexität] ist [AGENT_COMPLEXITY].
+ <notification name="AgentComplexityWithVisibility">
+ Ihre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 Avatarkomplexität] ist [AGENT_COMPLEXITY].
[OVERLIMIT_MSG]
+ <usetemplate ignoretext="Warnen, falls Avatarkomplexität zu hoch ist" name="notifyignore"/>
</notification>
<notification name="AgentComplexity">
- Ihre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 visuelle Komplexität] ist [AGENT_COMPLEXITY].
+ Ihre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 Avatarkomplexität] ist [AGENT_COMPLEXITY].
</notification>
<notification name="FirstRun">
Installation von [APP_NAME] vollständig abgeschlossen.
@@ -1501,6 +1508,10 @@ Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 un
Möchten Sie das aktuelle Terrain formen, es zum Mittelpunkt der oberen und unteren Terraingrenzen und zum Standard des „Zurücksetzen“-Tools machen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
+ <notification name="ConfirmTextureHeights">
+ Sie sind dabei, für Höhenbereiche untere Werte anzugeben, die größer sind als die oberen Werte. Fortfahren?
+ <usetemplate canceltext="Nicht fragen" name="yesnocancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
<notification name="MaxAllowedAgentOnRegion">
Es sind maximal [MAX_AGENTS] zulässige Einwohner erlaubt.
</notification>
@@ -1735,14 +1746,6 @@ Diese Gruppe verlassen?
Sie können die Gruppe nicht verlassen, da Sie der letzte Besitzer der Gruppe sind. Weisen Sie die Besitzerrolle zuerst einem anderen Mitglied zu.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="GroupDepartError">
- Kann Gruppe nicht verlassen: [reason].
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
- <notification name="GroupDepart">
- Sie haben die Gruppe „[group_name]“ verlassen.
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
<notification name="ConfirmKick">
Möchten Sie WIRKLICH alle Benutzer aus dem Grid werfen?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Alle Benutzer hinauswerfen"/>
@@ -2415,6 +2418,10 @@ Möchten Sie den Nicht-stören-Modus deaktivieren, bevor Sie diese Transaktion a
Sind Sie sicher, dass Sie den Inhalt Ihres Papierkorbs löschen möchten?
<usetemplate ignoretext="Bestätigen, bevor der Ordner Papierkorb im Inventar geleert wird" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
</notification>
+ <notification name="TrashIsFull">
+ Ihr Papierkorb läuft über. Dies kann zu Anmeldeproblemen führen.
+ <usetemplate name="okcancelbuttons" notext="Papierkorb später leeren" yestext="Papierkorb jetzt leeren"/>
+ </notification>
<notification name="ConfirmClearBrowserCache">
Sind Sie sicher, dass Sie Ihren Reise-, Internet- und Suchverlauf löschen möchten?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
@@ -3272,11 +3279,15 @@ Diese werden für ein paar Sekunden sicherheitshalber gesperrt.
<notification name="AttachmentSaved">
Der Anhang wurde gespeichert.
</notification>
- <notification name="PresetNotSaved">
- Fehler beim Speichern der Voreinstellung [NAME].
+ <notification name="AppearanceToXMLSaved">
+ Erscheinungsbild als XML in [PATH] gespeichert
</notification>
- <notification name="PresetNotDeleted">
- Fehler beim Löschen der Voreinstellung [NAME].
+ <notification name="AppearanceToXMLFailed">
+ Fehler beim Speichern des Erscheinungsbilds als XML.
+ icon=&quot;notifytip.tga&quot;
+ name=&quot;PresetNotDeleted&quot;
+ type=&quot;notifytip&quot;&gt;
+Fehler beim Löschen der Voreinstellung [NAME].
</notification>
<notification name="UnableToFindHelpTopic">
Hilfethema für dieses Element wurde nicht gefunden.
@@ -4089,6 +4100,9 @@ Warten Sie kurz und versuchen Sie es noch einmal.
<notification name="CantAttachNotEnoughScriptResources">
Nicht genügend Skriptressourcen verfügbar, um Objekt anzuhängen.
</notification>
+ <notification name="IllegalAttachment">
+ Der Anhang hat einen nicht vorhandenen Punkt auf dem Avatar angefordert. Der Anhang wurde stattdessen auf der Brust angebracht.
+ </notification>
<notification name="CantDropItemTrialUser">
Ablegen von Objekten hier nicht möglich; versuchen Sie es mit dem kostenlosen Testbereich.
</notification>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml
index fcb45e26be..508e87a8b7 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
<text name="tell_me_label">
Anzeigen:
</text>
- <check_box label="Wenn ich L$ ausgebe oder erhalte" name="notify_money_change_checkbox"/>
+ <check_box label="Wenn ich L$ ausgebe" name="notify_money_spend_checkbox"/>
<check_box label="Wenn meine Freunde sich an- oder abmelden" name="friends_online_notify_checkbox"/>
+ <check_box label="Wenn ich L$ erhalte" name="notify_money_received_checkbox"/>
<text name="show_label">
Immer anzeigen:
</text>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
index 06fd22141f..74fb4d0f85 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
<text name="BetterText">
Besser
</text>
+ <slider label="Maximale Avatarkomplexität:" name="IndirectMaxComplexity" tool_tip="Bestimmt, an welchem Punkt ein visuell komplexer Avatar als JellyDoll dargestellt wird"/>
+ <text name="IndirectMaxComplexityText">
+ 0
+ </text>
<check_box initial_value="true" label="Atmosphären-Shader" name="WindLightUseAtmosShaders"/>
<check_box initial_value="true" label="Erweitertes Beleuchtungsmodell" name="UseLightShaders"/>
<button label="Einstellungen als Voreinstellung speichern..." name="PrefSaveButton"/>
<button label="Voreinstellung laden..." name="PrefLoadButton"/>
+ min_val=&quot;0.125&quot;
<button label="Voreinstellung löschen..." name="PrefDeleteButton"/>
<button label="Auf empfohlene Einstellungen zurücksetzen" name="Defaults"/>
<button label="Erweiterte Einstellungen..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/de/panel_sound_devices.xml b/indra/newview/skins/default/xui/de/panel_sound_devices.xml
index b739b6197f..df4b30383e 100644
--- a/indra/newview/skins/default/xui/de/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/de/panel_sound_devices.xml
@@ -16,9 +16,9 @@
Ausgabe
</text>
<text name="My volume label">
- Meine Lautstärke:
+ Mikrofonlautstärke:
</text>
- <slider_bar initial_value="1,0" name="mic_volume_slider" tool_tip="Lautstärke mit diesem Regler ändern"/>
+ <slider_bar initial_value="1,0" name="mic_volume_slider" tool_tip="Mit diesem Schieberegler können Sie den Mikrofonpegel ändern"/>
<text name="wait_text">
Bitte warten
</text>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index 810022525a..9dd94d2230 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -41,6 +41,9 @@
[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
</string>
+ <string name="BuildConfig">
+ Build-Konfiguration [BUILD_CONFIG]
+ </string>
<string name="AboutPosition">
Sie befinden sich an [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] auf &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
@@ -72,6 +75,9 @@ Voice-Server-Version: [VOICE_VERSION]
<string name="ErrorFetchingServerReleaseNotesURL">
Fehler beim Abrufen der URL für die Server-Versionshinweise.
</string>
+ <string name="BuildConfiguration">
+ Build-Konfiguration
+ </string>
<string name="ProgressRestoring">
Wird wiederhergestellt...
</string>
@@ -1390,6 +1396,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="BodyPartsRightLeg">
Rechtes Bein
</string>
+ <string name="BodyPartsEnhancedSkeleton">
+ Erweitertes Skelett
+ </string>
<string name="GraphicsQualityLow">
Niedrig
</string>
@@ -1838,6 +1847,51 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="Avatar Center">
Avatar-Mitte
</string>
+ <string name="Left Ring Finger">
+ Linker Ringfinger
+ </string>
+ <string name="Right Ring Finger">
+ Rechter Ringfinger
+ </string>
+ <string name="Tail Base">
+ Schwanzansatz
+ </string>
+ <string name="Tail Tip">
+ Schwanzspitze
+ </string>
+ <string name="Left Wing">
+ Linker Flügel
+ </string>
+ <string name="Right Wing">
+ Rechter Flügel
+ </string>
+ <string name="Jaw">
+ Kiefer
+ </string>
+ <string name="Alt Left Ear">
+ Alt. linkes Ohr
+ </string>
+ <string name="Alt Right Ear">
+ Alt. rechtes Ohr
+ </string>
+ <string name="Alt Left Eye">
+ Alt. linkes Auge
+ </string>
+ <string name="Alt Right Eye">
+ Alt. rechtes Auge
+ </string>
+ <string name="Tongue">
+ Zunge
+ </string>
+ <string name="Groin">
+ Leiste
+ </string>
+ <string name="Left Hind Foot">
+ Linker hinterer Fuß
+ </string>
+ <string name="Right Hind Foot">
+ Rechter hinterer Fuß
+ </string>
<string name="Invalid Attachment">
Ungültige Stelle für Anhang
</string>
@@ -2227,12 +2281,12 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="ATTACH_BELLY">
Bauch
</string>
- <string name="ATTACH_RPEC">
- Rechts
- </string>
- <string name="ATTACH_LPEC">
+ <string name="ATTACH_LEFT_PEC">
Linke Brust
</string>
+ <string name="ATTACH_RIGHT_PEC">
+ Rechte Brust
+ </string>
<string name="ATTACH_HUD_CENTER_2">
HUD Mitte 2
</string>
@@ -2263,6 +2317,51 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="ATTACH_AVATAR_CENTER">
Avatar-Mitte
</string>
+ <string name="ATTACH_LHAND_RING1">
+ Linker Ringfinger
+ </string>
+ <string name="ATTACH_RHAND_RING1">
+ Rechter Ringfinger
+ </string>
+ <string name="ATTACH_TAIL_BASE">
+ Schwanzansatz
+ </string>
+ <string name="ATTACH_TAIL_TIP">
+ Schwanzspitze
+ </string>
+ <string name="ATTACH_LWING">
+ Linker Flügel
+ </string>
+ <string name="ATTACH_RWING">
+ Rechter Flügel
+ </string>
+ <string name="ATTACH_FACE_JAW">
+ Kiefer
+ </string>
+ <string name="ATTACH_FACE_LEAR">
+ Alt. linkes Ohr
+ </string>
+ <string name="ATTACH_FACE_REAR">
+ Alt. rechtes Ohr
+ </string>
+ <string name="ATTACH_FACE_LEYE">
+ Alt. linkes Auge
+ </string>
+ <string name="ATTACH_FACE_REYE">
+ Alt. rechtes Auge
+ </string>
+ <string name="ATTACH_FACE_TONGUE">
+ Zunge
+ </string>
+ <string name="ATTACH_GROIN">
+ Leiste
+ </string>
+ <string name="ATTACH_HIND_LFOOT">
+ Linker hinterer Fuß
+ </string>
+ <string name="ATTACH_HIND_RFOOT">
+ Rechter hinterer Fuß
+ </string>
<string name="CursorPos">
Zeile [LINE], Spalte [COLUMN]
</string>
@@ -4252,6 +4351,12 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
<string name="OfflineStatus">
Offline
</string>
+ <string name="not_online_msg">
+ Benutzer nicht online – Nachricht wird gespeichert und später zugestellt.
+ </string>
+ <string name="not_online_inventory">
+ Benutzer nicht online – Inventar gespeichert.
+ </string>
<string name="answered_call">
Ihr Anruf wurde entgegengenommen
</string>
diff --git a/indra/newview/skins/default/xui/en/floater_script_queue.xml b/indra/newview/skins/default/xui/en/floater_script_queue.xml
index f4aca7bb3d..0982683a7f 100644
--- a/indra/newview/skins/default/xui/en/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/en/floater_script_queue.xml
@@ -29,6 +29,14 @@
name="NotRunning">
Not running
</floater.string>
+ <floater.string
+ name="Timeout">
+ Timeout: [OBJECT_NAME]
+ </floater.string>
+ <floater.string
+ name="LoadingObjInv">
+ Loading inventory for: [OBJECT_NAME]
+ </floater.string>
<button
follows="right|bottom"
height="24"
diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml
index 170b7177fb..5d05ecf127 100644
--- a/indra/newview/skins/default/xui/en/fonts.xml
+++ b/indra/newview/skins/default/xui/en/fonts.xml
@@ -12,6 +12,7 @@
<os name="Mac">
<file>ヒラギノ角ゴ Pro W3.otf</file>
<file>ヒラギノ角ゴ ProN W3.otf</file>
+ <file>ヒラギノ明朝 ProN W3.ttc</file>
<file>AppleGothic.dfont</file>
<file>AppleGothic.ttf</file>
<file>AppleSDGothicNeo-Regular.otf</file>
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index 419ec359a6..dcf2da52f1 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -140,13 +140,6 @@
function="Advanced.ShowDebugSettings"
parameter="all" />
</menu_item_call>
- <menu_item_call
- label="UI/Color Settings"
- name="UI/Color Settings">
- <menu_item_call.on_click
- function="Advanced.ShowDebugSettings"
- parameter="skin" />
- </menu_item_call>
<menu_item_separator />
<menu_item_call
label="XUI Preview Tool"
diff --git a/indra/newview/skins/default/xui/en/menu_object_icon.xml b/indra/newview/skins/default/xui/en/menu_object_icon.xml
index 2d4f1792c2..5137aea72a 100644
--- a/indra/newview/skins/default/xui/en/menu_object_icon.xml
+++ b/indra/newview/skins/default/xui/en/menu_object_icon.xml
@@ -23,6 +23,20 @@
<menu_item_call.on_click
function="ObjectIcon.Action"
parameter="block" />
+ <menu_item_call.on_visible
+ function="ObjectIcon.Visible"
+ parameter="not_blocked" />
+ </menu_item_call>
+ <menu_item_call
+ label="Unblock"
+ layout="topleft"
+ name="Unblock">
+ <menu_item_call.on_click
+ function="ObjectIcon.Action"
+ parameter="unblock" />
+ <menu_item_call.on_visible
+ function="ObjectIcon.Visible"
+ parameter="is_blocked" />
</menu_item_call>
<menu_item_separator
layout="topleft" />
diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view.xml
index 8790fde7c5..b5a4b87acd 100644
--- a/indra/newview/skins/default/xui/en/menu_people_friends_view.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_friends_view.xml
@@ -40,6 +40,14 @@
function="CheckControl"
parameter="FriendsListShowPermissions" />
</menu_item_check>
+ <menu_item_check name="view_usernames" label="Hide usernames">
+ <menu_item_check.on_click
+ function="People.Friends.ViewSort.Action"
+ parameter="view_usernames" />
+ <menu_item_check.on_check
+ function="CheckControl"
+ parameter="FriendsListHideUsernames" />
+ </menu_item_check>
<menu_item_check name="view_conversation" label="View Conversation Log...">
<menu_item_check.on_check
function="Floater.Visible"
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby.xml b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
index f12226ebeb..c1500d4e7c 100644
--- a/indra/newview/skins/default/xui/en/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
@@ -143,4 +143,20 @@
function="Avatar.EnableItem"
parameter="can_block" />
</menu_item_check>
+ <menu_item_call
+ label="Freeze"
+ name="freeze">
+ <menu_item_call.on_click
+ function="Avatar.Freeze" />
+ <menu_item_call.on_visible
+ function="Avatar.EnableFreezeEject"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Eject"
+ name="eject">
+ <menu_item_call.on_click
+ function="Avatar.Eject" />
+ <menu_item_call.on_visible
+ function="Avatar.EnableFreezeEject"/>
+ </menu_item_call>
</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml
index da88ca9f4d..a9f6b8045d 100644
--- a/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml
@@ -50,4 +50,12 @@
function="ToggleControl"
parameter="NearbyListShowMap" />
</menu_item_check>
+ <menu_item_check name="view_usernames" label="Hide usernames">
+ <menu_item_check.on_click
+ function="People.Nearby.ViewSort.Action"
+ parameter="view_usernames" />
+ <menu_item_check.on_check
+ function="CheckControl"
+ parameter="NearbyListHideUsernames" />
+ </menu_item_check>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_url_objectim.xml b/indra/newview/skins/default/xui/en/menu_url_objectim.xml
index b9d003b841..41d40b389a 100644
--- a/indra/newview/skins/default/xui/en/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/en/menu_url_objectim.xml
@@ -16,6 +16,13 @@
<menu_item_call.on_click
function="Url.Block" />
</menu_item_call>
+ <menu_item_call
+ label="Unblock"
+ layout="topleft"
+ name="unblock_object">
+ <menu_item_call.on_click
+ function="Url.Unblock" />
+ </menu_item_call>
<menu_item_separator
layout="topleft" />
<menu_item_call
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index ad7aca641b..6da9797dc4 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -806,7 +806,7 @@
<menu_item_check.on_click
function="Build.Toggle" />
<menu_item_check.on_enable
- function="Build.Enabled" />
+ function="Build.EnabledOrActive" />
</menu_item_check>
<menu
create_jump_keys="true"
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_tab.xml b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
index 2d54e69601..44b2727671 100644
--- a/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
+++ b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
@@ -27,4 +27,11 @@
<on_click
function="Wearing.Edit" />
</menu_item_call>
+ <menu_item_call
+ label="Show Original"
+ layout="topleft"
+ name="show_original">
+ <on_click
+ function="Wearing.ShowOriginal" />
+ </menu_item_call>
</context_menu>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 4daff340ac..34d61e3fd6 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -1150,6 +1150,22 @@ Error encoding snapshot.
<notification
icon="alertmodal.tga"
+ name="ErrorPhotoCannotAfford"
+ type="alertmodal">
+ You need L$[COST] to save a photo to your inventory. You may either buy L$ or save the photo to your computer instead.
+ <tag>fail</tag>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="ErrorTextureCannotAfford"
+ type="alertmodal">
+ You need L$[COST] to save a texture to your inventory. You may either buy L$ or save the photo to your computer instead.
+ <tag>fail</tag>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
name="ErrorUploadingPostcard"
type="alertmodal">
There was a problem sending a snapshot due to the following reason: [REASON]
@@ -3530,6 +3546,19 @@ Teleport all Residents in this region home?
<notification
icon="alertmodal.tga"
+ name="ChangeObjectBonusFactor"
+ type="alertmodal">
+ Lowering the object bonus after builds have been established in a region may cause objects to be returned or deleted. Are you sure you want to change object bonus?
+ <tag>confirm</tag>
+ <usetemplate
+ ignoretext="Confirm changing object bonus factor"
+ name="okcancelignore"
+ notext="Cancel"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
name="EstateObjectReturn"
type="alertmodal">
Are you sure you want to return objects owned by [USER_NAME]?
@@ -6888,6 +6917,19 @@ This area has building disabled. You can&apos;t build or rez objects here.
</notification>
<notification
+ icon="notify.tga"
+ name="PathfindingDirtyRebake"
+ persist="true"
+ type="notify">
+ <unique/>
+ The region has pending pathfinding changes. If you have build rights, you may rebake the region by clicking on the “Rebake region” button.
+ <usetemplate
+ name="okbutton"
+ yestext="Rebake region"
+ />
+ </notification>
+
+ <notification
icon="notify.tga"
name="DynamicPathfindingDisabled"
persist="true"
@@ -8279,8 +8321,18 @@ Appearance has been saved to XML to [PATH]
<notification icon="notifytip.tga"
name="AppearanceToXMLFailed" type="notifytip">
Failed to save appearance to XML.
+ </notification>
+
+ <notification
+ icon="notifytip.tga"
+ name="PresetNotSaved"
+ type="notifytip">
+Error saving preset [NAME].
+ </notification>
+
+ <notification
icon="notifytip.tga"
- name="PresetNotDeleted"
+ name="PresetNotDeleted"
type="notifytip">
Error deleting preset [NAME].
</notification>
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 183ae2e824..ded814bbeb 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -67,7 +67,7 @@
follows="left|top"
height="32"
left_pad="-11"
- max_length_bytes="16"
+ max_length_chars="16"
text_pad_left="8"
name="password_edit"
label="Password"
diff --git a/indra/newview/skins/default/xui/en/panel_login_first.xml b/indra/newview/skins/default/xui/en/panel_login_first.xml
index d1416ece82..35b80c56ab 100644
--- a/indra/newview/skins/default/xui/en/panel_login_first.xml
+++ b/indra/newview/skins/default/xui/en/panel_login_first.xml
@@ -124,7 +124,7 @@
width="200"
height="32"
left="220"
- max_length_bytes="16"
+ max_length_chars="16"
name="password_edit"
label="Password"
text_pad_left="8"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
index 3e96160834..4a5117adac 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
@@ -138,7 +138,7 @@
initial_value="1"
layout="topleft"
left_pad="0"
- max_val="1.5"
+ max_val="2.0"
min_val="0.75"
name="ui_scale_slider"
top_pad="-14"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index a4869b5503..314fb588dc 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -54,6 +54,7 @@ LLCEFLib/CEF Version: [LLCEFLIB_VERSION]
Voice Server Version: [VOICE_VERSION]
</string>
<string name="AboutTraffic">Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)</string>
+ <string name="AboutTime">[month, datetime, slt] [day, datetime, slt] [year, datetime, slt] [hour, datetime, slt]:[min, datetime, slt]:[second,datetime,slt]</string>
<string name="ErrorFetchingServerReleaseNotesURL">Error fetching server release notes URL.</string>
<string name="BuildConfiguration">Build Configuration</string>
@@ -2669,8 +2670,8 @@ This feature is currently in Beta. Please add your name to this [http://goo.gl/f
<string name="ATTACH_LULEG">Left Upper Leg</string>
<string name="ATTACH_LLLEG">Left Lower Leg</string>
<string name="ATTACH_BELLY">Belly</string>
- <string name="ATTACH_RPEC">Right Pec</string>
- <string name="ATTACH_LPEC">Left Pec</string>
+ <string name="ATTACH_LEFT_PEC">Left Pec</string>
+ <string name="ATTACH_RIGHT_PEC">Right Pec</string>
<string name="ATTACH_HUD_CENTER_2">HUD Center 2</string>
<string name="ATTACH_HUD_TOP_RIGHT">HUD Top Right</string>
<string name="ATTACH_HUD_TOP_CENTER">HUD Top Center</string>
diff --git a/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml
index dda95ad070..84b256c8e3 100644
--- a/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
<text name="AvatarText">
Avatar
</text>
- <slider label="Complejidad máxima:" name="IndirectMaxComplexity" tool_tip="Controla en qué momento un avatar visualmente complejo se dibuja como una sombra de color sólido"/>
+ <slider label="Complejidad máxima:" name="IndirectMaxComplexity" tool_tip="Controla en qué momento un avatar visualmente complejo se dibuja como un &quot;JellyDoll&quot;"/>
<text name="IndirectMaxComplexityText">
0
</text>
diff --git a/indra/newview/skins/default/xui/es/menu_attachment_other.xml b/indra/newview/skins/default/xui/es/menu_attachment_other.xml
index 772b27c9ba..c92583cfc3 100644
--- a/indra/newview/skins/default/xui/es/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/es/menu_attachment_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="MI" name="Send IM..."/>
<menu_item_call label="Llamada" name="Call"/>
<menu_item_call label="Invitar al grupo" name="Invite..."/>
+ <menu_item_call label="Restablecer esqueleto" name="Reset Skeleton"/>
<menu_item_call label="Ignorar" name="Avatar Mute"/>
<menu_item_call label="Denunciar" name="abuse"/>
<menu_item_call label="Congelar" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_attachment_self.xml b/indra/newview/skins/default/xui/es/menu_attachment_self.xml
index 02819e6816..a4d09a44ab 100644
--- a/indra/newview/skins/default/xui/es/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/es/menu_attachment_self.xml
@@ -9,6 +9,7 @@
<menu_item_call label="Editar mi vestuario" name="Edit Outfit"/>
<menu_item_call label="Editar mi anatomía" name="Edit My Shape"/>
<menu_item_call label="Altura del avatar" name="Hover Height"/>
+ <menu_item_call label="Restablecer esqueleto" name="Reset Skeleton"/>
<menu_item_call label="Mis amigos" name="Friends..."/>
<menu_item_call label="Mis grupos" name="Groups..."/>
<menu_item_call label="Mi perfil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_avatar_other.xml b/indra/newview/skins/default/xui/es/menu_avatar_other.xml
index 75cbf5a022..e5aef03911 100644
--- a/indra/newview/skins/default/xui/es/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/es/menu_avatar_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="MI" name="Send IM..."/>
<menu_item_call label="Llamada" name="Call"/>
<menu_item_call label="Invitar al grupo" name="Invite..."/>
+ <menu_item_call label="Restablecer esqueleto" name="Reset Skeleton"/>
<menu_item_call label="Ignorar" name="Avatar Mute"/>
<menu_item_call label="Denunciar" name="abuse"/>
<menu_item_call label="Congelar" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_avatar_self.xml b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
index d60a3434cf..ab14966217 100644
--- a/indra/newview/skins/default/xui/es/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
@@ -26,6 +26,7 @@
<menu_item_call label="Editar mi vestuario" name="Edit Outfit"/>
<menu_item_call label="Editar mi anatomía" name="Edit My Shape"/>
<menu_item_call label="Altura del avatar" name="Hover Height"/>
+ <menu_item_call label="Restablecer esqueleto" name="Reset Skeleton"/>
<menu_item_call label="Mis amigos" name="Friends..."/>
<menu_item_call label="Mis grupos" name="Groups..."/>
<menu_item_call label="Mi perfil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index fd248116b8..07c358615c 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -367,6 +367,7 @@
<menu_item_check label="Animation Info" name="Animation Info"/>
<menu_item_check label="Disable Level Of Detail" name="Disable LOD"/>
<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
+ <menu_item_check label="Mostrar los huesos" name="Show Bones"/>
<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
<menu_item_call label="Debug Avatar Textures" name="Debug Avatar Textures"/>
</menu>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index b52497eb85..a67e410814 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -477,6 +477,9 @@ Se ha superado el límite máximo de [MAX_ATTACHMENTS] objetos. Por favor, quít
<notification name="CannotWearInfoNotComplete">
No puedes vestirte este ítem porque aún no se ha cargado. Por favor, inténtalo de nuevo en un minuto.
</notification>
+ <notification name="MustEnterPasswordToLogIn">
+ Escribe la contraseña para poder iniciar sesión.
+ </notification>
<notification name="MustHaveAccountToLogIn">
Lo sentimos. Se ha quedado algún espacio en blanco.
Tienes que volver a introducir el nombre de usuario de tu avatar.
@@ -545,6 +548,9 @@ Nota: esto vaciará la caché.
<notification name="ChangeConnectionPort">
La configuración del puerto tendrá efecto cuando reinicies [APP_NAME].
</notification>
+ <notification name="ChangeDeferredDebugSetting">
+ El cambio de configuración del depurador se activará cuando reinicies [APP_NAME].
+ </notification>
<notification name="ChangeSkin">
Verás la nueva apariencia cuando reinicies [APP_NAME].
</notification>
@@ -1370,12 +1376,13 @@ Puedes usar [SECOND_LIFE] de forma normal; los demás residentes te verán corre
<ignore name="ignore" text="La ropa está tardando mucho en descargarse"/>
</form>
</notification>
- <notification name="RegionAndAgentComplexity">
- Tu [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complejidad visual] es [AGENT_COMPLEXITY].
+ <notification name="AgentComplexityWithVisibility">
+ La [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complejidad de tu avatar] es [AGENT_COMPLEXITY].
[OVERLIMIT_MSG]
+ <usetemplate ignoretext="Avisarme si la complejidad de mi avatar puede ser excesiva" name="notifyignore"/>
</notification>
<notification name="AgentComplexity">
- Tu [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complejidad visual] es [AGENT_COMPLEXITY].
+ La [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complejidad de tu avatar] es [AGENT_COMPLEXITY].
</notification>
<notification name="FirstRun">
Se ha completado la instalación de [SECOND_LIFE].
@@ -1492,6 +1499,10 @@ Cambia la textura [TEXTURE_NUM] por una imagen de 24-bit y 512x512 o menor, y pu
¿Realmente quieres predeterminar el terreno actual, haciéndolo el centro de los limites para elevarlo y rebajarlo, y el terreno por defecto para la herramienta &apos;Revertir&apos;?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
+ <notification name="ConfirmTextureHeights">
+ Vas a usar valores inferiores más grandes que los de Intervalos de elevación. ¿Quieres continuar?
+ <usetemplate canceltext="No preguntar" name="yesnocancelbuttons" notext="Cancelar" yestext="Aceptar"/>
+ </notification>
<notification name="MaxAllowedAgentOnRegion">
Sólo puedes tener [MAX_AGENTS] residentes autorizados.
</notification>
@@ -1729,14 +1740,6 @@ Si estás impaciente por probar las nuevas funciones y correcciones, lee la pág
No es posible abandonar el grupo. No puedes abandonarlo porque eres su último propietario. Antes tienes que asignar el papel de propietario a otro miembro.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="GroupDepartError">
- No se puede abandonar el grupo: [reason].
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
- <notification name="GroupDepart">
- Has abandonado el grupo [group_name].
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
<notification name="ConfirmKick">
¿Quieres realmente expulsar a todos los residentes de la cuadrícula?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Expulsar a todos los Residentes"/>
@@ -2409,6 +2412,10 @@ Linden Lab
¿Estás seguro de que quieres borrar de forma permanente el contenido de la Papelera?
<usetemplate ignoretext="Confirmar antes de vaciar la Papelera del inventario" name="okcancelignore" notext="Cancelar" yestext="OK"/>
</notification>
+ <notification name="TrashIsFull">
+ La papelera está completamente llena. Esto puede causar problemas a la hora de iniciar sesión.
+ <usetemplate name="okcancelbuttons" notext="Vaciaré la papelera más adelante" yestext="Vaciar la papelera"/>
+ </notification>
<notification name="ConfirmClearBrowserCache">
¿Estás seguro de que quieres borrar tu historial web, de viajes y de búsquedas?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
@@ -2996,7 +3003,7 @@ Si permaneces en esta región serás desconectado.
[MESSAGE]
-Del objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propietario: [NAME_SLURL]
+De objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propietario: [NAME_SLURL]
<form name="form">
<button name="Gotopage" text="Cargar"/>
<button name="Cancel" text="Cancelar"/>
@@ -3258,11 +3265,15 @@ Por tu seguridad, serán bloqueadas durante unos segundos.
<notification name="AttachmentSaved">
Se ha guardado el adjunto.
</notification>
- <notification name="PresetNotSaved">
- Error al guardar el valor predefinido [NAME].
+ <notification name="AppearanceToXMLSaved">
+ El aspecto se ha guardado como XML en [PATH]
</notification>
- <notification name="PresetNotDeleted">
- Error al eliminar el valor predefinido [NAME].
+ <notification name="AppearanceToXMLFailed">
+ Error al guardar el aspecto como XML.
+ icon=&quot;notifytip.tga&quot;
+ name=&quot;PresetNotDeleted&quot;
+ type=&quot;notifytip&quot;&gt;
+Error al eliminar el valor predefinido [NAME].
</notification>
<notification name="UnableToFindHelpTopic">
No se ha podido encontrar un tema de ayuda para este elemento.
@@ -4074,6 +4085,9 @@ Prueba otra vez dentro de un minuto.
<notification name="CantAttachNotEnoughScriptResources">
No hay suficientes recursos de script disponibles para anexar el objeto
</notification>
+ <notification name="IllegalAttachment">
+ El anexo ha solicitado un punto que no existe en el avatar. Por tanto, se ha anexado al pecho.
+ </notification>
<notification name="CantDropItemTrialUser">
No se pueden soltar objetos aquí; inténtalo en la zona de prueba gratuita.
</notification>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml
index f34edf149e..c5b27ae766 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
<text name="tell_me_label">
Avisarme:
</text>
- <check_box label="Cuando gaste o consiga L$" name="notify_money_change_checkbox"/>
+ <check_box label="Cuando gaste L$" name="notify_money_spend_checkbox"/>
<check_box label="Cuando mis amigos se conecten o desconecten" name="friends_online_notify_checkbox"/>
+ <check_box label="Cuando gane L$" name="notify_money_received_checkbox"/>
<text name="show_label" width="300">
Mostrar siempre:
</text>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
index f7fb8ab70d..2db4274e44 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
<text name="BetterText">
Más calidad
</text>
+ <slider label="Complejidad máxima de avatar:" name="IndirectMaxComplexity" tool_tip="Controla en qué momento un avatar visualmente complejo se dibuja como un &quot;JellyDoll&quot;"/>
+ <text name="IndirectMaxComplexityText">
+ 0
+ </text>
<check_box initial_value="true" label="Shaders de la atmósfera" name="WindLightUseAtmosShaders"/>
<check_box initial_value="true" label="Modelo de iluminación avanzado" name="UseLightShaders"/>
<button label="Guardar configuración como valor predefinido..." name="PrefSaveButton"/>
<button label="Cargar predefinido..." name="PrefLoadButton"/>
+ min_val=&quot;0.125&quot;
<button label="Eliminar predefinido..." name="PrefDeleteButton"/>
<button label="Restablecer la configuración recomendada" name="Defaults"/>
<button label="Configuración avanzada..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/es/panel_sound_devices.xml b/indra/newview/skins/default/xui/es/panel_sound_devices.xml
index 9531b99cc8..109dcb565a 100644
--- a/indra/newview/skins/default/xui/es/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/es/panel_sound_devices.xml
@@ -16,9 +16,9 @@
Salida
</text>
<text name="My volume label">
- Mi volumen:
+ Volumen de mic.:
</text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia el volumen usando este deslizable"/>
+ <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia el volumen del micrófono con este controlador deslizante"/>
<text name="wait_text">
Por favor, espera
</text>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index ea6cea060b..4e20793d86 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -32,6 +32,9 @@
[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
</string>
+ <string name="BuildConfig">
+ Configuración de constitución [BUILD_CONFIG]
+ </string>
<string name="AboutPosition">
Estás en la posición [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1], de [REGION], alojada en &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
@@ -55,7 +58,7 @@ Tarjeta gráfica: [GRAPHICS_CARD]
Versión de J2C Decoder: [J2C_VERSION]
Versión de Audio Driver: [AUDIO_DRIVER_VERSION]
Versión de LLCEFLib/CEF: [LLCEFLIB_VERSION]
-Versión del servidor de voz: [VOICE_VERSION]
+Versión de Voice Server: [VOICE_VERSION]
</string>
<string name="AboutTraffic">
Paquetes perdidos: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
@@ -63,6 +66,9 @@ Versión del servidor de voz: [VOICE_VERSION]
<string name="ErrorFetchingServerReleaseNotesURL">
Error al obtener la URL de las notas de la versión del servidor.
</string>
+ <string name="BuildConfiguration">
+ Configuración de constitución
+ </string>
<string name="ProgressRestoring">
Restaurando...
</string>
@@ -1372,6 +1378,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="BodyPartsRightLeg">
Pierna der.
</string>
+ <string name="BodyPartsEnhancedSkeleton">
+ Esqueleto mejorado
+ </string>
<string name="GraphicsQualityLow">
Bajo
</string>
@@ -1814,6 +1823,51 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="Avatar Center">
Centro del avatar
</string>
+ <string name="Left Ring Finger">
+ Dedo anular izquierdo
+ </string>
+ <string name="Right Ring Finger">
+ Dedo anular derecho
+ </string>
+ <string name="Tail Base">
+ Base de la cola
+ </string>
+ <string name="Tail Tip">
+ Extremo de la cola
+ </string>
+ <string name="Left Wing">
+ Ala izquierda
+ </string>
+ <string name="Right Wing">
+ Ala derecha
+ </string>
+ <string name="Jaw">
+ Mandíbula
+ </string>
+ <string name="Alt Left Ear">
+ Oreja izquierda alternativa
+ </string>
+ <string name="Alt Right Ear">
+ Oreja derecha alternativa
+ </string>
+ <string name="Alt Left Eye">
+ Ojo izquierdo alternativo
+ </string>
+ <string name="Alt Right Eye">
+ Ojo derecho alternativo
+ </string>
+ <string name="Tongue">
+ Lengua
+ </string>
+ <string name="Groin">
+ Ingle
+ </string>
+ <string name="Left Hind Foot">
+ Pata trasera izquierda
+ </string>
+ <string name="Right Hind Foot">
+ Pata trasera derecha
+ </string>
<string name="Invalid Attachment">
Punto de colocación no válido
</string>
@@ -2203,11 +2257,11 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="ATTACH_BELLY">
Vientre
</string>
- <string name="ATTACH_RPEC">
- Pecho derecho
+ <string name="ATTACH_LEFT_PEC">
+ Pectoral izquierdo
</string>
- <string name="ATTACH_LPEC">
- Pecho izquierdo
+ <string name="ATTACH_RIGHT_PEC">
+ Pectoral derecho
</string>
<string name="ATTACH_HUD_CENTER_2">
HUD: Centro 2
@@ -2239,6 +2293,51 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="ATTACH_AVATAR_CENTER">
Centro del avatar
</string>
+ <string name="ATTACH_LHAND_RING1">
+ Dedo anular izquierdo
+ </string>
+ <string name="ATTACH_RHAND_RING1">
+ Dedo anular derecho
+ </string>
+ <string name="ATTACH_TAIL_BASE">
+ Base de la cola
+ </string>
+ <string name="ATTACH_TAIL_TIP">
+ Extremo de la cola
+ </string>
+ <string name="ATTACH_LWING">
+ Ala izquierda
+ </string>
+ <string name="ATTACH_RWING">
+ Ala derecha
+ </string>
+ <string name="ATTACH_FACE_JAW">
+ Mandíbula
+ </string>
+ <string name="ATTACH_FACE_LEAR">
+ Oreja izquierda alternativa
+ </string>
+ <string name="ATTACH_FACE_REAR">
+ Oreja derecha alternativa
+ </string>
+ <string name="ATTACH_FACE_LEYE">
+ Ojo izquierdo alternativo
+ </string>
+ <string name="ATTACH_FACE_REYE">
+ Ojo derecho alternativo
+ </string>
+ <string name="ATTACH_FACE_TONGUE">
+ Lengua
+ </string>
+ <string name="ATTACH_GROIN">
+ Ingle
+ </string>
+ <string name="ATTACH_HIND_LFOOT">
+ Pata trasera izquierda
+ </string>
+ <string name="ATTACH_HIND_RFOOT">
+ Pata trasera derecha
+ </string>
<string name="CursorPos">
Línea [LINE], Columna [COLUMN]
</string>
@@ -4165,6 +4264,12 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="OfflineStatus">
Desconectado/a
</string>
+ <string name="not_online_msg">
+ El usuario no está conectado: el mensaje se almacenará para entregárselo más tarde.
+ </string>
+ <string name="not_online_inventory">
+ El usuario no está conectado: el inventario se ha guardado.
+ </string>
<string name="answered_call">
Han respondido a tu llamada
</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml
index 5c5af022ca..d3c4dcfa27 100644
--- a/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
<text name="AvatarText">
Avatar
</text>
- <slider label="Complexité max. :" name="IndirectMaxComplexity" tool_tip="Contrôle à quel moment un avatar complexe est représenté comme un « jelly doll » (forme de couleur unie)"/>
+ <slider label="Complexité max. :" name="IndirectMaxComplexity" tool_tip="Contrôle à quel moment un avatar complexe est représenté comme un « jelly baby »"/>
<text name="IndirectMaxComplexityText">
0
</text>
diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_other.xml b/indra/newview/skins/default/xui/fr/menu_attachment_other.xml
index 20de34250a..fd8112429e 100644
--- a/indra/newview/skins/default/xui/fr/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/fr/menu_attachment_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="Appeler" name="Call"/>
<menu_item_call label="Inviter dans le groupe" name="Invite..."/>
+ <menu_item_call label="Réinitialiser le squelette" name="Reset Skeleton"/>
<menu_item_call label="Ignorer" name="Avatar Mute"/>
<menu_item_call label="Signaler" name="abuse"/>
<menu_item_call label="Figer" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
index 1ccba08099..f3089ad3bb 100644
--- a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
@@ -9,6 +9,7 @@
<menu_item_call label="Modifier ma tenue" name="Edit Outfit"/>
<menu_item_call label="Modifier ma silhouette" name="Edit My Shape"/>
<menu_item_call label="Hauteur de sustentation" name="Hover Height"/>
+ <menu_item_call label="Réinitialiser le squelette" name="Reset Skeleton"/>
<menu_item_call label="Mes amis" name="Friends..."/>
<menu_item_call label="Mes groupes" name="Groups..."/>
<menu_item_call label="Mon profil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml
index d31f205efb..b97c4b0f48 100644
--- a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="Appeler" name="Call"/>
<menu_item_call label="Inviter dans le groupe" name="Invite..."/>
+ <menu_item_call label="Réinitialiser le squelette" name="Reset Skeleton"/>
<menu_item_call label="Ignorer" name="Avatar Mute"/>
<menu_item_call label="Signaler" name="abuse"/>
<menu_item_call label="Figer" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
index 1c768a078c..a4c1df8cee 100644
--- a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
@@ -26,6 +26,7 @@
<menu_item_call label="Modifier ma tenue" name="Edit Outfit"/>
<menu_item_call label="Modifier ma silhouette" name="Edit My Shape"/>
<menu_item_call label="Hauteur de sustentation" name="Hover Height"/>
+ <menu_item_call label="Réinitialiser le squelette" name="Reset Skeleton"/>
<menu_item_call label="Mes amis" name="Friends..."/>
<menu_item_call label="Mes groupes" name="Groups..."/>
<menu_item_call label="Mon profil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 9b1f195391..3c9f5c2aa9 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -22,7 +22,6 @@
<menu_item_check label="Ne pas déranger" name="Do Not Disturb"/>
</menu>
<menu_item_call label="Acheter des L$..." name="Buy and Sell L$"/>
- <menu_item_call label="Boîte d&apos;envoi vendeur..." name="MerchantOutbox"/>
<menu_item_call label="Annonces de Place du marché..." name="MarketplaceListings"/>
<menu_item_call label="Page d&apos;accueil du compte..." name="Manage My Account">
<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=fr"/>
@@ -421,6 +420,7 @@
<menu_item_check label="Désactiver LOD" name="Disable LOD"/>
<menu_item_check label="Debogage Character Vis" name="Debug Character Vis"/>
<menu_item_check label="Afficher le squelette de collision" name="Show Collision Skeleton"/>
+ <menu_item_check label="Voir les os" name="Show Bones"/>
<menu_item_check label="Afficher la cible de l&apos;avatar" name="Display Agent Target"/>
<menu_item_call label="Dump Attachments" name="Dump Attachments"/>
<menu_item_call label="Débogage des textures des avatars" name="Debug Avatar Textures"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 080ea741c5..2310fc5611 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -479,6 +479,9 @@ La limite de [MAX_ATTACHMENTS] objets joints a été dépassée. Veuillez commen
<notification name="CannotWearInfoNotComplete">
Vous ne pouvez pas porter cet article car il n&apos;a pas encore été chargé. Veuillez réessayer dans une minute.
</notification>
+ <notification name="MustEnterPasswordToLogIn">
+ Veuillez saisir votre mot de passe pour vous connecter.
+ </notification>
<notification name="MustHaveAccountToLogIn">
Zut ! Vous avez oublié de fournir certaines informations.
Vous devez saisir le nom d&apos;utilisateur de votre avatar.
@@ -547,6 +550,9 @@ Remarque : cela videra le cache.
<notification name="ChangeConnectionPort">
Les paramètres du port prendront effet après le redémarrage de [APP_NAME].
</notification>
+ <notification name="ChangeDeferredDebugSetting">
+ Le changement de paramètre de débogage sera effectué au redémarrage de [APP_NAME].
+ </notification>
<notification name="ChangeSkin">
Le nouveau thème apparaîtra après le redémarrage de [APP_NAME].
</notification>
@@ -1361,12 +1367,13 @@ Vous pouvez utiliser [SECOND_LIFE] normalement, les autres résidents vous voien
<ignore name="ignore" text="Vos habits prennent du temps à télécharger"/>
</form>
</notification>
- <notification name="RegionAndAgentComplexity">
- Votre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complexité visuelle] est [AGENT_COMPLEXITY].
+ <notification name="AgentComplexityWithVisibility">
+ Votre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complexité de l&apos;avatar] est [AGENT_COMPLEXITY].
[OVERLIMIT_MSG]
+ <usetemplate ignoretext="M&apos;avertir si la complexité de l&apos;avatar est trop élevée" name="notifyignore"/>
</notification>
<notification name="AgentComplexity">
- Votre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complexité visuelle] est [AGENT_COMPLEXITY].
+ Votre [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complexité de l&apos;avatar] est [AGENT_COMPLEXITY].
</notification>
<notification name="FirstRun">
L&apos;installation de [APP_NAME] est terminée.
@@ -1483,6 +1490,10 @@ suivant votre vitesse de connexion.
Etes-vous sûr(e) de vouloir figer le relief actuel, en faire le point central des limites d&apos;élévation/abaissement de relief et la valeur par défaut du bouton Annuler modification ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
+ <notification name="ConfirmTextureHeights">
+ Vous vous apprêtez à utiliser des valeurs plus élevées que les limites d&apos;élévation supérieures. Continuer ?
+ <usetemplate canceltext="Ne pas demander" name="yesnocancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
<notification name="MaxAllowedAgentOnRegion">
Vous ne pouvez pas autoriser plus de [MAX_AGENTS] résidents.
</notification>
@@ -1720,14 +1731,6 @@ Quitter le groupe ?
Impossible de quitter le groupe. Vous ne pouvez pas quitter le groupe car vous en êtes le dernier propriétaire. Vous devez d&apos;abord affecter le rôle de propriétaire à un autre membre.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="GroupDepartError">
- Impossible de quitter le groupe : [reason].
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
- <notification name="GroupDepart">
- Vous avez quitté le groupe [group_name].
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
<notification name="ConfirmKick">
Souhaitez-vous vraiment éjecter tous les résidents de la grille ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Éjecter tous les résidents"/>
@@ -2400,6 +2403,10 @@ Voulez-vous désactiver Ne pas déranger avant de terminer cette transaction ?
Êtes-vous certain de vouloir supprimer le contenu de votre corbeille de manière permanente ?
<usetemplate ignoretext="Confirmer avant de vider la corbeille" name="okcancelignore" notext="Annuler" yestext="OK"/>
</notification>
+ <notification name="TrashIsFull">
+ Votre corbeille déborde. Cela risque de provoquer des problèmes lors de la connexion.
+ <usetemplate name="okcancelbuttons" notext="Je viderai la corbeille plus tard" yestext="Vider la corbeille"/>
+ </notification>
<notification name="ConfirmClearBrowserCache">
Êtes-vous certain de vouloir supprimer l&apos;historique de vos visites et recherches ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
@@ -2984,11 +2991,11 @@ Si vous restez dans cette région, vous serez déconnecté(e).
Si vous restez dans cette région, vous serez déconnecté(e).
</notification>
<notification name="LoadWebPage">
- Charger la page Web [URL] ?
+ Charger la page Web [URL] ?
[MESSAGE]
-Venant de l&apos;objet : &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propriétaire : [NAME_SLURL]
+Venant de l&apos;objet : &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propriétaire : [NAME_SLURL]
<form name="form">
<button name="Gotopage" text="Charger"/>
<button name="Cancel" text="Annuler"/>
@@ -3257,11 +3264,15 @@ Elles vont être bloquées pendant quelques secondes pour votre sécurité.
<notification name="AttachmentSaved">
L&apos;élément joint a été sauvegardé.
</notification>
- <notification name="PresetNotSaved">
- Erreur d’enregistrement du préréglage [NAME].
+ <notification name="AppearanceToXMLSaved">
+ L&apos;apparence a été enregistrée en XML vers [PATH]
</notification>
- <notification name="PresetNotDeleted">
- Erreur de suppression du préréglage [NAME].
+ <notification name="AppearanceToXMLFailed">
+ Échec d&apos;enregistrement de l&apos;apparence en XML.
+ icon=&quot;notifytip.tga&quot;
+ name=&quot;PresetNotDeleted&quot;
+ type=&quot;notifytip&quot;&gt;
+Erreur de suppression du préréglage [NAME].
</notification>
<notification name="UnableToFindHelpTopic">
Impossible de trouver l&apos;aide.
@@ -4075,6 +4086,9 @@ Veuillez réessayer dans une minute.
<notification name="CantAttachNotEnoughScriptResources">
Ressources de script insuffisantes pour attacher cet objet.
</notification>
+ <notification name="IllegalAttachment">
+ La pièce jointe a demandé un point non existant sur l&apos;avatar. Il a été fixé sur la poitrine.
+ </notification>
<notification name="CantDropItemTrialUser">
Vous ne pouvez pas déposer d&apos;objets ici. Essayez la zone de période d&apos;essai gratuite.
</notification>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml
index 901a92ed1b..85cd958f49 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
<text name="tell_me_label">
Me prévenir :
</text>
- <check_box label="Quand je dépense ou que je reçois des L$" name="notify_money_change_checkbox"/>
+ <check_box label="Quand je dépense des L$" name="notify_money_spend_checkbox"/>
<check_box label="Quand mes amis se connectent ou se déconnectent" name="friends_online_notify_checkbox"/>
+ <check_box label="Quand je reçois des L$" name="notify_money_received_checkbox"/>
<text name="show_label">
Toujours afficher :
</text>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
index 01d89f03f8..2b1e613fe4 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
<text name="BetterText">
Meilleure
</text>
+ <slider label="Complexité max. de l&apos;avatar :" name="IndirectMaxComplexity" tool_tip="Contrôle à quel moment un avatar complexe est représenté comme un « jelly baby »"/>
+ <text name="IndirectMaxComplexityText">
+ 0
+ </text>
<check_box initial_value="true" label="Effets atmosphériques" name="WindLightUseAtmosShaders"/>
<check_box initial_value="true" label="Modèle d’éclairage avancé" name="UseLightShaders"/>
<button label="Enregistrer les paramètres comme préréglage..." name="PrefSaveButton"/>
<button label="Charger un préréglage..." name="PrefLoadButton"/>
+ min_val=&quot;0,125&quot;
<button label="Supprimer un préréglage..." name="PrefDeleteButton"/>
<button label="Réinitialiser les paramètres recommandés" name="Defaults"/>
<button label="Paramètres avancés" name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_sound_devices.xml b/indra/newview/skins/default/xui/fr/panel_sound_devices.xml
index 460b269f7c..720aaaf3e0 100644
--- a/indra/newview/skins/default/xui/fr/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/fr/panel_sound_devices.xml
@@ -16,9 +16,9 @@
Sortie
</text>
<text name="My volume label">
- Mon volume :
+ Volume du micro :
</text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Régler le volume avec le curseur."/>
+ <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Régler le volume du micro avec le curseur."/>
<text name="wait_text">
Veuillez patienter
</text>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index ae091aba39..843467df96 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -41,6 +41,9 @@
[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
[[VIEWER_RELEASE_NOTES_URL] [Notes de version]]
</string>
+ <string name="BuildConfig">
+ Configuration de la construction [BUILD_CONFIG]
+ </string>
<string name="AboutPosition">
Vous êtes à [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] dans [REGION], se trouvant à &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
SLURL : &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
@@ -72,6 +75,9 @@ Version serveur vocal : [VOICE_VERSION]
<string name="ErrorFetchingServerReleaseNotesURL">
Erreur lors de la récupération de l&apos;URL des notes de version du serveur.
</string>
+ <string name="BuildConfiguration">
+ Configuration de la construction
+ </string>
<string name="ProgressRestoring">
Restauration...
</string>
@@ -1390,6 +1396,9 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="BodyPartsRightLeg">
Jambe droite
</string>
+ <string name="BodyPartsEnhancedSkeleton">
+ Squelette amélioré
+ </string>
<string name="GraphicsQualityLow">
Faible
</string>
@@ -1838,6 +1847,51 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="Avatar Center">
Centre de l&apos;avatar
</string>
+ <string name="Left Ring Finger">
+ Annulaire gauche
+ </string>
+ <string name="Right Ring Finger">
+ Annulaire droit
+ </string>
+ <string name="Tail Base">
+ Base de la queue
+ </string>
+ <string name="Tail Tip">
+ Bout de la queue
+ </string>
+ <string name="Left Wing">
+ Aile gauche
+ </string>
+ <string name="Right Wing">
+ Aile droite
+ </string>
+ <string name="Jaw">
+ Mâchoire
+ </string>
+ <string name="Alt Left Ear">
+ Oreille gauche différente
+ </string>
+ <string name="Alt Right Ear">
+ Oreille droite différente
+ </string>
+ <string name="Alt Left Eye">
+ Œil gauche différent
+ </string>
+ <string name="Alt Right Eye">
+ Œil droit différent
+ </string>
+ <string name="Tongue">
+ Langue
+ </string>
+ <string name="Groin">
+ Aine
+ </string>
+ <string name="Left Hind Foot">
+ Pied arrière gauche
+ </string>
+ <string name="Right Hind Foot">
+ Pied arrière droit
+ </string>
<string name="Invalid Attachment">
Point d&apos;attache non valide
</string>
@@ -2227,12 +2281,12 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="ATTACH_BELLY">
Ventre
</string>
- <string name="ATTACH_RPEC">
- Pectoral droit
- </string>
- <string name="ATTACH_LPEC">
+ <string name="ATTACH_LEFT_PEC">
Pectoral gauche
</string>
+ <string name="ATTACH_RIGHT_PEC">
+ Pectoral droit
+ </string>
<string name="ATTACH_HUD_CENTER_2">
HUD centre 2
</string>
@@ -2263,6 +2317,51 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="ATTACH_AVATAR_CENTER">
Centre de l&apos;avatar
</string>
+ <string name="ATTACH_LHAND_RING1">
+ Annulaire gauche
+ </string>
+ <string name="ATTACH_RHAND_RING1">
+ Annulaire droit
+ </string>
+ <string name="ATTACH_TAIL_BASE">
+ Base de la queue
+ </string>
+ <string name="ATTACH_TAIL_TIP">
+ Bout de la queue
+ </string>
+ <string name="ATTACH_LWING">
+ Aile gauche
+ </string>
+ <string name="ATTACH_RWING">
+ Aile droite
+ </string>
+ <string name="ATTACH_FACE_JAW">
+ Mâchoire
+ </string>
+ <string name="ATTACH_FACE_LEAR">
+ Oreille gauche différente
+ </string>
+ <string name="ATTACH_FACE_REAR">
+ Oreille droite différente
+ </string>
+ <string name="ATTACH_FACE_LEYE">
+ Œil gauche différent
+ </string>
+ <string name="ATTACH_FACE_REYE">
+ Œil droit différent
+ </string>
+ <string name="ATTACH_FACE_TONGUE">
+ Langue
+ </string>
+ <string name="ATTACH_GROIN">
+ Aine
+ </string>
+ <string name="ATTACH_HIND_LFOOT">
+ Pied arrière gauche
+ </string>
+ <string name="ATTACH_HIND_RFOOT">
+ Pied arrière droit
+ </string>
<string name="CursorPos">
Ligne [LINE], colonne [COLUMN]
</string>
@@ -4252,6 +4351,12 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
<string name="OfflineStatus">
Hors ligne
</string>
+ <string name="not_online_msg">
+ Utilisateur non connecté - le message sera enregistré et livré plus tard.
+ </string>
+ <string name="not_online_inventory">
+ Utilisateur non connecté - l&apos;inventaire a été enregistré
+ </string>
<string name="answered_call">
Votre appel a fait l&apos;objet d&apos;une réponse
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml
index 5baba9fced..0568891264 100644
--- a/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
<text name="AvatarText">
Avatar
</text>
- <slider label="Complessità massima:" name="IndirectMaxComplexity" tool_tip="Definisce il punto in cui un avatar dall&apos;aspetto complesso viene visualizzato come una forma senza dettagli"/>
+ <slider label="Complessità massima:" name="IndirectMaxComplexity" tool_tip="Definisce il punto in cui un avatar dall&apos;aspetto complesso viene visualizzato come JellyDoll"/>
<text name="IndirectMaxComplexityText">
0
</text>
diff --git a/indra/newview/skins/default/xui/it/menu_attachment_other.xml b/indra/newview/skins/default/xui/it/menu_attachment_other.xml
index 60cdd2a91d..5c017a92b5 100644
--- a/indra/newview/skins/default/xui/it/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/it/menu_attachment_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="Chiama" name="Call"/>
<menu_item_call label="Invita al gruppo" name="Invite..."/>
+ <menu_item_call label="Ripristina scheletro" name="Reset Skeleton"/>
<menu_item_call label="Blocca" name="Avatar Mute"/>
<menu_item_call label="Segnala" name="abuse"/>
<menu_item_call label="Congela" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/it/menu_attachment_self.xml b/indra/newview/skins/default/xui/it/menu_attachment_self.xml
index 1539fbafa1..b1ca55b093 100644
--- a/indra/newview/skins/default/xui/it/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/it/menu_attachment_self.xml
@@ -9,6 +9,7 @@
<menu_item_call label="Modifica il mio vestiario" name="Edit Outfit"/>
<menu_item_call label="Modifica la figura corporea" name="Edit My Shape"/>
<menu_item_call label="Altezza di volo" name="Hover Height"/>
+ <menu_item_call label="Ripristina scheletro" name="Reset Skeleton"/>
<menu_item_call label="I miei amici..." name="Friends..."/>
<menu_item_call label="I miei gruppi" name="Groups..."/>
<menu_item_call label="Il mio profilo" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_other.xml b/indra/newview/skins/default/xui/it/menu_avatar_other.xml
index 7042e52943..12e808195e 100644
--- a/indra/newview/skins/default/xui/it/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/it/menu_avatar_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="Chiama" name="Call"/>
<menu_item_call label="Invita al gruppo" name="Invite..."/>
+ <menu_item_call label="Ripristina scheletro" name="Reset Skeleton"/>
<menu_item_call label="Blocca" name="Avatar Mute"/>
<menu_item_call label="Segnala" name="abuse"/>
<menu_item_call label="Congela" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_self.xml b/indra/newview/skins/default/xui/it/menu_avatar_self.xml
index 0c9663fd4c..e48449a04c 100644
--- a/indra/newview/skins/default/xui/it/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/it/menu_avatar_self.xml
@@ -26,6 +26,7 @@
<menu_item_call label="Modifica il mio vestiario" name="Edit Outfit"/>
<menu_item_call label="Modifica la figura corporea" name="Edit My Shape"/>
<menu_item_call label="Altezza di volo" name="Hover Height"/>
+ <menu_item_call label="Ripristina scheletro" name="Reset Skeleton"/>
<menu_item_call label="I miei amici..." name="Friends..."/>
<menu_item_call label="I miei gruppi" name="Groups..."/>
<menu_item_call label="Il mio profilo" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index d52b022c49..90ea601259 100644
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -22,7 +22,6 @@
<menu_item_check label="Non disturbare" name="Do Not Disturb"/>
</menu>
<menu_item_call label="Acquista L$..." name="Buy and Sell L$"/>
- <menu_item_call label="Casella venditore in uscita..." name="MerchantOutbox"/>
<menu_item_call label="Annunci Marketplace..." name="MarketplaceListings"/>
<menu_item_call label="Dashboard dell&apos;account..." name="Manage My Account">
<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=it"/>
@@ -368,6 +367,7 @@
<menu_item_check label="Informazioni sull&apos;animazione" name="Animation Info"/>
<menu_item_check label="Disabilita livello di dettaglio" name="Disable LOD"/>
<menu_item_check label="Mostra schemi collisione" name="Show Collision Skeleton"/>
+ <menu_item_check label="Mostra ossa" name="Show Bones"/>
<menu_item_check label="Mostra bersaglio" name="Display Agent Target"/>
<menu_item_call label="Debug texture dell&apos;avatar" name="Debug Avatar Textures"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index 358f38a137..3a29e4d32f 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -480,6 +480,9 @@ Superato il limite di oggetti collegati [MAX_ATTACHMENTS]. Per favore prima stac
<notification name="CannotWearInfoNotComplete">
Non puoi indossare quell&apos;elemento perchè non è ancora stato caricato. Riprova fra un minuto.
</notification>
+ <notification name="MustEnterPasswordToLogIn">
+ Inserisci la tua password per accedere.
+ </notification>
<notification name="MustHaveAccountToLogIn">
Spiacenti. Un campo è vuoto.
Inserisci il Nome utente del tuo avatar.
@@ -548,6 +551,9 @@ Nota: questa operazione cancellerà la cache.
<notification name="ChangeConnectionPort">
Le impostazioni della porta avranno effetto dopo il riavvio di [APP_NAME].
</notification>
+ <notification name="ChangeDeferredDebugSetting">
+ La modifica della impostazione di debug avrà effetto dopo il riavvio di [APP_NAME].
+ </notification>
<notification name="ChangeSkin">
La nuova pelle comparirà dopo il riavvio di [APP_NAME].
</notification>
@@ -1366,12 +1372,13 @@ Puoi comunque usare [SECOND_LIFE] normalmente e gli altri residenti ti vedranno
<ignore name="ignore" text="Lo scaricamento sta richiedendo parecchio tempo"/>
</form>
</notification>
- <notification name="RegionAndAgentComplexity">
- La tua [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complessità visiva] è [AGENT_COMPLEXITY].
+ <notification name="AgentComplexityWithVisibility">
+ La [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complessità del tuo avatar] è [AGENT_COMPLEXITY].
[OVERLIMIT_MSG]
+ <usetemplate ignoretext="Avvisami se la complessità del mio avatar è eccessiva" name="notifyignore"/>
</notification>
<notification name="AgentComplexity">
- La tua [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complessità visiva] è [AGENT_COMPLEXITY].
+ La [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complessità del tuo avatar] è [AGENT_COMPLEXITY].
</notification>
<notification name="FirstRun">
L&apos;installazione di [APP_NAME] è terminata.
@@ -1486,6 +1493,10 @@ Sostituisci la texture [TEXTURE_NUM] con una a 24-bit 512x512 oppure con una imm
Vuoi veramente impostare come base il terreno corrente, impostarlo come riferimento per i limiti dei rialzi/abbassamenti di tutto il territorio ed il suo valore impostato come base per lo strumento &apos;Ripristina&apos;?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
+ <notification name="ConfirmTextureHeights">
+ Stai per usare valori bassi maggiori dei valori alti di Intervalli altitudine. Vuoi procedere?
+ <usetemplate canceltext="Non chiedere" name="yesnocancelbuttons" notext="Annulla" yestext="OK"/>
+ </notification>
<notification name="MaxAllowedAgentOnRegion">
Puoi avere al massimo [MAX_AGENTS] residenti consentiti.
</notification>
@@ -1724,14 +1735,6 @@ Lasciare il gruppo?
Impossibile abbandonare il gruppo. Non puoi abbandonare il gruppo perché sei l&apos;ultimo proprietario del gruppo. Devi prima assegnare a un altro membro il ruolo di proprietario.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="GroupDepartError">
- Impossibile abbandonare il gruppo: [reason].
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
- <notification name="GroupDepart">
- Hai abbandonato il gruppo [group_name].
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
<notification name="ConfirmKick">
Vuoi veramente espellere tutti i residenti dalla griglia?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="Espelli tutti i residenti"/>
@@ -2406,6 +2409,10 @@ Vuoi disattivare la modalità Non disturbare prima di completare questa transazi
Vuoi veramente eliminare in modo permanente il contenuto del tuo Cestino?
<usetemplate ignoretext="Conferma prima di svuotare la cartella del Cestino inventario" name="okcancelignore" notext="Annulla" yestext="OK"/>
</notification>
+ <notification name="TrashIsFull">
+ Il cestino è troppo pieno. Ciò potrebbe causare problemi durante l&apos;accesso.
+ <usetemplate name="okcancelbuttons" notext="Svuota il cestino più tardi" yestext="Svuota il cestino adesso"/>
+ </notification>
<notification name="ConfirmClearBrowserCache">
Vuoi veramente eliminare la cronologia viaggi, web e ricerche fatte?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
@@ -3262,11 +3269,15 @@ Per sicurezza, verranno bloccati per alcuni secondi.
<notification name="AttachmentSaved">
L&apos;elemento da collegare è stato salvato.
</notification>
- <notification name="PresetNotSaved">
- Errore durante il salvataggio del valore predefinito [NAME].
+ <notification name="AppearanceToXMLSaved">
+ L&apos;aspetto è stato salvato in XML su [PATH]
</notification>
- <notification name="PresetNotDeleted">
- Errore durante l&apos;eliminazione del valore predefinito [NAME].
+ <notification name="AppearanceToXMLFailed">
+ L&apos;aspetto non è stato salvato in XML.
+ icon=&quot;notifytip.tga&quot;
+ name=&quot;PresetNotDeleted&quot;
+ type=&quot;notifytip&quot;&gt;
+Errore nella cancellazione del valore predefinito [NAME].
</notification>
<notification name="UnableToFindHelpTopic">
Impossibile trovare l&apos;argomento nell&apos;aiuto per questo elemento.
@@ -4081,6 +4092,9 @@ Riprova tra un minuto.
<notification name="CantAttachNotEnoughScriptResources">
Risorse di script non sufficienti per collegare l&apos;oggetto.
</notification>
+ <notification name="IllegalAttachment">
+ Il collegamento ha richiesto un punto sull&apos;avatar che non esiste. È stato collegato al petto.
+ </notification>
<notification name="CantDropItemTrialUser">
Non puoi lasciare oggetti qui, prova la zona Prova gratuita.
</notification>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml
index fd1fd57761..ca83490b02 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
<text name="tell_me_label">
Avvisami:
</text>
- <check_box label="Quando spendo o ottengo L$" name="notify_money_change_checkbox"/>
+ <check_box label="Quando spendo $" name="notify_money_spend_checkbox"/>
<check_box label="Quando i miei amici entrano o escono da Second Life" name="friends_online_notify_checkbox"/>
+ <check_box label="Quando ottengo $" name="notify_money_received_checkbox"/>
<text name="show_label">
Mostra sempre:
</text>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
index a042c43431..4fa1835b0e 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
<text name="BetterText">
Migliore
</text>
+ <slider label="Massima conplessità dell&apos;avatar:" name="IndirectMaxComplexity" tool_tip="Definisce il punto in cui un avatar dall&apos;aspetto complesso viene visualizzato come JellyDoll"/>
+ <text name="IndirectMaxComplexityText">
+ 0
+ </text>
<check_box initial_value="true" label="Shader atmosfera..." name="WindLightUseAtmosShaders"/>
<check_box initial_value="true" label="Modello illuminazione avanzato" name="UseLightShaders"/>
<button label="Salva impostazioni come valori predefiniti..." name="PrefSaveButton"/>
<button label="Carica valore predefinito..." name="PrefLoadButton"/>
+ min_val=&quot;0.125&quot;
<button label="Elimina valore predefinito..." name="PrefDeleteButton"/>
<button label="Ripristina impostazioni consigliate" name="Defaults"/>
<button label="Impostazioni avanzate..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/it/panel_sound_devices.xml b/indra/newview/skins/default/xui/it/panel_sound_devices.xml
index b1934fd515..83df46f381 100644
--- a/indra/newview/skins/default/xui/it/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/it/panel_sound_devices.xml
@@ -16,9 +16,9 @@
Output
</text>
<text name="My volume label">
- Il mio volume:
+ Volume microfono:
</text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia il volume utilizzando questa barra"/>
+ <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia il livello del microfono utilizzando questa barra"/>
<text name="wait_text">
Attendi
</text>
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index effd6f5040..bb2f221db9 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -38,6 +38,9 @@
[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
</string>
+ <string name="BuildConfig">
+ Configurazione struttura [BUILD_CONFIG]
+ </string>
<string name="AboutPosition">
Tu sei a [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] che si trova a &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
@@ -69,6 +72,9 @@ Versione server voce: [VOICE_VERSION]
<string name="ErrorFetchingServerReleaseNotesURL">
Errore nel recupero URL note rilascio versione
</string>
+ <string name="BuildConfiguration">
+ Costruisci configurazione
+ </string>
<string name="ProgressRestoring">
Ripristino in corso...
</string>
@@ -1381,6 +1387,9 @@ Prova ad accedere nuovamente tra un minuto.
<string name="BodyPartsRightLeg">
Gamba destra
</string>
+ <string name="BodyPartsEnhancedSkeleton">
+ Scheletro avanzato
+ </string>
<string name="GraphicsQualityLow">
Basso
</string>
@@ -1823,6 +1832,51 @@ Prova ad accedere nuovamente tra un minuto.
<string name="Avatar Center">
Centro avatar
</string>
+ <string name="Left Ring Finger">
+ Anulare sinistro
+ </string>
+ <string name="Right Ring Finger">
+ Anulare destro
+ </string>
+ <string name="Tail Base">
+ Base della coda
+ </string>
+ <string name="Tail Tip">
+ Punta della coda
+ </string>
+ <string name="Left Wing">
+ Ala sinistra
+ </string>
+ <string name="Right Wing">
+ Ala destra
+ </string>
+ <string name="Jaw">
+ Mandibola
+ </string>
+ <string name="Alt Left Ear">
+ Altro orecchio sinistro
+ </string>
+ <string name="Alt Right Ear">
+ Altro orecchio destro
+ </string>
+ <string name="Alt Left Eye">
+ Altro occhio sinistro
+ </string>
+ <string name="Alt Right Eye">
+ Altro occhio destro
+ </string>
+ <string name="Tongue">
+ Lingua
+ </string>
+ <string name="Groin">
+ Inguine
+ </string>
+ <string name="Left Hind Foot">
+ Piede posteriore sinistro
+ </string>
+ <string name="Right Hind Foot">
+ Piede posteriore destro
+ </string>
<string name="Invalid Attachment">
Punto di collegamento non valido
</string>
@@ -2212,12 +2266,12 @@ Prova ad accedere nuovamente tra un minuto.
<string name="ATTACH_BELLY">
Addome
</string>
- <string name="ATTACH_RPEC">
- Petto destro
- </string>
- <string name="ATTACH_LPEC">
+ <string name="ATTACH_LEFT_PEC">
Petto sinistro
</string>
+ <string name="ATTACH_RIGHT_PEC">
+ Petto destro
+ </string>
<string name="ATTACH_HUD_CENTER_2">
HUD in centro 2
</string>
@@ -2248,6 +2302,51 @@ Prova ad accedere nuovamente tra un minuto.
<string name="ATTACH_AVATAR_CENTER">
Centro avatar
</string>
+ <string name="ATTACH_LHAND_RING1">
+ Anulare sinistro
+ </string>
+ <string name="ATTACH_RHAND_RING1">
+ Anulare destro
+ </string>
+ <string name="ATTACH_TAIL_BASE">
+ Base della coda
+ </string>
+ <string name="ATTACH_TAIL_TIP">
+ Punta della coda
+ </string>
+ <string name="ATTACH_LWING">
+ Ala sinistra
+ </string>
+ <string name="ATTACH_RWING">
+ Ala destra
+ </string>
+ <string name="ATTACH_FACE_JAW">
+ Mandibola
+ </string>
+ <string name="ATTACH_FACE_LEAR">
+ Altro orecchio sinistro
+ </string>
+ <string name="ATTACH_FACE_REAR">
+ Altro orecchio destro
+ </string>
+ <string name="ATTACH_FACE_LEYE">
+ Altro occhio sinistro
+ </string>
+ <string name="ATTACH_FACE_REYE">
+ Altro occhio destro
+ </string>
+ <string name="ATTACH_FACE_TONGUE">
+ Lingua
+ </string>
+ <string name="ATTACH_GROIN">
+ Inguine
+ </string>
+ <string name="ATTACH_HIND_LFOOT">
+ Piede posteriore sinistro
+ </string>
+ <string name="ATTACH_HIND_RFOOT">
+ Piede posteriore destro
+ </string>
<string name="CursorPos">
Riga [LINE], Colonna [COLUMN]
</string>
@@ -4174,6 +4273,12 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="OfflineStatus">
Offline
</string>
+ <string name="not_online_msg">
+ Utente non online - il messaggio verrà memorizzato e inviato più tardi.
+ </string>
+ <string name="not_online_inventory">
+ Utente non online - l&apos;inventario è stato salvato
+ </string>
<string name="answered_call">
Risposto alla chiamata
</string>
diff --git a/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml
index a95c45c275..db4e086c13 100644
--- a/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
<text name="AvatarText">
アバター
</text>
- <slider label="最大の複雑さ:" name="IndirectMaxComplexity" tool_tip="どの時点で複雑な表示のアバターをベタ色の人形として表示するかを管理します"/>
+ <slider label="最大の複雑さ:" name="IndirectMaxComplexity" tool_tip="どの点で視覚的に複雑なアバターを JellyDoll として描くかを制御します"/>
<text name="IndirectMaxComplexityText">
0
</text>
diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml
index 7705dd9090..78c36a4392 100644
--- a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="コール" name="Call"/>
<menu_item_call label="グループに招待" name="Invite..."/>
+ <menu_item_call label="スケルトンをリセット" name="Reset Skeleton"/>
<menu_item_call label="ブロック" name="Avatar Mute"/>
<menu_item_call label="報告" name="abuse"/>
<menu_item_call label="フリーズ" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
index e7aa3cfc30..ba46f91504 100644
--- a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
@@ -9,6 +9,7 @@
<menu_item_call label="アウトフィットの編集" name="Edit Outfit"/>
<menu_item_call label="シェイプの編集" name="Edit My Shape"/>
<menu_item_call label="ホバー高さ" name="Hover Height"/>
+ <menu_item_call label="スケルトンをリセット" name="Reset Skeleton"/>
<menu_item_call label="フレンド" name="Friends..."/>
<menu_item_call label="グループ" name="Groups..."/>
<menu_item_call label="プロフィール" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml
index 482f2bdaa5..b7e0537866 100644
--- a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="コール" name="Call"/>
<menu_item_call label="グループに招待" name="Invite..."/>
+ <menu_item_call label="スケルトンをリセット" name="Reset Skeleton"/>
<menu_item_call label="ブロック" name="Avatar Mute"/>
<menu_item_call label="報告" name="abuse"/>
<menu_item_call label="フリーズ" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
index a14cfd5876..a3847ed555 100644
--- a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
@@ -26,6 +26,7 @@
<menu_item_call label="アウトフィットを編集" name="Edit Outfit"/>
<menu_item_call label="シェイプを編集" name="Edit My Shape"/>
<menu_item_call label="ホバー高さ" name="Hover Height"/>
+ <menu_item_call label="スケルトンをリセット" name="Reset Skeleton"/>
<menu_item_call label="フレンド" name="Friends..."/>
<menu_item_call label="グループ" name="Groups..."/>
<menu_item_call label="プロフィール" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index 3c2e294868..c2ae77bef2 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -22,7 +22,6 @@
<menu_item_check label="着信拒否" name="Do Not Disturb"/>
</menu>
<menu_item_call label="L$ の購入..." name="Buy and Sell L$"/>
- <menu_item_call label="マーチャントアウトボックス..." name="MerchantOutbox"/>
<menu_item_call label="マーケティングプレイスのリスト..." name="MarketplaceListings"/>
<menu_item_call label="マイアカウント..." name="Manage My Account">
<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=ja"/>
@@ -421,6 +420,7 @@
<menu_item_check label="LOD を無効にする" name="Disable LOD"/>
<menu_item_check label="キャラクター Vis のデバッグ" name="Debug Character Vis"/>
<menu_item_check label="骨組みの衝突判定を表示する" name="Show Collision Skeleton"/>
+ <menu_item_check label="骨を表示" name="Show Bones"/>
<menu_item_check label="エージェントのターゲットを表示する" name="Display Agent Target"/>
<menu_item_call label="アタッチメントをダンプ" name="Dump Attachments"/>
<menu_item_call label="アバターテクスチャをデバッグ" name="Debug Avatar Textures"/>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index a573e86e5f..54e5f29621 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -498,6 +498,9 @@ L$ が不足しているのでこのグループに参加することができ
<notification name="CannotWearInfoNotComplete">
まだ読み込まれていないため、そのアイテムを装着できません。後でやり直してください。
</notification>
+ <notification name="MustEnterPasswordToLogIn">
+ ログインするためにパスワードを入力してください
+ </notification>
<notification name="MustHaveAccountToLogIn">
注意:記入漏れの箇所があります。
アバターのユーザー名を入力してください。
@@ -566,6 +569,9 @@ L$ が不足しているのでこのグループに参加することができ
<notification name="ChangeConnectionPort">
ポートの設定は [APP_NAME] を再起動後に反映されます。
</notification>
+ <notification name="ChangeDeferredDebugSetting">
+ デバッグ設定の変更は [APP_NAME] を再起動後に反映されます。
+ </notification>
<notification name="ChangeSkin">
新しいスキンは [APP_NAME] を再起動後に表示されます。
</notification>
@@ -1395,12 +1401,13 @@ https://wiki.secondlife.com/wiki/Adding_Spelling_Dictionaries を参照してく
<ignore name="ignore" text="衣類がダウンロードされるまで時間がかかっているとき"/>
</form>
</notification>
- <notification name="RegionAndAgentComplexity">
- ご使用の [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 表示の複雑さ] は [AGENT_COMPLEXITY] です。
+ <notification name="AgentComplexityWithVisibility">
+ あなたの [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 avatar complexity] は [AGENT_COMPLEXITY] です。
[OVERLIMIT_MSG]
+ <usetemplate ignoretext="アバターの複雑度が高すぎる場合は警告する" name="notifyignore"/>
</notification>
<notification name="AgentComplexity">
- ご使用の [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 表示の複雑さ] は [AGENT_COMPLEXITY] です。
+ あなたの [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 avatar complexity] は [AGENT_COMPLEXITY] です。
</notification>
<notification name="FirstRun">
[APP_NAME] のインストールが完了しました。
@@ -1519,6 +1526,10 @@ SHA1 フィンガープリント: [MD5_DIGEST]
操作を続行しますか?
<usetemplate name="okcancelbuttons" notext="取り消し" yestext="OK"/>
</notification>
+ <notification name="ConfirmTextureHeights">
+ 使用しようとしている隆起範囲の低い値は高い値よりも大きくなっています。それでも続けますか?
+ <usetemplate canceltext="聞かないでください" name="yesnocancelbuttons" notext="取り消し" yestext="Ok"/>
+ </notification>
<notification name="MaxAllowedAgentOnRegion">
許可住人は [MAX_AGENTS] 人までです。
</notification>
@@ -1754,14 +1765,6 @@ http://secondlife.com/download から最新バージョンをダウンロード
グループを抜けることができません。グループの最後のオーナーであるため、グループを抜けることができません。最初に、別のメンバーをオーナーの役割に割り当ててください。
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="GroupDepartError">
- グループを抜けることができません: [reason]。
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
- <notification name="GroupDepart">
- グループ [group_name] を抜けました。
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
<notification name="ConfirmKick">
本当に住人全員をグリッドから追い出しますか?
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="住人全員を追い出す"/>
@@ -2442,6 +2445,10 @@ Linden Lab
ごみ箱の中身をすべて削除しますか?
<usetemplate ignoretext="インベントリのごみ箱フォルダを空にする前の確認" name="okcancelignore" notext="キャンセル" yestext="OK"/>
</notification>
+ <notification name="TrashIsFull">
+ ゴミ箱があふれています。これはログイン時に問題を引き起こします。
+ <usetemplate name="okcancelbuttons" notext="後でゴミ箱を空にする" yestext="今すぐゴミ箱を空にする"/>
+ </notification>
<notification name="ConfirmClearBrowserCache">
トラベル、Web、検索の履歴をすべて削除しますか?
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
@@ -3032,7 +3039,7 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
[MESSAGE]
-送信元のオブジェクト:&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;、所有者:[NAME_SLURL]
+送信元のオブジェクト:&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;、所有者:[NAME_SLURL]
<form name="form">
<button name="Gotopage" text="ページに移動"/>
<button name="Cancel" text="取り消し"/>
@@ -3298,11 +3305,15 @@ M キーを押して変更します。
<notification name="AttachmentSaved">
アタッチメントが保存されました。
</notification>
- <notification name="PresetNotSaved">
- プリセット [NAME] の保存中にエラーが発生しました。
+ <notification name="AppearanceToXMLSaved">
+ 外観が XML で [PATH] に保存されました
</notification>
- <notification name="PresetNotDeleted">
- プリセット [NAME] の削除中にエラーが発生しました。
+ <notification name="AppearanceToXMLFailed">
+ 外観を XML に保存できませんでした。
+ icon=&quot;notifytip.tga&quot;
+ name=&quot;PresetNotDeleted&quot;
+ type=&quot;notifytip&quot;&gt;
+プリセット [NAME] の削除エラー。
</notification>
<notification name="UnableToFindHelpTopic">
ヘルプトピックが見つかりませんでした。
@@ -4111,6 +4122,9 @@ M キーを押して変更します。
<notification name="CantAttachNotEnoughScriptResources">
オブジェクトの着用に使用できるスクリプトリソースが足りません。
</notification>
+ <notification name="IllegalAttachment">
+ 添付ファイルはアバターの存在しない点を要求しました。代わりに胸に添付されていました。
+ </notification>
<notification name="CantDropItemTrialUser">
オブジェクトをここにドロップできません。フリートライアル領域をお試しください。
</notification>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml
index 7fd2e31698..4c2906cc18 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
<text name="tell_me_label">
知らせる:
</text>
- <check_box label="リンデンドルを使用・受け取るとき" name="notify_money_change_checkbox"/>
+ <check_box label="L$ を使用する場合" name="notify_money_spend_checkbox"/>
<check_box label="フレンドがログイン・ログアウトするとき" name="friends_online_notify_checkbox"/>
+ <check_box label="L$ を手に入れる場合" name="notify_money_received_checkbox"/>
<text name="show_label" width="300">
常に表示するメッセージ:
</text>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
index 8fbe9b56b9..61d914135d 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
<text name="BetterText">
遅い
</text>
+ <slider label="アバターの最大複雑度:" name="IndirectMaxComplexity" tool_tip="どの点で視覚的に複雑なアバターを JellyDoll として描くかを制御します"/>
+ <text name="IndirectMaxComplexityText">
+ 0
+ </text>
<check_box initial_value="true" label="周囲 (大気) シェーダー" name="WindLightUseAtmosShaders"/>
<check_box initial_value="true" label="高度なライティングモデル" name="UseLightShaders"/>
<button label="設定をプリセットとして保存..." name="PrefSaveButton"/>
<button label="プリセットをロード..." name="PrefLoadButton"/>
+ min_val=&quot;0.125&quot;
<button label="事前設定を削除..." name="PrefDeleteButton"/>
<button label="推奨設定にリセット" name="Defaults"/>
<button label="詳細設定..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_sound_devices.xml b/indra/newview/skins/default/xui/ja/panel_sound_devices.xml
index 0824504235..d57e6c796c 100644
--- a/indra/newview/skins/default/xui/ja/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/ja/panel_sound_devices.xml
@@ -16,9 +16,9 @@
出力
</text>
<text name="My volume label">
- 私の音量:
+ マイク音量:
</text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="スライダーを使って音量を調節します"/>
+ <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="スライダーを使ってマイクレベルを調節します"/>
<text name="wait_text">
しばらくお待ちください。
</text>
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 1ad977fe88..904ce3880a 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -38,7 +38,11 @@
グラフィックを初期化できませんでした。グラフィックドライバを更新してください。
</string>
<string name="AboutHeader">
- [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
+ [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
+[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
+ </string>
+ <string name="BuildConfig">
+ ビルド構成 [BUILD_CONFIG]
</string>
<string name="AboutPosition">
あなたの現在地は、[POSITION_LOCAL_0,number,1]、[POSITION_LOCAL_1,number,1]、[POSITION_LOCAL_2,number,1] の [REGION] です。位置は &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; です。([HOSTIP])
@@ -62,8 +66,8 @@ OS バージョン:[OS_VERSION]
J2C デコーダバージョン:[J2C_VERSION]
オーディオドライババージョン:[AUDIO_DRIVER_VERSION]
-LLCEFLib/CEF バージョン: [LLCEFLIB_VERSION]
-ボイスサーバーバージョン: [VOICE_VERSION]
+LLCEFLib/CEF バージョン: [LLCEFLIB_VERSION]
+ボイスサーバーバージョン:[VOICE_VERSION]
</string>
<string name="AboutTraffic">
パケットロス:[PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
@@ -71,6 +75,9 @@ LLCEFLib/CEF バージョン: [LLCEFLIB_VERSION]
<string name="ErrorFetchingServerReleaseNotesURL">
サーバーのリリースノートの URL を取得中にエラーが発生しました。
</string>
+ <string name="BuildConfiguration">
+ ビルド構成
+ </string>
<string name="ProgressRestoring">
復元中です...
</string>
@@ -1389,6 +1396,9 @@ support@secondlife.com にお問い合わせください。
<string name="BodyPartsRightLeg">
右脚
</string>
+ <string name="BodyPartsEnhancedSkeleton">
+ 拡張スケルトン
+ </string>
<string name="GraphicsQualityLow">
</string>
@@ -1837,6 +1847,51 @@ support@secondlife.com にお問い合わせください。
<string name="Avatar Center">
アバターの中央
</string>
+ <string name="Left Ring Finger">
+ 左薬指
+ </string>
+ <string name="Right Ring Finger">
+ 右薬指
+ </string>
+ <string name="Tail Base">
+ しっぽのベース
+ </string>
+ <string name="Tail Tip">
+ しっぽの先
+ </string>
+ <string name="Left Wing">
+ 左の翼
+ </string>
+ <string name="Right Wing">
+ 右の翼
+ </string>
+ <string name="Jaw">
+ 顎
+ </string>
+ <string name="Alt Left Ear">
+ 代わりの左耳
+ </string>
+ <string name="Alt Right Ear">
+ 代わりの右耳
+ </string>
+ <string name="Alt Left Eye">
+ 代わりの左目
+ </string>
+ <string name="Alt Right Eye">
+ 代わりの右目
+ </string>
+ <string name="Tongue">
+ 舌
+ </string>
+ <string name="Groin">
+ 脚の付け根
+ </string>
+ <string name="Left Hind Foot">
+ 左後足
+ </string>
+ <string name="Right Hind Foot">
+ 右後足
+ </string>
<string name="Invalid Attachment">
装着先が正しくありません
</string>
@@ -2226,12 +2281,12 @@ support@secondlife.com にお問い合わせください。
<string name="ATTACH_BELLY">
お腹
</string>
- <string name="ATTACH_RPEC">
- 右胸筋
- </string>
- <string name="ATTACH_LPEC">
+ <string name="ATTACH_LEFT_PEC">
左胸筋
</string>
+ <string name="ATTACH_RIGHT_PEC">
+ 右胸筋
+ </string>
<string name="ATTACH_HUD_CENTER_2">
HUD(中央 2)
</string>
@@ -2262,6 +2317,51 @@ support@secondlife.com にお問い合わせください。
<string name="ATTACH_AVATAR_CENTER">
アバターの中央
</string>
+ <string name="ATTACH_LHAND_RING1">
+ 左薬指
+ </string>
+ <string name="ATTACH_RHAND_RING1">
+ 右薬指
+ </string>
+ <string name="ATTACH_TAIL_BASE">
+ しっぽのベース
+ </string>
+ <string name="ATTACH_TAIL_TIP">
+ しっぽの先
+ </string>
+ <string name="ATTACH_LWING">
+ 左の翼
+ </string>
+ <string name="ATTACH_RWING">
+ 右の翼
+ </string>
+ <string name="ATTACH_FACE_JAW">
+ 顎
+ </string>
+ <string name="ATTACH_FACE_LEAR">
+ 代わりの左耳
+ </string>
+ <string name="ATTACH_FACE_REAR">
+ 代わりの右耳
+ </string>
+ <string name="ATTACH_FACE_LEYE">
+ 代わりの左目
+ </string>
+ <string name="ATTACH_FACE_REYE">
+ 代わりの右目
+ </string>
+ <string name="ATTACH_FACE_TONGUE">
+ 舌
+ </string>
+ <string name="ATTACH_GROIN">
+ 脚の付け根
+ </string>
+ <string name="ATTACH_HIND_LFOOT">
+ 左後足
+ </string>
+ <string name="ATTACH_HIND_RFOOT">
+ 右後足
+ </string>
<string name="CursorPos">
[LINE] 行目、[COLUMN] 列目
</string>
@@ -4251,6 +4351,12 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="OfflineStatus">
オフライン
</string>
+ <string name="not_online_msg">
+ ユーザーがオンラインでありません - メッセージは保存され、後で配信されます。
+ </string>
+ <string name="not_online_inventory">
+ ユーザーがオンラインでありません - インベントリが保存されました。
+ </string>
<string name="answered_call">
相手がコールを受けました
</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml
index c5e19b2281..6fa25262ea 100644
--- a/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
<text name="AvatarText">
Avatar
</text>
- <slider label="Complexidade máxima:" name="IndirectMaxComplexity" tool_tip="Controla o ponto no qual um avatar visualmente complexo é desenhado como avatar de cor sólida"/>
+ <slider label="Complexidade máxima:" name="IndirectMaxComplexity" tool_tip="Controla o ponto no qual um avatar visualmente complexo é desenhado como uma JellyDoll"/>
<text name="IndirectMaxComplexityText">
0
</text>
diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_other.xml b/indra/newview/skins/default/xui/pt/menu_attachment_other.xml
index 031f6b605a..760197cfb9 100644
--- a/indra/newview/skins/default/xui/pt/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/pt/menu_attachment_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="MI" name="Send IM..."/>
<menu_item_call label="Ligar" name="Call"/>
<menu_item_call label="Convidar para entrar no grupo" name="Invite..."/>
+ <menu_item_call label="Redefinir esqueleto" name="Reset Skeleton"/>
<menu_item_call label="Bloquear" name="Avatar Mute"/>
<menu_item_call label="Denunciar" name="abuse"/>
<menu_item_call label="Congelar" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
index ac79422110..766c8b9754 100644
--- a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
@@ -9,6 +9,7 @@
<menu_item_call label="Editar meu look" name="Edit Outfit"/>
<menu_item_call label="Editar meu corpo" name="Edit My Shape"/>
<menu_item_call label="Altura de foco" name="Hover Height"/>
+ <menu_item_call label="Redefinir esqueleto" name="Reset Skeleton"/>
<menu_item_call label="Meus amigos" name="Friends..."/>
<menu_item_call label="Meus grupos" name="Groups..."/>
<menu_item_call label="Meu perfil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_other.xml b/indra/newview/skins/default/xui/pt/menu_avatar_other.xml
index e32f9059f5..170525cbe6 100644
--- a/indra/newview/skins/default/xui/pt/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/pt/menu_avatar_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="MI" name="Send IM..."/>
<menu_item_call label="Ligar" name="Call"/>
<menu_item_call label="Convidar para entrar no grupo" name="Invite..."/>
+ <menu_item_call label="Redefinir esqueleto" name="Reset Skeleton"/>
<menu_item_call label="Bloquear" name="Avatar Mute"/>
<menu_item_call label="Denunciar" name="abuse"/>
<menu_item_call label="Congelar" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
index a0ac71e018..e826a57b46 100644
--- a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
@@ -26,6 +26,7 @@
<menu_item_call label="Editar meu look" name="Edit Outfit"/>
<menu_item_call label="Editar meu corpo" name="Edit My Shape"/>
<menu_item_call label="Altura de foco" name="Hover Height"/>
+ <menu_item_call label="Redefinir esqueleto" name="Reset Skeleton"/>
<menu_item_call label="Meus amigos" name="Friends..."/>
<menu_item_call label="Meus grupos" name="Groups..."/>
<menu_item_call label="Meu perfil" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index 2df78c6287..7bdcb74a54 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -22,7 +22,6 @@
<menu_item_check label="Não perturbe" name="Do Not Disturb"/>
</menu>
<menu_item_call label="Comprar L$..." name="Buy and Sell L$"/>
- <menu_item_call label="Caixa de saída do lojista..." name="MerchantOutbox"/>
<menu_item_call label="Listagens do Marketplace..." name="MarketplaceListings"/>
<menu_item_call label="Painel da conta..." name="Manage My Account">
<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=pt"/>
@@ -368,6 +367,7 @@
<menu_item_check label="Dados da animação" name="Animation Info"/>
<menu_item_check label="Disable Level Of Detail" name="Disable LOD"/>
<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
+ <menu_item_check label="Exibir ossos" name="Show Bones"/>
<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
<menu_item_call label="Depurar texturas do avatar" name="Debug Avatar Textures"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index cf7400117d..bb428ad5a5 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -477,6 +477,9 @@ Ele ultrapassa o limite de anexos, de [MAX_ATTACHMENTS] objetos. Remova um objet
<notification name="CannotWearInfoNotComplete">
Você não pode vestir este item porque ele ainda não carregou. Tente novamente em um minuto.
</notification>
+ <notification name="MustEnterPasswordToLogIn">
+ Informe sua senha para fazer o login.
+ </notification>
<notification name="MustHaveAccountToLogIn">
Opa! Alguma coisa ficou em branco.
Digite o nome de usuário de seu avatar.
@@ -545,6 +548,9 @@ Nota: Este procedimento limpa o cache.
<notification name="ChangeConnectionPort">
Reinicie o [APP_NAME] para ativar a reconfiguração da porta.
</notification>
+ <notification name="ChangeDeferredDebugSetting">
+ Essa alteração nas configurações de depuração será aplicada depois que você reiniciar o [APP_NAME].
+ </notification>
<notification name="ChangeSkin">
Reinicie o [APP_NAME] para ativar a pele nova.
</notification>
@@ -1359,12 +1365,13 @@ Enquando isso, use o [SECOND_LIFE] normalmente. Seu visual será exibido correta
<ignore name="ignore" text="A roupa está demorando para chegar"/>
</form>
</notification>
- <notification name="RegionAndAgentComplexity">
- Sua [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complexidade visual] é [AGENT_COMPLEXITY].
+ <notification name="AgentComplexityWithVisibility">
+ Sua [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 avatar complexity] é [AGENT_COMPLEXITY].
[OVERLIMIT_MSG]
+ <usetemplate ignoretext="Avise-me se a complexidade do meu avatar for muito alta" name="notifyignore"/>
</notification>
<notification name="AgentComplexity">
- Sua [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 complexidade visual] é [AGENT_COMPLEXITY].
+ Sua [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 avatar complexity] é [AGENT_COMPLEXITY].
</notification>
<notification name="FirstRun">
A instalação do [APP_NAME] está pronta.
@@ -1478,6 +1485,10 @@ Substituir textura [TEXTURE_NUM], com uma imagem de 24-bit 512x512 ou menor e em
Você realmente deseja nivelar o terreno selecionado a partir do centro elevando/reduzindo os limites e o padrão para a ferramenta ´Reverter´?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Executar"/>
</notification>
+ <notification name="ConfirmTextureHeights">
+ Você está prestes a usar valores baixos maiores que os valores altos para os intervalos de elevação. Deseja prosseguir?
+ <usetemplate canceltext="Não perguntar" name="yesnocancelbuttons" notext="Cancelar" yestext="Ok"/>
+ </notification>
<notification name="MaxAllowedAgentOnRegion">
Você pode ter somente [MAX_AGENTS] residentes permitidos.
</notification>
@@ -1714,14 +1725,6 @@ Se você estiver muito ansioso para experimentar os novos recursos e correções
Não foi possível deixar o grupo. Você não pode deixar o grupo pois é o último proprietário dele. Primeiramente, atribua outro membro à função de proprietário.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="GroupDepartError">
- Não foi possível deixar o grupo: [reason].
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
- <notification name="GroupDepart">
- Você deixou o grupo [group_name].
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
<notification name="ConfirmKick">
Tem CERTEZA de que deseja expulsar todos os residentes do grid?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Chutar todos"/>
@@ -2393,6 +2396,10 @@ Deseja desativar o Não perturbe antes de concluir esta transação?
Tem certeza de que deseja excluir o conteúdo da Lixeira? Para sempre?
<usetemplate ignoretext="Confirmar antes de esvaziar a pasta Lixeira" name="okcancelignore" notext="Não" yestext="Sim"/>
</notification>
+ <notification name="TrashIsFull">
+ Sua lixeira está transbordando. Isso pode causar problemas no logon.
+ <usetemplate name="okcancelbuttons" notext="Esvaziarei a lixeira mais tarde" yestext="Esvaziar lixeira agora"/>
+ </notification>
<notification name="ConfirmClearBrowserCache">
Tem certeza de que quer apagar todo o histórico de viagens, web e buscas?
<usetemplate name="okcancelbuttons" notext="Não" yestext="OK"/>
@@ -2977,7 +2984,7 @@ Se permanecer aqui, você será desconectado.
[MESSAGE]
-Do objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, de: [NAME_SLURL]
+Do objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, proprietário: [NAME_SLURL]
<form name="form">
<button name="Gotopage" text="Carregar"/>
<button name="Cancel" text="Cancelar"/>
@@ -3246,11 +3253,15 @@ Para sua segurança, os SLurls serão bloqueados por alguns instantes.
<notification name="AttachmentSaved">
Anexo salvo.
</notification>
- <notification name="PresetNotSaved">
- Erro ao salvar predefinição [NAME].
+ <notification name="AppearanceToXMLSaved">
+ A aparência foi salva como XML em [PATH]
</notification>
- <notification name="PresetNotDeleted">
- Erro ao excluir a predefinição [NAME].
+ <notification name="AppearanceToXMLFailed">
+ Falha ao salvar a aparência como XML.
+ icon=&quot;notifytip.tga&quot;
+ name=&quot;PresetNotDeleted&quot;
+ type=&quot;notifytip&quot;&gt;
+Erro ao excluir a predefinição [NAME].
</notification>
<notification name="UnableToFindHelpTopic">
Nenhum tópico de ajuda foi encontrado com relação a este elemento.
@@ -4063,6 +4074,9 @@ Tente novamente em instantes.
<notification name="CantAttachNotEnoughScriptResources">
Não há recursos de script disponíveis suficientes para anexar objeto!
</notification>
+ <notification name="IllegalAttachment">
+ O anexo solicitou um ponto não existente no avatar. Ele foi anexado ao peito.
+ </notification>
<notification name="CantDropItemTrialUser">
Não é possível largar objetos aqui. Tente a área de Avaliação grátis.
</notification>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml
index 2ffe720ccf..c865de0d08 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
<text name="tell_me_label">
Avisar:
</text>
- <check_box label="Quando eu gasto ou recebo L$" name="notify_money_change_checkbox"/>
+ <check_box label="Quando eu gastar L$" name="notify_money_spend_checkbox"/>
<check_box label="Quando meus amigos entram e saem" name="friends_online_notify_checkbox"/>
+ <check_box label="Quando eu receber L$" name="notify_money_received_checkbox"/>
<text name="show_label">
Mostrar sempre:
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
index 4d3fb89b37..fa17a4ff11 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
@@ -25,10 +25,15 @@ rápido
<text name="BetterText">
Melhor
</text>
+ <slider label="Complexidade máxima do avatar:" name="IndirectMaxComplexity" tool_tip="Controla o ponto no qual um avatar visualmente complexo é desenhado como uma JellyDoll"/>
+ <text name="IndirectMaxComplexityText">
+ 0
+ </text>
<check_box initial_value="true" label="Tonalidades atmosféricas" name="WindLightUseAtmosShaders"/>
<check_box initial_value="true" label="Modelo avançado de luzes" name="UseLightShaders"/>
<button label="Salvar configurações como predefinição..." name="PrefSaveButton"/>
<button label="Carregar predefinição..." name="PrefLoadButton"/>
+ min_val=&quot;0.125&quot;
<button label="Excluir predefinição..." name="PrefDeleteButton"/>
<button label="Redefinir para configurações recomendadas" left="110" name="Defaults"/>
<button label="Configurações avançadas..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_sound_devices.xml b/indra/newview/skins/default/xui/pt/panel_sound_devices.xml
index 66db89f48f..97d6c0ef36 100644
--- a/indra/newview/skins/default/xui/pt/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/pt/panel_sound_devices.xml
@@ -16,9 +16,9 @@
Saída
</text>
<text name="My volume label">
- Meu volume:
+ Volume do microfone:
</text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Mude o volume usando o controle deslizante"/>
+ <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Mude o volume do microfone usando o controle deslizante"/>
<text name="wait_text">
Aguarde
</text>
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index 50bb9b7e66..b3cb50a01e 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -30,7 +30,10 @@
</string>
<string name="AboutHeader">
[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
-[[VIEWER_RELEASE_NOTES_URL] [Notas da versão]]
+[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
+ </string>
+ <string name="BuildConfig">
+ Configuração do corpo [BUILD_CONFIG]
</string>
<string name="AboutPosition">
Você está em [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] em [REGION] localizado em &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
@@ -63,6 +66,9 @@ Versão do servidor de voz: [VOICE_VERSION]
<string name="ErrorFetchingServerReleaseNotesURL">
Erro ao obter URL de notas de versão do servidor.
</string>
+ <string name="BuildConfiguration">
+ Configuração do corpo
+ </string>
<string name="ProgressRestoring">
Restaurando...
</string>
@@ -1336,6 +1342,9 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
<string name="BodyPartsRightLeg">
Perna direita
</string>
+ <string name="BodyPartsEnhancedSkeleton">
+ Esqueleto aprimorado
+ </string>
<string name="GraphicsQualityLow">
Baixo
</string>
@@ -1778,6 +1787,51 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
<string name="Avatar Center">
Centro do avatar
</string>
+ <string name="Left Ring Finger">
+ Anelar esquerdo
+ </string>
+ <string name="Right Ring Finger">
+ Anelar direito
+ </string>
+ <string name="Tail Base">
+ Base do rabo
+ </string>
+ <string name="Tail Tip">
+ Ponta do rabo
+ </string>
+ <string name="Left Wing">
+ Asa esquerda
+ </string>
+ <string name="Right Wing">
+ Asa direita
+ </string>
+ <string name="Jaw">
+ Maxilar
+ </string>
+ <string name="Alt Left Ear">
+ Orelha esquerda alt.
+ </string>
+ <string name="Alt Right Ear">
+ Orelha direita alt.
+ </string>
+ <string name="Alt Left Eye">
+ Olho esquerdo alt.
+ </string>
+ <string name="Alt Right Eye">
+ Olho direito alt.
+ </string>
+ <string name="Tongue">
+ Língua
+ </string>
+ <string name="Groin">
+ Virilha
+ </string>
+ <string name="Left Hind Foot">
+ Pata esq. traseira
+ </string>
+ <string name="Right Hind Foot">
+ Pata dir. traseira
+ </string>
<string name="Invalid Attachment">
Ponto de encaixe inválido
</string>
@@ -2167,12 +2221,12 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
<string name="ATTACH_BELLY">
Barriga
</string>
- <string name="ATTACH_RPEC">
- Peitorais D
- </string>
- <string name="ATTACH_LPEC">
+ <string name="ATTACH_LEFT_PEC">
Peitorais E
</string>
+ <string name="ATTACH_RIGHT_PEC">
+ Peitorais D
+ </string>
<string name="ATTACH_HUD_CENTER_2">
HUD Central 2
</string>
@@ -2203,6 +2257,51 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
<string name="ATTACH_AVATAR_CENTER">
Centro do avatar
</string>
+ <string name="ATTACH_LHAND_RING1">
+ Anelar esquerdo
+ </string>
+ <string name="ATTACH_RHAND_RING1">
+ Anelar direito
+ </string>
+ <string name="ATTACH_TAIL_BASE">
+ Base do rabo
+ </string>
+ <string name="ATTACH_TAIL_TIP">
+ Ponta do rabo
+ </string>
+ <string name="ATTACH_LWING">
+ Asa esquerda
+ </string>
+ <string name="ATTACH_RWING">
+ Asa direita
+ </string>
+ <string name="ATTACH_FACE_JAW">
+ Maxilar
+ </string>
+ <string name="ATTACH_FACE_LEAR">
+ Orelha esquerda alt.
+ </string>
+ <string name="ATTACH_FACE_REAR">
+ Orelha direita alt.
+ </string>
+ <string name="ATTACH_FACE_LEYE">
+ Olho esquerdo alt.
+ </string>
+ <string name="ATTACH_FACE_REYE">
+ Olho direito alt.
+ </string>
+ <string name="ATTACH_FACE_TONGUE">
+ Língua
+ </string>
+ <string name="ATTACH_GROIN">
+ Virilha
+ </string>
+ <string name="ATTACH_HIND_LFOOT">
+ Pata esq. traseira
+ </string>
+ <string name="ATTACH_HIND_RFOOT">
+ Pata dir. traseira
+ </string>
<string name="CursorPos">
Linha [LINE], Coluna [COLUMN]
</string>
@@ -4128,6 +4227,12 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="OfflineStatus">
Desconectado
</string>
+ <string name="not_online_msg">
+ O usuário não está online. As mensagens serão armazenadas e enviadas mais tarde.
+ </string>
+ <string name="not_online_inventory">
+ O usuário não está online. O inventário foi salvo.
+ </string>
<string name="answered_call">
Ligação atendida
</string>
diff --git a/indra/newview/skins/default/xui/ru/menu_attachment_other.xml b/indra/newview/skins/default/xui/ru/menu_attachment_other.xml
index bd1ed8d1fa..b7ffb0e9fc 100644
--- a/indra/newview/skins/default/xui/ru/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/ru/menu_attachment_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="Звонок" name="Call"/>
<menu_item_call label="Пригласить в группу" name="Invite..."/>
+ <menu_item_call label="Сброс скелета" name="Reset Skeleton"/>
<menu_item_call label="Заблокировать" name="Avatar Mute"/>
<menu_item_call label="Пожаловаться" name="abuse"/>
<menu_item_call label="Заморозить" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/ru/menu_attachment_self.xml b/indra/newview/skins/default/xui/ru/menu_attachment_self.xml
index 033d36484b..eb38371e28 100644
--- a/indra/newview/skins/default/xui/ru/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/ru/menu_attachment_self.xml
@@ -9,6 +9,7 @@
<menu_item_call label="Изменить костюм" name="Edit Outfit"/>
<menu_item_call label="Изменить фигуру" name="Edit My Shape"/>
<menu_item_call label="Высота парения" name="Hover Height"/>
+ <menu_item_call label="Сброс скелета" name="Reset Skeleton"/>
<menu_item_call label="Мои друзья" name="Friends..."/>
<menu_item_call label="Мои группы" name="Groups..."/>
<menu_item_call label="Мой профиль" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_other.xml b/indra/newview/skins/default/xui/ru/menu_avatar_other.xml
index 74f1a39658..cffb4bbe7b 100644
--- a/indra/newview/skins/default/xui/ru/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/ru/menu_avatar_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="Звонок" name="Call"/>
<menu_item_call label="Пригласить в группу" name="Invite..."/>
+ <menu_item_call label="Сброс скелета" name="Reset Skeleton"/>
<menu_item_call label="Заблокировать" name="Avatar Mute"/>
<menu_item_call label="Пожаловаться" name="abuse"/>
<menu_item_call label="Заморозить" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_self.xml b/indra/newview/skins/default/xui/ru/menu_avatar_self.xml
index 8feaa3b99a..97e2a8b295 100644
--- a/indra/newview/skins/default/xui/ru/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/ru/menu_avatar_self.xml
@@ -26,6 +26,7 @@
<menu_item_call label="Изменить костюм" name="Edit Outfit"/>
<menu_item_call label="Изменить фигуру" name="Edit My Shape"/>
<menu_item_call label="Высота парения" name="Hover Height"/>
+ <menu_item_call label="Сброс скелета" name="Reset Skeleton"/>
<menu_item_call label="Мои друзья" name="Friends..."/>
<menu_item_call label="Мои группы" name="Groups..."/>
<menu_item_call label="Мой профиль" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index 2044844c58..6158363e5d 100644
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -22,7 +22,6 @@
<menu_item_check label="Не беспокоить" name="Do Not Disturb"/>
</menu>
<menu_item_call label="Купить L$..." name="Buy and Sell L$"/>
- <menu_item_call label="Торговые исходящие..." name="MerchantOutbox"/>
<menu_item_call label="Списки товаров торгового центра..." name="MarketplaceListings"/>
<menu_item_call label="Информационная панель аккаунта..." name="Manage My Account"/>
<menu_item_call label="Настройки..." name="Preferences"/>
@@ -418,6 +417,7 @@
<menu_item_check label="Отключить детализацию" name="Disable LOD"/>
<menu_item_check label="Отладка видимости персонажа" name="Debug Character Vis"/>
<menu_item_check label="Показать скелет" name="Show Collision Skeleton"/>
+ <menu_item_check label="Показать кости" name="Show Bones"/>
<menu_item_check label="Отобразить действие агента" name="Display Agent Target"/>
<menu_item_call label="Вывод присоединений" name="Dump Attachments"/>
<menu_item_call label="Отладка текстур аватара" name="Debug Avatar Textures"/>
diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml
index fabc064525..5e7c2ed7d0 100644
--- a/indra/newview/skins/default/xui/ru/notifications.xml
+++ b/indra/newview/skins/default/xui/ru/notifications.xml
@@ -480,6 +480,9 @@
<notification name="CannotWearInfoNotComplete">
Нельзя надеть эту вещь, так как она еще не загружена. Повторите попытку через минуту.
</notification>
+ <notification name="MustEnterPasswordToLogIn">
+ Введите пароль для входа в мир.
+ </notification>
<notification name="MustHaveAccountToLogIn">
Ай-яй-яй! Что-то осталось незаполненным.
Необходимо ввести имя пользователя для вашего аватара.
@@ -548,6 +551,9 @@
<notification name="ChangeConnectionPort">
Настройки порта начнут действовать после перезапуска [APP_NAME].
</notification>
+ <notification name="ChangeDeferredDebugSetting">
+ Эта настройка отладки вступит в силу после перезапуска [APP_NAME].
+ </notification>
<notification name="ChangeSkin">
Новая кожа будет видна после перезапуска [APP_NAME].
</notification>
@@ -1366,12 +1372,13 @@
<ignore name="ignore" text="Загрузка одежды занимает значительное время"/>
</form>
</notification>
- <notification name="RegionAndAgentComplexity">
- Ваша [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 визуальная сложность]: [AGENT_COMPLEXITY].
+ <notification name="AgentComplexityWithVisibility">
+ Ваша [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 сложность аватара]: [AGENT_COMPLEXITY].
[OVERLIMIT_MSG]
+ <usetemplate ignoretext="Предупреждать о превышении сложности аватара" name="notifyignore"/>
</notification>
<notification name="AgentComplexity">
- Ваша [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 визуальная сложность]: [AGENT_COMPLEXITY].
+ Ваша [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 сложность аватара]: [AGENT_COMPLEXITY].
</notification>
<notification name="FirstRun">
Установка [APP_NAME] завершена.
@@ -1486,6 +1493,10 @@
Вы действительно хотите зафиксировать текущий ландшафт, сделать его высоту средней точкой для верхней и нижней точек ландшафта и принять по умолчанию для функции «Вернуть»?
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="OK"/>
</notification>
+ <notification name="ConfirmTextureHeights">
+ Вы собираетесь использовать минимальные значения, которые больше, чем максимальные для диапазона высот. Начать?
+ <usetemplate canceltext="Не спрашивать" name="yesnocancelbuttons" notext="Отмена" yestext="OK"/>
+ </notification>
<notification name="MaxAllowedAgentOnRegion">
У вас может быть не более [MAX_AGENTS] допущенных жителей.
</notification>
@@ -1723,14 +1734,6 @@ http://secondlife.com/download.
Невозможно покинуть группу. Вы не можете покинуть группу, так как вы ее последний владелец. Сначала назначьте владельцем другого участника.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="GroupDepartError">
- Невозможно покинуть группу: [reason].
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
- <notification name="GroupDepart">
- Вы покинули группу [group_name].
- <usetemplate name="okbutton" yestext="OK"/>
- </notification>
<notification name="ConfirmKick">
Вы ДЕЙСТВИТЕЛЬНО хотите выбросить всех жителей с сетки?
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="Выбросить всех жителей"/>
@@ -2400,6 +2403,10 @@ http://secondlife.com/download.
Вы действительно хотите необратимо удалить содержимое корзины?
<usetemplate ignoretext="Подтверждать перед опорожнением корзины инвентаря" name="okcancelignore" notext="Отмена" yestext="OK"/>
</notification>
+ <notification name="TrashIsFull">
+ Ваша корзина переполнена. Это может вызвать проблемы при входе.
+ <usetemplate name="okcancelbuttons" notext="Я очищу корзину позже" yestext="Очистить корзину сейчас"/>
+ </notification>
<notification name="ConfirmClearBrowserCache">
Вы действительно хотите удалить журнал своих перемещений, веб-страниц и поиска?
<usetemplate name="okcancelbuttons" notext="Отмена" yestext="OK"/>
@@ -3257,11 +3264,15 @@ http://secondlife.com/download.
<notification name="AttachmentSaved">
Присоединение сохранено.
</notification>
- <notification name="PresetNotSaved">
- Ошибка при сохранении пресета [NAME].
+ <notification name="AppearanceToXMLSaved">
+ Внешность сохранена в формате XML в [PATH]
</notification>
- <notification name="PresetNotDeleted">
- Ошибка при удалении пресета [NAME].
+ <notification name="AppearanceToXMLFailed">
+ Не удалось сохранить внешность в XML.
+ icon=&quot;notifytip.tga&quot;
+ name=&quot;PresetNotDeleted&quot;
+ type=&quot;notifytip&quot;&gt;
+Ошибка при удалении пресета [NAME].
</notification>
<notification name="UnableToFindHelpTopic">
Невозможно найти раздел справки для этого элемента.
@@ -4075,6 +4086,9 @@ http://secondlife.com/download.
<notification name="CantAttachNotEnoughScriptResources">
Недостаточно свободных ресурсов скриптинга для присоединения объекта!
</notification>
+ <notification name="IllegalAttachment">
+ Прикрепляемый объект потребовал несуществующей точки на аватаре. Он был прикреплен к груди.
+ </notification>
<notification name="CantDropItemTrialUser">
Здесь нельзя сбрасывать объекты; перейдите в бесплатную область для гостей.
</notification>
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/ru/panel_preferences_alerts.xml
index 9d7ae546fd..48e03b98e8 100644
--- a/indra/newview/skins/default/xui/ru/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
<text name="tell_me_label">
Сообщать мне:
</text>
- <check_box label="о расходах и доходах" name="notify_money_change_checkbox"/>
+ <check_box label="О расходах" name="notify_money_spend_checkbox"/>
<check_box label="о входе и выходе моих друзей" name="friends_online_notify_checkbox"/>
+ <check_box label="О доходах" name="notify_money_received_checkbox"/>
<text name="show_label">
Всегда показывать:
</text>
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml
index 31c9b2135d..200241bd4d 100644
--- a/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
<text name="BetterText">
Качественней
</text>
+ <slider label="Максимальная сложность аватара:" name="IndirectMaxComplexity" tool_tip="Указывает расстояние, начиная с которого визуально сложный аватар рисуется как мармеладный мишка"/>
+ <text name="IndirectMaxComplexityText">
+ 0
+ </text>
<check_box initial_value="true" label="Атмосферные шейдеры" name="WindLightUseAtmosShaders"/>
<check_box initial_value="true" label="Расширенная модель освещения" name="UseLightShaders"/>
<button label="Сохранить настройки как пресет..." name="PrefSaveButton"/>
<button label="Загрузить пресет..." name="PrefLoadButton"/>
+ min_val=&quot;0,125&quot;
<button label="Удалить пресет..." name="PrefDeleteButton"/>
<button label="Вернуть рекомендуемые настройки" name="Defaults"/>
<button label="Расширенные настройки..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_sound_devices.xml b/indra/newview/skins/default/xui/ru/panel_sound_devices.xml
index 98dab288a3..3de84fb937 100644
--- a/indra/newview/skins/default/xui/ru/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/ru/panel_sound_devices.xml
@@ -16,9 +16,9 @@
Выход
</text>
<text name="My volume label">
- Моя громкость:
+ Громкость микрофона:
</text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Измените значение, используя ползунок"/>
+ <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Измените уровень в микрофоне, используя ползунок"/>
<text name="wait_text">
Подождите
</text>
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index 04bb55c965..da03af055c 100644
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -41,6 +41,9 @@
[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
</string>
+ <string name="BuildConfig">
+ Конфигурация построения [BUILD_CONFIG]
+ </string>
<string name="AboutPosition">
Вы в точке [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] в регионе «[REGION]», расположенном на &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
@@ -72,6 +75,9 @@ SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
<string name="ErrorFetchingServerReleaseNotesURL">
Ошибка при получении URL-адреса заметок о выпуске сервера.
</string>
+ <string name="BuildConfiguration">
+ Конфигурация построения
+ </string>
<string name="ProgressRestoring">
Восстановление...
</string>
@@ -1387,6 +1393,9 @@ support@secondlife.com.
<string name="BodyPartsRightLeg">
Правая нога
</string>
+ <string name="BodyPartsEnhancedSkeleton">
+ Улучшенный скелет
+ </string>
<string name="GraphicsQualityLow">
низкая
</string>
@@ -1835,6 +1844,51 @@ support@secondlife.com.
<string name="Avatar Center">
Центр аватара
</string>
+ <string name="Left Ring Finger">
+ Левый безымянный палец
+ </string>
+ <string name="Right Ring Finger">
+ Правый безымянный палец
+ </string>
+ <string name="Tail Base">
+ Основание хвоста
+ </string>
+ <string name="Tail Tip">
+ Кончик хвоста
+ </string>
+ <string name="Left Wing">
+ Левое крыло
+ </string>
+ <string name="Right Wing">
+ Правое крыло
+ </string>
+ <string name="Jaw">
+ Пасть
+ </string>
+ <string name="Alt Left Ear">
+ Альт. левое ухо
+ </string>
+ <string name="Alt Right Ear">
+ Альт. правое ухо
+ </string>
+ <string name="Alt Left Eye">
+ Альт. левый глаз
+ </string>
+ <string name="Alt Right Eye">
+ Альт. правый глаз
+ </string>
+ <string name="Tongue">
+ Язык
+ </string>
+ <string name="Groin">
+ Пах
+ </string>
+ <string name="Left Hind Foot">
+ Левая задняя нога
+ </string>
+ <string name="Right Hind Foot">
+ Правая задняя нога
+ </string>
<string name="Invalid Attachment">
Неверная точка присоединения
</string>
@@ -2224,12 +2278,12 @@ support@secondlife.com.
<string name="ATTACH_BELLY">
Живот
</string>
- <string name="ATTACH_RPEC">
- Правая грудь
- </string>
- <string name="ATTACH_LPEC">
+ <string name="ATTACH_LEFT_PEC">
Левая грудь
</string>
+ <string name="ATTACH_RIGHT_PEC">
+ Правая грудь
+ </string>
<string name="ATTACH_HUD_CENTER_2">
Данные в игре в центре 2
</string>
@@ -2260,6 +2314,51 @@ support@secondlife.com.
<string name="ATTACH_AVATAR_CENTER">
Центр аватара
</string>
+ <string name="ATTACH_LHAND_RING1">
+ Левый безымянный палец
+ </string>
+ <string name="ATTACH_RHAND_RING1">
+ Правый безымянный палец
+ </string>
+ <string name="ATTACH_TAIL_BASE">
+ Основание хвоста
+ </string>
+ <string name="ATTACH_TAIL_TIP">
+ Кончик хвоста
+ </string>
+ <string name="ATTACH_LWING">
+ Левое крыло
+ </string>
+ <string name="ATTACH_RWING">
+ Правое крыло
+ </string>
+ <string name="ATTACH_FACE_JAW">
+ Пасть
+ </string>
+ <string name="ATTACH_FACE_LEAR">
+ Альт. левое ухо
+ </string>
+ <string name="ATTACH_FACE_REAR">
+ Альт. правое ухо
+ </string>
+ <string name="ATTACH_FACE_LEYE">
+ Альт. левый глаз
+ </string>
+ <string name="ATTACH_FACE_REYE">
+ Альт. правый глаз
+ </string>
+ <string name="ATTACH_FACE_TONGUE">
+ Язык
+ </string>
+ <string name="ATTACH_GROIN">
+ Пах
+ </string>
+ <string name="ATTACH_HIND_LFOOT">
+ Левая задняя нога
+ </string>
+ <string name="ATTACH_HIND_RFOOT">
+ Правая задняя нога
+ </string>
<string name="CursorPos">
Строка [LINE], столбец [COLUMN]
</string>
@@ -4247,10 +4346,10 @@ support@secondlife.com.
Оффлайн
</string>
<string name="not_online_msg">
- Пользователь оффлайн - сообщение будет сохранено и доставлено позже.
+ Пользователь не в онлайне - сообщение будет сохранено и доставлено позже.
</string>
<string name="not_online_inventory">
- Пользователь оффлайн - инвентарь сохранен.
+ Пользователь не в онлайне - инвентарь сохранен.
</string>
<string name="answered_call">
На ваш звонок ответили
diff --git a/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml
index 53938117fd..867e15a3ca 100644
--- a/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
<text name="AvatarText">
Avatar
</text>
- <slider label="Maksimum karmaşıklık:" name="IndirectMaxComplexity" tool_tip="Görsel olarak karmaşık yapıdaki bir avatarın hangi noktada jelibon gibi tek renkli olarak çizileceğini kontrol eder"/>
+ <slider label="Maksimum karmaşıklık:" name="IndirectMaxComplexity" tool_tip="Görsel olarak karmaşık bir avatarın hangi noktadan itibaren JellyDolll olarak çizileceğini kontrol eder"/>
<text name="IndirectMaxComplexityText">
0
</text>
diff --git a/indra/newview/skins/default/xui/tr/menu_attachment_other.xml b/indra/newview/skins/default/xui/tr/menu_attachment_other.xml
index 8a669a28f7..d09174dcc0 100644
--- a/indra/newview/skins/default/xui/tr/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/tr/menu_attachment_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="Aİ" name="Send IM..."/>
<menu_item_call label="Ara" name="Call"/>
<menu_item_call label="Gruba Davet Et" name="Invite..."/>
+ <menu_item_call label="İskeleti Sıfırla" name="Reset Skeleton"/>
<menu_item_call label="Engelle" name="Avatar Mute"/>
<menu_item_call label="Raporla" name="abuse"/>
<menu_item_call label="Dondur" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/tr/menu_attachment_self.xml b/indra/newview/skins/default/xui/tr/menu_attachment_self.xml
index c49f817a45..9027f09d8e 100644
--- a/indra/newview/skins/default/xui/tr/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/tr/menu_attachment_self.xml
@@ -9,6 +9,7 @@
<menu_item_call label="Dış Görünümümü Düzenle" name="Edit Outfit"/>
<menu_item_call label="Şeklimi Düzenle" name="Edit My Shape"/>
<menu_item_call label="Konum Yüksekliği" name="Hover Height"/>
+ <menu_item_call label="İskeleti Sıfırla" name="Reset Skeleton"/>
<menu_item_call label="Arkadaşlarım" name="Friends..."/>
<menu_item_call label="Gruplarım" name="Groups..."/>
<menu_item_call label="Profilim" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_other.xml b/indra/newview/skins/default/xui/tr/menu_avatar_other.xml
index e4ba3a5616..9e95b3033a 100644
--- a/indra/newview/skins/default/xui/tr/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/tr/menu_avatar_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="Aİ" name="Send IM..."/>
<menu_item_call label="Ara" name="Call"/>
<menu_item_call label="Gruba Davet Et" name="Invite..."/>
+ <menu_item_call label="İskeleti Sıfırla" name="Reset Skeleton"/>
<menu_item_call label="Engelle" name="Avatar Mute"/>
<menu_item_call label="Raporla" name="abuse"/>
<menu_item_call label="Dondur" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_self.xml b/indra/newview/skins/default/xui/tr/menu_avatar_self.xml
index 4dfa42c347..3078733478 100644
--- a/indra/newview/skins/default/xui/tr/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/tr/menu_avatar_self.xml
@@ -26,6 +26,7 @@
<menu_item_call label="Dış Görünümümü Düzenle" name="Edit Outfit"/>
<menu_item_call label="Şeklimi Düzenle" name="Edit My Shape"/>
<menu_item_call label="Konum Yüksekliği" name="Hover Height"/>
+ <menu_item_call label="İskeleti Sıfırla" name="Reset Skeleton"/>
<menu_item_call label="Arkadaşlarım" name="Friends..."/>
<menu_item_call label="Gruplarım" name="Groups..."/>
<menu_item_call label="Profilim" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
index 324e549a75..39636f2ebf 100644
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -22,7 +22,6 @@
<menu_item_check label="Rahatsız Etme" name="Do Not Disturb"/>
</menu>
<menu_item_call label="L$ Satın Al..." name="Buy and Sell L$"/>
- <menu_item_call label="Satıcı Giden Kutusu..." name="MerchantOutbox"/>
<menu_item_call label="Pazaryeri ilanları..." name="MarketplaceListings"/>
<menu_item_call label="Hesap kontrol paneli..." name="Manage My Account"/>
<menu_item_call label="Tercihler..." name="Preferences"/>
@@ -419,6 +418,7 @@
<menu_item_check label="Ayrıntı Seviyesi Bilgisini Devre Dışı Bırak" name="Disable LOD"/>
<menu_item_check label="Debug Character Vis" name="Debug Character Vis"/>
<menu_item_check label="Çarpışma İskeletini Göster" name="Show Collision Skeleton"/>
+ <menu_item_check label="Kemikleri Göster" name="Show Bones"/>
<menu_item_check label="Aracı Hedefini Göster" name="Display Agent Target"/>
<menu_item_call label="Aksesuarların Dökümünü Al" name="Dump Attachments"/>
<menu_item_call label="Avatar Dokuları İçin Hata Ayıklama" name="Debug Avatar Textures"/>
diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml
index a982dc03ed..fb38486a9e 100644
--- a/indra/newview/skins/default/xui/tr/notifications.xml
+++ b/indra/newview/skins/default/xui/tr/notifications.xml
@@ -480,6 +480,9 @@ Dış görünüm klasöründe hiç giysi, vücut bölümü ya da aksesuar yok.
<notification name="CannotWearInfoNotComplete">
Bu öğe henüz yüklenmediği için kullanamazsınız. Lütfen bir dakika sonra tekrar deneyin.
</notification>
+ <notification name="MustEnterPasswordToLogIn">
+ Oturum açmak için lütfen parolanızı girin.
+ </notification>
<notification name="MustHaveAccountToLogIn">
Hata! Boş bırakılan alan(lar) var.
Avatarınızın Kullanıcı adını girmeniz gerekmektedir.
@@ -548,6 +551,9 @@ Not: Bu işlem önbelleği temizleyecek.
<notification name="ChangeConnectionPort">
Port ayarları, [APP_NAME] uygulamasını yeniden başlattıktan sonra geçerli olur.
</notification>
+ <notification name="ChangeDeferredDebugSetting">
+ Bu hata ayıklama ayarı değişikliği [APP_NAME] uygulamasını yeniden başlattıktan sonra geçerli olacak.
+ </notification>
<notification name="ChangeSkin">
Yeni dış katman [APP_NAME] uygulamasını yeniden başlattıktan sonra görüntülenecek.
</notification>
@@ -1366,12 +1372,13 @@ Yeni bir ana konum ayarlamak isteyebilirsiniz.
<ignore name="ignore" text="Giysilerin karşıdan yüklenmesi uzun zaman alıyor"/>
</form>
</notification>
- <notification name="RegionAndAgentComplexity">
- [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 Görsel karmaşıklık] seviyeniz: [AGENT_COMPLEXITY].
+ <notification name="AgentComplexityWithVisibility">
+ [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 avatar complexity] düzeyiniz [AGENT_COMPLEXITY].
[OVERLIMIT_MSG]
+ <usetemplate ignoretext="Avatarımın karmaşıklık düzeyi çok yüksekse beni uyar" name="notifyignore"/>
</notification>
<notification name="AgentComplexity">
- [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 Görsel karmaşıklık] seviyeniz: [AGENT_COMPLEXITY].
+ [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 avatar complexity] düzeyiniz [AGENT_COMPLEXITY].
</notification>
<notification name="FirstRun">
[APP_NAME] yüklemesi tamamlandı.
@@ -1486,6 +1493,10 @@ Lütfen sadece bir nesne seçin ve tekrar deneyin.
Geçerli yüzeyi bu şekilde kaydetmeyi, yüzey yükseltme/alçaltma sınırları için merkez olarak kullanmayı ve &apos;Geri Çevir&apos; aracı için varsayılan olarak ayarlamayı gerçekten istiyor musunuz?
<usetemplate name="okcancelbuttons" notext="İptal" yestext="Tamam"/>
</notification>
+ <notification name="ConfirmTextureHeights">
+ Yükselti Ayarları için girdiğiniz düşük değer, yüksek değerden daha fazla. Devam edilsin mi?
+ <usetemplate canceltext="Tekrar Sorma" name="yesnocancelbuttons" notext="İptal Et" yestext="Tamam"/>
+ </notification>
<notification name="MaxAllowedAgentOnRegion">
Sadece [MAX_AGENTS] tane İzin Verilen Sakin belirleyebilirsiniz.
</notification>
@@ -1723,14 +1734,6 @@ Gruptan ayrılmak istiyor musunuz?
Gruptan ayrılınamıyor. Gruptan ayrılamazsınız çünkü grubun son sahibisiniz. Lütfen önce sahip rolüne başka bir üye atayın.
<usetemplate name="okbutton" yestext="Tamam"/>
</notification>
- <notification name="GroupDepartError">
- Gruptan ayrılma işlemi yapılamıyor: [reason].
- <usetemplate name="okbutton" yestext="Tamam"/>
- </notification>
- <notification name="GroupDepart">
- [group_name] grubundan ayrıldınız.
- <usetemplate name="okbutton" yestext="Tamam"/>
- </notification>
<notification name="ConfirmKick">
Tüm Sakinleri GERÇEKTEN ağ dışına çıkarmak istiyor musunuz?
<usetemplate name="okcancelbuttons" notext="İptal Et" yestext="Tüm Sakinleri Çıkar"/>
@@ -2400,6 +2403,10 @@ Bu işlemi tamamlamadan önce Rahatsız Etme&apos;yi kapatmak ister misiniz?
Çöp kutunuzun içeriğini kalıcı olarak silmek istediğinize emin misiniz?
<usetemplate ignoretext="Envanter Çöp Kutusu klasörünü boşaltmadan önce doğrulama iste" name="okcancelignore" notext="İptal" yestext="Tamam"/>
</notification>
+ <notification name="TrashIsFull">
+ Çöpte yer kalmamış. Bu durum oturum açma sırasında sorun yaşamanıza neden olabilir.
+ <usetemplate name="okcancelbuttons" notext="Çöpü daha sonra boşaltacağım" yestext="Çöp kutusunu şimdi boşalt"/>
+ </notification>
<notification name="ConfirmClearBrowserCache">
Seyahat, web ve arama geçmişinizi silmek istediğinize emin misiniz?
<usetemplate name="okcancelbuttons" notext="İptal" yestext="Tamam"/>
@@ -2984,7 +2991,7 @@ Bu bölgede kalmaya devam ederseniz oturumunuz sonlandırılacak.
Bu bölgede kalmaya devam ederseniz oturumunuz sonlandırılacak.
</notification>
<notification name="LoadWebPage">
- [URL] web sayfası yüklensin mi?
+ Bu web sayfası yüklensin mi: [URL] ?
[MESSAGE]
@@ -3257,11 +3264,15 @@ Güvenliğiniz için birkaç saniye engellenecek.
<notification name="AttachmentSaved">
Aksesuar kaydedildi.
</notification>
- <notification name="PresetNotSaved">
- [NAME] ön ayarı kaydedilirken hata oluştu.
+ <notification name="AppearanceToXMLSaved">
+ Görünüm XML olarak [PATH] konumuna kaydedildi
</notification>
- <notification name="PresetNotDeleted">
- [NAME] ön ayarı silinirken hata oluştu.
+ <notification name="AppearanceToXMLFailed">
+ Görünüm XML olarak kaydedilemedi.
+ icon=&quot;notifytip.tga&quot;
+ name=&quot;PresetNotDeleted&quot;
+ type=&quot;notifytip&quot;&gt;
+[NAME] ön ayarı silinirken hata oluştu.
</notification>
<notification name="UnableToFindHelpTopic">
Bu öğe için yardım başlığı bulunamıyor.
@@ -4069,6 +4080,9 @@ Lütfen bir dakika sonra tekrar deneyin.
<notification name="CantAttachNotEnoughScriptResources">
Nesneyi iliştirmek için yeterli komut dosyası kaynağı mevcut değil!
</notification>
+ <notification name="IllegalAttachment">
+ Aksesuar avatarda var olmayan bir noktaya karşılık geliyor. Bunun yerine göğüs kısmına eklendi.
+ </notification>
<notification name="CantDropItemTrialUser">
Buraya nesne düşüremezsiniz; Ücretsiz Deneme alanını deneyin.
</notification>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/tr/panel_preferences_alerts.xml
index 46a4793c53..b0f026b285 100644
--- a/indra/newview/skins/default/xui/tr/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
<text name="tell_me_label">
Bana söyle:
</text>
- <check_box label="L$ harcadığımda veya aldığımda" name="notify_money_change_checkbox"/>
+ <check_box label="L$ harcadığımda" name="notify_money_spend_checkbox"/>
<check_box label="Arkadaşlarım oturum açtığında veya kapattığında" name="friends_online_notify_checkbox"/>
+ <check_box label="L$ aldığımda" name="notify_money_received_checkbox"/>
<text name="show_label">
Daima göster:
</text>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml
index 13984c2792..9cfa7d61f4 100644
--- a/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
<text name="BetterText">
Daha iyi
</text>
+ <slider label="Avatarın Maksimum Karmaşıklığı:" name="IndirectMaxComplexity" tool_tip="Görsel olarak karmaşık bir avatarın hangi noktadan itibaren JellyDolll olarak çizileceğini kontrol eder"/>
+ <text name="IndirectMaxComplexityText">
+ 0
+ </text>
<check_box initial_value="true" label="Atmosferik gölgeleyiciler" name="WindLightUseAtmosShaders"/>
<check_box initial_value="true" label="Gelişmiş Aydınlatma Modeli" name="UseLightShaders"/>
<button label="Ayarları ön ayar olarak kaydet..." name="PrefSaveButton"/>
<button label="Ön ayarı yükle..." name="PrefLoadButton"/>
+ min_val=&quot;0,125&quot;
<button label="Ön ayarı sil..." name="PrefDeleteButton"/>
<button label="Önerilen ayarlara dön" name="Defaults"/>
<button label="Gelişmiş Ayarlar..." name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_sound_devices.xml b/indra/newview/skins/default/xui/tr/panel_sound_devices.xml
index 982ef2ea3b..be3299b89c 100644
--- a/indra/newview/skins/default/xui/tr/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/tr/panel_sound_devices.xml
@@ -16,9 +16,9 @@
Çıktı
</text>
<text name="My volume label">
- Ses düzeyim:
+ Mik. ses düzeyi:
</text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Bu kaydırıcıyı kullanarak ses düzeyini değiştirin"/>
+ <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Bu kaydırma butonunu kullanarak mikrofonun ses düzeyini değiştirin"/>
<text name="wait_text">
Lütfen bekleyin
</text>
diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml
index 67c9197907..6aad65da22 100644
--- a/indra/newview/skins/default/xui/tr/strings.xml
+++ b/indra/newview/skins/default/xui/tr/strings.xml
@@ -39,7 +39,10 @@
</string>
<string name="AboutHeader">
[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
-[[VIEWER_RELEASE_NOTES_URL] [Sürüm Notları]]
+[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
+ </string>
+ <string name="BuildConfig">
+ Yapı Konfigürasyonu [BUILD_CONFIG]
</string>
<string name="AboutPosition">
&lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP]) üzerinde bulunan [REGION] içerisinde [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] konumundasınız
@@ -59,12 +62,12 @@ Grafik Kartı: [GRAPHICS_CARD]
Windows Grafik Sürücüsü Sürümü: [GRAPHICS_DRIVER_VERSION]
</string>
<string name="AboutLibs">
- OpenGL Sürümü: [OPENGL_VERSION]
+ OpenGL Sürümü [OPENGL_VERSION]
J2C Kod Çözücü Sürümü: [J2C_VERSION]
Ses Sürücüsü Sürümü: [AUDIO_DRIVER_VERSION]
LLCEFLib/CEF Sürümü: [LLCEFLIB_VERSION]
-Ses Sunucusu Sürümü: [VOICE_VERSION]
+Ses Sunucu Sürümü: [VOICE_VERSION]
</string>
<string name="AboutTraffic">
Kaybolan Paketler: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
@@ -72,6 +75,9 @@ Ses Sunucusu Sürümü: [VOICE_VERSION]
<string name="ErrorFetchingServerReleaseNotesURL">
Sunucu sürümü notları URL&apos;si alınırken hata oluştu.
</string>
+ <string name="BuildConfiguration">
+ Yapı Konfigürasyonu
+ </string>
<string name="ProgressRestoring">
Geri yükleniyor...
</string>
@@ -1387,6 +1393,9 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
<string name="BodyPartsRightLeg">
Sağ Bacak
</string>
+ <string name="BodyPartsEnhancedSkeleton">
+ Gelişmiş İskelet
+ </string>
<string name="GraphicsQualityLow">
Düşük
</string>
@@ -1835,6 +1844,51 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
<string name="Avatar Center">
Avatar Merkezi
</string>
+ <string name="Left Ring Finger">
+ Sol Yüzük Parmağı
+ </string>
+ <string name="Right Ring Finger">
+ Sağ Yüzük Parmağı
+ </string>
+ <string name="Tail Base">
+ Kuyruk Tabanı
+ </string>
+ <string name="Tail Tip">
+ Kuyruk Ucu
+ </string>
+ <string name="Left Wing">
+ Sol Kanat
+ </string>
+ <string name="Right Wing">
+ Sağ Kanat
+ </string>
+ <string name="Jaw">
+ Pençe
+ </string>
+ <string name="Alt Left Ear">
+ Altrntf Sol Kulak
+ </string>
+ <string name="Alt Right Ear">
+ Altrntf Sağ Kulak
+ </string>
+ <string name="Alt Left Eye">
+ Altrntf Sol Göz
+ </string>
+ <string name="Alt Right Eye">
+ Altrntf Sağ Göz
+ </string>
+ <string name="Tongue">
+ Dil
+ </string>
+ <string name="Groin">
+ Kasık
+ </string>
+ <string name="Left Hind Foot">
+ Sol Arka Ayak
+ </string>
+ <string name="Right Hind Foot">
+ Sağ Arka Ayak
+ </string>
<string name="Invalid Attachment">
Geçersiz Aksesuar Noktası
</string>
@@ -2224,12 +2278,12 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
<string name="ATTACH_BELLY">
Göbek
</string>
- <string name="ATTACH_RPEC">
- Sağ Göğüs
- </string>
- <string name="ATTACH_LPEC">
+ <string name="ATTACH_LEFT_PEC">
Sol Göğüs
</string>
+ <string name="ATTACH_RIGHT_PEC">
+ Sağ Göğüs
+ </string>
<string name="ATTACH_HUD_CENTER_2">
BÜG 2. Merkez
</string>
@@ -2260,6 +2314,51 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
<string name="ATTACH_AVATAR_CENTER">
Avatar Merkezi
</string>
+ <string name="ATTACH_LHAND_RING1">
+ Sol Yüzük Parmağı
+ </string>
+ <string name="ATTACH_RHAND_RING1">
+ Sağ Yüzük Parmağı
+ </string>
+ <string name="ATTACH_TAIL_BASE">
+ Kuyruk Tabanı
+ </string>
+ <string name="ATTACH_TAIL_TIP">
+ Kuyruk Ucu
+ </string>
+ <string name="ATTACH_LWING">
+ Sol Kanat
+ </string>
+ <string name="ATTACH_RWING">
+ Sağ Kanat
+ </string>
+ <string name="ATTACH_FACE_JAW">
+ Pençe
+ </string>
+ <string name="ATTACH_FACE_LEAR">
+ Altrntf Sol Kulak
+ </string>
+ <string name="ATTACH_FACE_REAR">
+ Altrntf Sağ Kulak
+ </string>
+ <string name="ATTACH_FACE_LEYE">
+ Altrntf Sol Göz
+ </string>
+ <string name="ATTACH_FACE_REYE">
+ Altrntf Sağ Göz
+ </string>
+ <string name="ATTACH_FACE_TONGUE">
+ Dil
+ </string>
+ <string name="ATTACH_GROIN">
+ Kasık
+ </string>
+ <string name="ATTACH_HIND_LFOOT">
+ Sol Arka Ayak
+ </string>
+ <string name="ATTACH_HIND_RFOOT">
+ Sağ Arka Ayak
+ </string>
<string name="CursorPos">
Satır [LINE], Sütun [COLUMN]
</string>
@@ -4249,6 +4348,12 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
<string name="OfflineStatus">
Çevrimdışı
</string>
+ <string name="not_online_msg">
+ Kullanıcı çevrimiçi değil - mesaj saklanıp daha sonra iletilecek.
+ </string>
+ <string name="not_online_inventory">
+ Kullanıcı çevrimiçi değil - envanter kaydedildi.
+ </string>
<string name="answered_call">
Aramanız yanıtlandı
</string>
diff --git a/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml
index f9c2fe47e7..2a00bb6172 100644
--- a/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml
@@ -15,7 +15,7 @@
<text name="AvatarText">
化身
</text>
- <slider label="最大複雜度:" name="IndirectMaxComplexity" tool_tip="控制在何時機下讓複雜化身呈像為「單色軟糖娃娃」"/>
+ <slider label="最大複雜度:" name="IndirectMaxComplexity" tool_tip="控制在何時機下讓複雜化身呈像為 JellyDoll"/>
<text name="IndirectMaxComplexityText">
0
</text>
diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
index ace1302250..69bc4e7632 100644
--- a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="通話" name="Call"/>
<menu_item_call label="邀請加入群組" name="Invite..."/>
+ <menu_item_call label="重設骨架" name="Reset Skeleton"/>
<menu_item_call label="封鎖" name="Avatar Mute"/>
<menu_item_call label="回報" name="abuse"/>
<menu_item_call label="凍結" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_self.xml b/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
index d9e6eff897..cf56d7c86b 100644
--- a/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
@@ -9,6 +9,7 @@
<menu_item_call label="編輯我的裝扮" name="Edit Outfit"/>
<menu_item_call label="編輯我的體形" name="Edit My Shape"/>
<menu_item_call label="懸浮高度" name="Hover Height"/>
+ <menu_item_call label="重設骨架" name="Reset Skeleton"/>
<menu_item_call label="我的朋友" name="Friends..."/>
<menu_item_call label="我的群組" name="Groups..."/>
<menu_item_call label="我的個人檔案" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
index 0e0d1cc3d2..b58ec1d8cb 100644
--- a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
@@ -6,6 +6,7 @@
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="通話" name="Call"/>
<menu_item_call label="邀請加入群組" name="Invite..."/>
+ <menu_item_call label="重設骨架" name="Reset Skeleton"/>
<menu_item_call label="封鎖" name="Avatar Mute"/>
<menu_item_call label="回報" name="abuse"/>
<menu_item_call label="凍結" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_self.xml b/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
index a644a45df6..e2ddb57307 100644
--- a/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
@@ -26,6 +26,7 @@
<menu_item_call label="編輯我的裝扮" name="Edit Outfit"/>
<menu_item_call label="編輯我的體形" name="Edit My Shape"/>
<menu_item_call label="懸浮高度" name="Hover Height"/>
+ <menu_item_call label="重設骨架" name="Reset Skeleton"/>
<menu_item_call label="我的朋友" name="Friends..."/>
<menu_item_call label="我的群組" name="Groups..."/>
<menu_item_call label="我的個人檔案" name="Profile..."/>
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
index 41590d60c7..f2971491ac 100644
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -22,7 +22,6 @@
<menu_item_check label="請勿打擾" name="Do Not Disturb"/>
</menu>
<menu_item_call label="購買 L$…" name="Buy and Sell L$"/>
- <menu_item_call label="商家發件匣…" name="MerchantOutbox"/>
<menu_item_call label="Marketplace 刊登…" name="MarketplaceListings"/>
<menu_item_call label="帳戶主控臺…" name="Manage My Account"/>
<menu_item_call label="偏好設定…" name="Preferences"/>
@@ -419,6 +418,7 @@
<menu_item_check label="停用細節層次" name="Disable LOD"/>
<menu_item_check label="除錯字元可見性" name="Debug Character Vis"/>
<menu_item_check label="顯示碰撞骨架" name="Show Collision Skeleton"/>
+ <menu_item_check label="顯示骨頭" name="Show Bones"/>
<menu_item_check label="顯示用戶目標" name="Display Agent Target"/>
<menu_item_call label="傾印附件" name="Dump Attachments"/>
<menu_item_call label="除錯化身材質" name="Debug Avatar Textures"/>
diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml
index 3f08496a68..463afab1c0 100644
--- a/indra/newview/skins/default/xui/zh/notifications.xml
+++ b/indra/newview/skins/default/xui/zh/notifications.xml
@@ -480,6 +480,9 @@
<notification name="CannotWearInfoNotComplete">
無法穿戴該物件,它尚未完成載入。 請稍候再試。
</notification>
+ <notification name="MustEnterPasswordToLogIn">
+ 請輸入密碼以便登入。
+ </notification>
<notification name="MustHaveAccountToLogIn">
糟糕! 發現有內容留白。
你必須為化身輸入一個使用者名稱。
@@ -548,6 +551,9 @@
<notification name="ChangeConnectionPort">
重新啟動 [APP_NAME] 後將啟用新的埠設定。
</notification>
+ <notification name="ChangeDeferredDebugSetting">
+ 這個除錯設定將在重新啟動 [APP_NAME] 後啟用。
+ </notification>
<notification name="ChangeSkin">
重新啟動 [APP_NAME] 後將顯現新的皮膚。
</notification>
@@ -1359,12 +1365,13 @@
<ignore name="ignore" text="服裝花太多時間下載"/>
</form>
</notification>
- <notification name="RegionAndAgentComplexity">
- 你的[https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 視覺複雜度]是[AGENT_COMPLEXITY]。
+ <notification name="AgentComplexityWithVisibility">
+ 你的[https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 化身複雜度]是[AGENT_COMPLEXITY]。
[OVERLIMIT_MSG]
+ <usetemplate ignoretext="警告我化身的複雜度是否可能過高" name="notifyignore"/>
</notification>
<notification name="AgentComplexity">
- 你的[https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 視覺複雜度]是[AGENT_COMPLEXITY]。
+ 你的[https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 化身複雜度]是[AGENT_COMPLEXITY]。
</notification>
<notification name="FirstRun">
[APP_NAME] 安裝完成。
@@ -1479,6 +1486,10 @@ SHA1 指紋:[MD5_DIGEST]
你真的要確定產出目前地形,使其成為地形升/降極限的中間值,並設為「復原」工具的預設值?
<usetemplate name="okcancelbuttons" notext="取消" yestext="確定"/>
</notification>
+ <notification name="ConfirmTextureHeights">
+ 你設的海拔範圍值,低值大於高值。  繼續?
+ <usetemplate canceltext="不要問" name="yesnocancelbuttons" notext="取消" yestext="確定"/>
+ </notification>
<notification name="MaxAllowedAgentOnRegion">
你最多只能有 [MAX_AGENTS] 位允許居民。
</notification>
@@ -1713,14 +1724,6 @@ SHA1 指紋:[MD5_DIGEST]
無法離開群組。 你是此群組僅存的所有人,不得離開群組。 請先把所有人職銜指派給另一人。
<usetemplate name="okbutton" yestext="確定"/>
</notification>
- <notification name="GroupDepartError">
- 無法離開群組:[reason]。
- <usetemplate name="okbutton" yestext="確定"/>
- </notification>
- <notification name="GroupDepart">
- 你已經離開[group_name]群組。
- <usetemplate name="okbutton" yestext="確定"/>
- </notification>
<notification name="ConfirmKick">
你確定要踢出這網格內的全部居民?
<usetemplate name="okcancelbuttons" notext="取消" yestext="踢出全部居民"/>
@@ -2390,6 +2393,10 @@ SHA1 指紋:[MD5_DIGEST]
你確定你要對你垃圾筒中的內容進行刪除?
<usetemplate ignoretext="在我清空收納區垃圾筒資料夾前確認" name="okcancelignore" notext="取消" yestext="確定"/>
</notification>
+ <notification name="TrashIsFull">
+ 你的垃圾桶快滿了。 這可能會造成登入的問題。
+ <usetemplate name="okcancelbuttons" notext="我稍後再清空垃圾桶" yestext="現在清空垃圾桶"/>
+ </notification>
<notification name="ConfirmClearBrowserCache">
你確定要刪除你的旅行、網頁及搜尋歷史紀錄嗎?
<usetemplate name="okcancelbuttons" notext="取消" yestext="確定"/>
@@ -2973,11 +2980,11 @@ SHA1 指紋:[MD5_DIGEST]
如果你繼續留在這地區,你將會被登出。
</notification>
<notification name="LoadWebPage">
- 載入網頁 [URL]?
+ 載入網頁 [URL]?
[MESSAGE]
-來源物件:&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;(所有人:[NAME_SLURL])
+來源物件:&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;(所有人是[NAME_SLURL])
<form name="form">
<button name="Gotopage" text="前往頁面"/>
<button name="Cancel" text="取消"/>
@@ -3246,11 +3253,15 @@ SHA1 指紋:[MD5_DIGEST]
<notification name="AttachmentSaved">
附件已儲存。
</notification>
- <notification name="PresetNotSaved">
- 儲存預設名稱[NAME]時出錯。
+ <notification name="AppearanceToXMLSaved">
+ 外觀已經存成位於[PATH]的XML
</notification>
- <notification name="PresetNotDeleted">
- 刪除預設名稱[NAME]時出錯。
+ <notification name="AppearanceToXMLFailed">
+ 將外觀存為XML失敗。
+ icon=&quot;notifytip.tga&quot;
+ name=&quot;PresetNotDeleted&quot;
+ type=&quot;notifytip&quot;&gt;
+刪除預設名稱[NAME]時出錯。
</notification>
<notification name="UnableToFindHelpTopic">
找不到這個元件的幫助主題。
@@ -4065,6 +4076,9 @@ SHA1 指紋:[MD5_DIGEST]
<notification name="CantAttachNotEnoughScriptResources">
腳本資源不足,無法附著物件!
</notification>
+ <notification name="IllegalAttachment">
+ 這個附件要求了化身上不存在的點。 因此已將該附件附著到胸部。
+ </notification>
<notification name="CantDropItemTrialUser">
你無法在此卸除物件,請到「自由嘗試」區域再試。
</notification>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/zh/panel_preferences_alerts.xml
index 94eb3c1389..212880df55 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_alerts.xml
@@ -3,8 +3,9 @@
<text name="tell_me_label">
告訴我:
</text>
- <check_box label="當我花費或取得 L$" name="notify_money_change_checkbox"/>
+ <check_box label="當我花用 L$ 時" name="notify_money_spend_checkbox"/>
<check_box label="當我的朋友上線或離線" name="friends_online_notify_checkbox"/>
+ <check_box label="當我得到 L$ 時" name="notify_money_received_checkbox"/>
<text name="show_label">
總是顯示:
</text>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
index 8c4d2f9c18..b5c36668f6 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
@@ -24,10 +24,15 @@
<text name="BetterText">
最佳
</text>
+ <slider label="化身最大複雜度:" name="IndirectMaxComplexity" tool_tip="控制在何時機下讓複雜化身呈像為 JellyDoll"/>
+ <text name="IndirectMaxComplexityText">
+ 0
+ </text>
<check_box initial_value="true" label="大氣著色" name="WindLightUseAtmosShaders"/>
<check_box initial_value="true" label="進階照明模型" name="UseLightShaders"/>
<button label="將設定存為預設值 …" name="PrefSaveButton"/>
<button label="載入預設..." name="PrefLoadButton"/>
+ min_val=&quot;0.125&quot;
<button label="刪除自訂配置…" name="PrefDeleteButton"/>
<button label="重設為我們建議的設定" name="Defaults"/>
<button label="進階設定…" name="AdvancedSettings"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_sound_devices.xml b/indra/newview/skins/default/xui/zh/panel_sound_devices.xml
index fa4e24a605..e29ffe31af 100644
--- a/indra/newview/skins/default/xui/zh/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/zh/panel_sound_devices.xml
@@ -16,9 +16,9 @@
輸出
</text>
<text name="My volume label">
- 我的音量:
+ 麥克風音量:
</text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="用這控制條改變音量"/>
+ <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="用這個控制條調整麥克風音量"/>
<text name="wait_text">
請稍候
</text>
diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml
index 2ce310b224..5ce5adf3f0 100644
--- a/indra/newview/skins/default/xui/zh/strings.xml
+++ b/indra/newview/skins/default/xui/zh/strings.xml
@@ -41,6 +41,9 @@
[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2].[VIEWER_VERSION_3] ([CHANNEL])
[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
</string>
+ <string name="BuildConfig">
+ 建製設置 [BUILD_CONFIG]
+ </string>
<string name="AboutPosition">
你的方位是 [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1],地區名:[REGION],主機:&lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
第二人生URL:&lt;nolink&gt;[SLURL]&lt;/nolink&gt;
@@ -72,6 +75,9 @@ LLCEFLib/CEF版本:[LLCEFLIB_VERSION]
<string name="ErrorFetchingServerReleaseNotesURL">
擷取伺服器版本說明 URL 時出錯。
</string>
+ <string name="BuildConfiguration">
+ 建製設置
+ </string>
<string name="ProgressRestoring">
回存中...
</string>
@@ -1382,6 +1388,9 @@ http://secondlife.com/viewer-access-faq
<string name="BodyPartsRightLeg">
右腿
</string>
+ <string name="BodyPartsEnhancedSkeleton">
+ 增強版骨架
+ </string>
<string name="GraphicsQualityLow">
</string>
@@ -1830,6 +1839,51 @@ http://secondlife.com/viewer-access-faq
<string name="Avatar Center">
化身中心
</string>
+ <string name="Left Ring Finger">
+ 左無名指
+ </string>
+ <string name="Right Ring Finger">
+ 右無名指
+ </string>
+ <string name="Tail Base">
+ 尾巴基部
+ </string>
+ <string name="Tail Tip">
+ 尾巴末梢
+ </string>
+ <string name="Left Wing">
+ 左翼
+ </string>
+ <string name="Right Wing">
+ 右翼
+ </string>
+ <string name="Jaw">
+ 顎
+ </string>
+ <string name="Alt Left Ear">
+ 替代左耳
+ </string>
+ <string name="Alt Right Ear">
+ 替代右耳
+ </string>
+ <string name="Alt Left Eye">
+ 替代左眼
+ </string>
+ <string name="Alt Right Eye">
+ 替代右眼
+ </string>
+ <string name="Tongue">
+ 舌頭
+ </string>
+ <string name="Groin">
+ 鼠蹊
+ </string>
+ <string name="Left Hind Foot">
+ 左後腳
+ </string>
+ <string name="Right Hind Foot">
+ 右後腳
+ </string>
<string name="Invalid Attachment">
無效的附接點
</string>
@@ -2219,12 +2273,12 @@ http://secondlife.com/viewer-access-faq
<string name="ATTACH_BELLY">
腹部
</string>
- <string name="ATTACH_RPEC">
- 右胸肌
- </string>
- <string name="ATTACH_LPEC">
+ <string name="ATTACH_LEFT_PEC">
左胸肌
</string>
+ <string name="ATTACH_RIGHT_PEC">
+ 右胸肌
+ </string>
<string name="ATTACH_HUD_CENTER_2">
擡頭顯示中央 2
</string>
@@ -2255,6 +2309,51 @@ http://secondlife.com/viewer-access-faq
<string name="ATTACH_AVATAR_CENTER">
化身中心
</string>
+ <string name="ATTACH_LHAND_RING1">
+ 左無名指
+ </string>
+ <string name="ATTACH_RHAND_RING1">
+ 右無名指
+ </string>
+ <string name="ATTACH_TAIL_BASE">
+ 尾巴基部
+ </string>
+ <string name="ATTACH_TAIL_TIP">
+ 尾巴末梢
+ </string>
+ <string name="ATTACH_LWING">
+ 左翼
+ </string>
+ <string name="ATTACH_RWING">
+ 右翼
+ </string>
+ <string name="ATTACH_FACE_JAW">
+ 顎
+ </string>
+ <string name="ATTACH_FACE_LEAR">
+ 替代左耳
+ </string>
+ <string name="ATTACH_FACE_REAR">
+ 替代右耳
+ </string>
+ <string name="ATTACH_FACE_LEYE">
+ 替代左眼
+ </string>
+ <string name="ATTACH_FACE_REYE">
+ 替代右眼
+ </string>
+ <string name="ATTACH_FACE_TONGUE">
+ 舌頭
+ </string>
+ <string name="ATTACH_GROIN">
+ 鼠蹊
+ </string>
+ <string name="ATTACH_HIND_LFOOT">
+ 左後腳
+ </string>
+ <string name="ATTACH_HIND_RFOOT">
+ 右後腳
+ </string>
<string name="CursorPos">
橫行 [LINE],縱列 [COLUMN]
</string>
@@ -4244,6 +4343,12 @@ http://secondlife.com/viewer-access-faq
<string name="OfflineStatus">
離線
</string>
+ <string name="not_online_msg">
+ 使用者不在線上 - 訊息將留存,稍後傳遞。
+ </string>
+ <string name="not_online_inventory">
+ 使用者不在線上 - 收納區已儲存。
+ </string>
<string name="answered_call">
你的通話已經接通
</string>
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 1c77cf805e..f3d89bb866 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -30,6 +30,7 @@ import sys
import os.path
import shutil
import errno
+import json
import re
import tarfile
import time
@@ -181,9 +182,16 @@ class ViewerManifest(LLManifest):
self.path("*.tga")
self.end_prefix("local_assets")
- # Files in the newview/ directory
+ # File in the newview/ directory
self.path("gpu_table.txt")
- # The summary.json file gets left in the build directory by newview/CMakeLists.txt.
+
+ #summary.json. Standard with exception handling is fine. If we can't open a new file for writing, we have worse problems
+ summary_dict = {"Type":"viewer","Version":'.'.join(self.args['version']),"Channel":self.channel_with_pkg_suffix()}
+ with open(os.path.join(os.pardir,'summary.json'), 'w') as summary_handle:
+ json.dump(summary_dict,summary_handle)
+
+ #we likely no longer need the test, since we will throw an exception above, but belt and suspenders and we get the
+ #return code for free.
if not self.path2basename(os.pardir, "summary.json"):
print "No summary.json file"