summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build.yaml93
-rw-r--r--.github/workflows/pre-commit.yaml18
-rw-r--r--.github/workflows/stale.yaml4
-rw-r--r--.pre-commit-config.yaml7
-rw-r--r--autobuild.xml18
-rwxr-xr-xdoc/contributions.txt2
-rw-r--r--indra/cmake/00-Common.cmake2
-rw-r--r--indra/cmake/Python.cmake8
-rw-r--r--indra/llappearance/llwearable.h4
-rw-r--r--indra/llappearance/llwearabledata.cpp40
-rw-r--r--indra/llappearance/llwearabledata.h9
-rw-r--r--indra/llaudio/llaudioengine.cpp103
-rwxr-xr-xindra/llaudio/llaudioengine.h13
-rw-r--r--indra/llaudio/llaudioengine_fmodstudio.cpp11
-rw-r--r--indra/llaudio/llaudioengine_fmodstudio.h1
-rw-r--r--indra/llcharacter/llbvhloader.cpp2
-rw-r--r--indra/llcommon/hbxxh.h18
-rw-r--r--indra/llcommon/indra_constants.h1
-rw-r--r--indra/llcommon/lldefs.h48
-rw-r--r--indra/llcommon/llleap.cpp31
-rw-r--r--indra/llcommon/llmd5.cpp32
-rw-r--r--indra/llcommon/llmd5.h23
-rw-r--r--indra/llcommon/llsdserialize.cpp197
-rw-r--r--indra/llcommon/llsdserialize.h2
-rw-r--r--indra/llcommon/llstreamtools.cpp26
-rw-r--r--indra/llcommon/llstreamtools.h27
-rw-r--r--indra/llcommon/lltracerecording.cpp124
-rw-r--r--indra/llcommon/lltracerecording.h172
-rw-r--r--indra/llcommon/lluuid.cpp2
-rw-r--r--indra/llcommon/lluuid.h50
-rw-r--r--indra/llcommon/stdtypes.h2
-rw-r--r--indra/llcommon/tests/llleap_test.cpp27
-rw-r--r--indra/llcommon/tests/llsdserialize_test.cpp610
-rwxr-xr-xindra/llcorehttp/tests/test_llcorehttp_peer.py2
-rw-r--r--indra/llmath/llvolume.cpp4
-rw-r--r--indra/llmessage/llcircuit.cpp2
-rw-r--r--indra/llmessage/llcorehttputil.cpp42
-rw-r--r--indra/llmessage/llcorehttputil.h4
-rwxr-xr-xindra/llmessage/tests/test_llsdmessage_peer.py4
-rw-r--r--indra/llprimitive/llmaterialid.h26
-rw-r--r--indra/llrender/llgl.cpp4
-rw-r--r--indra/llui/llbutton.cpp3
-rw-r--r--indra/llui/llmenugl.cpp3
-rw-r--r--indra/llxml/llcontrol.cpp3
-rw-r--r--indra/newview/app_settings/cmd_line.xml6
-rw-r--r--indra/newview/app_settings/settings.xml59
-rw-r--r--indra/newview/installers/windows/installer_template.nsi17
-rwxr-xr-xindra/newview/installers/windows/lang_zh.nsibin10144 -> 10154 bytes
-rw-r--r--indra/newview/llagent.cpp110
-rw-r--r--indra/newview/llagent.h7
-rw-r--r--indra/newview/llagentcamera.cpp30
-rw-r--r--indra/newview/llagentlistener.cpp3
-rw-r--r--indra/newview/llagentui.cpp6
-rw-r--r--indra/newview/llagentwearables.cpp1
-rw-r--r--indra/newview/llappearancemgr.cpp13
-rw-r--r--indra/newview/llappviewer.cpp7
-rw-r--r--indra/newview/llattachmentsmgr.cpp9
-rw-r--r--indra/newview/llbuycurrencyhtml.cpp2
-rw-r--r--indra/newview/llchathistory.cpp2
-rw-r--r--indra/newview/llchatitemscontainerctrl.cpp2
-rw-r--r--indra/newview/llcommanddispatcherlistener.cpp4
-rw-r--r--indra/newview/llcommandhandler.cpp7
-rw-r--r--indra/newview/llcommandhandler.h4
-rw-r--r--indra/newview/llcontrolavatar.cpp7
-rw-r--r--indra/newview/llcontrolavatar.h6
-rw-r--r--indra/newview/lldrawable.cpp22
-rw-r--r--indra/newview/lleventnotifier.cpp6
-rw-r--r--indra/newview/llfilepicker_mac.mm3
-rw-r--r--indra/newview/llfloater360capture.cpp77
-rw-r--r--indra/newview/llfloater360capture.h4
-rw-r--r--indra/newview/llfloatercamerapresets.cpp18
-rw-r--r--indra/newview/llfloatercamerapresets.h3
-rw-r--r--indra/newview/llfloaterexperienceprofile.cpp6
-rw-r--r--indra/newview/llfloaterhandler.cpp2
-rw-r--r--indra/newview/llfloaterhandler.h2
-rw-r--r--indra/newview/llfloaterimnearbychat.cpp6
-rw-r--r--indra/newview/llfloatersearch.cpp2
-rw-r--r--indra/newview/llfloatertopobjects.cpp49
-rw-r--r--indra/newview/llfloatertopobjects.h4
-rwxr-xr-xindra/newview/llfloaterworldmap.cpp11
-rw-r--r--indra/newview/llglsandbox.cpp6
-rw-r--r--indra/newview/llgroupactions.cpp6
-rw-r--r--indra/newview/llimprocessing.cpp11
-rw-r--r--indra/newview/llinventoryfunctions.cpp36
-rw-r--r--indra/newview/llinventoryfunctions.h12
-rw-r--r--indra/newview/llinventorymodel.cpp29
-rw-r--r--indra/newview/llinventorymodel.h4
-rw-r--r--indra/newview/llinventoryobserver.cpp7
-rw-r--r--indra/newview/llinventoryobserver.h6
-rw-r--r--indra/newview/llloginhandler.cpp1
-rw-r--r--indra/newview/llloginhandler.h2
-rw-r--r--indra/newview/llmaterialmgr.h33
-rw-r--r--indra/newview/llmeshrepository.cpp7
-rw-r--r--indra/newview/llmodelpreview.cpp5
-rw-r--r--indra/newview/lloutfitobserver.cpp3
-rw-r--r--indra/newview/lloutfitobserver.h3
-rw-r--r--indra/newview/llpaneleditwearable.cpp2
-rw-r--r--indra/newview/llpanellogin.cpp2
-rw-r--r--indra/newview/llpanelnearbymedia.cpp6
-rw-r--r--indra/newview/llpanelpermissions.cpp37
-rw-r--r--indra/newview/llpanelplaces.cpp6
-rw-r--r--indra/newview/llpanelprofile.cpp12
-rw-r--r--indra/newview/llpanelprofileclassifieds.cpp2
-rw-r--r--indra/newview/llpanelprofilepicks.cpp6
-rw-r--r--indra/newview/llpreviewnotecard.cpp2
-rw-r--r--indra/newview/llpreviewscript.cpp1
-rw-r--r--indra/newview/llsceneview.cpp5
-rw-r--r--indra/newview/llselectmgr.cpp12
-rw-r--r--indra/newview/llsettingsvo.cpp4
-rw-r--r--indra/newview/llshareavatarhandler.cpp2
-rw-r--r--indra/newview/llsidepaneltaskinfo.cpp5
-rw-r--r--indra/newview/llspatialpartition.cpp58
-rw-r--r--indra/newview/llspatialpartition.h3
-rw-r--r--indra/newview/llsprite.cpp5
-rw-r--r--indra/newview/llstartup.cpp29
-rw-r--r--indra/newview/llstatusbar.cpp2
-rw-r--r--indra/newview/lltexturefetch.cpp13
-rw-r--r--indra/newview/lltextureview.cpp4
-rw-r--r--indra/newview/llurldispatcher.cpp69
-rw-r--r--indra/newview/llvieweraudio.cpp38
-rw-r--r--indra/newview/llviewerfloaterreg.cpp1
-rw-r--r--indra/newview/llviewerhelp.cpp2
-rw-r--r--indra/newview/llviewerinventory.cpp6
-rw-r--r--indra/newview/llviewermenu.cpp156
-rw-r--r--indra/newview/llviewermessage.cpp48
-rw-r--r--indra/newview/llviewerobjectlist.cpp52
-rw-r--r--indra/newview/llviewerparcelmgr.cpp24
-rw-r--r--indra/newview/llviewerparcelmgr.h7
-rwxr-xr-xindra/newview/llviewerregion.cpp140
-rw-r--r--indra/newview/llviewerregion.h36
-rw-r--r--indra/newview/llviewerstatsrecorder.cpp292
-rw-r--r--indra/newview/llviewerstatsrecorder.h137
-rw-r--r--indra/newview/llviewertexteditor.cpp6
-rw-r--r--indra/newview/llviewerwearable.h1
-rw-r--r--indra/newview/llvoicecallhandler.cpp2
-rw-r--r--indra/newview/llvoiceclient.cpp2
-rw-r--r--indra/newview/llvosurfacepatch.cpp7
-rw-r--r--indra/newview/llvovolume.cpp35
-rw-r--r--indra/newview/llwearableitemslist.cpp9
-rwxr-xr-xindra/newview/llworldmapview.cpp3
-rw-r--r--indra/newview/skins/default/xui/da/floater_animation_preview.xml187
-rw-r--r--indra/newview/skins/default/xui/da/floater_inventory.xml16
-rw-r--r--indra/newview/skins/default/xui/da/floater_nearby_chat.xml4
-rw-r--r--indra/newview/skins/default/xui/da/floater_perm_prefs.xml16
-rw-r--r--indra/newview/skins/default/xui/da/floater_postcard.xml36
-rw-r--r--indra/newview/skins/default/xui/da/floater_voice_controls.xml30
-rw-r--r--indra/newview/skins/default/xui/da/menu_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml21
-rw-r--r--indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml31
-rw-r--r--indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml8
-rw-r--r--indra/newview/skins/default/xui/da/menu_people_groups_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/da/menu_people_nearby_view_sort.xml8
-rw-r--r--indra/newview/skins/default/xui/da/menu_people_recent_view_sort.xml7
-rw-r--r--indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml14
-rw-r--r--indra/newview/skins/default/xui/da/panel_bottomtray.xml47
-rw-r--r--indra/newview/skins/default/xui/da/panel_group_control_panel.xml17
-rw-r--r--indra/newview/skins/default/xui/da/panel_im_control_panel.xml29
-rw-r--r--indra/newview/skins/default/xui/da/panel_region_texture.xml57
-rw-r--r--indra/newview/skins/default/xui/de/floater_chat_bar.xml7
-rw-r--r--indra/newview/skins/default/xui/de/floater_perm_prefs.xml16
-rw-r--r--indra/newview/skins/default/xui/de/floater_voice_controls.xml30
-rw-r--r--indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml21
-rw-r--r--indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml31
-rw-r--r--indra/newview/skins/default/xui/de/menu_name_field.xml6
-rw-r--r--indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml8
-rw-r--r--indra/newview/skins/default/xui/de/menu_people_groups_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml9
-rw-r--r--indra/newview/skins/default/xui/de/menu_people_recent_view_sort.xml7
-rw-r--r--indra/newview/skins/default/xui/de/panel_adhoc_control_panel.xml14
-rw-r--r--indra/newview/skins/default/xui/de/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/de/panel_group_control_panel.xml17
-rw-r--r--indra/newview/skins/default/xui/de/panel_im_control_panel.xml30
-rw-r--r--indra/newview/skins/default/xui/de/panel_profile_interests.xml35
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml6
-rw-r--r--indra/newview/skins/default/xui/en/floater_top_objects.xml13
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_nearby.xml2
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml70
-rw-r--r--indra/newview/skins/default/xui/en/panel_script_experience.xml17
-rw-r--r--indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml2
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_task_info.xml4
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_chat_bar.xml7
-rw-r--r--indra/newview/skins/default/xui/es/floater_perm_prefs.xml16
-rw-r--r--indra/newview/skins/default/xui/es/floater_voice_controls.xml30
-rw-r--r--indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml21
-rw-r--r--indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml31
-rw-r--r--indra/newview/skins/default/xui/es/menu_name_field.xml6
-rw-r--r--indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml8
-rw-r--r--indra/newview/skins/default/xui/es/menu_people_groups_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml9
-rw-r--r--indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml7
-rw-r--r--indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml14
-rw-r--r--indra/newview/skins/default/xui/es/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_control_panel.xml17
-rw-r--r--indra/newview/skins/default/xui/es/panel_im_control_panel.xml29
-rw-r--r--indra/newview/skins/default/xui/es/panel_profile_interests.xml35
-rw-r--r--indra/newview/skins/default/xui/fr/floater_chat_bar.xml7
-rw-r--r--indra/newview/skins/default/xui/fr/floater_perm_prefs.xml16
-rw-r--r--indra/newview/skins/default/xui/fr/floater_voice_controls.xml30
-rw-r--r--indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml21
-rw-r--r--indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml31
-rw-r--r--indra/newview/skins/default/xui/fr/menu_name_field.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/menu_people_groups_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml9
-rw-r--r--indra/newview/skins/default/xui/fr/menu_people_recent_view_sort.xml7
-rw-r--r--indra/newview/skins/default/xui/fr/panel_adhoc_control_panel.xml14
-rw-r--r--indra/newview/skins/default/xui/fr/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/fr/panel_group_control_panel.xml17
-rw-r--r--indra/newview/skins/default/xui/fr/panel_im_control_panel.xml30
-rw-r--r--indra/newview/skins/default/xui/fr/panel_profile_interests.xml35
-rw-r--r--indra/newview/skins/default/xui/it/floater_chat_bar.xml7
-rw-r--r--indra/newview/skins/default/xui/it/floater_perm_prefs.xml16
-rw-r--r--indra/newview/skins/default/xui/it/floater_voice_controls.xml30
-rw-r--r--indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml21
-rw-r--r--indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml31
-rw-r--r--indra/newview/skins/default/xui/it/menu_name_field.xml6
-rw-r--r--indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml8
-rw-r--r--indra/newview/skins/default/xui/it/menu_people_groups_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml9
-rw-r--r--indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml7
-rw-r--r--indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml14
-rw-r--r--indra/newview/skins/default/xui/it/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_control_panel.xml17
-rw-r--r--indra/newview/skins/default/xui/it/panel_im_control_panel.xml29
-rw-r--r--indra/newview/skins/default/xui/it/panel_profile_interests.xml35
-rw-r--r--indra/newview/skins/default/xui/ja/floater_chat_bar.xml7
-rw-r--r--indra/newview/skins/default/xui/ja/floater_perm_prefs.xml16
-rw-r--r--indra/newview/skins/default/xui/ja/floater_voice_controls.xml30
-rw-r--r--indra/newview/skins/default/xui/ja/menu_inspect_avatar_gear.xml21
-rw-r--r--indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml31
-rw-r--r--indra/newview/skins/default/xui/ja/menu_name_field.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml8
-rw-r--r--indra/newview/skins/default/xui/ja/menu_people_groups_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml9
-rw-r--r--indra/newview/skins/default/xui/ja/menu_people_recent_view_sort.xml7
-rw-r--r--indra/newview/skins/default/xui/ja/panel_adhoc_control_panel.xml14
-rw-r--r--indra/newview/skins/default/xui/ja/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/ja/panel_group_control_panel.xml17
-rw-r--r--indra/newview/skins/default/xui/ja/panel_im_control_panel.xml30
-rw-r--r--indra/newview/skins/default/xui/ja/panel_profile_interests.xml35
-rw-r--r--indra/newview/skins/default/xui/pl/floater_about.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/floater_about_land.xml120
-rw-r--r--indra/newview/skins/default/xui/pl/floater_animation_anim_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_animation_bvh_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/floater_associate_listing.xml5
-rw-r--r--indra/newview/skins/default/xui/pl/notifications.xml1134
-rw-r--r--indra/newview/skins/default/xui/pl/strings.xml938
-rw-r--r--indra/newview/skins/default/xui/pt/floater_chat_bar.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/floater_perm_prefs.xml16
-rw-r--r--indra/newview/skins/default/xui/pt/floater_voice_controls.xml30
-rw-r--r--indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml21
-rw-r--r--indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml31
-rw-r--r--indra/newview/skins/default/xui/pt/menu_name_field.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/menu_people_groups_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml9
-rw-r--r--indra/newview/skins/default/xui/pt/menu_people_recent_view_sort.xml7
-rw-r--r--indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml14
-rw-r--r--indra/newview/skins/default/xui/pt/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_control_panel.xml17
-rw-r--r--indra/newview/skins/default/xui/pt/panel_im_control_panel.xml29
-rw-r--r--indra/newview/skins/default/xui/pt/panel_profile_interests.xml35
-rw-r--r--indra/newview/skins/default/xui/ru/floater_chat_bar.xml7
-rw-r--r--indra/newview/skins/default/xui/ru/floater_perm_prefs.xml15
-rw-r--r--indra/newview/skins/default/xui/ru/floater_voice_controls.xml30
-rw-r--r--indra/newview/skins/default/xui/ru/menu_inspect_avatar_gear.xml21
-rw-r--r--indra/newview/skins/default/xui/ru/menu_inspect_self_gear.xml31
-rw-r--r--indra/newview/skins/default/xui/ru/menu_name_field.xml6
-rw-r--r--indra/newview/skins/default/xui/ru/menu_people_friends_view_sort.xml8
-rw-r--r--indra/newview/skins/default/xui/ru/menu_people_groups_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/ru/menu_people_nearby_view_sort.xml9
-rw-r--r--indra/newview/skins/default/xui/ru/menu_people_recent_view_sort.xml7
-rw-r--r--indra/newview/skins/default/xui/ru/panel_adhoc_control_panel.xml14
-rw-r--r--indra/newview/skins/default/xui/ru/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/ru/panel_group_control_panel.xml17
-rw-r--r--indra/newview/skins/default/xui/ru/panel_im_control_panel.xml29
-rw-r--r--indra/newview/skins/default/xui/ru/panel_profile_interests.xml35
-rw-r--r--indra/newview/skins/default/xui/tr/floater_chat_bar.xml7
-rw-r--r--indra/newview/skins/default/xui/tr/floater_perm_prefs.xml15
-rw-r--r--indra/newview/skins/default/xui/tr/floater_voice_controls.xml30
-rw-r--r--indra/newview/skins/default/xui/tr/menu_inspect_avatar_gear.xml21
-rw-r--r--indra/newview/skins/default/xui/tr/menu_inspect_self_gear.xml31
-rw-r--r--indra/newview/skins/default/xui/tr/menu_name_field.xml6
-rw-r--r--indra/newview/skins/default/xui/tr/menu_people_friends_view_sort.xml8
-rw-r--r--indra/newview/skins/default/xui/tr/menu_people_groups_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/tr/menu_people_nearby_view_sort.xml9
-rw-r--r--indra/newview/skins/default/xui/tr/menu_people_recent_view_sort.xml7
-rw-r--r--indra/newview/skins/default/xui/tr/panel_adhoc_control_panel.xml14
-rw-r--r--indra/newview/skins/default/xui/tr/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/tr/panel_group_control_panel.xml17
-rw-r--r--indra/newview/skins/default/xui/tr/panel_im_control_panel.xml29
-rw-r--r--indra/newview/skins/default/xui/tr/panel_profile_interests.xml35
-rw-r--r--indra/newview/skins/default/xui/zh/floater_chat_bar.xml7
-rw-r--r--indra/newview/skins/default/xui/zh/floater_perm_prefs.xml15
-rw-r--r--indra/newview/skins/default/xui/zh/floater_voice_controls.xml30
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml21
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml31
-rw-r--r--indra/newview/skins/default/xui/zh/menu_name_field.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml9
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_recent_view_sort.xml7
-rw-r--r--indra/newview/skins/default/xui/zh/panel_adhoc_control_panel.xml14
-rw-r--r--indra/newview/skins/default/xui/zh/panel_facebook_account.xml15
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_control_panel.xml17
-rw-r--r--indra/newview/skins/default/xui/zh/panel_im_control_panel.xml29
-rw-r--r--indra/newview/skins/default/xui/zh/panel_navmesh_rebake.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/panel_profile_interests.xml35
-rwxr-xr-xindra/newview/viewer_manifest.py32
-rw-r--r--scripts/metrics/slp_conv.py2
-rw-r--r--scripts/metrics/viewer_asset_logs.py2
-rwxr-xr-xscripts/metrics/viewerstats.py2
313 files changed, 4192 insertions, 4776 deletions
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
new file mode 100644
index 0000000000..a110c018ec
--- /dev/null
+++ b/.github/workflows/build.yaml
@@ -0,0 +1,93 @@
+name: Build
+
+on:
+ workflow_dispatch:
+ pull_request:
+ push:
+ branches: [main, contribute]
+ tags: ["*"]
+
+jobs:
+ build:
+ strategy:
+ matrix:
+ runner: [windows-large]
+ configuration: [ReleaseOS]
+ addrsize: [64]
+ include:
+ - runner: windows-large
+ configuration: ReleaseOS
+ addrsize: 32
+ runs-on: ${{ matrix.runner }}
+ env:
+ AUTOBUILD_CONFIGURATION: ${{ matrix.configuration }}
+ AUTOBUILD_ADDRSIZE: ${{ matrix.addrsize }}
+ AUTOBUILD_INSTALLABLE_CACHE: ${{ github.workspace }}/.autobuild-installables
+ AUTOBUILD_VARIABLES_FILE: ${{ github.workspace }}/.build-variables/variables
+ AUTOBUILD_VSVER: "170" # vs2k22
+ LOGFAIL: debug # Show details when tests fail
+ GIT_REF: ${{ github.head_ref || github.ref }}
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+ with:
+ ref: ${{ github.event.pull_request.head.sha || github.sha }}
+
+ - name: Checkout build variables
+ uses: actions/checkout@v3
+ with:
+ repository: secondlife/build-variables
+ ref: viewer
+ path: .build-variables
+
+ - name: Install autobuild and python dependencies
+ run: pip3 install autobuild llbase
+
+ - name: Cache autobuild packages
+ uses: actions/cache@v3
+ id: cache-installables
+ with:
+ path: .autobuild-installables
+ key: ${{ runner.os }}-${{ matrix.addrsize }}-${{ matrix.configuration }}-${{ hashFiles('autobuild.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-${{ matrix.addrsize }}-${{ matrix.configuration }}-
+ ${{ runner.os }}-${{ matrix.addrsize }}-
+
+ - name: Install windows dependencies
+ if: runner.os == 'Windows'
+ run: choco install nsis-unicode
+
+ - name: Build
+ id: build
+ shell: bash
+ env:
+ RUNNER_OS: ${{ runner.os }}
+ run: |
+ # On windows we need to point the build to the correct python
+ # as neither CMake's FindPython nor our custom Python.cmake module
+ # will resolve the correct interpreter location.
+ if [[ "$RUNNER_OS" == "Windows" ]]; then
+ export PYTHON="$(cygpath -m "$(which python)")"
+ echo "Python location: $PYTHON"
+ fi
+
+ autobuild configure -- -DVIEWER_CHANNEL="Second Life Test ${GIT_REF##*/}"
+ autobuild build --no-configure
+
+ # Find artifacts
+ if [[ "$RUNNER_OS" == "Windows" ]]; then
+ installer_path=$(find ./build-*/newview/ | grep '_Setup\.exe')
+ installer_name="$(basename $installer_path)"
+ elif [[ "$RUNNER_OS" == "macOS" ]]; then
+ installer_path=$(find ./build-*/newview/ | grep '\.dmg')
+ installer_name="$(basename $installer_path)"
+ fi
+
+ echo "installer_path=$installer_path" >> $GITHUB_OUTPUT
+ echo "installer_name=$installer_name" >> $GITHUB_OUTPUT
+
+ - name: Upload installer
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ steps.build.outputs.installer_name }}
+ path: ${{ steps.build.outputs.installer_path }}
diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml
new file mode 100644
index 0000000000..17c0ace02f
--- /dev/null
+++ b/.github/workflows/pre-commit.yaml
@@ -0,0 +1,18 @@
+name: pre-commit
+
+on:
+ pull_request:
+ push:
+ branches: [main, contribute]
+ tags: [v*]
+
+
+jobs:
+ pre-commit:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-python@v4
+ with:
+ python-version: 3.x
+ - uses: pre-commit/action@v3.0.0
diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml
index 82a9a968b9..35ac41420c 100644
--- a/.github/workflows/stale.yaml
+++ b/.github/workflows/stale.yaml
@@ -15,8 +15,8 @@ jobs:
- uses: actions/stale@v6
id: stale
with:
- stale-pr-message: This pull request is stale because it has been open 60 days with no activity. Remove stale label or comment or it will be closed in 7 days
- days-before-stale: 60
+ stale-pr-message: This pull request is stale because it has been open 30 days with no activity. Remove stale label or comment or it will be closed in 7 days
+ days-before-stale: 30
days-before-close: 7
exempt-pr-labels: blocked,must,should,keep
stale-pr-label: stale
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 6d296d7a24..fe7dfbac7a 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,9 +1,8 @@
repos:
- - repo: https://bitbucket.org/lindenlab/git-hooks.git
- rev: v1.0.0-beta2
+ - repo: https://github.com/secondlife/git-hooks.git
+ rev: v1.0.0
hooks:
- id: opensource-license
- - id: jira-issue
- id: llsd
- id: no-trigraphs
- id: copyright
@@ -11,7 +10,7 @@ repos:
files: \.(cpp|c|h|py|glsl|cmake|txt)$
exclude: language.txt
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v2.5.0
+ rev: v4.4.0
hooks:
- id: check-xml
- id: mixed-line-ending
diff --git a/autobuild.xml b/autobuild.xml
index b1cfe79275..9785884a40 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" ?>
-<llsd><map>
+<llsd>
+<map>
<key>installables</key>
<map>
<key>SDL</key>
@@ -2700,9 +2701,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
- <string>9e1b5515ab59b4e9cfeef6626d65d03d</string>
+ <string>8b091b1f13348eedadf66d7d81cb6bc1</string>
<key>url</key>
- <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/108609/945996/viewer_manager-3.0.577252-darwin64-577252.tar.bz2</string>
+ <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/116621/1003286/viewer_manager-3.0.580913-darwin64-580913.tar.bz2</string>
</map>
<key>name</key>
<string>darwin64</string>
@@ -2712,9 +2713,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
- <string>a3c599595ecc8fb987a5499fca42520a</string>
+ <string>647e86470e02509b1cf89829d08dfd46</string>
<key>url</key>
- <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/108610/946003/viewer_manager-3.0.577252-windows-577252.tar.bz2</string>
+ <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/116623/1003293/viewer_manager-3.0.580913-windows-580913.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@@ -2725,7 +2726,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>source_type</key>
<string>hg</string>
<key>version</key>
- <string>3.0.577252</string>
+ <string>3.0.580913</string>
</map>
<key>vlc-bin</key>
<map>
@@ -3290,7 +3291,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<string>/t:Build</string>
<string>/p:useenv=true</string>
<string>/verbosity:minimal</string>
- <string>/toolsversion:4.0</string>
<string>/p:VCBuildAdditionalOptions= /incremental</string>
</array>
</map>
@@ -3364,7 +3364,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<string>/t:Build</string>
<string>/p:useenv=true</string>
<string>/verbosity:minimal</string>
- <string>/toolsversion:4.0</string>
<string>/p:VCBuildAdditionalOptions= /incremental</string>
</array>
</map>
@@ -3401,4 +3400,5 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<string>autobuild</string>
<key>version</key>
<string>1.3</string>
- </map></llsd>
+ </map>
+</llsd>
diff --git a/doc/contributions.txt b/doc/contributions.txt
index e764e89e35..2545d684dd 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -593,6 +593,7 @@ Henri Beauchamp
VWR-4157
SL-15175
SL-19110
+ SL-19159
herina Bode
Hikkoshi Sakai
VWR-429
@@ -1187,6 +1188,7 @@ PanteraPolnocy
SL-18891
SL-18904
SL-18937
+ SL-19207
SL-19681
Parvati Silverweb
Patric Mills
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index c848d00710..a44fe5a8d5 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -61,7 +61,7 @@ if (WINDOWS)
# CP changed to only append the flag for 32bit builds - on 64bit builds,
# locally at least, the build output is spammed with 1000s of 'D9002'
# warnings about this switch being ignored.
- if( ADDRESS_SIZE EQUAL 32 )
+ if(ADDRESS_SIZE EQUAL 32 AND DEFINED ENV{"TEAMCITY_PROJECT_NAME"})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /p:PreferredToolArchitecture=x64")
endif()
# zlib has assembly-language object files incompatible with SAFESEH
diff --git a/indra/cmake/Python.cmake b/indra/cmake/Python.cmake
index dbf5033ce5..f9259f6c2b 100644
--- a/indra/cmake/Python.cmake
+++ b/indra/cmake/Python.cmake
@@ -2,7 +2,11 @@
set(PYTHONINTERP_FOUND)
-if (WINDOWS)
+if (DEFINED ENV{PYTHON})
+ # Allow python executable to be explicitly set
+ set(python "$ENV{PYTHON}")
+ set(PYTHONINTERP_FOUND ON)
+elseif (WINDOWS)
# On Windows, explicitly avoid Cygwin Python.
# if the user has their own version of Python installed, prefer that
@@ -43,7 +47,7 @@ else()
if (python)
set(PYTHONINTERP_FOUND ON)
endif (python)
-endif (WINDOWS)
+endif (DEFINED ENV{PYTHON})
if (NOT python)
message(FATAL_ERROR "No Python interpreter found")
diff --git a/indra/llappearance/llwearable.h b/indra/llappearance/llwearable.h
index 875c2932f1..d86db236a3 100644
--- a/indra/llappearance/llwearable.h
+++ b/indra/llappearance/llwearable.h
@@ -32,7 +32,6 @@
#include "llsaleinfo.h"
#include "llwearabletype.h"
-class LLMD5;
class LLVisualParam;
class LLTexGlobalColorInfo;
class LLTexGlobalColor;
@@ -110,9 +109,6 @@ public:
// Something happened that requires the wearable to be updated (e.g. worn/unworn).
virtual void setUpdated() const = 0;
- // Update the baked texture hash.
- virtual void addToBakedTextureHash(LLMD5& hash) const = 0;
-
typedef std::map<S32, LLVisualParam *> visual_param_index_map_t;
visual_param_index_map_t mVisualParamIndexMap;
diff --git a/indra/llappearance/llwearabledata.cpp b/indra/llappearance/llwearabledata.cpp
index 0eaeedb6ee..9fbbc57c87 100644
--- a/indra/llappearance/llwearabledata.cpp
+++ b/indra/llappearance/llwearabledata.cpp
@@ -31,7 +31,6 @@
#include "llavatarappearance.h"
#include "llavatarappearancedefines.h"
#include "lldriverparam.h"
-#include "llmd5.h"
LLWearableData::LLWearableData() :
mAvatarAppearance(NULL)
@@ -343,42 +342,3 @@ U32 LLWearableData::getWearableCount(const U32 tex_index) const
const LLWearableType::EType wearable_type = LLAvatarAppearance::getDictionary()->getTEWearableType((LLAvatarAppearanceDefines::ETextureIndex)tex_index);
return getWearableCount(wearable_type);
}
-
-LLUUID LLWearableData::computeBakedTextureHash(LLAvatarAppearanceDefines::EBakedTextureIndex baked_index,
- BOOL generate_valid_hash) // Set to false if you want to upload the baked texture w/o putting it in the cache
-{
- LLUUID hash_id;
- bool hash_computed = false;
- LLMD5 hash;
- const LLAvatarAppearanceDictionary::BakedEntry *baked_dict = LLAvatarAppearance::getDictionary()->getBakedTexture(baked_index);
-
- for (U8 i=0; i < baked_dict->mWearables.size(); i++)
- {
- const LLWearableType::EType baked_type = baked_dict->mWearables[i];
- const U32 num_wearables = getWearableCount(baked_type);
- for (U32 index = 0; index < num_wearables; ++index)
- {
- const LLWearable* wearable = getWearable(baked_type,index);
- if (wearable)
- {
- wearable->addToBakedTextureHash(hash);
- hash_computed = true;
- }
- }
- }
- if (hash_computed)
- {
- hash.update((const unsigned char*)baked_dict->mWearablesHashID.mData, UUID_BYTES);
-
- if (!generate_valid_hash)
- {
- invalidateBakedTextureHash(hash);
- }
- hash.finalize();
- hash.raw_digest(hash_id.mData);
- }
-
- return hash_id;
-}
-
-
diff --git a/indra/llappearance/llwearabledata.h b/indra/llappearance/llwearabledata.h
index a0c446ea9e..b8e0bf8bd1 100644
--- a/indra/llappearance/llwearabledata.h
+++ b/indra/llappearance/llwearabledata.h
@@ -86,15 +86,6 @@ private:
void pullCrossWearableValues(const LLWearableType::EType type);
//--------------------------------------------------------------------
- // Server Communication
- //--------------------------------------------------------------------
-public:
- LLUUID computeBakedTextureHash(LLAvatarAppearanceDefines::EBakedTextureIndex baked_index,
- BOOL generate_valid_hash = TRUE);
-protected:
- virtual void invalidateBakedTextureHash(LLMD5& hash) const {}
-
- //--------------------------------------------------------------------
// Member variables
//--------------------------------------------------------------------
protected:
diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp
index ddc508455f..a387bb23cd 100644
--- a/indra/llaudio/llaudioengine.cpp
+++ b/indra/llaudio/llaudioengine.cpp
@@ -204,7 +204,8 @@ std::string LLAudioEngine::getInternetStreamURL()
{
if (mStreamingAudioImpl)
return mStreamingAudioImpl->getURL();
- else return std::string();
+
+ return std::string();
}
@@ -345,42 +346,43 @@ void LLAudioEngine::idle()
}
continue;
}
- else
+
+ // Check to see if the current sound is done playing.
+ if (!channelp->isPlaying())
{
- // Check to see if the current sound is done playing, or looped.
- if (!channelp->isPlaying())
+ sourcep->mCurrentDatap = sourcep->mQueuedDatap;
+ sourcep->mQueuedDatap = NULL;
+
+ // Reset the timer so the source doesn't die.
+ sourcep->mAgeTimer.reset();
+
+ // Make sure we have the buffer set up if we just decoded the data
+ if (sourcep->mCurrentDatap)
{
- sourcep->mCurrentDatap = sourcep->mQueuedDatap;
- sourcep->mQueuedDatap = NULL;
+ updateBufferForData(sourcep->mCurrentDatap);
+ }
- // Reset the timer so the source doesn't die.
- sourcep->mAgeTimer.reset();
+ // Actually play the associated data.
+ sourcep->setupChannel();
+ channelp->updateBuffer();
+ sourcep->getChannel()->play();
+ continue;
+ }
- // Make sure we have the buffer set up if we just decoded the data
- if (sourcep->mCurrentDatap)
- {
- updateBufferForData(sourcep->mCurrentDatap);
- }
+ // Check to see if the current sound is looped.
+ if (sourcep->isLoop())
+ {
+ // It's a loop, we need to check and see if we're done with it.
+ if (channelp->mLoopedThisFrame)
+ {
+ sourcep->mCurrentDatap = sourcep->mQueuedDatap;
+ sourcep->mQueuedDatap = NULL;
- // Actually play the associated data.
+ // Actually, should do a time sync so if we're a loop master/slave
+ // we don't drift away.
sourcep->setupChannel();
- channelp->updateBuffer();
sourcep->getChannel()->play();
}
- else if (sourcep->isLoop())
- {
- // It's a loop, we need to check and see if we're done with it.
- if (channelp->mLoopedThisFrame)
- {
- sourcep->mCurrentDatap = sourcep->mQueuedDatap;
- sourcep->mQueuedDatap = NULL;
-
- // Actually, should do a time sync so if we're a loop master/slave
- // we don't drift away.
- sourcep->setupChannel();
- sourcep->getChannel()->play();
- }
- }
}
}
@@ -396,18 +398,11 @@ void LLAudioEngine::idle()
for (source_map::value_type& src_pair : mAllSources)
{
LLAudioSource *sourcep = src_pair.second;
- if (sourcep->isMuted())
- {
- continue;
- }
- if (sourcep->isSyncMaster())
+ if (sourcep->isMuted() && sourcep->isSyncMaster() && sourcep->getPriority() > max_sm_priority)
{
- if (sourcep->getPriority() > max_sm_priority)
- {
- sync_masterp = sourcep;
- master_channelp = sync_masterp->getChannel();
- max_sm_priority = sourcep->getPriority();
- }
+ sync_masterp = sourcep;
+ master_channelp = sync_masterp->getChannel();
+ max_sm_priority = sourcep->getPriority();
}
}
@@ -737,7 +732,7 @@ F64 LLAudioEngine::mapWindVecToGain(LLVector3 wind_vec)
}
return (gain);
-}
+}
F64 LLAudioEngine::mapWindVecToPitch(LLVector3 wind_vec)
@@ -964,12 +959,11 @@ void LLAudioEngine::cleanupAudioSource(LLAudioSource *asp)
else
{
LL_DEBUGS("AudioEngine") << "Cleaning up audio sources for "<< asp->getID() <<LL_ENDL;
- delete asp;
- mAllSources.erase(iter);
-}
+ delete asp;
+ mAllSources.erase(iter);
+ }
}
-
bool LLAudioEngine::hasDecodedFile(const LLUUID &uuid)
{
std::string uuid_str;
@@ -1687,20 +1681,19 @@ void LLAudioChannel::setSource(LLAudioSource *sourcep)
{
LL_DEBUGS("AudioEngine") << "( id: " << sourcep->getID() << ")" << LL_ENDL;
- if (sourcep == mCurrentSourcep)
- {
- // Don't reallocate the channel, this will make FMOD goofy.
- //LL_INFOS() << "Calling setSource with same source!" << LL_ENDL;
- }
+ if (sourcep == mCurrentSourcep)
+ {
+ // Don't reallocate the channel, this will make FMOD goofy.
+ //LL_INFOS() << "Calling setSource with same source!" << LL_ENDL;
+ }
- mCurrentSourcep = sourcep;
+ mCurrentSourcep = sourcep;
- updateBuffer();
- update3DPosition();
-}
+ updateBuffer();
+ update3DPosition();
+ }
}
-
bool LLAudioChannel::updateBuffer()
{
if (!gAudiop)
diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h
index 0fe8b3d756..a133898969 100755
--- a/indra/llaudio/llaudioengine.h
+++ b/indra/llaudio/llaudioengine.h
@@ -90,6 +90,7 @@ public:
// initialization/startup/shutdown
virtual bool init(void *userdata, const std::string &app_title);
virtual std::string getDriverName(bool verbose) = 0;
+ virtual LLStreamingAudioInterface *createDefaultStreamingAudioImpl() const = 0;
virtual void shutdown();
// Used by the mechanics of the engine
@@ -468,13 +469,13 @@ struct SoundData
const LLUUID& owner_id,
const F32 gain,
const S32 type = LLAudioEngine::AUDIO_TYPE_NONE,
- const LLVector3d &pos_global = LLVector3d::zero)
+ const LLVector3d &pos_global = LLVector3d::zero) :
+ audio_uuid(audio_uuid),
+ owner_id(owner_id),
+ gain(gain),
+ type(type),
+ pos_global(pos_global)
{
- this->audio_uuid = audio_uuid;
- this->owner_id = owner_id;
- this->gain = gain;
- this->type = type;
- this->pos_global = pos_global;
}
};
diff --git a/indra/llaudio/llaudioengine_fmodstudio.cpp b/indra/llaudio/llaudioengine_fmodstudio.cpp
index ba743020b5..c6313ea289 100644
--- a/indra/llaudio/llaudioengine_fmodstudio.cpp
+++ b/indra/llaudio/llaudioengine_fmodstudio.cpp
@@ -208,10 +208,6 @@ bool LLAudioEngine_FMODSTUDIO::init(void* userdata, const std::string &app_title
}
#endif
- // set up our favourite FMOD-native streaming audio implementation if none has already been added
- if (!getStreamingAudioImpl()) // no existing implementation added
- setStreamingAudioImpl(new LLStreamingAudio_FMODSTUDIO(mSystem));
-
LL_INFOS("AppInit") << "LLAudioEngine_FMODSTUDIO::init() FMOD Studio initialized correctly" << LL_ENDL;
int r_numbuffers, r_samplerate, r_channels;
@@ -253,6 +249,13 @@ std::string LLAudioEngine_FMODSTUDIO::getDriverName(bool verbose)
}
+// create our favourite FMOD-native streaming audio implementation
+LLStreamingAudioInterface *LLAudioEngine_FMODSTUDIO::createDefaultStreamingAudioImpl() const
+{
+ return new LLStreamingAudio_FMODSTUDIO(mSystem);
+}
+
+
void LLAudioEngine_FMODSTUDIO::allocateListener(void)
{
mListenerp = (LLListener *) new LLListener_FMODSTUDIO(mSystem);
diff --git a/indra/llaudio/llaudioengine_fmodstudio.h b/indra/llaudio/llaudioengine_fmodstudio.h
index d3d6d69685..29e7bc6bf0 100644
--- a/indra/llaudio/llaudioengine_fmodstudio.h
+++ b/indra/llaudio/llaudioengine_fmodstudio.h
@@ -53,6 +53,7 @@ public:
// initialization/startup/shutdown
virtual bool init(void *user_data, const std::string &app_title);
virtual std::string getDriverName(bool verbose);
+ virtual LLStreamingAudioInterface* createDefaultStreamingAudioImpl() const;
virtual void allocateListener();
virtual void shutdown();
diff --git a/indra/llcharacter/llbvhloader.cpp b/indra/llcharacter/llbvhloader.cpp
index 117d408b21..5b1b28bf4f 100644
--- a/indra/llcharacter/llbvhloader.cpp
+++ b/indra/llcharacter/llbvhloader.cpp
@@ -1352,7 +1352,6 @@ BOOL LLBVHLoader::serialize(LLDataPacker& dp)
dp.packS32(joint->mNumRotKeys, "num_rot_keys");
LLQuaternion::Order order = bvhStringToOrder( joint->mOrder );
- S32 outcount = 0;
S32 frame = 0;
for (Key& key : joint->mKeys)
{
@@ -1418,7 +1417,6 @@ BOOL LLBVHLoader::serialize(LLDataPacker& dp)
dp.packU16(x, "rot_angle_x");
dp.packU16(y, "rot_angle_y");
dp.packU16(z, "rot_angle_z");
- outcount++;
frame++;
}
diff --git a/indra/llcommon/hbxxh.h b/indra/llcommon/hbxxh.h
index 236716722a..9c0e9cf172 100644
--- a/indra/llcommon/hbxxh.h
+++ b/indra/llcommon/hbxxh.h
@@ -96,6 +96,15 @@ public:
}
}
+ // Make this class no-copy (it would be possible, with custom copy
+ // operators, but it is not trivially copyable, because of the mState
+ // pointer): it does not really make sense to allow copying it anyway,
+ // since all we care about is the resulting digest (so you should only
+ // need and care about storing/copying the digest and not a class
+ // instance).
+ HBXXH64(const HBXXH64&) noexcept = delete;
+ HBXXH64& operator=(const HBXXH64&) noexcept = delete;
+
~HBXXH64();
void update(const void* buffer, size_t len);
@@ -199,6 +208,15 @@ public:
}
}
+ // Make this class no-copy (it would be possible, with custom copy
+ // operators, but it is not trivially copyable, because of the mState
+ // pointer): it does not really make sense to allow copying it anyway,
+ // since all we care about is the resulting digest (so you should only
+ // need and care about storing/copying the digest and not a class
+ // instance).
+ HBXXH128(const HBXXH128&) noexcept = delete;
+ HBXXH128& operator=(const HBXXH128&) noexcept = delete;
+
~HBXXH128();
void update(const void* buffer, size_t len);
diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h
index 10b98f49aa..679f79039b 100644
--- a/indra/llcommon/indra_constants.h
+++ b/indra/llcommon/indra_constants.h
@@ -345,6 +345,7 @@ const U8 CLICK_ACTION_PLAY = 5;
const U8 CLICK_ACTION_OPEN_MEDIA = 6;
const U8 CLICK_ACTION_ZOOM = 7;
const U8 CLICK_ACTION_DISABLED = 8;
+const U8 CLICK_ACTION_IGNORE = 9;
// DO NOT CHANGE THE SEQUENCE OF THIS LIST!!
diff --git a/indra/llcommon/lldefs.h b/indra/llcommon/lldefs.h
index 5c46f6a796..4e25001fff 100644
--- a/indra/llcommon/lldefs.h
+++ b/indra/llcommon/lldefs.h
@@ -167,48 +167,34 @@ const U32 MAXADDRSTR = 17; // 123.567.901.345 = 15 chars + \0 + 1 for good luc
//
// defined for U16, U32, U64, S16, S32, S64, :
// llclampb(a) // clamps a to [0 .. 255]
-//
-
-template <typename T1, typename T2>
-inline auto llmax(T1 d1, T2 d2)
-{
- return (d1 > d2) ? d1 : d2;
-}
-
-template <typename T1, typename T2, typename T3>
-inline auto llmax(T1 d1, T2 d2, T3 d3)
-{
- auto r = llmax(d1,d2);
- return llmax(r, d3);
-}
+//
-template <typename T1, typename T2, typename T3, typename T4>
-inline auto llmax(T1 d1, T2 d2, T3 d3, T4 d4)
+// recursion tail
+template <typename T>
+inline auto llmax(T data)
{
- auto r1 = llmax(d1,d2);
- auto r2 = llmax(d3,d4);
- return llmax(r1, r2);
+ return data;
}
-template <typename T1, typename T2>
-inline auto llmin(T1 d1, T2 d2)
+template <typename T0, typename T1, typename... Ts>
+inline auto llmax(T0 d0, T1 d1, Ts... rest)
{
- return (d1 < d2) ? d1 : d2;
+ auto maxrest = llmax(d1, rest...);
+ return (d0 > maxrest)? d0 : maxrest;
}
-template <typename T1, typename T2, typename T3>
-inline auto llmin(T1 d1, T2 d2, T3 d3)
+// recursion tail
+template <typename T>
+inline auto llmin(T data)
{
- auto r = llmin(d1,d2);
- return (r < d3 ? r : d3);
+ return data;
}
-template <typename T1, typename T2, typename T3, typename T4>
-inline auto llmin(T1 d1, T2 d2, T3 d3, T4 d4)
+template <typename T0, typename T1, typename... Ts>
+inline auto llmin(T0 d0, T1 d1, Ts... rest)
{
- auto r1 = llmin(d1,d2);
- auto r2 = llmin(d3,d4);
- return llmin(r1, r2);
+ auto minrest = llmin(d1, rest...);
+ return (d0 < minrest) ? d0 : minrest;
}
template <typename A, typename MIN, typename MAX>
diff --git a/indra/llcommon/llleap.cpp b/indra/llcommon/llleap.cpp
index c87c0758fe..259f5bc505 100644
--- a/indra/llcommon/llleap.cpp
+++ b/indra/llcommon/llleap.cpp
@@ -204,30 +204,35 @@ public:
LLSD packet(LLSDMap("pump", pump)("data", data));
std::ostringstream buffer;
- buffer << LLSDNotationStreamer(packet);
+ // SL-18330: for large data blocks, it's much faster to parse binary
+ // LLSD than notation LLSD. Use serialize(LLSD_BINARY) rather than
+ // directly calling LLSDBinaryFormatter because, unlike the latter,
+ // serialize() prepends the relevant header, needed by a general-
+ // purpose LLSD parser to distinguish binary from notation.
+ LLSDSerialize::serialize(packet, buffer, LLSDSerialize::LLSD_BINARY,
+ LLSDFormatter::OPTIONS_NONE);
/*==========================================================================*|
// DEBUGGING ONLY: don't copy str() if we can avoid it.
std::string strdata(buffer.str());
if (std::size_t(buffer.tellp()) != strdata.length())
{
- LL_ERRS("LLLeap") << "tellp() -> " << buffer.tellp() << " != "
+ LL_ERRS("LLLeap") << "tellp() -> " << static_cast<U64>(buffer.tellp()) << " != "
<< "str().length() -> " << strdata.length() << LL_ENDL;
}
// DEBUGGING ONLY: reading back is terribly inefficient.
std::istringstream readback(strdata);
LLSD echo;
- LLPointer<LLSDParser> parser(new LLSDNotationParser());
- S32 parse_status(parser->parse(readback, echo, strdata.length()));
- if (parse_status == LLSDParser::PARSE_FAILURE)
+ bool parse_status(LLSDSerialize::deserialize(echo, readback, strdata.length()));
+ if (! parse_status)
{
- LL_ERRS("LLLeap") << "LLSDNotationParser() cannot parse output of "
- << "LLSDNotationStreamer()" << LL_ENDL;
+ LL_ERRS("LLLeap") << "LLSDSerialize::deserialize() cannot parse output of "
+ << "LLSDSerialize::serialize(LLSD_BINARY)" << LL_ENDL;
}
if (! llsd_equals(echo, packet))
{
- LL_ERRS("LLLeap") << "LLSDNotationParser() produced different LLSD "
- << "than passed to LLSDNotationStreamer()" << LL_ENDL;
+ LL_ERRS("LLLeap") << "LLSDSerialize::deserialize() returned different LLSD "
+ << "than passed to LLSDSerialize::serialize()" << LL_ENDL;
}
|*==========================================================================*/
@@ -314,9 +319,17 @@ public:
LL_DEBUGS("LLLeap") << "needed " << mExpect << " bytes, got "
<< childout.size() << ", parsing LLSD" << LL_ENDL;
LLSD data;
+#if 1
+ // specifically require notation LLSD from child
LLPointer<LLSDParser> parser(new LLSDNotationParser());
S32 parse_status(parser->parse(childout.get_istream(), data, mExpect));
if (parse_status == LLSDParser::PARSE_FAILURE)
+#else
+ // SL-18330: accept any valid LLSD serialization format from child
+ // Unfortunately this runs into trouble we have not yet debugged.
+ bool parse_status(LLSDSerialize::deserialize(data, childout.get_istream(), mExpect));
+ if (! parse_status)
+#endif
{
bad_protocol("unparseable LLSD data");
}
diff --git a/indra/llcommon/llmd5.cpp b/indra/llcommon/llmd5.cpp
index 9b2a2bab60..0abe817f1d 100644
--- a/indra/llcommon/llmd5.cpp
+++ b/indra/llcommon/llmd5.cpp
@@ -96,7 +96,7 @@ LLMD5::LLMD5()
// operation, processing another message block, and updating the
// context.
-void LLMD5::update (const uint1 *input, const size_t input_length) {
+void LLMD5::update (const uint8_t *input, const size_t input_length) {
size_t input_index, buffer_index;
size_t buffer_space; // how much space is left in buffer
@@ -189,7 +189,7 @@ void LLMD5::finalize (){
unsigned char bits[8]; /* Flawfinder: ignore */
size_t index, padLen;
- static uint1 PADDING[64]={
+ static uint8_t PADDING[64]={
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
@@ -201,8 +201,8 @@ void LLMD5::finalize (){
}
// Save number of bits.
- // Treat count, a uint64_t, as uint4[2].
- encode (bits, reinterpret_cast<uint4*>(&count), 8);
+ // Treat count, a uint64_t, as uint32_t[2].
+ encode (bits, reinterpret_cast<uint32_t*>(&count), 8);
// Pad out to 56 mod 64.
index = size_t((count >> 3) & 0x3f);
@@ -412,7 +412,7 @@ Rotation is separate from addition to prevent recomputation.
// LLMD5 basic transformation. Transforms state based on block.
void LLMD5::transform (const U8 block[64]){
- uint4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
+ uint32_t a = state[0], b = state[1], c = state[2], d = state[3], x[16];
decode (x, block, 64);
@@ -496,38 +496,38 @@ void LLMD5::transform (const U8 block[64]){
state[3] += d;
// Zeroize sensitive information.
- memset ( (uint1 *) x, 0, sizeof(x));
+ memset ( (uint8_t *) x, 0, sizeof(x));
}
-// Encodes input (UINT4) into output (unsigned char). Assumes len is
+// Encodes input (uint32_t) into output (unsigned char). Assumes len is
// a multiple of 4.
-void LLMD5::encode (uint1 *output, const uint4 *input, const size_t len) {
+void LLMD5::encode (uint8_t *output, const uint32_t *input, const size_t len) {
size_t i, j;
for (i = 0, j = 0; j < len; i++, j += 4) {
- output[j] = (uint1) (input[i] & 0xff);
- output[j+1] = (uint1) ((input[i] >> 8) & 0xff);
- output[j+2] = (uint1) ((input[i] >> 16) & 0xff);
- output[j+3] = (uint1) ((input[i] >> 24) & 0xff);
+ output[j] = (uint8_t) (input[i] & 0xff);
+ output[j+1] = (uint8_t) ((input[i] >> 8) & 0xff);
+ output[j+2] = (uint8_t) ((input[i] >> 16) & 0xff);
+ output[j+3] = (uint8_t) ((input[i] >> 24) & 0xff);
}
}
-// Decodes input (unsigned char) into output (UINT4). Assumes len is
+// Decodes input (unsigned char) into output (uint32_t). Assumes len is
// a multiple of 4.
-void LLMD5::decode (uint4 *output, const uint1 *input, const size_t len){
+void LLMD5::decode (uint32_t *output, const uint8_t *input, const size_t len){
size_t i, j;
for (i = 0, j = 0; j < len; i++, j += 4)
- output[i] = ((uint4)input[j]) | (((uint4)input[j+1]) << 8) |
- (((uint4)input[j+2]) << 16) | (((uint4)input[j+3]) << 24);
+ output[i] = ((uint32_t)input[j]) | (((uint32_t)input[j+1]) << 8) |
+ (((uint32_t)input[j+2]) << 16) | (((uint32_t)input[j+3]) << 24);
}
diff --git a/indra/llcommon/llmd5.h b/indra/llcommon/llmd5.h
index 8530dc0389..7d6373c20c 100644
--- a/indra/llcommon/llmd5.h
+++ b/indra/llcommon/llmd5.h
@@ -67,6 +67,8 @@ documentation and/or software.
*/
+#include <cstdint> // uint32_t et al.
+
// use for the raw digest output
const int MD5RAW_BYTES = 16;
@@ -75,18 +77,13 @@ const int MD5HEX_STR_SIZE = 33; // char hex[MD5HEX_STR_SIZE]; with null
const int MD5HEX_STR_BYTES = 32; // message system fixed size
class LL_COMMON_API LLMD5 {
-// first, some types:
- typedef unsigned int uint4; // assumes integer is 4 words long
- typedef unsigned short int uint2; // assumes short integer is 2 words long
- typedef unsigned char uint1; // assumes char is 1 word long
-
// how many bytes to grab at a time when checking files
static const int BLOCK_LEN;
public:
// methods for controlled operation:
LLMD5 (); // simple initializer
- void update (const uint1 *input, const size_t input_length);
+ void update (const uint8_t *input, const size_t input_length);
void update (std::istream& stream);
void update (FILE *file);
void update (const std::string& str);
@@ -109,19 +106,19 @@ private:
// next, the private data:
- uint4 state[4];
+ uint32_t state[4];
uint64_t count; // number of *bits*, mod 2^64
- uint1 buffer[64]; // input buffer
- uint1 digest[16];
- uint1 finalized;
+ uint8_t buffer[64]; // input buffer
+ uint8_t digest[16];
+ uint8_t finalized;
// last, the private methods, mostly static:
void init (); // called by all constructors
- void transform (const uint1 *buffer); // does the real update work. Note
+ void transform (const uint8_t *buffer); // does the real update work. Note
// that length is implied to be 64.
- static void encode (uint1 *dest, const uint4 *src, const size_t length);
- static void decode (uint4 *dest, const uint1 *src, const size_t length);
+ static void encode (uint8_t *dest, const uint32_t *src, const size_t length);
+ static void decode (uint32_t *dest, const uint8_t *src, const size_t length);
};
diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp
index b7e316da10..3db456ddb3 100644
--- a/indra/llcommon/llsdserialize.cpp
+++ b/indra/llcommon/llsdserialize.cpp
@@ -48,6 +48,7 @@
#endif
#include "lldate.h"
+#include "llmemorystream.h"
#include "llsd.h"
#include "llstring.h"
#include "lluri.h"
@@ -64,6 +65,23 @@ const std::string LLSD_NOTATION_HEADER("llsd/notation");
#define windowBits 15
#define ENABLE_ZLIB_GZIP 32
+// If we published this in llsdserialize.h, we could use it in the
+// implementation of LLSDOStreamer's operator<<().
+template <class Formatter>
+void format_using(const LLSD& data, std::ostream& ostr,
+ LLSDFormatter::EFormatterOptions options=LLSDFormatter::OPTIONS_PRETTY_BINARY)
+{
+ LLPointer<Formatter> f{ new Formatter };
+ f->format(data, ostr, options);
+}
+
+template <class Parser>
+S32 parse_using(std::istream& istr, LLSD& data, size_t max_bytes, S32 max_depth=-1)
+{
+ LLPointer<Parser> p{ new Parser };
+ return p->parse(istr, data, max_bytes, max_depth);
+}
+
/**
* LLSDSerialize
*/
@@ -86,10 +104,10 @@ void LLSDSerialize::serialize(const LLSD& sd, std::ostream& str, ELLSD_Serialize
f = new LLSDXMLFormatter;
break;
- case LLSD_NOTATION:
- str << "<? " << LLSD_NOTATION_HEADER << " ?>\n";
- f = new LLSDNotationFormatter;
- break;
+ case LLSD_NOTATION:
+ str << "<? " << LLSD_NOTATION_HEADER << " ?>\n";
+ f = new LLSDNotationFormatter;
+ break;
default:
LL_WARNS() << "serialize request for unknown ELLSD_Serialize" << LL_ENDL;
@@ -104,18 +122,37 @@ void LLSDSerialize::serialize(const LLSD& sd, std::ostream& str, ELLSD_Serialize
// static
bool LLSDSerialize::deserialize(LLSD& sd, std::istream& str, llssize max_bytes)
{
- LLPointer<LLSDParser> p = NULL;
char hdr_buf[MAX_HDR_LEN + 1] = ""; /* Flawfinder: ignore */
- int i;
- int inbuf = 0;
- bool legacy_no_header = false;
bool fail_if_not_legacy = false;
- std::string header;
- /*
- * Get the first line before anything.
- */
- str.get(hdr_buf, MAX_HDR_LEN, '\n');
+ /*
+ * Get the first line before anything. Don't read more than max_bytes:
+ * this get() overload reads no more than (count-1) bytes into the
+ * specified buffer. In the usual case when max_bytes exceeds
+ * sizeof(hdr_buf), get() will read no more than sizeof(hdr_buf)-2.
+ */
+ llssize max_hdr_read = MAX_HDR_LEN;
+ if (max_bytes != LLSDSerialize::SIZE_UNLIMITED)
+ {
+ max_hdr_read = llmin(max_bytes + 1, max_hdr_read);
+ }
+ str.get(hdr_buf, max_hdr_read, '\n');
+ auto inbuf = str.gcount();
+
+ // https://en.cppreference.com/w/cpp/io/basic_istream/get
+ // When the get() above sees the specified delimiter '\n', it stops there
+ // without pulling it from the stream. If it turns out that the stream
+ // does NOT contain a header, and the content includes meaningful '\n',
+ // it's important to pull that into hdr_buf too.
+ if (inbuf < max_bytes && str.get(hdr_buf[inbuf]))
+ {
+ // got the delimiting '\n'
+ ++inbuf;
+ // None of the following requires that hdr_buf contain a final '\0'
+ // byte. We could store one if needed, since even the incremented
+ // inbuf won't exceed sizeof(hdr_buf)-1, but there's no need.
+ }
+ std::string header{ hdr_buf, static_cast<std::string::size_type>(inbuf) };
if (str.fail())
{
str.clear();
@@ -123,79 +160,97 @@ bool LLSDSerialize::deserialize(LLSD& sd, std::istream& str, llssize max_bytes)
}
if (!strncasecmp(LEGACY_NON_HEADER, hdr_buf, strlen(LEGACY_NON_HEADER))) /* Flawfinder: ignore */
+ { // Create a LLSD XML parser, and parse the first chunk read above.
+ LLSDXMLParser x;
+ x.parsePart(hdr_buf, inbuf); // Parse the first part that was already read
+ auto parsed = x.parse(str, sd, max_bytes - inbuf); // Parse the rest of it
+ // Formally we should probably check (parsed != PARSE_FAILURE &&
+ // parsed > 0), but since PARSE_FAILURE is -1, this suffices.
+ return (parsed > 0);
+ }
+
+ if (fail_if_not_legacy)
{
- legacy_no_header = true;
- inbuf = (int)str.gcount();
+ LL_WARNS() << "deserialize LLSD parse failure" << LL_ENDL;
+ return false;
}
- else
+
+ /*
+ * Remove the newline chars
+ */
+ std::string::size_type lastchar = header.find_last_not_of("\r\n");
+ if (lastchar != std::string::npos)
{
- if (fail_if_not_legacy)
- goto fail;
- /*
- * Remove the newline chars
- */
- for (i = 0; i < MAX_HDR_LEN; i++)
- {
- if (hdr_buf[i] == 0 || hdr_buf[i] == '\r' ||
- hdr_buf[i] == '\n')
- {
- hdr_buf[i] = 0;
- break;
- }
- }
- header = hdr_buf;
+ // It's important that find_last_not_of() returns size_type, which is
+ // why lastchar explicitly declares the type above. erase(size_type)
+ // erases from that offset to the end of the string, whereas
+ // erase(iterator) erases only a single character.
+ header.erase(lastchar+1);
+ }
- std::string::size_type start = std::string::npos;
- std::string::size_type end = std::string::npos;
- start = header.find_first_not_of("<? ");
- if (start != std::string::npos)
+ // trim off the <? ... ?> header syntax
+ auto start = header.find_first_not_of("<? ");
+ if (start != std::string::npos)
+ {
+ auto end = header.find_first_of(" ?", start);
+ if (end != std::string::npos)
{
- end = header.find_first_of(" ?", start);
+ header = header.substr(start, end - start);
+ ws(str);
}
- if ((start == std::string::npos) || (end == std::string::npos))
- goto fail;
-
- header = header.substr(start, end - start);
- ws(str);
}
/*
* Create the parser as appropriate
*/
- if (legacy_no_header)
- { // Create a LLSD XML parser, and parse the first chunk read above
- LLSDXMLParser* x = new LLSDXMLParser();
- x->parsePart(hdr_buf, inbuf); // Parse the first part that was already read
- x->parseLines(str, sd); // Parse the rest of it
- delete x;
- return true;
- }
-
- if (header == LLSD_BINARY_HEADER)
+ if (0 == LLStringUtil::compareInsensitive(header, LLSD_BINARY_HEADER))
{
- p = new LLSDBinaryParser;
+ return (parse_using<LLSDBinaryParser>(str, sd, max_bytes-inbuf) > 0);
}
- else if (header == LLSD_XML_HEADER)
+ else if (0 == LLStringUtil::compareInsensitive(header, LLSD_XML_HEADER))
{
- p = new LLSDXMLParser;
+ return (parse_using<LLSDXMLParser>(str, sd, max_bytes-inbuf) > 0);
}
- else if (header == LLSD_NOTATION_HEADER)
+ else if (0 == LLStringUtil::compareInsensitive(header, LLSD_NOTATION_HEADER))
{
- p = new LLSDNotationParser;
+ return (parse_using<LLSDNotationParser>(str, sd, max_bytes-inbuf) > 0);
}
- else
+ else // no header we recognize
{
- LL_WARNS() << "deserialize request for unknown ELLSD_Serialize" << LL_ENDL;
- }
-
- if (p.notNull())
- {
- p->parse(str, sd, max_bytes);
- return true;
+ LLPointer<LLSDParser> p;
+ if (inbuf && hdr_buf[0] == '<')
+ {
+ // looks like XML
+ LL_DEBUGS() << "deserialize request with no header, assuming XML" << LL_ENDL;
+ p = new LLSDXMLParser;
+ }
+ else
+ {
+ // assume notation
+ LL_DEBUGS() << "deserialize request with no header, assuming notation" << LL_ENDL;
+ p = new LLSDNotationParser;
+ }
+ // Since we've already read 'inbuf' bytes into 'hdr_buf', prepend that
+ // data to whatever remains in 'str'.
+ LLMemoryStreamBuf already(reinterpret_cast<const U8*>(hdr_buf), inbuf);
+ cat_streambuf prebuff(&already, str.rdbuf());
+ std::istream prepend(&prebuff);
+#if 1
+ return (p->parse(prepend, sd, max_bytes) > 0);
+#else
+ // debugging the reconstituted 'prepend' stream
+ // allocate a buffer that we hope is big enough for the whole thing
+ std::vector<char> wholemsg((max_bytes == size_t(SIZE_UNLIMITED))? 1024 : max_bytes);
+ prepend.read(wholemsg.data(), std::min(max_bytes, wholemsg.size()));
+ LLMemoryStream replay(reinterpret_cast<const U8*>(wholemsg.data()), prepend.gcount());
+ auto success{ p->parse(replay, sd, prepend.gcount()) > 0 };
+ {
+ LL_DEBUGS() << (success? "parsed: $$" : "failed: '")
+ << std::string(wholemsg.data(), llmin(prepend.gcount(), 100)) << "$$"
+ << LL_ENDL;
+ }
+ return success;
+#endif
}
-
-fail:
- LL_WARNS() << "deserialize LLSD parse failure" << LL_ENDL;
- return false;
}
/**
@@ -2193,9 +2248,9 @@ LLUZipHelper::EZipRresult LLUZipHelper::unzip_llsd(LLSD& data, std::istream& is,
LLUZipHelper::EZipRresult LLUZipHelper::unzip_llsd(LLSD& data, const U8* in, S32 size)
{
U8* result = NULL;
- U32 cur_size = 0;
+ llssize cur_size = 0;
z_stream strm;
-
+
constexpr U32 CHUNK = 1024 * 512;
static thread_local std::unique_ptr<U8[]> out;
@@ -2388,7 +2443,7 @@ U8* unzip_llsdNavMesh( bool& valid, size_t& outsize, std::istream& is, S32 size
return result;
}
-char* strip_deprecated_header(char* in, U32& cur_size, U32* header_size)
+char* strip_deprecated_header(char* in, llssize& cur_size, llssize* header_size)
{
const char* deprecated_header = "<? LLSD/Binary ?>";
constexpr size_t deprecated_header_size = 17;
diff --git a/indra/llcommon/llsdserialize.h b/indra/llcommon/llsdserialize.h
index 2f12c6d1ff..676b7bfd6a 100644
--- a/indra/llcommon/llsdserialize.h
+++ b/indra/llcommon/llsdserialize.h
@@ -873,5 +873,5 @@ LL_COMMON_API std::string zip_llsd(LLSD& data);
LL_COMMON_API U8* unzip_llsdNavMesh( bool& valid, size_t& outsize,std::istream& is, S32 size);
// returns a pointer to the array or past the array if the deprecated header exists
-LL_COMMON_API char* strip_deprecated_header(char* in, U32& cur_size, U32* header_size = nullptr);
+LL_COMMON_API char* strip_deprecated_header(char* in, llssize& cur_size, llssize* header_size = nullptr);
#endif // LL_LLSDSERIALIZE_H
diff --git a/indra/llcommon/llstreamtools.cpp b/indra/llcommon/llstreamtools.cpp
index 1ff15fcf89..bc32b6fd9e 100644
--- a/indra/llcommon/llstreamtools.cpp
+++ b/indra/llcommon/llstreamtools.cpp
@@ -513,3 +513,29 @@ std::istream& operator>>(std::istream& str, const char *tocheck)
}
return str;
}
+
+int cat_streambuf::underflow()
+{
+ if (gptr() == egptr())
+ {
+ // here because our buffer is empty
+ std::streamsize size = 0;
+ // Until we've run out of mInputs, try reading the first of them
+ // into mBuffer. If that fetches some characters, break the loop.
+ while (! mInputs.empty()
+ && ! (size = mInputs.front()->sgetn(mBuffer.data(), mBuffer.size())))
+ {
+ // We tried to read mInputs.front() but got zero characters.
+ // Discard the first streambuf and try the next one.
+ mInputs.pop_front();
+ }
+ // Either we ran out of mInputs or we succeeded in reading some
+ // characters, that is, size != 0. Tell base class what we have.
+ setg(mBuffer.data(), mBuffer.data(), mBuffer.data() + size);
+ }
+ // If we fell out of the above loop with mBuffer still empty, return
+ // eof(), otherwise return the next character.
+ return (gptr() == egptr())
+ ? std::char_traits<char>::eof()
+ : std::char_traits<char>::to_int_type(*gptr());
+}
diff --git a/indra/llcommon/llstreamtools.h b/indra/llcommon/llstreamtools.h
index 1b04bf91d7..bb7bc20327 100644
--- a/indra/llcommon/llstreamtools.h
+++ b/indra/llcommon/llstreamtools.h
@@ -27,8 +27,10 @@
#ifndef LL_STREAM_TOOLS_H
#define LL_STREAM_TOOLS_H
+#include <deque>
#include <iostream>
#include <string>
+#include <vector>
// unless specifed otherwise these all return input_stream.good()
@@ -113,6 +115,27 @@ LL_COMMON_API std::streamsize fullread(
LL_COMMON_API std::istream& operator>>(std::istream& str, const char *tocheck);
-#endif
-
+/**
+ * cat_streambuf is a std::streambuf subclass that accepts a variadic number
+ * of std::streambuf* (e.g. some_istream.rdbuf()) and virtually concatenates
+ * their contents.
+ */
+// derived from https://stackoverflow.com/a/49441066/5533635
+class cat_streambuf: public std::streambuf
+{
+private:
+ std::deque<std::streambuf*> mInputs;
+ std::vector<char> mBuffer;
+
+public:
+ // only valid for std::streambuf* arguments
+ template <typename... Inputs>
+ cat_streambuf(Inputs... inputs):
+ mInputs{inputs...},
+ mBuffer(1024)
+ {}
+
+ int underflow() override;
+};
+#endif
diff --git a/indra/llcommon/lltracerecording.cpp b/indra/llcommon/lltracerecording.cpp
index a8dcc5226a..bb3d667a42 100644
--- a/indra/llcommon/lltracerecording.cpp
+++ b/indra/llcommon/lltracerecording.cpp
@@ -577,10 +577,12 @@ S32 Recording::getSampleCount( const StatType<EventAccumulator>& stat )
// PeriodicRecording
///////////////////////////////////////////////////////////////////////
-PeriodicRecording::PeriodicRecording( S32 num_periods, EPlayState state)
+PeriodicRecording::PeriodicRecording( size_t num_periods, EPlayState state)
: mAutoResize(num_periods == 0),
mCurPeriod(0),
mNumRecordedPeriods(0),
+ // This guarantee that mRecordingPeriods cannot be empty is essential for
+ // code in several methods.
mRecordingPeriods(num_periods ? num_periods : 1)
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
@@ -596,18 +598,19 @@ PeriodicRecording::~PeriodicRecording()
void PeriodicRecording::nextPeriod()
{
- LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
if (mAutoResize)
{
mRecordingPeriods.push_back(Recording());
}
Recording& old_recording = getCurRecording();
- mCurPeriod = (mCurPeriod + 1) % mRecordingPeriods.size();
+ inci(mCurPeriod);
old_recording.splitTo(getCurRecording());
- mNumRecordedPeriods = mRecordingPeriods.empty()? 0 :
- llmin(mRecordingPeriods.size() - 1, mNumRecordedPeriods + 1);
+ // Since mRecordingPeriods always has at least one entry, we can always
+ // safely subtract 1 from its size().
+ mNumRecordedPeriods = llmin(mRecordingPeriods.size() - 1, mNumRecordedPeriods + 1);
}
void PeriodicRecording::appendRecording(Recording& recording)
@@ -620,31 +623,29 @@ void PeriodicRecording::appendRecording(Recording& recording)
void PeriodicRecording::appendPeriodicRecording( PeriodicRecording& other )
{
- LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
if (other.mRecordingPeriods.empty()) return;
getCurRecording().update();
other.getCurRecording().update();
-
- const auto other_recording_slots = other.mRecordingPeriods.size();
+
const auto other_num_recordings = other.getNumRecordedPeriods();
const auto other_current_recording_index = other.mCurPeriod;
- const auto other_oldest_recording_index = (other_current_recording_index + other_recording_slots - other_num_recordings) % other_recording_slots;
+ const auto other_oldest_recording_index = other.previ(other_current_recording_index, other_num_recordings);
// append first recording into our current slot
getCurRecording().appendRecording(other.mRecordingPeriods[other_oldest_recording_index]);
// from now on, add new recordings for everything after the first
- auto other_index = (other_oldest_recording_index + 1) % other_recording_slots;
+ auto other_index = other.nexti(other_oldest_recording_index);
if (mAutoResize)
{
// push back recordings for everything in the middle
- auto other_index = (other_oldest_recording_index + 1) % other_recording_slots;
while (other_index != other_current_recording_index)
{
mRecordingPeriods.push_back(other.mRecordingPeriods[other_index]);
- other_index = (other_index + 1) % other_recording_slots;
+ other.inci(other_index);
}
// add final recording, if it wasn't already added as the first
@@ -653,36 +654,25 @@ void PeriodicRecording::appendPeriodicRecording( PeriodicRecording& other )
mRecordingPeriods.push_back(other.mRecordingPeriods[other_current_recording_index]);
}
- mCurPeriod = mRecordingPeriods.empty()? 0 : mRecordingPeriods.size() - 1;
+ // mRecordingPeriods is never empty()
+ mCurPeriod = mRecordingPeriods.size() - 1;
mNumRecordedPeriods = mCurPeriod;
}
else
{
- S32 num_to_copy = llmin((S32)mRecordingPeriods.size(), (S32)other_num_recordings);
-
- std::vector<Recording>::iterator src_it = other.mRecordingPeriods.begin() + other_index ;
- std::vector<Recording>::iterator dest_it = mRecordingPeriods.begin() + mCurPeriod;
-
+ auto num_to_copy = llmin(mRecordingPeriods.size(), other_num_recordings);
// already consumed the first recording from other, so start counting at 1
- for(S32 i = 1; i < num_to_copy; i++)
+ for (size_t n = 1, srci = other_index, dsti = mCurPeriod;
+ n < num_to_copy;
+ ++n, other.inci(srci), inci(dsti))
{
- *dest_it = *src_it;
-
- if (++src_it == other.mRecordingPeriods.end())
- {
- src_it = other.mRecordingPeriods.begin();
- }
-
- if (++dest_it == mRecordingPeriods.end())
- {
- dest_it = mRecordingPeriods.begin();
- }
+ mRecordingPeriods[dsti] = other.mRecordingPeriods[srci];
}
-
+
// want argument to % to be positive, otherwise result could be negative and thus out of bounds
llassert(num_to_copy >= 1);
// advance to last recording period copied, and make that our current period
- mCurPeriod = (mCurPeriod + num_to_copy - 1) % mRecordingPeriods.size();
+ inci(mCurPeriod, num_to_copy - 1);
mNumRecordedPeriods = llmin(mRecordingPeriods.size() - 1, mNumRecordedPeriods + num_to_copy - 1);
}
@@ -694,13 +684,11 @@ void PeriodicRecording::appendPeriodicRecording( PeriodicRecording& other )
F64Seconds PeriodicRecording::getDuration() const
{
- LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
F64Seconds duration;
- auto num_periods = mRecordingPeriods.size();
- for (size_t i = 1; i <= num_periods; i++)
+ for (size_t n = 0; n < mRecordingPeriods.size(); ++n)
{
- auto index = (mCurPeriod + num_periods - i) % num_periods;
- duration += mRecordingPeriods[index].getDuration();
+ duration += mRecordingPeriods[nexti(mCurPeriod, n)].getDuration();
}
return duration;
}
@@ -737,16 +725,14 @@ const Recording& PeriodicRecording::getCurRecording() const
Recording& PeriodicRecording::getPrevRecording( size_t offset )
{
- auto num_periods = mRecordingPeriods.size();
- offset = llclamp(offset, 0, num_periods - 1);
- return mRecordingPeriods[(mCurPeriod + num_periods - offset) % num_periods];
+ // reuse const implementation, but return non-const reference
+ return const_cast<Recording&>(
+ const_cast<const PeriodicRecording*>(this)->getPrevRecording(offset));
}
const Recording& PeriodicRecording::getPrevRecording( size_t offset ) const
{
- auto num_periods = mRecordingPeriods.size();
- offset = llclamp(offset, 0, num_periods - 1);
- return mRecordingPeriods[(mCurPeriod + num_periods - offset) % num_periods];
+ return mRecordingPeriods[previ(mCurPeriod, offset)];
}
void PeriodicRecording::handleStart()
@@ -789,14 +775,14 @@ void PeriodicRecording::handleSplitTo(PeriodicRecording& other)
getCurRecording().splitTo(other.getCurRecording());
}
-F64 PeriodicRecording::getPeriodMin( const StatType<EventAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodMin( const StatType<EventAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ )
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
bool has_value = false;
F64 min_val = std::numeric_limits<F64>::max();
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.hasValue(stat))
@@ -811,14 +797,14 @@ F64 PeriodicRecording::getPeriodMin( const StatType<EventAccumulator>& stat, siz
: NaN;
}
-F64 PeriodicRecording::getPeriodMax( const StatType<EventAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodMax( const StatType<EventAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ )
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
bool has_value = false;
F64 max_val = std::numeric_limits<F64>::min();
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.hasValue(stat))
@@ -834,7 +820,7 @@ F64 PeriodicRecording::getPeriodMax( const StatType<EventAccumulator>& stat, siz
}
// calculates means using aggregates per period
-F64 PeriodicRecording::getPeriodMean( const StatType<EventAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodMean( const StatType<EventAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ )
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -842,7 +828,7 @@ F64 PeriodicRecording::getPeriodMean( const StatType<EventAccumulator>& stat, si
F64 mean = 0;
S32 valid_period_count = 0;
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.hasValue(stat))
@@ -857,7 +843,7 @@ F64 PeriodicRecording::getPeriodMean( const StatType<EventAccumulator>& stat, si
: NaN;
}
-F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<EventAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<EventAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ )
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -866,7 +852,7 @@ F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<EventAccumulat
F64 sum_of_squares = 0;
S32 valid_period_count = 0;
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.hasValue(stat))
@@ -882,14 +868,14 @@ F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<EventAccumulat
: NaN;
}
-F64 PeriodicRecording::getPeriodMin( const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodMin( const StatType<SampleAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ )
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
bool has_value = false;
F64 min_val = std::numeric_limits<F64>::max();
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.hasValue(stat))
@@ -904,14 +890,14 @@ F64 PeriodicRecording::getPeriodMin( const StatType<SampleAccumulator>& stat, si
: NaN;
}
-F64 PeriodicRecording::getPeriodMax(const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/)
+F64 PeriodicRecording::getPeriodMax(const StatType<SampleAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/)
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
bool has_value = false;
F64 max_val = std::numeric_limits<F64>::min();
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.hasValue(stat))
@@ -927,7 +913,7 @@ F64 PeriodicRecording::getPeriodMax(const StatType<SampleAccumulator>& stat, siz
}
-F64 PeriodicRecording::getPeriodMean( const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodMean( const StatType<SampleAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ )
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -935,7 +921,7 @@ F64 PeriodicRecording::getPeriodMean( const StatType<SampleAccumulator>& stat, s
S32 valid_period_count = 0;
F64 mean = 0;
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.hasValue(stat))
@@ -950,13 +936,13 @@ F64 PeriodicRecording::getPeriodMean( const StatType<SampleAccumulator>& stat, s
: NaN;
}
-F64 PeriodicRecording::getPeriodMedian( const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodMedian( const StatType<SampleAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ )
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
std::vector<F64> buf;
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.getDuration() > (F32Seconds)0.f)
@@ -976,7 +962,7 @@ F64 PeriodicRecording::getPeriodMedian( const StatType<SampleAccumulator>& stat,
return F64((buf.size() % 2 == 0) ? (buf[buf.size() / 2 - 1] + buf[buf.size() / 2]) / 2 : buf[buf.size() / 2]);
}
-F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<SampleAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ )
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -985,7 +971,7 @@ F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<SampleAccumula
S32 valid_period_count = 0;
F64 sum_of_squares = 0;
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.hasValue(stat))
@@ -1002,13 +988,13 @@ F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<SampleAccumula
}
-F64Kilobytes PeriodicRecording::getPeriodMin( const StatType<MemAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
+F64Kilobytes PeriodicRecording::getPeriodMin( const StatType<MemAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ )
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
F64Kilobytes min_val(std::numeric_limits<F64>::max());
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
min_val = llmin(min_val, recording.getMin(stat));
@@ -1022,13 +1008,13 @@ F64Kilobytes PeriodicRecording::getPeriodMin(const MemStatHandle& stat, size_t n
return getPeriodMin(static_cast<const StatType<MemAccumulator>&>(stat), num_periods);
}
-F64Kilobytes PeriodicRecording::getPeriodMax(const StatType<MemAccumulator>& stat, size_t num_periods /*= S32_MAX*/)
+F64Kilobytes PeriodicRecording::getPeriodMax(const StatType<MemAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/)
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
F64Kilobytes max_val(0.0);
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
max_val = llmax(max_val, recording.getMax(stat));
@@ -1042,14 +1028,14 @@ F64Kilobytes PeriodicRecording::getPeriodMax(const MemStatHandle& stat, size_t n
return getPeriodMax(static_cast<const StatType<MemAccumulator>&>(stat), num_periods);
}
-F64Kilobytes PeriodicRecording::getPeriodMean( const StatType<MemAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
+F64Kilobytes PeriodicRecording::getPeriodMean( const StatType<MemAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ )
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
F64Kilobytes mean(0);
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
mean += recording.getMean(stat);
@@ -1063,7 +1049,7 @@ F64Kilobytes PeriodicRecording::getPeriodMean(const MemStatHandle& stat, size_t
return getPeriodMean(static_cast<const StatType<MemAccumulator>&>(stat), num_periods);
}
-F64Kilobytes PeriodicRecording::getPeriodStandardDeviation( const StatType<MemAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
+F64Kilobytes PeriodicRecording::getPeriodStandardDeviation( const StatType<MemAccumulator>& stat, size_t num_periods /*= std::numeric_limits<size_t>::max()*/ )
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -1072,7 +1058,7 @@ F64Kilobytes PeriodicRecording::getPeriodStandardDeviation( const StatType<MemAc
S32 valid_period_count = 0;
F64 sum_of_squares = 0;
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.hasValue(stat))
diff --git a/indra/llcommon/lltracerecording.h b/indra/llcommon/lltracerecording.h
index 8b56721f42..a6b1a67d02 100644
--- a/indra/llcommon/lltracerecording.h
+++ b/indra/llcommon/lltracerecording.h
@@ -33,6 +33,7 @@
#include "lltimer.h"
#include "lltraceaccumulators.h"
#include "llpointer.h"
+#include <limits>
class LLStopWatchControlsMixinCommon
{
@@ -330,7 +331,7 @@ namespace LLTrace
: public LLStopWatchControlsMixin<PeriodicRecording>
{
public:
- PeriodicRecording(S32 num_periods, EPlayState state = STOPPED);
+ PeriodicRecording(size_t num_periods, EPlayState state = STOPPED);
~PeriodicRecording();
void nextPeriod();
@@ -353,7 +354,7 @@ namespace LLTrace
Recording snapshotCurRecording() const;
template <typename T>
- auto getSampleCount(const StatType<T>& stat, size_t num_periods = S32_MAX)
+ auto getSampleCount(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -373,14 +374,14 @@ namespace LLTrace
// catch all for stats that have a defined sum
template <typename T>
- typename T::value_t getPeriodMin(const StatType<T>& stat, size_t num_periods = S32_MAX)
+ typename T::value_t getPeriodMin(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
bool has_value = false;
typename T::value_t min_val(std::numeric_limits<typename T::value_t>::max());
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.hasValue(stat))
@@ -396,39 +397,39 @@ namespace LLTrace
}
template<typename T>
- T getPeriodMin(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ T getPeriodMin(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return T(getPeriodMin(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
}
- F64 getPeriodMin(const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX);
+ F64 getPeriodMin(const StatType<SampleAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max());
template<typename T>
- T getPeriodMin(const SampleStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ T getPeriodMin(const SampleStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return T(getPeriodMin(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods));
}
- F64 getPeriodMin(const StatType<EventAccumulator>& stat, size_t num_periods = S32_MAX);
+ F64 getPeriodMin(const StatType<EventAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max());
template<typename T>
- T getPeriodMin(const EventStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ T getPeriodMin(const EventStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return T(getPeriodMin(static_cast<const StatType<EventAccumulator>&>(stat), num_periods));
}
- F64Kilobytes getPeriodMin(const StatType<MemAccumulator>& stat, size_t num_periods = S32_MAX);
- F64Kilobytes getPeriodMin(const MemStatHandle& stat, size_t num_periods = S32_MAX);
+ F64Kilobytes getPeriodMin(const StatType<MemAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max());
+ F64Kilobytes getPeriodMin(const MemStatHandle& stat, size_t num_periods = std::numeric_limits<size_t>::max());
template <typename T>
- typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMinPerSec(const StatType<T>& stat, size_t num_periods = S32_MAX)
+ typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMinPerSec(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
typename RelatedTypes<typename T::value_t>::fractional_t min_val(std::numeric_limits<F64>::max());
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
min_val = llmin(min_val, recording.getPerSec(stat));
@@ -437,7 +438,7 @@ namespace LLTrace
}
template<typename T>
- typename RelatedTypes<T>::fractional_t getPeriodMinPerSec(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ typename RelatedTypes<T>::fractional_t getPeriodMinPerSec(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return typename RelatedTypes<T>::fractional_t(getPeriodMinPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
@@ -449,14 +450,14 @@ namespace LLTrace
// catch all for stats that have a defined sum
template <typename T>
- typename T::value_t getPeriodMax(const StatType<T>& stat, size_t num_periods = S32_MAX)
+ typename T::value_t getPeriodMax(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
bool has_value = false;
typename T::value_t max_val(std::numeric_limits<typename T::value_t>::min());
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.hasValue(stat))
@@ -472,39 +473,39 @@ namespace LLTrace
}
template<typename T>
- T getPeriodMax(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ T getPeriodMax(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return T(getPeriodMax(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
}
- F64 getPeriodMax(const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX);
+ F64 getPeriodMax(const StatType<SampleAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max());
template<typename T>
- T getPeriodMax(const SampleStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ T getPeriodMax(const SampleStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return T(getPeriodMax(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods));
}
- F64 getPeriodMax(const StatType<EventAccumulator>& stat, size_t num_periods = S32_MAX);
+ F64 getPeriodMax(const StatType<EventAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max());
template<typename T>
- T getPeriodMax(const EventStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ T getPeriodMax(const EventStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return T(getPeriodMax(static_cast<const StatType<EventAccumulator>&>(stat), num_periods));
}
- F64Kilobytes getPeriodMax(const StatType<MemAccumulator>& stat, size_t num_periods = S32_MAX);
- F64Kilobytes getPeriodMax(const MemStatHandle& stat, size_t num_periods = S32_MAX);
+ F64Kilobytes getPeriodMax(const StatType<MemAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max());
+ F64Kilobytes getPeriodMax(const MemStatHandle& stat, size_t num_periods = std::numeric_limits<size_t>::max());
template <typename T>
- typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMaxPerSec(const StatType<T>& stat, size_t num_periods = S32_MAX)
+ typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMaxPerSec(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
F64 max_val = std::numeric_limits<F64>::min();
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
max_val = llmax(max_val, recording.getPerSec(stat));
@@ -513,7 +514,7 @@ namespace LLTrace
}
template<typename T>
- typename RelatedTypes<T>::fractional_t getPeriodMaxPerSec(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ typename RelatedTypes<T>::fractional_t getPeriodMaxPerSec(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return typename RelatedTypes<T>::fractional_t(getPeriodMaxPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
@@ -525,14 +526,14 @@ namespace LLTrace
// catch all for stats that have a defined sum
template <typename T>
- typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMean(const StatType<T >& stat, size_t num_periods = S32_MAX)
+ typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMean(const StatType<T >& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
typename RelatedTypes<typename T::value_t>::fractional_t mean(0);
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.getDuration() > (F32Seconds)0.f)
@@ -546,39 +547,39 @@ namespace LLTrace
}
template<typename T>
- typename RelatedTypes<T>::fractional_t getPeriodMean(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ typename RelatedTypes<T>::fractional_t getPeriodMean(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return typename RelatedTypes<T>::fractional_t(getPeriodMean(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
}
- F64 getPeriodMean(const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX);
+ F64 getPeriodMean(const StatType<SampleAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max());
template<typename T>
- typename RelatedTypes<T>::fractional_t getPeriodMean(const SampleStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ typename RelatedTypes<T>::fractional_t getPeriodMean(const SampleStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return typename RelatedTypes<T>::fractional_t(getPeriodMean(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods));
}
- F64 getPeriodMean(const StatType<EventAccumulator>& stat, size_t num_periods = S32_MAX);
+ F64 getPeriodMean(const StatType<EventAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max());
template<typename T>
- typename RelatedTypes<T>::fractional_t getPeriodMean(const EventStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ typename RelatedTypes<T>::fractional_t getPeriodMean(const EventStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return typename RelatedTypes<T>::fractional_t(getPeriodMean(static_cast<const StatType<EventAccumulator>&>(stat), num_periods));
}
- F64Kilobytes getPeriodMean(const StatType<MemAccumulator>& stat, size_t num_periods = S32_MAX);
- F64Kilobytes getPeriodMean(const MemStatHandle& stat, size_t num_periods = S32_MAX);
+ F64Kilobytes getPeriodMean(const StatType<MemAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max());
+ F64Kilobytes getPeriodMean(const MemStatHandle& stat, size_t num_periods = std::numeric_limits<size_t>::max());
template <typename T>
- typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMeanPerSec(const StatType<T>& stat, size_t num_periods = S32_MAX)
+ typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMeanPerSec(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
num_periods = llmin(num_periods, getNumRecordedPeriods());
typename RelatedTypes<typename T::value_t>::fractional_t mean = 0;
- for (S32 i = 1; i <= num_periods; i++)
+ for (size_t i = 1; i <= num_periods; i++)
{
Recording& recording = getPrevRecording(i);
if (recording.getDuration() > (F32Seconds)0.f)
@@ -593,64 +594,64 @@ namespace LLTrace
}
template<typename T>
- typename RelatedTypes<T>::fractional_t getPeriodMeanPerSec(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ typename RelatedTypes<T>::fractional_t getPeriodMeanPerSec(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return typename RelatedTypes<T>::fractional_t(getPeriodMeanPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
}
- F64 getPeriodMedian( const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX);
+ F64 getPeriodMedian( const StatType<SampleAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max());
- template <typename T>
- typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMedianPerSec(const StatType<T>& stat, size_t num_periods = S32_MAX)
- {
- LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
- num_periods = llmin(num_periods, getNumRecordedPeriods());
-
- std::vector <typename RelatedTypes<typename T::value_t>::fractional_t> buf;
- for (S32 i = 1; i <= num_periods; i++)
- {
- Recording& recording = getPrevRecording(i);
- if (recording.getDuration() > (F32Seconds)0.f)
- {
- buf.push_back(recording.getPerSec(stat));
- }
- }
- std::sort(buf.begin(), buf.end());
-
- return typename RelatedTypes<T>::fractional_t((buf.size() % 2 == 0) ? (buf[buf.size() / 2 - 1] + buf[buf.size() / 2]) / 2 : buf[buf.size() / 2]);
- }
-
- template<typename T>
- typename RelatedTypes<T>::fractional_t getPeriodMedianPerSec(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
- {
- LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
- return typename RelatedTypes<T>::fractional_t(getPeriodMedianPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
- }
+ template <typename T>
+ typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMedianPerSec(const StatType<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
+ {
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
+ num_periods = llmin(num_periods, getNumRecordedPeriods());
+
+ std::vector <typename RelatedTypes<typename T::value_t>::fractional_t> buf;
+ for (size_t i = 1; i <= num_periods; i++)
+ {
+ Recording& recording = getPrevRecording(i);
+ if (recording.getDuration() > (F32Seconds)0.f)
+ {
+ buf.push_back(recording.getPerSec(stat));
+ }
+ }
+ std::sort(buf.begin(), buf.end());
+
+ return typename RelatedTypes<T>::fractional_t((buf.size() % 2 == 0) ? (buf[buf.size() / 2 - 1] + buf[buf.size() / 2]) / 2 : buf[buf.size() / 2]);
+ }
+
+ template<typename T>
+ typename RelatedTypes<T>::fractional_t getPeriodMedianPerSec(const CountStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
+ {
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
+ return typename RelatedTypes<T>::fractional_t(getPeriodMedianPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
+ }
//
// PERIODIC STANDARD DEVIATION
//
- F64 getPeriodStandardDeviation(const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX);
+ F64 getPeriodStandardDeviation(const StatType<SampleAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max());
template<typename T>
- typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const SampleStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const SampleStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return typename RelatedTypes<T>::fractional_t(getPeriodStandardDeviation(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods));
}
- F64 getPeriodStandardDeviation(const StatType<EventAccumulator>& stat, size_t num_periods = S32_MAX);
+ F64 getPeriodStandardDeviation(const StatType<EventAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max());
template<typename T>
- typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const EventStatHandle<T>& stat, size_t num_periods = S32_MAX)
+ typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const EventStatHandle<T>& stat, size_t num_periods = std::numeric_limits<size_t>::max())
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
return typename RelatedTypes<T>::fractional_t(getPeriodStandardDeviation(static_cast<const StatType<EventAccumulator>&>(stat), num_periods));
}
- F64Kilobytes getPeriodStandardDeviation(const StatType<MemAccumulator>& stat, size_t num_periods = S32_MAX);
- F64Kilobytes getPeriodStandardDeviation(const MemStatHandle& stat, size_t num_periods = S32_MAX);
+ F64Kilobytes getPeriodStandardDeviation(const StatType<MemAccumulator>& stat, size_t num_periods = std::numeric_limits<size_t>::max());
+ F64Kilobytes getPeriodStandardDeviation(const MemStatHandle& stat, size_t num_periods = std::numeric_limits<size_t>::max());
private:
// implementation for LLStopWatchControlsMixin
@@ -659,6 +660,35 @@ namespace LLTrace
/*virtual*/ void handleReset();
/*virtual*/ void handleSplitTo(PeriodicRecording& other);
+ // helper methods for wraparound ring-buffer arithmetic
+ inline
+ size_t wrapi(size_t i) const
+ {
+ return i % mRecordingPeriods.size();
+ }
+
+ inline
+ size_t nexti(size_t i, size_t offset=1) const
+ {
+ return wrapi(i + offset);
+ }
+
+ inline
+ size_t previ(size_t i, size_t offset=1) const
+ {
+ auto num_periods = mRecordingPeriods.size();
+ // constrain offset
+ offset = llclamp(offset, 0, num_periods - 1);
+ // add size() so expression can't go (unsigned) "negative"
+ return wrapi(i + num_periods - offset);
+ }
+
+ inline
+ void inci(size_t& i, size_t offset=1) const
+ {
+ i = nexti(i, offset);
+ }
+
private:
std::vector<Recording> mRecordingPeriods;
const bool mAutoResize;
diff --git a/indra/llcommon/lluuid.cpp b/indra/llcommon/lluuid.cpp
index fc04dca08d..5655e8e2f2 100644
--- a/indra/llcommon/lluuid.cpp
+++ b/indra/llcommon/lluuid.cpp
@@ -884,7 +884,7 @@ U32 LLUUID::getRandomSeed()
seed[7]=(unsigned char)(pid);
getSystemTime((uuid_time_t *)(&seed[8]));
- U64 seed64 = HBXXH64((const void*)seed, 16).digest();
+ U64 seed64 = HBXXH64::digest((const void*)seed, 16);
return U32(seed64) ^ U32(seed64 >> 32);
}
diff --git a/indra/llcommon/lluuid.h b/indra/llcommon/lluuid.h
index c139c4eb4e..80597fa186 100644
--- a/indra/llcommon/lluuid.h
+++ b/indra/llcommon/lluuid.h
@@ -116,6 +116,14 @@ public:
U16 getCRC16() const;
U32 getCRC32() const;
+ // Returns a 64 bits digest of the UUID, by XORing its two 64 bits long
+ // words. HB
+ inline U64 getDigest64() const
+ {
+ U64* tmp = (U64*)mData;
+ return tmp[0] ^ tmp[1];
+ }
+
static BOOL validate(const std::string& in_string); // Validate that the UUID string is legal.
static const LLUUID null;
@@ -165,36 +173,22 @@ public:
LLAssetID makeAssetID(const LLUUID& session) const;
};
-// Generate a hash of an LLUUID object using the boost hash templates.
-template <>
-struct boost::hash<LLUUID>
-{
- typedef LLUUID argument_type;
- typedef std::size_t result_type;
- result_type operator()(argument_type const& s) const
- {
- result_type seed(0);
-
- for (S32 i = 0; i < UUID_BYTES; ++i)
- {
- boost::hash_combine(seed, s.mData[i]);
- }
-
- return seed;
- }
-};
-
-// Adapt boost hash to std hash
+// std::hash implementation for LLUUID
namespace std
{
- template<> struct hash<LLUUID>
- {
- std::size_t operator()(LLUUID const& s) const noexcept
- {
- return boost::hash<LLUUID>()(s);
- }
- };
+ template<> struct hash<LLUUID>
+ {
+ inline size_t operator()(const LLUUID& id) const noexcept
+ {
+ return (size_t)id.getDigest64();
+ }
+ };
}
-#endif
+// For use with boost containers.
+inline size_t hash_value(const LLUUID& id) noexcept
+{
+ return (size_t)id.getDigest64();
+}
+#endif // LL_LLUUID_H
diff --git a/indra/llcommon/stdtypes.h b/indra/llcommon/stdtypes.h
index da8512169c..0b43d7ad4b 100644
--- a/indra/llcommon/stdtypes.h
+++ b/indra/llcommon/stdtypes.h
@@ -41,7 +41,7 @@ typedef unsigned int U32;
// to express an index that might go negative
// (ssize_t is provided by SOME compilers, don't collide)
-typedef typename std::make_signed<size_t>::type llssize;
+typedef typename std::make_signed<std::size_t>::type llssize;
#if LL_WINDOWS
// https://docs.microsoft.com/en-us/cpp/build/reference/zc-wchar-t-wchar-t-is-native-type
diff --git a/indra/llcommon/tests/llleap_test.cpp b/indra/llcommon/tests/llleap_test.cpp
index 7ee36a9ea6..3ae48a2532 100644
--- a/indra/llcommon/tests/llleap_test.cpp
+++ b/indra/llcommon/tests/llleap_test.cpp
@@ -109,7 +109,12 @@ namespace tut
"import os\n"
"import sys\n"
"\n"
- "from llbase import llsd\n"
+ "try:\n"
+ // new freestanding llsd package
+ " import llsd\n"
+ "except ImportError:\n"
+ // older llbase.llsd module
+ " from llbase import llsd\n"
"\n"
"class ProtocolError(Exception):\n"
" def __init__(self, msg, data):\n"
@@ -120,26 +125,26 @@ namespace tut
" pass\n"
"\n"
"def get():\n"
- " hdr = ''\n"
- " while ':' not in hdr and len(hdr) < 20:\n"
- " hdr += sys.stdin.read(1)\n"
+ " hdr = []\n"
+ " while b':' not in hdr and len(hdr) < 20:\n"
+ " hdr.append(sys.stdin.buffer.read(1))\n"
" if not hdr:\n"
" sys.exit(0)\n"
- " if not hdr.endswith(':'):\n"
+ " if not hdr[-1] == b':':\n"
" raise ProtocolError('Expected len:data, got %r' % hdr, hdr)\n"
" try:\n"
- " length = int(hdr[:-1])\n"
+ " length = int(b''.join(hdr[:-1]))\n"
" except ValueError:\n"
" raise ProtocolError('Non-numeric len %r' % hdr[:-1], hdr[:-1])\n"
" parts = []\n"
" received = 0\n"
" while received < length:\n"
- " parts.append(sys.stdin.read(length - received))\n"
+ " parts.append(sys.stdin.buffer.read(length - received))\n"
" received += len(parts[-1])\n"
- " data = ''.join(parts)\n"
+ " data = b''.join(parts)\n"
" assert len(data) == length\n"
" try:\n"
- " return llsd.parse(data.encode())\n"
+ " return llsd.parse(data)\n"
// Seems the old indra.base.llsd module didn't properly
// convert IndexError (from running off end of string) to
// LLSDParseError.
@@ -179,11 +184,11 @@ namespace tut
" return _reply\n"
"\n"
"def put(req):\n"
- " sys.stdout.write(':'.join((str(len(req)), req)))\n"
+ " sys.stdout.buffer.write(b'%d:%b' % (len(req), req))\n"
" sys.stdout.flush()\n"
"\n"
"def send(pump, data):\n"
- " put(llsd.format_notation(dict(pump=pump, data=data)).decode())\n"
+ " put(llsd.format_notation(dict(pump=pump, data=data)))\n"
"\n"
"def request(pump, data):\n"
" # we expect 'data' is a dict\n"
diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp
index 5dbcf4c9b8..acb2953b5b 100644
--- a/indra/llcommon/tests/llsdserialize_test.cpp
+++ b/indra/llcommon/tests/llsdserialize_test.cpp
@@ -46,20 +46,24 @@ typedef U32 uint32_t;
#include "boost/range.hpp"
#include "boost/foreach.hpp"
-#include "boost/function.hpp"
#include "boost/bind.hpp"
#include "boost/phoenix/bind/bind_function.hpp"
#include "boost/phoenix/core/argument.hpp"
using namespace boost::phoenix;
-#include "../llsd.h"
-#include "../llsdserialize.h"
+#include "llsd.h"
+#include "llsdserialize.h"
#include "llsdutil.h"
-#include "../llformat.h"
+#include "llformat.h"
+#include "llmemorystream.h"
#include "../test/lltut.h"
#include "../test/namedtempfile.h"
#include "stringize.h"
+#include <functional>
+
+typedef std::function<void(const LLSD& data, std::ostream& str)> FormatterFunction;
+typedef std::function<bool(std::istream& istr, LLSD& data, llssize max_bytes)> ParserFunction;
std::vector<U8> string_to_vector(const std::string& str)
{
@@ -112,7 +116,7 @@ namespace tut
mSD = LLUUID::null;
expected = "<llsd><uuid /></llsd>\n";
xml_test("null uuid", expected);
-
+
mSD = LLUUID("c96f9b1e-f589-4100-9774-d98643ce0bed");
expected = "<llsd><uuid>c96f9b1e-f589-4100-9774-d98643ce0bed</uuid></llsd>\n";
xml_test("uuid", expected);
@@ -136,7 +140,7 @@ namespace tut
expected = "<llsd><binary encoding=\"base64\">aGVsbG8=</binary></llsd>\n";
xml_test("binary", expected);
}
-
+
template<> template<>
void sd_xml_object::test<2>()
{
@@ -225,7 +229,7 @@ namespace tut
expected = "<llsd><map><key>baz</key><undef /><key>foo</key><string>bar</string></map></llsd>\n";
xml_test("2 element map", expected);
}
-
+
template<> template<>
void sd_xml_object::test<6>()
{
@@ -241,7 +245,7 @@ namespace tut
expected = "<llsd><binary encoding=\"base64\">Nnw2fGFzZGZoYXBweWJveHw2MGU0NGVjNS0zMDVjLTQzYzItOWExOS1iNGI4OWIxYWUyYTZ8NjBlNDRlYzUtMzA1Yy00M2MyLTlhMTktYjRiODliMWFlMmE2fDYwZTQ0ZWM1LTMwNWMtNDNjMi05YTE5LWI0Yjg5YjFhZTJhNnwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8N2ZmZmZmZmZ8N2ZmZmZmZmZ8MHwwfDgyMDAwfDQ1MGZlMzk0LTI5MDQtYzlhZC0yMTRjLWEwN2ViN2ZlZWMyOXwoTm8gRGVzY3JpcHRpb24pfDB8MTB8MA==</binary></llsd>\n";
xml_test("binary", expected);
}
-
+
class TestLLSDSerializeData
{
public:
@@ -250,9 +254,34 @@ namespace tut
void doRoundTripTests(const std::string&);
void checkRoundTrip(const std::string&, const LLSD& v);
-
- LLPointer<LLSDFormatter> mFormatter;
- LLPointer<LLSDParser> mParser;
+
+ void setFormatterParser(LLPointer<LLSDFormatter> formatter, LLPointer<LLSDParser> parser)
+ {
+ mFormatter = [formatter](const LLSD& data, std::ostream& str)
+ {
+ formatter->format(data, str);
+ };
+ // this lambda must be mutable since otherwise the bound 'parser'
+ // is assumed to point to a const LLSDParser
+ mParser = [parser](std::istream& istr, LLSD& data, llssize max_bytes) mutable
+ {
+ // reset() call is needed since test code re-uses parser object
+ parser->reset();
+ return (parser->parse(istr, data, max_bytes) > 0);
+ };
+ }
+
+ void setParser(bool (*parser)(LLSD&, std::istream&, llssize))
+ {
+ // why does LLSDSerialize::deserialize() reverse the parse() params??
+ mParser = [parser](std::istream& istr, LLSD& data, llssize max_bytes)
+ {
+ return parser(data, istr, max_bytes);
+ };
+ }
+
+ FormatterFunction mFormatter;
+ ParserFunction mParser;
};
TestLLSDSerializeData::TestLLSDSerializeData()
@@ -265,12 +294,11 @@ namespace tut
void TestLLSDSerializeData::checkRoundTrip(const std::string& msg, const LLSD& v)
{
- std::stringstream stream;
- mFormatter->format(v, stream);
+ std::stringstream stream;
+ mFormatter(v, stream);
//LL_INFOS() << "checkRoundTrip: length " << stream.str().length() << LL_ENDL;
LLSD w;
- mParser->reset(); // reset() call is needed since test code re-uses mParser
- mParser->parse(stream, w, stream.str().size());
+ mParser(stream, w, stream.str().size());
try
{
@@ -299,52 +327,52 @@ namespace tut
fillmap(root[key], width, depth - 1);
}
}
-
+
void TestLLSDSerializeData::doRoundTripTests(const std::string& msg)
{
LLSD v;
checkRoundTrip(msg + " undefined", v);
-
+
v = true;
checkRoundTrip(msg + " true bool", v);
-
+
v = false;
checkRoundTrip(msg + " false bool", v);
-
+
v = 1;
checkRoundTrip(msg + " positive int", v);
-
+
v = 0;
checkRoundTrip(msg + " zero int", v);
-
+
v = -1;
checkRoundTrip(msg + " negative int", v);
-
+
v = 1234.5f;
checkRoundTrip(msg + " positive float", v);
-
+
v = 0.0f;
checkRoundTrip(msg + " zero float", v);
-
+
v = -1234.5f;
checkRoundTrip(msg + " negative float", v);
-
+
// FIXME: need a NaN test
-
+
v = LLUUID::null;
checkRoundTrip(msg + " null uuid", v);
-
+
LLUUID newUUID;
newUUID.generate();
v = newUUID;
checkRoundTrip(msg + " new uuid", v);
-
+
v = "";
checkRoundTrip(msg + " empty string", v);
-
+
v = "some string";
checkRoundTrip(msg + " non-empty string", v);
-
+
v =
"Second Life is a 3-D virtual world entirely built and owned by its residents. "
"Since opening to the public in 2003, it has grown explosively and today is "
@@ -372,7 +400,7 @@ namespace tut
for (U32 block = 0x000000; block <= 0x10ffff; block += block_size)
{
std::ostringstream out;
-
+
for (U32 c = block; c < block + block_size; ++c)
{
if (c <= 0x000001f
@@ -386,7 +414,7 @@ namespace tut
if (0x00fdd0 <= c && c <= 0x00fdef) { continue; }
if ((c & 0x00fffe) == 0x00fffe) { continue; }
// see Unicode standard, section 15.8
-
+
if (c <= 0x00007f)
{
out << (char)(c & 0x7f);
@@ -410,55 +438,55 @@ namespace tut
out << (char)(0x80 | ((c >> 0) & 0x3f));
}
}
-
+
v = out.str();
std::ostringstream blockmsg;
blockmsg << msg << " unicode string block 0x" << std::hex << block;
checkRoundTrip(blockmsg.str(), v);
}
-
+
LLDate epoch;
v = epoch;
checkRoundTrip(msg + " epoch date", v);
-
+
LLDate aDay("2002-12-07T05:07:15.00Z");
v = aDay;
checkRoundTrip(msg + " date", v);
-
+
LLURI path("http://slurl.com/secondlife/Ambleside/57/104/26/");
v = path;
checkRoundTrip(msg + " url", v);
-
+
const char source[] = "it must be a blue moon again";
std::vector<U8> data;
// note, includes terminating '\0'
copy(&source[0], &source[sizeof(source)], back_inserter(data));
-
+
v = data;
checkRoundTrip(msg + " binary", v);
-
+
v = LLSD::emptyMap();
checkRoundTrip(msg + " empty map", v);
-
+
v = LLSD::emptyMap();
v["name"] = "luke"; //v.insert("name", "luke");
v["age"] = 3; //v.insert("age", 3);
checkRoundTrip(msg + " map", v);
-
+
v.clear();
v["a"]["1"] = true;
v["b"]["0"] = false;
checkRoundTrip(msg + " nested maps", v);
-
+
v = LLSD::emptyArray();
checkRoundTrip(msg + " empty array", v);
-
+
v = LLSD::emptyArray();
v.append("ali");
v.append(28);
checkRoundTrip(msg + " array", v);
-
+
v.clear();
v[0][0] = true;
v[1][0] = false;
@@ -468,7 +496,7 @@ namespace tut
fillmap(v, 10, 3); // 10^6 maps
checkRoundTrip(msg + " many nested maps", v);
}
-
+
typedef tut::test_group<TestLLSDSerializeData> TestLLSDSerializeGroup;
typedef TestLLSDSerializeGroup::object TestLLSDSerializeObject;
TestLLSDSerializeGroup gTestLLSDSerializeGroup("llsd serialization");
@@ -476,35 +504,106 @@ namespace tut
template<> template<>
void TestLLSDSerializeObject::test<1>()
{
- mFormatter = new LLSDNotationFormatter(false, "", LLSDFormatter::OPTIONS_PRETTY_BINARY);
- mParser = new LLSDNotationParser();
+ setFormatterParser(new LLSDNotationFormatter(false, "", LLSDFormatter::OPTIONS_PRETTY_BINARY),
+ new LLSDNotationParser());
doRoundTripTests("pretty binary notation serialization");
}
template<> template<>
void TestLLSDSerializeObject::test<2>()
{
- mFormatter = new LLSDNotationFormatter(false, "", LLSDFormatter::OPTIONS_NONE);
- mParser = new LLSDNotationParser();
+ setFormatterParser(new LLSDNotationFormatter(false, "", LLSDFormatter::OPTIONS_NONE),
+ new LLSDNotationParser());
doRoundTripTests("raw binary notation serialization");
}
template<> template<>
void TestLLSDSerializeObject::test<3>()
{
- mFormatter = new LLSDXMLFormatter();
- mParser = new LLSDXMLParser();
+ setFormatterParser(new LLSDXMLFormatter(), new LLSDXMLParser());
doRoundTripTests("xml serialization");
}
template<> template<>
void TestLLSDSerializeObject::test<4>()
{
- mFormatter = new LLSDBinaryFormatter();
- mParser = new LLSDBinaryParser();
+ setFormatterParser(new LLSDBinaryFormatter(), new LLSDBinaryParser());
doRoundTripTests("binary serialization");
}
+ template<> template<>
+ void TestLLSDSerializeObject::test<5>()
+ {
+ mFormatter = [](const LLSD& sd, std::ostream& str)
+ {
+ LLSDSerialize::serialize(sd, str, LLSDSerialize::LLSD_BINARY);
+ };
+ setParser(LLSDSerialize::deserialize);
+ doRoundTripTests("serialize(LLSD_BINARY)");
+ };
+
+ template<> template<>
+ void TestLLSDSerializeObject::test<6>()
+ {
+ mFormatter = [](const LLSD& sd, std::ostream& str)
+ {
+ LLSDSerialize::serialize(sd, str, LLSDSerialize::LLSD_XML);
+ };
+ setParser(LLSDSerialize::deserialize);
+ doRoundTripTests("serialize(LLSD_XML)");
+ };
+
+ template<> template<>
+ void TestLLSDSerializeObject::test<7>()
+ {
+ mFormatter = [](const LLSD& sd, std::ostream& str)
+ {
+ LLSDSerialize::serialize(sd, str, LLSDSerialize::LLSD_NOTATION);
+ };
+ setParser(LLSDSerialize::deserialize);
+ // In this test, serialize(LLSD_NOTATION) emits a header recognized by
+ // deserialize().
+ doRoundTripTests("serialize(LLSD_NOTATION)");
+ };
+
+ template<> template<>
+ void TestLLSDSerializeObject::test<8>()
+ {
+ setFormatterParser(new LLSDNotationFormatter(false, "", LLSDFormatter::OPTIONS_NONE),
+ new LLSDNotationParser());
+ setParser(LLSDSerialize::deserialize);
+ // This is an interesting test because LLSDNotationFormatter does not
+ // emit an llsd/notation header.
+ doRoundTripTests("LLSDNotationFormatter -> deserialize");
+ };
+
+ template<> template<>
+ void TestLLSDSerializeObject::test<9>()
+ {
+ setFormatterParser(new LLSDXMLFormatter(false, "", LLSDFormatter::OPTIONS_NONE),
+ new LLSDXMLParser());
+ setParser(LLSDSerialize::deserialize);
+ // This is an interesting test because LLSDXMLFormatter does not
+ // emit an LLSD/XML header.
+ doRoundTripTests("LLSDXMLFormatter -> deserialize");
+ };
+
+/*==========================================================================*|
+ // We do not expect this test to succeed. Without a header, neither
+ // notation LLSD nor binary LLSD reliably start with a distinct character,
+ // the way XML LLSD starts with '<'. By convention, we default to notation
+ // rather than binary.
+ template<> template<>
+ void TestLLSDSerializeObject::test<10>()
+ {
+ setFormatterParser(new LLSDBinaryFormatter(false, "", LLSDFormatter::OPTIONS_NONE),
+ new LLSDBinaryParser());
+ setParser(LLSDSerialize::deserialize);
+ // This is an interesting test because LLSDBinaryFormatter does not
+ // emit an LLSD/Binary header.
+ doRoundTripTests("LLSDBinaryFormatter -> deserialize");
+ };
+|*==========================================================================*/
/**
* @class TestLLSDParsing
@@ -555,7 +654,7 @@ namespace tut
public:
TestLLSDXMLParsing() {}
};
-
+
typedef tut::test_group<TestLLSDXMLParsing> TestLLSDXMLParsingGroup;
typedef TestLLSDXMLParsingGroup::object TestLLSDXMLParsingObject;
TestLLSDXMLParsingGroup gTestLLSDXMLParsingGroup("llsd XML parsing");
@@ -586,8 +685,8 @@ namespace tut
LLSD(),
LLSDParser::PARSE_FAILURE);
}
-
-
+
+
template<> template<>
void TestLLSDXMLParsingObject::test<2>()
{
@@ -596,7 +695,7 @@ namespace tut
v["amy"] = 23;
v["bob"] = LLSD();
v["cam"] = 1.23;
-
+
ensureParse(
"unknown data type",
"<llsd><map>"
@@ -607,16 +706,16 @@ namespace tut
v,
v.size() + 1);
}
-
+
template<> template<>
void TestLLSDXMLParsingObject::test<3>()
{
// test handling of nested bad data
-
+
LLSD v;
v["amy"] = 23;
v["cam"] = 1.23;
-
+
ensureParse(
"map with html",
"<llsd><map>"
@@ -626,7 +725,7 @@ namespace tut
"</map></llsd>",
v,
v.size() + 1);
-
+
v.clear();
v["amy"] = 23;
v["cam"] = 1.23;
@@ -639,7 +738,7 @@ namespace tut
"</map></llsd>",
v,
v.size() + 1);
-
+
v.clear();
v["amy"] = 23;
v["bob"] = LLSD::emptyMap();
@@ -661,7 +760,7 @@ namespace tut
v[0] = 23;
v[1] = LLSD();
v[2] = 1.23;
-
+
ensureParse(
"array value of html",
"<llsd><array>"
@@ -671,7 +770,7 @@ namespace tut
"</array></llsd>",
v,
v.size() + 1);
-
+
v.clear();
v[0] = 23;
v[1] = LLSD::emptyMap();
@@ -1225,7 +1324,7 @@ namespace tut
vec[0] = 'a'; vec[1] = 'b'; vec[2] = 'c';
vec[3] = '3'; vec[4] = '2'; vec[5] = '1';
LLSD value = vec;
-
+
vec.resize(11);
vec[0] = 'b'; // for binary
vec[5] = 'a'; vec[6] = 'b'; vec[7] = 'c';
@@ -1694,85 +1793,83 @@ namespace tut
ensureBinaryAndXML("map", test);
}
- struct TestPythonCompatible
+ // helper for TestPythonCompatible
+ static std::string import_llsd("import os.path\n"
+ "import sys\n"
+ "try:\n"
+ // new freestanding llsd package
+ " import llsd\n"
+ "except ImportError:\n"
+ // older llbase.llsd module
+ " from llbase import llsd\n");
+
+ // helper for TestPythonCompatible
+ template <typename CONTENT>
+ void python(const std::string& desc, const CONTENT& script, int expect=0)
{
- TestPythonCompatible():
- // Note the peculiar insertion of __FILE__ into this string. Since
- // this script is being written into a platform-dependent temp
- // directory, we can't locate indra/lib/python relative to
- // Python's __file__. Use __FILE__ instead, navigating relative
- // to this C++ source file. Use Python raw-string syntax so
- // Windows pathname backslashes won't mislead Python's string
- // scanner.
- import_llsd("import os.path\n"
- "import sys\n"
- "from llbase import llsd\n")
- {}
- ~TestPythonCompatible() {}
+ auto PYTHON(LLStringUtil::getenv("PYTHON"));
+ ensure("Set $PYTHON to the Python interpreter", !PYTHON.empty());
- std::string import_llsd;
+ NamedTempFile scriptfile("py", script);
- template <typename CONTENT>
- void python(const std::string& desc, const CONTENT& script, int expect=0)
+#if LL_WINDOWS
+ std::string q("\"");
+ std::string qPYTHON(q + PYTHON + q);
+ std::string qscript(q + scriptfile.getName() + q);
+ int rc = _spawnl(_P_WAIT, PYTHON.c_str(), qPYTHON.c_str(), qscript.c_str(), NULL);
+ if (rc == -1)
{
- auto PYTHON(LLStringUtil::getenv("PYTHON"));
- ensure("Set $PYTHON to the Python interpreter", !PYTHON.empty());
-
- NamedTempFile scriptfile("py", script);
+ char buffer[256];
+ strerror_s(buffer, errno); // C++ can infer the buffer size! :-O
+ ensure(STRINGIZE("Couldn't run Python " << desc << "script: " << buffer), false);
+ }
+ else
+ {
+ ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), rc, expect);
+ }
-#if LL_WINDOWS
- std::string q("\"");
- std::string qPYTHON(q + PYTHON + q);
- std::string qscript(q + scriptfile.getName() + q);
- int rc = _spawnl(_P_WAIT, PYTHON.c_str(), qPYTHON.c_str(), qscript.c_str(), NULL);
- if (rc == -1)
- {
- char buffer[256];
- strerror_s(buffer, errno); // C++ can infer the buffer size! :-O
- ensure(STRINGIZE("Couldn't run Python " << desc << "script: " << buffer), false);
- }
- else
+#else // LL_DARWIN, LL_LINUX
+ LLProcess::Params params;
+ params.executable = PYTHON;
+ params.args.add(scriptfile.getName());
+ LLProcessPtr py(LLProcess::create(params));
+ ensure(STRINGIZE("Couldn't launch " << desc << " script"), bool(py));
+ // Implementing timeout would mean messing with alarm() and
+ // catching SIGALRM... later maybe...
+ int status(0);
+ if (waitpid(py->getProcessID(), &status, 0) == -1)
+ {
+ int waitpid_errno(errno);
+ ensure_equals(STRINGIZE("Couldn't retrieve rc from " << desc << " script: "
+ "waitpid() errno " << waitpid_errno),
+ waitpid_errno, ECHILD);
+ }
+ else
+ {
+ if (WIFEXITED(status))
{
- ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), rc, expect);
+ int rc(WEXITSTATUS(status));
+ ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc),
+ rc, expect);
}
-
-#else // LL_DARWIN, LL_LINUX
- LLProcess::Params params;
- params.executable = PYTHON;
- params.args.add(scriptfile.getName());
- LLProcessPtr py(LLProcess::create(params));
- ensure(STRINGIZE("Couldn't launch " << desc << " script"), bool(py));
- // Implementing timeout would mean messing with alarm() and
- // catching SIGALRM... later maybe...
- int status(0);
- if (waitpid(py->getProcessID(), &status, 0) == -1)
+ else if (WIFSIGNALED(status))
{
- int waitpid_errno(errno);
- ensure_equals(STRINGIZE("Couldn't retrieve rc from " << desc << " script: "
- "waitpid() errno " << waitpid_errno),
- waitpid_errno, ECHILD);
+ ensure(STRINGIZE(desc << " script terminated by signal " << WTERMSIG(status)),
+ false);
}
else
{
- if (WIFEXITED(status))
- {
- int rc(WEXITSTATUS(status));
- ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc),
- rc, expect);
- }
- else if (WIFSIGNALED(status))
- {
- ensure(STRINGIZE(desc << " script terminated by signal " << WTERMSIG(status)),
- false);
- }
- else
- {
- ensure(STRINGIZE(desc << " script produced impossible status " << status),
- false);
- }
+ ensure(STRINGIZE(desc << " script produced impossible status " << status),
+ false);
}
-#endif
}
+#endif
+ }
+
+ struct TestPythonCompatible
+ {
+ TestPythonCompatible() {}
+ ~TestPythonCompatible() {}
};
typedef tut::test_group<TestPythonCompatible> TestPythonCompatibleGroup;
@@ -1798,25 +1895,33 @@ namespace tut
"print('Running on', sys.platform)\n");
}
- // helper for test<3>
- static void writeLLSDArray(std::ostream& out, const LLSD& array)
+ // helper for test<3> - test<7>
+ static void writeLLSDArray(const FormatterFunction& serialize,
+ std::ostream& out, const LLSD& array)
{
- BOOST_FOREACH(LLSD item, llsd::inArray(array))
+ for (const LLSD& item : llsd::inArray(array))
{
- LLSDSerialize::toNotation(item, out);
- // It's important to separate with newlines because Python's llsd
- // module doesn't support parsing from a file stream, only from a
- // string, so we have to know how much of the file to read into a
- // string.
- out << '\n';
+ // It's important to delimit the entries in this file somehow
+ // because, although Python's llsd.parse() can accept a file
+ // stream, the XML parser expects EOF after a single outer element
+ // -- it doesn't just stop. So we must extract a sequence of bytes
+ // strings from the file. But since one of the serialization
+ // formats we want to test is binary, we can't pick any single
+ // byte value as a delimiter! Use a binary integer length prefix
+ // instead.
+ std::ostringstream buffer;
+ serialize(item, buffer);
+ auto buffstr{ buffer.str() };
+ int bufflen{ static_cast<int>(buffstr.length()) };
+ out.write(reinterpret_cast<const char*>(&bufflen), sizeof(bufflen));
+ out.write(buffstr.c_str(), buffstr.length());
}
}
- template<> template<>
- void TestPythonCompatibleObject::test<3>()
+ // helper for test<3> - test<7>
+ static void toPythonUsing(const std::string& desc,
+ const FormatterFunction& serialize)
{
- set_test_name("verify sequence to Python");
-
LLSD cdata(llsd::array(17, 3.14,
"This string\n"
"has several\n"
@@ -1836,7 +1941,7 @@ namespace tut
" except StopIteration:\n"
" pass\n"
" else:\n"
- " assert False, 'Too many data items'\n";
+ " raise AssertionError('Too many data items')\n";
// Create an llsdXXXXXX file containing 'data' serialized to
// notation.
@@ -1845,32 +1950,128 @@ namespace tut
// takes a callable. To this callable it passes the
// std::ostream with which it's writing the
// NamedTempFile.
- boost::bind(writeLLSDArray, _1, cdata));
+ [serialize, cdata]
+ (std::ostream& out)
+ { writeLLSDArray(serialize, out, cdata); });
- python("read C++ notation",
+ python("read C++ " + desc,
placeholders::arg1 <<
import_llsd <<
- "def parse_each(iterable):\n"
- " for item in iterable:\n"
- " yield llsd.parse(item)\n" <<
- pydata <<
+ "from functools import partial\n"
+ "import io\n"
+ "import struct\n"
+ "lenformat = struct.Struct('i')\n"
+ "def parse_each(inf):\n"
+ " for rawlen in iter(partial(inf.read, lenformat.size), b''):\n"
+ " len = lenformat.unpack(rawlen)[0]\n"
+ // Since llsd.parse() has no max_bytes argument, instead of
+ // passing the input stream directly to parse(), read the item
+ // into a distinct bytes object and parse that.
+ " data = inf.read(len)\n"
+ " try:\n"
+ " frombytes = llsd.parse(data)\n"
+ " except llsd.LLSDParseError as err:\n"
+ " print(f'*** {err}')\n"
+ " print(f'Bad content:\\n{data!r}')\n"
+ " raise\n"
+ // Also try parsing from a distinct stream.
+ " stream = io.BytesIO(data)\n"
+ " fromstream = llsd.parse(stream)\n"
+ " assert frombytes == fromstream\n"
+ " yield frombytes\n"
+ << pydata <<
// Don't forget raw-string syntax for Windows pathnames.
"verify(parse_each(open(r'" << file.getName() << "', 'rb')))\n");
}
template<> template<>
+ void TestPythonCompatibleObject::test<3>()
+ {
+ set_test_name("to Python using LLSDSerialize::serialize(LLSD_XML)");
+ toPythonUsing("LLSD_XML",
+ [](const LLSD& sd, std::ostream& out)
+ { LLSDSerialize::serialize(sd, out, LLSDSerialize::LLSD_XML); });
+ }
+
+ template<> template<>
void TestPythonCompatibleObject::test<4>()
{
- set_test_name("verify sequence from Python");
+ set_test_name("to Python using LLSDSerialize::serialize(LLSD_NOTATION)");
+ toPythonUsing("LLSD_NOTATION",
+ [](const LLSD& sd, std::ostream& out)
+ { LLSDSerialize::serialize(sd, out, LLSDSerialize::LLSD_NOTATION); });
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<5>()
+ {
+ set_test_name("to Python using LLSDSerialize::serialize(LLSD_BINARY)");
+ toPythonUsing("LLSD_BINARY",
+ [](const LLSD& sd, std::ostream& out)
+ { LLSDSerialize::serialize(sd, out, LLSDSerialize::LLSD_BINARY); });
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<6>()
+ {
+ set_test_name("to Python using LLSDSerialize::toXML()");
+ toPythonUsing("toXML()", LLSDSerialize::toXML);
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<7>()
+ {
+ set_test_name("to Python using LLSDSerialize::toNotation()");
+ toPythonUsing("toNotation()", LLSDSerialize::toNotation);
+ }
+/*==========================================================================*|
+ template<> template<>
+ void TestPythonCompatibleObject::test<8>()
+ {
+ set_test_name("to Python using LLSDSerialize::toBinary()");
+ // We don't expect this to work because, without a header,
+ // llsd.parse() will assume notation rather than binary.
+ toPythonUsing("toBinary()", LLSDSerialize::toBinary);
+ }
+|*==========================================================================*/
+
+ // helper for test<8> - test<12>
+ bool itemFromStream(std::istream& istr, LLSD& item, const ParserFunction& parse)
+ {
+ // reset the output value for debugging clarity
+ item.clear();
+ // We use an int length prefix as a foolproof delimiter even for
+ // binary serialized streams.
+ int length{ 0 };
+ istr.read(reinterpret_cast<char*>(&length), sizeof(length));
+// return parse(istr, item, length);
+ // Sadly, as of 2022-12-01 it seems we can't really trust our LLSD
+ // parsers to honor max_bytes: this test works better when we read
+ // each item into its own distinct LLMemoryStream, instead of passing
+ // the original istr with a max_bytes constraint.
+ std::vector<U8> buffer(length);
+ istr.read(reinterpret_cast<char*>(buffer.data()), length);
+ LLMemoryStream stream(buffer.data(), length);
+ return parse(stream, item, length);
+ }
+
+ // helper for test<8> - test<12>
+ void fromPythonUsing(const std::string& pyformatter,
+ const ParserFunction& parse=
+ [](std::istream& istr, LLSD& data, llssize max_bytes)
+ { return LLSDSerialize::deserialize(data, istr, max_bytes); })
+ {
// Create an empty data file. This is just a placeholder for our
// script to write into. Create it to establish a unique name that
// we know.
NamedTempFile file("llsd", "");
- python("write Python notation",
+ python("Python " + pyformatter,
placeholders::arg1 <<
import_llsd <<
+ "import struct\n"
+ "lenformat = struct.Struct('i')\n"
"DATA = [\n"
" 17,\n"
" 3.14,\n"
@@ -1881,34 +2082,87 @@ namespace tut
"]\n"
// Don't forget raw-string syntax for Windows pathnames.
// N.B. Using 'print' implicitly adds newlines.
- "with open(r'" << file.getName() << "', 'w') as f:\n"
+ "with open(r'" << file.getName() << "', 'wb') as f:\n"
" for item in DATA:\n"
- " print(llsd.format_notation(item).decode(), file=f)\n");
+ " serialized = llsd." << pyformatter << "(item)\n"
+ " f.write(lenformat.pack(len(serialized)))\n"
+ " f.write(serialized)\n");
std::ifstream inf(file.getName().c_str());
LLSD item;
- // Notice that we're not doing anything special to parse out the
- // newlines: LLSDSerialize::fromNotation ignores them. While it would
- // seem they're not strictly necessary, going in this direction, we
- // want to ensure that notation-separated-by-newlines works in both
- // directions -- since in practice, a given file might be read by
- // either language.
- ensure_equals("Failed to read LLSD::Integer from Python",
- LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED),
- 1);
- ensure_equals(item.asInteger(), 17);
- ensure_equals("Failed to read LLSD::Real from Python",
- LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED),
- 1);
- ensure_approximately_equals("Bad LLSD::Real value from Python",
- item.asReal(), 3.14, 7); // 7 bits ~= 0.01
- ensure_equals("Failed to read LLSD::String from Python",
- LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED),
- 1);
- ensure_equals(item.asString(),
- "This string\n"
- "has several\n"
- "lines.");
-
+ try
+ {
+ ensure("Failed to read LLSD::Integer from Python",
+ itemFromStream(inf, item, parse));
+ ensure_equals(item.asInteger(), 17);
+ ensure("Failed to read LLSD::Real from Python",
+ itemFromStream(inf, item, parse));
+ ensure_approximately_equals("Bad LLSD::Real value from Python",
+ item.asReal(), 3.14, 7); // 7 bits ~= 0.01
+ ensure("Failed to read LLSD::String from Python",
+ itemFromStream(inf, item, parse));
+ ensure_equals(item.asString(),
+ "This string\n"
+ "has several\n"
+ "lines.");
+ }
+ catch (const tut::failure& err)
+ {
+ std::cout << "for " << err.what() << ", item = " << item << std::endl;
+ throw;
+ }
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<8>()
+ {
+ set_test_name("from Python XML using LLSDSerialize::deserialize()");
+ fromPythonUsing("format_xml");
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<9>()
+ {
+ set_test_name("from Python notation using LLSDSerialize::deserialize()");
+ fromPythonUsing("format_notation");
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<10>()
+ {
+ set_test_name("from Python binary using LLSDSerialize::deserialize()");
+ fromPythonUsing("format_binary");
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<11>()
+ {
+ set_test_name("from Python XML using fromXML()");
+ // fromXML()'s optional 3rd param isn't max_bytes, it's emit_errors
+ fromPythonUsing("format_xml",
+ [](std::istream& istr, LLSD& data, llssize)
+ { return LLSDSerialize::fromXML(data, istr) > 0; });
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<12>()
+ {
+ set_test_name("from Python notation using fromNotation()");
+ fromPythonUsing("format_notation",
+ [](std::istream& istr, LLSD& data, llssize max_bytes)
+ { return LLSDSerialize::fromNotation(data, istr, max_bytes) > 0; });
+ }
+
+/*==========================================================================*|
+ template<> template<>
+ void TestPythonCompatibleObject::test<13>()
+ {
+ set_test_name("from Python binary using fromBinary()");
+ // We don't expect this to work because format_binary() emits a
+ // header, but fromBinary() won't recognize a header.
+ fromPythonUsing("format_binary",
+ [](std::istream& istr, LLSD& data, llssize max_bytes)
+ { return LLSDSerialize::fromBinary(data, istr, max_bytes) > 0; });
}
+|*==========================================================================*/
}
diff --git a/indra/llcorehttp/tests/test_llcorehttp_peer.py b/indra/llcorehttp/tests/test_llcorehttp_peer.py
index 185e8e25c6..b9992538ba 100755
--- a/indra/llcorehttp/tests/test_llcorehttp_peer.py
+++ b/indra/llcorehttp/tests/test_llcorehttp_peer.py
@@ -38,7 +38,7 @@ from io import StringIO
from http.server import HTTPServer, BaseHTTPRequestHandler
-from llbase import llsd
+import llsd
# we're in llcorehttp/tests ; testrunner.py is found in llmessage/tests
sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir,
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 40f7b1e9fb..3b586d721f 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -5482,14 +5482,14 @@ bool LLVolumeFace::cacheOptimize()
new_indices.push_back(tri->mVertex[2]->mIdx);
tri->complete();
- U32 breaks = 0;
+ //U32 breaks = 0;
for (U32 i = 1; i < mNumIndices/3; ++i)
{
cache.updateScores();
tri = cache.mBestTriangle;
if (!tri)
{
- breaks++;
+ //breaks++;
for (U32 j = 0; j < triangle_data.size(); ++j)
{
if (triangle_data[j].mActive)
diff --git a/indra/llmessage/llcircuit.cpp b/indra/llmessage/llcircuit.cpp
index 8baa2e328b..a9a292958f 100644
--- a/indra/llmessage/llcircuit.cpp
+++ b/indra/llmessage/llcircuit.cpp
@@ -271,7 +271,6 @@ void LLCircuitData::ackReliablePacket(TPACKETID packet_num)
S32 LLCircuitData::resendUnackedPackets(const F64Seconds now)
{
- S32 resent_packets = 0;
LLReliablePacket *packetp;
@@ -375,7 +374,6 @@ S32 LLCircuitData::resendUnackedPackets(const F64Seconds now)
// Don't remove it yet, it still gets to try to resend at least once.
++iter;
}
- resent_packets++;
}
else
{
diff --git a/indra/llmessage/llcorehttputil.cpp b/indra/llmessage/llcorehttputil.cpp
index c8c9280029..6b9ce54c92 100644
--- a/indra/llmessage/llcorehttputil.cpp
+++ b/indra/llmessage/llcorehttputil.cpp
@@ -1336,6 +1336,48 @@ void HttpCoroutineAdapter::trivialPostCoro(std::string url, LLCore::HttpRequest:
}
+/*static*/
+void HttpCoroutineAdapter::callbackHttpDel(const std::string &url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success,
+ completionCallback_t failure)
+{
+ LLCoros::instance().launch("HttpCoroutineAdapter::genericDelCoro",
+ boost::bind(&HttpCoroutineAdapter::trivialDelCoro, url, policyId, success, failure));
+}
+
+/*static*/
+void HttpCoroutineAdapter::trivialDelCoro(std::string url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success,
+ completionCallback_t failure)
+{
+ LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("genericDelCoro", policyId));
+ LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
+ LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
+
+ httpOpts->setWantHeaders(true);
+
+ LL_INFOS("HttpCoroutineAdapter", "genericDelCoro") << "Generic DEL for " << url << LL_ENDL;
+
+ LLSD result = httpAdapter->deleteAndSuspend(httpRequest, url, httpOpts);
+
+ LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
+ LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
+
+ if (!status)
+ {
+ if (failure)
+ {
+ failure(httpResults);
+ }
+ }
+ else
+ {
+ if (success)
+ {
+ success(result);
+ }
+ }
+}
+
+
} // end namespace LLCoreHttpUtil
diff --git a/indra/llmessage/llcorehttputil.h b/indra/llmessage/llcorehttputil.h
index 6f0b865f83..8df1425f2a 100644
--- a/indra/llmessage/llcorehttputil.h
+++ b/indra/llmessage/llcorehttputil.h
@@ -608,6 +608,9 @@ public:
callbackHttpPost(url, LLCore::HttpRequest::DEFAULT_POLICY_ID, postData, success, failure);
}
+ static void callbackHttpDel(const std::string &url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success = NULL,
+ completionCallback_t failure = NULL);
+
/// Generic Get and post routines for HTTP via coroutines.
/// These static methods do all required setup for the GET or POST operation.
/// When the operation completes successfully they will put the success message in the log at INFO level,
@@ -669,6 +672,7 @@ private:
static void trivialGetCoro(std::string url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success, completionCallback_t failure);
static void trivialPostCoro(std::string url, LLCore::HttpRequest::policy_t policyId, LLSD postData, completionCallback_t success, completionCallback_t failure);
+ static void trivialDelCoro(std::string url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success, completionCallback_t failure);
void checkDefaultHeaders(LLCore::HttpHeaders::ptr_t &headers);
diff --git a/indra/llmessage/tests/test_llsdmessage_peer.py b/indra/llmessage/tests/test_llsdmessage_peer.py
index 5ba0749e31..8e9b6c09e7 100755
--- a/indra/llmessage/tests/test_llsdmessage_peer.py
+++ b/indra/llmessage/tests/test_llsdmessage_peer.py
@@ -33,8 +33,8 @@ import os
import sys
from http.server import HTTPServer, BaseHTTPRequestHandler
-from llbase.fastest_elementtree import parse as xml_parse
-from llbase import llsd
+from llsd.fastest_elementtree import parse as xml_parse
+import llsd
from testrunner import freeport, run, debug, VERBOSE
import time
diff --git a/indra/llprimitive/llmaterialid.h b/indra/llprimitive/llmaterialid.h
index ee663f8f99..c66e3e30a3 100644
--- a/indra/llprimitive/llmaterialid.h
+++ b/indra/llprimitive/llmaterialid.h
@@ -66,6 +66,14 @@ public:
static const LLMaterialID null;
+ // Returns a 64 bits digest of the material Id, by XORing its two 64 bits
+ // long words. HB
+ inline U64 getDigest64() const
+ {
+ U64* tmp = (U64*)mID;
+ return tmp[0] ^ tmp[1];
+ }
+
private:
void parseFromBinary(const LLSD::Binary& pMaterialID);
void copyFromOtherMaterialID(const LLMaterialID& pOtherMaterialID);
@@ -74,5 +82,23 @@ private:
U8 mID[MATERIAL_ID_SIZE];
} ;
+// std::hash implementation for LLMaterialID
+namespace std
+{
+ template<> struct hash<LLMaterialID>
+ {
+ inline size_t operator()(const LLMaterialID& id) const noexcept
+ {
+ return (size_t)id.getDigest64();
+ }
+ };
+}
+
+// For use with boost containers.
+inline size_t hash_value(const LLMaterialID& id) noexcept
+{
+ return (size_t)id.getDigest64();
+}
+
#endif // LL_LLMATERIALID_H
diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp
index 193cfa64b8..cfc9ce735d 100644
--- a/indra/llrender/llgl.cpp
+++ b/indra/llrender/llgl.cpp
@@ -2329,9 +2329,7 @@ void LLGLSyncFence::wait()
if (mSync)
{
while (glClientWaitSync(mSync, 0, FENCE_WAIT_TIME_NANOSECONDS) == GL_TIMEOUT_EXPIRED)
- { //track the number of times we've waited here
- static S32 waits = 0;
- waits++;
+ {
}
}
#endif
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 8028f397f3..3354cb2db3 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -942,11 +942,8 @@ void LLButton::draw()
break;
}
- S32 y_offset = 2 + (getRect().getHeight() - 20)/2;
-
if (pressed && mDisplayPressedState)
{
- y_offset--;
x++;
}
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 33c4b6ec73..16c27da56a 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -487,9 +487,6 @@ void LLMenuItemGL::draw( void )
// let disabled items be highlighted, just don't draw them as such
if( getEnabled() && getHighlight() && !mBriefItem)
{
- int debug_count = 0;
- if (dynamic_cast<LLMenuItemCallGL*>(this))
- debug_count++;
gGL.color4fv( mHighlightBackground.get().mV );
gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0 );
diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp
index ead8634df4..2960ecf829 100644
--- a/indra/llxml/llcontrol.cpp
+++ b/indra/llxml/llcontrol.cpp
@@ -774,7 +774,6 @@ U32 LLControlGroup::loadFromFileLegacy(const std::string& filename, BOOL require
return 0;
}
- U32 item = 0;
U32 validitems = 0;
S32 version;
@@ -808,8 +807,6 @@ U32 LLControlGroup::loadFromFileLegacy(const std::string& filename, BOOL require
}
// Got an item. Load it up.
- item++;
-
// If not declared, assume it's a string
if (!declared)
{
diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
index e16a5c7e76..340334aee8 100644
--- a/indra/newview/app_settings/cmd_line.xml
+++ b/indra/newview/app_settings/cmd_line.xml
@@ -209,6 +209,12 @@
<string>NoAudio</string>
</map>
+ <key>nofmod</key>
+ <map>
+ <key>map-to</key>
+ <string>UseMediaPluginsForStreamingAudio</string>
+ </map>
+
<key>noninteractive</key>
<map>
<key>desc</key>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index ca1b1e2f20..816b7b7c92 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7077,6 +7077,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>UseMediaPluginsForStreamingAudio</key>
+ <map>
+ <key>Comment</key>
+ <string>Use media plugins (VLC) for streaming audio.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>NoHardwareProbe</key>
<map>
<key>Comment</key>
@@ -11349,11 +11360,11 @@
<key>ShowBanLines</key>
<map>
<key>Comment</key>
- <string>Show in-world ban/access borders</string>
+ <string>Show in-world ban/access borders, 0 - do not show, 1 - show on collision, 2 - show on proximity</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
- <string>Boolean</string>
+ <string>S32</string>
<key>Value</key>
<integer>1</integer>
</map>
@@ -16986,17 +16997,6 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>360CaptureUseInterestListCap</key>
- <map>
- <key>Comment</key>
- <string>Flag if set, uses the new InterestList cap to ask the simulator for full content</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
<key>360CaptureJPEGEncodeQuality</key>
<map>
<key>Comment</key>
@@ -17107,5 +17107,38 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>StatsReportMaxDuration</key>
+ <map>
+ <key>Comment</key>
+ <string>Maximum seconds for viewer stats file data, prevents huge file</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>300</real>
+ </map>
+ <key>StatsReportFileInterval</key>
+ <map>
+ <key>Comment</key>
+ <string>Interval to save viewer stats file data</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.2</real>
+ </map>
+ <key>StatsReportSkipZeroDataSaves</key>
+ <map>
+ <key>Comment</key>
+ <string>In viewer stats data file, skip saving entry if there is no data</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
</map>
</llsd>
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index 60e26274cb..ed37f541c8 100644
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -507,7 +507,7 @@ Call un.UserSettingsFiles
SectionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Make sure the user can install
+;; Make sure the user can install/uninstall
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function CheckIfAdministrator
DetailPrint $(CheckAdministratorInstDP)
@@ -522,21 +522,6 @@ lbl_is_admin:
FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Make sure the user can uninstall
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.CheckIfAdministrator
- DetailPrint $(CheckAdministratorUnInstDP)
- UserInfo::GetAccountType
- Pop $R0
- StrCmp $R0 "Admin" lbl_is_admin
- MessageBox MB_OK $(CheckAdministratorUnInstMB)
- Quit
-lbl_is_admin:
- Return
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Function CheckWillUninstallV2
;;
;; If called through auto-update, need to uninstall any existing V2 installation.
diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi
index 7922d9df52..0985663041 100755
--- a/indra/newview/installers/windows/lang_zh.nsi
+++ b/indra/newview/installers/windows/lang_zh.nsi
Binary files differ
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 8cc9be7244..f87fa5b281 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -401,6 +401,7 @@ LLAgent::LLAgent() :
mHttpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID),
mTeleportState(TELEPORT_NONE),
mRegionp(NULL),
+ mInterestListMode(LLViewerRegion::IL_MODE_DEFAULT),
mAgentOriginGlobal(),
mPositionGlobal(),
@@ -894,11 +895,19 @@ boost::signals2::connection LLAgent::addParcelChangedCallback(parcel_changed_cal
// static
void LLAgent::capabilityReceivedCallback(const LLUUID &region_id, LLViewerRegion *regionp)
-{
- if (regionp && regionp->getRegionID() == region_id)
+{ // Changed regions and now have the region capabilities
+ if (regionp)
{
- regionp->requestSimulatorFeatures();
- LLAppViewer::instance()->updateNameLookupUrl(regionp);
+ if (regionp->getRegionID() == region_id)
+ {
+ regionp->requestSimulatorFeatures();
+ LLAppViewer::instance()->updateNameLookupUrl(regionp);
+ }
+
+ if (gAgent.getInterestListMode() == LLViewerRegion::IL_MODE_360)
+ {
+ gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_360);
+ }
}
}
@@ -1362,26 +1371,21 @@ LLVector3 LLAgent::getReferenceUpVector()
void LLAgent::pitch(F32 angle)
{
// don't let user pitch if pointed almost all the way down or up
- mFrameAgent.pitch(clampPitchToLimits(angle));
-}
-
-// Radians, positive is forward into ground
-//-----------------------------------------------------------------------------
-// clampPitchToLimits()
-//-----------------------------------------------------------------------------
-F32 LLAgent::clampPitchToLimits(F32 angle)
-{
// A dot B = mag(A) * mag(B) * cos(angle between A and B)
// so... cos(angle between A and B) = A dot B / mag(A) / mag(B)
// = A dot B for unit vectors
LLVector3 skyward = getReferenceUpVector();
- const F32 look_down_limit = 179.f * DEG_TO_RAD;;
- const F32 look_up_limit = 1.f * DEG_TO_RAD;
+ // SL-19286 Avatar is upside down when viewed from below
+ // after left-clicking the mouse on the avatar and dragging down
+ //
+ // The issue is observed on angle below 10 degrees
+ const F32 look_down_limit = 179.f * DEG_TO_RAD;
+ const F32 look_up_limit = 10.f * DEG_TO_RAD;
- F32 angle_from_skyward = acos( mFrameAgent.getAtAxis() * skyward );
+ F32 angle_from_skyward = acos(mFrameAgent.getAtAxis() * skyward);
// clamp pitch to limits
if ((angle >= 0.f) && (angle_from_skyward + angle > look_down_limit))
@@ -1392,8 +1396,11 @@ F32 LLAgent::clampPitchToLimits(F32 angle)
{
angle = look_up_limit - angle_from_skyward;
}
-
- return angle;
+
+ if (fabs(angle) > 1e-4)
+ {
+ mFrameAgent.pitch(angle);
+ }
}
@@ -2910,39 +2917,60 @@ void LLAgent::processMaturityPreferenceFromServer(const LLSD &result, U8 perferr
handlePreferredMaturityResult(maturity);
}
-
-bool LLAgent::requestPostCapability(const std::string &capName, LLSD &postData, httpCallback_t cbSuccess, httpCallback_t cbFailure)
-{
- if (!getRegion())
+// Using a new capability, tell the simulator that we want it to send everything
+// it knows about and not just what is in front of the camera, in its view
+// frustum. We need this feature so that the contents of the region that appears
+// in the 6 snapshots which we cannot see and is normally not "considered", is
+// also rendered. Typically, this is turned on when the 360 capture floater is
+// opened and turned off when it is closed.
+// Note: for this version, we do not have a way to determine when "everything"
+// has arrived and has been rendered so for now, the proposal is that users
+// will need to experiment with the low resolution version and wait for some
+// (hopefully) small period of time while the full contents resolves.
+// Pass in a flag to ask the simulator/interest list to "send everything" or
+// not (the default mode)
+void LLAgent::changeInterestListMode(const std::string &new_mode)
+{
+ if (new_mode != mInterestListMode)
{
- return false;
+ mInterestListMode = new_mode;
+
+ // Change interest list mode for all regions. If they are already set for the current mode,
+ // the setting will have no effect.
+ for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
+ iter != LLWorld::getInstance()->getRegionList().end();
+ ++iter)
+ {
+ LLViewerRegion *regionp = *iter;
+ if (regionp && regionp->isAlive() && regionp->capabilitiesReceived())
+ {
+ regionp->setInterestListMode(mInterestListMode);
+ }
+ }
}
- std::string url = getRegion()->getCapability(capName);
+ else
+ {
+ LL_DEBUGS("360Capture") << "Agent interest list mode is already set to " << mInterestListMode << LL_ENDL;
+ }
+}
- if (url.empty())
+
+bool LLAgent::requestPostCapability(const std::string &capName, LLSD &postData, httpCallback_t cbSuccess, httpCallback_t cbFailure)
+{
+ if (getRegion())
{
- LL_WARNS("Agent") << "Could not retrieve region capability \"" << capName << "\"" << LL_ENDL;
- return false;
+ return getRegion()->requestPostCapability(capName, postData, cbSuccess, cbFailure);
}
-
- LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(url, mHttpPolicy, postData, cbSuccess, cbFailure);
- return true;
+ return false;
}
bool LLAgent::requestGetCapability(const std::string &capName, httpCallback_t cbSuccess, httpCallback_t cbFailure)
{
- std::string url;
-
- url = getRegionCapability(capName);
-
- if (url.empty())
+ if (getRegion())
{
- LL_WARNS("Agent") << "Could not retrieve region capability \"" << capName << "\"" << LL_ENDL;
- return false;
+ return getRegion()->requestGetCapability(capName, cbSuccess, cbFailure);
}
-
- LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(url, mHttpPolicy, cbSuccess, cbFailure);
- return true;
+ return false;
}
BOOL LLAgent::getAdminOverride() const
@@ -3708,7 +3736,6 @@ void LLAgent::processScriptControlChange(LLMessageSystem *msg, void **)
// take controls
msg->getU32("Data", "Controls", controls, block_index );
msg->getBOOL("Data", "PassToAgent", passon, block_index );
- U32 total_count = 0;
for (i = 0; i < TOTAL_CONTROLS; i++)
{
if (controls & ( 1 << i))
@@ -3721,7 +3748,6 @@ void LLAgent::processScriptControlChange(LLMessageSystem *msg, void **)
{
gAgent.mControlsTakenCount[i]++;
}
- total_count++;
}
}
}
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index 498bea3c07..ea91d2b720 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -294,10 +294,16 @@ public:
boost::signals2::connection addRegionChangedCallback(const region_changed_signal_t::slot_type& cb);
void removeRegionChangedCallback(boost::signals2::connection callback);
+
+ void changeInterestListMode(const std::string & new_mode);
+ const std::string & getInterestListMode() const { return mInterestListMode; }
+
private:
LLViewerRegion *mRegionp;
region_changed_signal_t mRegionChangedSignal;
+ std::string mInterestListMode; // How agent wants regions to send updates
+
//--------------------------------------------------------------------
// History
//--------------------------------------------------------------------
@@ -548,7 +554,6 @@ public:
void roll(F32 angle);
void yaw(F32 angle);
LLVector3 getReferenceUpVector();
- F32 clampPitchToLimits(F32 angle);
//--------------------------------------------------------------------
// Autopilot
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index 77131efd75..d2fe570069 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -401,10 +401,15 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi
// if is avatar - don't do any funk heuristics to position the focal point
// see DEV-30589
- if (object->isAvatar() || (object->isAnimatedObject() && object->getControlAvatar()))
+ if ((object->isAvatar() && !object->isRoot()) || (object->isAnimatedObject() && object->getControlAvatar()))
{
return original_focus_point - obj_pos;
}
+ if (object->isAvatar())
+ {
+ LLVOAvatar* av = object->asAvatar();
+ return original_focus_point - av->getCharacterPosition();
+ }
LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation
LLVector3 object_extents = object->getScale();
@@ -1759,13 +1764,24 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)
LL_WARNS() << "Null avatar drawable!" << LL_ENDL;
return LLVector3d::zero;
}
+
head_offset.clearVec();
+ F32 fixup;
+ if (gAgentAvatarp->hasPelvisFixup(fixup))
+ {
+ head_offset[VZ] -= fixup;
+ }
+ if (gAgentAvatarp->isSitting())
+ {
+ head_offset.mdV[VZ] += 0.1;
+ }
+
if (gAgentAvatarp->isSitting() && gAgentAvatarp->getParent())
{
gAgentAvatarp->updateHeadOffset();
- head_offset.mdV[VX] = gAgentAvatarp->mHeadOffset.mV[VX];
- head_offset.mdV[VY] = gAgentAvatarp->mHeadOffset.mV[VY];
- head_offset.mdV[VZ] = gAgentAvatarp->mHeadOffset.mV[VZ] + 0.1f;
+ head_offset.mdV[VX] += gAgentAvatarp->mHeadOffset.mV[VX];
+ head_offset.mdV[VY] += gAgentAvatarp->mHeadOffset.mV[VY];
+ head_offset.mdV[VZ] += gAgentAvatarp->mHeadOffset.mV[VZ];
const LLMatrix4& mat = ((LLViewerObject*) gAgentAvatarp->getParent())->getRenderMatrix();
camera_position_global = gAgent.getPosGlobalFromAgent
((gAgentAvatarp->getPosition()+
@@ -1773,11 +1789,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)
}
else
{
- head_offset.mdV[VZ] = gAgentAvatarp->mHeadOffset.mV[VZ];
- if (gAgentAvatarp->isSitting())
- {
- head_offset.mdV[VZ] += 0.1;
- }
+ head_offset.mdV[VZ] += gAgentAvatarp->mHeadOffset.mV[VZ];
camera_position_global = gAgent.getPosGlobalFromAgent(gAgentAvatarp->getRenderPosition());//frame_center_global;
head_offset = head_offset * gAgentAvatarp->getRenderRotation();
camera_position_global = camera_position_global + head_offset;
diff --git a/indra/newview/llagentlistener.cpp b/indra/newview/llagentlistener.cpp
index b7f5aeb8e0..77a3d47aea 100644
--- a/indra/newview/llagentlistener.cpp
+++ b/indra/newview/llagentlistener.cpp
@@ -35,6 +35,7 @@
#include "llcommandhandler.h"
#include "llslurl.h"
#include "llurldispatcher.h"
+#include "llviewernetwork.h"
#include "llviewerobject.h"
#include "llviewerobjectlist.h"
#include "llviewerregion.h"
@@ -148,7 +149,7 @@ void LLAgentListener::requestTeleport(LLSD const & event_data) const
params.append(event_data["x"]);
params.append(event_data["y"]);
params.append(event_data["z"]);
- LLCommandDispatcher::dispatch("teleport", params, LLSD(), NULL, LLCommandHandler::NAV_TYPE_CLICKED, true);
+ LLCommandDispatcher::dispatch("teleport", params, LLSD(), LLGridManager::getInstance()->getGrid(), NULL, LLCommandHandler::NAV_TYPE_CLICKED, true);
// *TODO - lookup other LLCommandHandlers for "agent", "classified", "event", "group", "floater", "parcel", "login", login_refresh", "balance", "chat"
// should we just compose LLCommandHandler and LLDispatchListener?
}
diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp
index c19ad2ae6f..acb1a37ff5 100644
--- a/indra/newview/llagentui.cpp
+++ b/indra/newview/llagentui.cpp
@@ -82,9 +82,9 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const
if (!region || !parcel) return FALSE;
- S32 pos_x = S32(agent_pos_region.mV[VX]);
- S32 pos_y = S32(agent_pos_region.mV[VY]);
- S32 pos_z = S32(agent_pos_region.mV[VZ]);
+ S32 pos_x = S32(agent_pos_region.mV[VX] + 0.5f);
+ S32 pos_y = S32(agent_pos_region.mV[VY] + 0.5f);
+ S32 pos_z = S32(agent_pos_region.mV[VZ] + 0.5f);
// Round the numbers based on the velocity
F32 velocity_mag_sq = gAgent.getVelocity().magVecSquared();
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 2e769dc737..53397978e0 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -41,7 +41,6 @@
#include "llinventoryobserver.h"
#include "llinventorypanel.h"
#include "lllocaltextureobject.h"
-#include "llmd5.h"
#include "llnotificationsutil.h"
#include "lloutfitobserver.h"
#include "llsidepanelappearance.h"
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 3c93a9df7e..d0fad07f1c 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -41,7 +41,9 @@
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
#include "llinventoryobserver.h"
+#include "llmd5.h"
#include "llnotificationsutil.h"
+#include "llmd5.h"
#include "lloutfitobserver.h"
#include "lloutfitslist.h"
#include "llselectmgr.h"
@@ -145,7 +147,10 @@ public:
// requests will be throttled from a non-trusted browser
LLAppearanceHandler() : LLCommandHandler("appearance", UNTRUSTED_THROTTLE) {}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
// support secondlife:///app/appearance/show, but for now we just
// make all secondlife:///app/appearance SLapps behave this way
@@ -4470,8 +4475,10 @@ public:
// not allowed from outside the app
LLWearFolderHandler() : LLCommandHandler("wear_folder", UNTRUSTED_BLOCK) { }
- bool handle(const LLSD& tokens, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& tokens,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
LLSD::UUID folder_uuid;
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index e70fcb6e86..31a87bbde1 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1536,7 +1536,12 @@ bool LLAppViewer::doFrame()
LLFloaterSimpleOutfitSnapshot::update();
gGLActive = FALSE;
}
- }
+
+ if (LLViewerStatsRecorder::instanceExists())
+ {
+ LLViewerStatsRecorder::instance().idle();
+ }
+ }
}
{
diff --git a/indra/newview/llattachmentsmgr.cpp b/indra/newview/llattachmentsmgr.cpp
index d43048a8b6..1feefc3ef8 100644
--- a/indra/newview/llattachmentsmgr.cpp
+++ b/indra/newview/llattachmentsmgr.cpp
@@ -31,6 +31,7 @@
#include "llagent.h"
#include "llappearancemgr.h"
#include "llinventorymodel.h"
+#include "llstartup.h"
#include "lltooldraganddrop.h" // pack_permissions_slam
#include "llviewerinventory.h"
#include "llviewerregion.h"
@@ -372,7 +373,7 @@ void LLAttachmentsMgr::onAttachmentArrived(const LLUUID& inv_item_id)
{
LLTimer timer;
bool expected = mAttachmentRequests.getTime(inv_item_id, timer);
- if (!expected)
+ if (!expected && LLStartUp::getStartupState() > STATE_WEARABLES_WAIT)
{
LLInventoryItem *item = gInventory.getItem(inv_item_id);
LL_WARNS() << "ATT Attachment was unexpected or arrived after " << MAX_ATTACHMENT_REQUEST_LIFETIME << " seconds: "
@@ -411,11 +412,15 @@ void LLAttachmentsMgr::onDetachCompleted(const LLUUID& inv_item_id)
LL_DEBUGS("Avatar") << "ATT all detach requests have completed" << LL_ENDL;
}
}
- else
+ else if (!LLApp::isExiting())
{
LL_WARNS() << "ATT unexpected detach for "
<< (item ? item->getName() : "UNKNOWN") << " id " << inv_item_id << LL_ENDL;
}
+ else
+ {
+ LL_DEBUGS("Avatar") << "ATT detach on shutdown for " << (item ? item->getName() : "UNKNOWN") << " " << inv_item_id << LL_ENDL;
+ }
LL_DEBUGS("Avatar") << "ATT detached item flagging as questionable for COF link checking "
<< (item ? item->getName() : "UNKNOWN") << " id " << inv_item_id << LL_ENDL;
diff --git a/indra/newview/llbuycurrencyhtml.cpp b/indra/newview/llbuycurrencyhtml.cpp
index 7ad06f8eaa..37de89a48b 100644
--- a/indra/newview/llbuycurrencyhtml.cpp
+++ b/indra/newview/llbuycurrencyhtml.cpp
@@ -43,7 +43,7 @@ public:
// requests will be throttled from a non-trusted browser
LLBuyCurrencyHTMLHandler() : LLCommandHandler( "buycurrencyhtml", UNTRUSTED_THROTTLE) {}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
std::string action( "" );
if ( params.size() >= 1 )
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 9a608fba8e..43dc10ef5f 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -82,7 +82,7 @@ public:
// requests will be throttled from a non-trusted browser
LLObjectIMHandler() : LLCommandHandler("objectim", UNTRUSTED_THROTTLE) {}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (params.size() < 1)
{
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index 1c22e055bb..dc2cc57f0f 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -57,7 +57,7 @@ class LLObjectHandler : public LLCommandHandler
public:
LLObjectHandler() : LLCommandHandler("object", UNTRUSTED_BLOCK) { }
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (params.size() < 2) return false;
diff --git a/indra/newview/llcommanddispatcherlistener.cpp b/indra/newview/llcommanddispatcherlistener.cpp
index 518f5bc374..46ec97d5c0 100644
--- a/indra/newview/llcommanddispatcherlistener.cpp
+++ b/indra/newview/llcommanddispatcherlistener.cpp
@@ -64,10 +64,10 @@ void LLCommandDispatcherListener::dispatch(const LLSD& params) const
// But for testing, allow a caller to specify untrusted.
trusted_browser = params["trusted"].asBoolean();
}
- LLCommandDispatcher::dispatch(
- params["cmd"],
+ LLCommandDispatcher::dispatch(params["cmd"],
params["params"],
params["query"],
+ "",
NULL,
LLCommandHandler::NAV_TYPE_CLICKED,
trusted_browser);
diff --git a/indra/newview/llcommandhandler.cpp b/indra/newview/llcommandhandler.cpp
index 9640b05b06..caa27e530b 100644
--- a/indra/newview/llcommandhandler.cpp
+++ b/indra/newview/llcommandhandler.cpp
@@ -62,6 +62,7 @@ public:
bool dispatch(const std::string& cmd,
const LLSD& params,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web,
const std::string& nav_type,
bool trusted_browser);
@@ -98,6 +99,7 @@ void LLCommandHandlerRegistry::add(const char* cmd,
bool LLCommandHandlerRegistry::dispatch(const std::string& cmd,
const LLSD& params,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web,
const std::string& nav_type,
bool trusted_browser)
@@ -165,7 +167,7 @@ bool LLCommandHandlerRegistry::dispatch(const std::string& cmd,
}
}
if (!info.mHandler) return false;
- return info.mHandler->handle(params, query_map, web);
+ return info.mHandler->handle(params, query_map, grid, web);
}
void LLCommandHandlerRegistry::notifySlurlBlocked()
@@ -220,12 +222,13 @@ LLCommandHandler::~LLCommandHandler()
bool LLCommandDispatcher::dispatch(const std::string& cmd,
const LLSD& params,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web,
const std::string& nav_type,
bool trusted_browser)
{
return LLCommandHandlerRegistry::instance().dispatch(
- cmd, params, query_map, web, nav_type, trusted_browser);
+ cmd, params, query_map, grid, web, nav_type, trusted_browser);
}
static std::string lookup(LLCommandHandler::EUntrustedAccess value);
diff --git a/indra/newview/llcommandhandler.h b/indra/newview/llcommandhandler.h
index 486feecca6..1a354b04f7 100644
--- a/indra/newview/llcommandhandler.h
+++ b/indra/newview/llcommandhandler.h
@@ -42,7 +42,7 @@ public:
LLFooHandler() : LLCommandHandler("foo", UNTRUSTED_BLOCK) { }
// Your code here
- bool handle(const LLSD& tokens, const LLSD& query_map,
+ bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid,
LLMediaCtrl* web)
{
if (tokens.size() < 1) return false;
@@ -90,6 +90,7 @@ public:
virtual bool handle(const LLSD& params,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web) = 0;
// For URL secondlife:///app/foo/bar/baz?cat=1&dog=2
// @params - array of "bar", "baz", possibly empty
@@ -106,6 +107,7 @@ public:
static bool dispatch(const std::string& cmd,
const LLSD& params,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web,
const std::string& nav_type,
bool trusted_browser);
diff --git a/indra/newview/llcontrolavatar.cpp b/indra/newview/llcontrolavatar.cpp
index 4a87273372..91031034c6 100644
--- a/indra/newview/llcontrolavatar.cpp
+++ b/indra/newview/llcontrolavatar.cpp
@@ -47,6 +47,7 @@ LLControlAvatar::LLControlAvatar(const LLUUID& id, const LLPCode pcode, LLViewer
mGlobalScale(1.0f),
mMarkedForDeath(false),
mRootVolp(NULL),
+ mControlAVBridge(NULL),
mScaleConstraintFixup(1.0),
mRegionChanged(false)
{
@@ -376,6 +377,12 @@ void LLControlAvatar::idleUpdate(LLAgent &agent, const F64 &time)
}
}
+void LLControlAvatar::markDead()
+{
+ super::markDead();
+ mControlAVBridge = NULL;
+}
+
bool LLControlAvatar::computeNeedsUpdate()
{
computeUpdatePeriod();
diff --git a/indra/newview/llcontrolavatar.h b/indra/newview/llcontrolavatar.h
index 8e87299f3e..50e02d2d91 100644
--- a/indra/newview/llcontrolavatar.h
+++ b/indra/newview/llcontrolavatar.h
@@ -35,9 +35,12 @@ class LLControlAvatar:
{
LOG_CLASS(LLControlAvatar);
+ using super = LLVOAvatar;
+
public:
LLControlAvatar(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
- virtual void initInstance(); // Called after construction to initialize the class.
+ virtual void initInstance(); // Called after construction to initialize the class.
+ virtual void markDead();
virtual ~LLControlAvatar();
// If this is an attachment, return the avatar it is attached to. Otherwise NULL.
@@ -87,6 +90,7 @@ public:
F32 mGlobalScale;
LLVOVolume *mRootVolp;
+ class LLControlAVBridge* mControlAVBridge;
bool mMarkedForDeath;
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index 4a0c9d399f..bb4174d3b6 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -763,6 +763,19 @@ void LLDrawable::movePartition()
if (part)
{
part->move(this, getSpatialGroup());
+
+ // SL-18251 "On-screen animesh characters using pelvis offset animations
+ // disappear when root goes off-screen"
+ //
+ // Update extents of the root node when Control Avatar changes it's bounds
+ if (mRenderType == LLPipeline::RENDER_TYPE_CONTROL_AV && isRoot())
+ {
+ LLControlAvatar* controlAvatar = dynamic_cast<LLControlAvatar*>(getVObj().get());
+ if (controlAvatar && controlAvatar->mControlAVBridge)
+ {
+ ((LLSpatialGroup*)controlAvatar->mControlAVBridge->mOctree->getListener(0))->setState(LLViewerOctreeGroup::DIRTY);
+ }
+ }
}
}
@@ -1216,10 +1229,11 @@ LLSpatialPartition* LLDrawable::getSpatialPartition()
{
setSpatialBridge(new LLHUDBridge(this, getRegion()));
}
- else if (mVObjp->isAnimatedObject() && mVObjp->getControlAvatar())
- {
- setSpatialBridge(new LLControlAVBridge(this, getRegion()));
- }
+ else if (mVObjp->isAnimatedObject() && mVObjp->getControlAvatar())
+ {
+ setSpatialBridge(new LLControlAVBridge(this, getRegion()));
+ mVObjp->getControlAvatar()->mControlAVBridge = (LLControlAVBridge*)getSpatialBridge();
+ }
// check HUD first, because HUD is also attachment
else if (mVObjp->isAttachment())
{
diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp
index f1a44a68c9..788b61b381 100644
--- a/indra/newview/lleventnotifier.cpp
+++ b/indra/newview/lleventnotifier.cpp
@@ -43,8 +43,10 @@ class LLEventHandler : public LLCommandHandler
public:
// requires trusted browser to trigger
LLEventHandler() : LLCommandHandler("event", UNTRUSTED_THROTTLE) { }
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (params.size() < 2)
{
diff --git a/indra/newview/llfilepicker_mac.mm b/indra/newview/llfilepicker_mac.mm
index e5965abbd6..4dd8bea4e1 100644
--- a/indra/newview/llfilepicker_mac.mm
+++ b/indra/newview/llfilepicker_mac.mm
@@ -103,7 +103,6 @@ std::unique_ptr<std::vector<std::string>> doLoadDialog(const std::vector<std::st
}
}
}
-
return outfiles;
}
@@ -150,7 +149,7 @@ void doLoadDialogModeless(const std::vector<std::string>* allowed_types,
}
}
-std::unique_ptr<std::string> doSaveDialog(const std::string* file,
+std::unique_ptr<std::string> doSaveDialog(const std::string* file,
const std::string* type,
const std::string* creator,
const std::string* extension,
diff --git a/indra/newview/llfloater360capture.cpp b/indra/newview/llfloater360capture.cpp
index 23f86e2361..2c638fa959 100644
--- a/indra/newview/llfloater360capture.cpp
+++ b/indra/newview/llfloater360capture.cpp
@@ -64,12 +64,10 @@ LLFloater360Capture::LLFloater360Capture(const LLSD& key)
// such time as we ask it not to (the dtor). If we crash or
// otherwise, exit before this is turned off, the Simulator
// will take care of cleaning up for us.
- if (gSavedSettings.getBOOL("360CaptureUseInterestListCap"))
- {
- // send everything to us for as long as this floater is open
- const bool send_everything = true;
- changeInterestListMode(send_everything);
- }
+ mStartILMode = gAgent.getInterestListMode();
+
+ // send everything to us for as long as this floater is open
+ gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_360);
}
LLFloater360Capture::~LLFloater360Capture()
@@ -81,13 +79,15 @@ LLFloater360Capture::~LLFloater360Capture()
mWebBrowser->unloadMediaSource();
}
- // Tell the Simulator not to send us everything anymore
- // and revert to the regular "keyhole" frustum of interest
+ // Restore interest list mode to the state when started
+ // Normally LLFloater360Capture tells the Simulator send everything
+ // and now reverts to the regular "keyhole" frustum of interest
// list updates.
- if (!LLApp::isExiting() && gSavedSettings.getBOOL("360CaptureUseInterestListCap"))
+ if (!LLApp::isExiting() &&
+ gSavedSettings.getBOOL("360CaptureUseInterestListCap") &&
+ mStartILMode != gAgent.getInterestListMode())
{
- const bool send_everything = false;
- changeInterestListMode(send_everything);
+ gAgent.changeInterestListMode(mStartILMode);
}
}
@@ -170,52 +170,6 @@ void LLFloater360Capture::onChooseQualityRadioGroup()
setSourceImageSize();
}
-// Using a new capability, tell the simulator that we want it to send everything
-// it knows about and not just what is in front of the camera, in its view
-// frustum. We need this feature so that the contents of the region that appears
-// in the 6 snapshots which we cannot see and is normally not "considered", is
-// also rendered. Typically, this is turned on when the 360 capture floater is
-// opened and turned off when it is closed.
-// Note: for this version, we do not have a way to determine when "everything"
-// has arrived and has been rendered so for now, the proposal is that users
-// will need to experiment with the low resolution version and wait for some
-// (hopefully) small period of time while the full contents resolves.
-// Pass in a flag to ask the simulator/interest list to "send everything" or
-// not (the default mode)
-void LLFloater360Capture::changeInterestListMode(bool send_everything)
-{
- LLSD body;
-
- if (send_everything)
- {
- body["mode"] = LLSD::String("360");
- }
- else
- {
- body["mode"] = LLSD::String("default");
- }
-
- if (gAgent.requestPostCapability("InterestList", body, [](const LLSD & response)
- {
- LL_INFOS("360Capture") <<
- "InterestList capability responded: \n" <<
- ll_pretty_print_sd(response) <<
- LL_ENDL;
- }))
- {
- LL_INFOS("360Capture") <<
- "Successfully posted an InterestList capability request with payload: \n" <<
- ll_pretty_print_sd(body) <<
- LL_ENDL;
- }
- else
- {
- LL_INFOS("360Capture") <<
- "Unable to post an InterestList capability request with payload: \n" <<
- ll_pretty_print_sd(body) <<
- LL_ENDL;
- }
-}
// There is is a setting (360CaptureSourceImageSize) that holds the size
// (width == height since it's a square) of each of the 6 source snapshots.
@@ -632,11 +586,8 @@ void LLFloater360Capture::capture360Images()
// display time to encode all 6 images. It tends to be a fairly linear
// time for each so we don't need to worry about displaying the time
// for each - this gives us plenty to use for optimizing
- LL_INFOS("360Capture") <<
- "Time to encode and save 6 images was " <<
- encode_time_total <<
- " seconds" <<
- LL_ENDL;
+ LL_INFOS("360Capture") << "Time to encode and save 6 images was " <<
+ encode_time_total << " seconds" << LL_ENDL;
// Write the JavaScript file footer (the bottom of the file after the
// declarations of the actual data URLs array). The footer comprises of
@@ -668,7 +619,7 @@ void LLFloater360Capture::capture360Images()
// as a change - only the subsequent 5 are
if (camera_changed_times < 5)
{
- LL_INFOS("360Capture") << "Warning: we only captured " << camera_changed_times << " images." << LL_ENDL;
+ LL_WARNS("360Capture") << "360 image capture expected 5 or more images, only captured " << camera_changed_times << " images." << LL_ENDL;
}
// now we have the 6 shots saved in a well specified location,
diff --git a/indra/newview/llfloater360capture.h b/indra/newview/llfloater360capture.h
index 8f765c0b1b..3fb2c7f3c7 100644
--- a/indra/newview/llfloater360capture.h
+++ b/indra/newview/llfloater360capture.h
@@ -50,8 +50,6 @@ class LLFloater360Capture:
void onOpen(const LLSD& key) override;
void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) override;
- void changeInterestListMode(bool send_everything);
-
const std::string getHTMLBaseFolder();
void capture360Images();
@@ -93,6 +91,8 @@ class LLFloater360Capture:
std::string mImageSaveDir;
LLPointer<LLImageRaw> mRawImages[6];
+
+ std::string mStartILMode;
};
#endif // LL_FLOATER_360CAPTURE_H
diff --git a/indra/newview/llfloatercamerapresets.cpp b/indra/newview/llfloatercamerapresets.cpp
index 300c945a85..a1cbffd094 100644
--- a/indra/newview/llfloatercamerapresets.cpp
+++ b/indra/newview/llfloatercamerapresets.cpp
@@ -24,6 +24,7 @@
*/
#include "llviewerprecompiledheaders.h"
+#include "llfloatercamera.h"
#include "llfloatercamerapresets.h"
#include "llfloaterreg.h"
#include "llnotificationsutil.h"
@@ -40,7 +41,8 @@ LLFloaterCameraPresets::~LLFloaterCameraPresets()
BOOL LLFloaterCameraPresets::postBuild()
{
mPresetList = getChild<LLFlatListView>("preset_list");
-
+ mPresetList->setCommitCallback(boost::bind(&LLFloaterCameraPresets::onSelectionChange, this));
+ mPresetList->setCommitOnSelectionChange(true);
LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCameraPresets::populateList, this));
return TRUE;
@@ -58,6 +60,7 @@ void LLFloaterCameraPresets::populateList()
std::list<std::string> preset_names;
presetsMgr->loadPresetNamesFromDir(PRESETS_CAMERA, preset_names, DEFAULT_BOTTOM);
+ std::string active_preset = gSavedSettings.getString("PresetCameraActive");
for (std::list<std::string>::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it)
{
@@ -66,6 +69,19 @@ void LLFloaterCameraPresets::populateList()
LLCameraPresetFlatItem* item = new LLCameraPresetFlatItem(name, is_default);
item->postBuild();
mPresetList->addItem(item);
+ if(name == active_preset)
+ {
+ mPresetList->selectItem(item);
+ }
+ }
+}
+
+void LLFloaterCameraPresets::onSelectionChange()
+{
+ LLCameraPresetFlatItem* selected_preset = dynamic_cast<LLCameraPresetFlatItem*>(mPresetList->getSelectedItem());
+ if(selected_preset)
+ {
+ LLFloaterCamera::switchToPreset(selected_preset->getPresetName());
}
}
diff --git a/indra/newview/llfloatercamerapresets.h b/indra/newview/llfloatercamerapresets.h
index 66430fa399..4430a4209e 100644
--- a/indra/newview/llfloatercamerapresets.h
+++ b/indra/newview/llfloatercamerapresets.h
@@ -38,6 +38,7 @@ class LLFloaterCameraPresets : public LLFloater
virtual void onOpen(const LLSD& key);
void populateList();
+ void onSelectionChange();
private:
LLFloaterCameraPresets(const LLSD& key);
@@ -58,6 +59,8 @@ public:
virtual void onMouseEnter(S32 x, S32 y, MASK mask);
virtual void onMouseLeave(S32 x, S32 y, MASK mask);
+ std::string getPresetName() { return mPresetName; }
+
private:
void onDeleteBtnClick();
void onResetBtnClick();
diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp
index a99a096ea7..f6afdd29fb 100644
--- a/indra/newview/llfloaterexperienceprofile.cpp
+++ b/indra/newview/llfloaterexperienceprofile.cpp
@@ -92,8 +92,10 @@ class LLExperienceHandler : public LLCommandHandler
public:
LLExperienceHandler() : LLCommandHandler("experience", UNTRUSTED_THROTTLE) { }
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if(params.size() != 2 || params[1].asString() != "profile")
return false;
diff --git a/indra/newview/llfloaterhandler.cpp b/indra/newview/llfloaterhandler.cpp
index 8ebb14149c..b66049de7f 100644
--- a/indra/newview/llfloaterhandler.cpp
+++ b/indra/newview/llfloaterhandler.cpp
@@ -49,7 +49,7 @@ LLFloater* get_parent_floater(LLView* view)
}
-bool LLFloaterHandler::handle(const LLSD &params, const LLSD &query_map, LLMediaCtrl *web)
+bool LLFloaterHandler::handle(const LLSD &params, const LLSD &query_map, const std::string& grid, LLMediaCtrl *web)
{
if (params.size() < 1) return false;
LLFloater* floater = NULL;
diff --git a/indra/newview/llfloaterhandler.h b/indra/newview/llfloaterhandler.h
index 5915642d66..959c972275 100644
--- a/indra/newview/llfloaterhandler.h
+++ b/indra/newview/llfloaterhandler.h
@@ -33,7 +33,7 @@ class LLFloaterHandler
{
public:
LLFloaterHandler() : LLCommandHandler("floater", UNTRUSTED_BLOCK) { }
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web);
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web);
};
#endif
diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp
index 0d2c6d8e4c..bb4cc9bca3 100644
--- a/indra/newview/llfloaterimnearbychat.cpp
+++ b/indra/newview/llfloaterimnearbychat.cpp
@@ -903,8 +903,10 @@ public:
LLChatCommandHandler() : LLCommandHandler("chat", UNTRUSTED_BLOCK) { }
// Your code here
- bool handle(const LLSD& tokens, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& tokens,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
bool retval = false;
// Need at least 2 tokens to have a valid message.
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index 7e6af45515..37ae80fa8f 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -46,7 +46,7 @@ class LLSearchHandler : public LLCommandHandler
public:
// requires trusted browser to trigger
LLSearchHandler() : LLCommandHandler("search", UNTRUSTED_CLICK_ONLY) { }
- bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableSearch"))
{
diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index bd49405f34..9f277021c8 100644
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -49,6 +49,7 @@
#include "llviewerparcelmgr.h"
#include "llviewerregion.h"
#include "lluictrlfactory.h"
+#include "llviewerobjectlist.h"
#include "llviewerwindow.h"
#include "llfloaterregioninfo.h"
@@ -83,6 +84,8 @@ LLFloaterTopObjects::LLFloaterTopObjects(const LLSD& key)
mCommitCallbackRegistrar.add("TopObjects.GetByOwnerName", boost::bind(&LLFloaterTopObjects::onGetByOwnerName, this));
mCommitCallbackRegistrar.add("TopObjects.GetByParcelName", boost::bind(&LLFloaterTopObjects::onGetByParcelName, this));
mCommitCallbackRegistrar.add("TopObjects.CommitObjectsList",boost::bind(&LLFloaterTopObjects::onCommitObjectsList, this));
+
+ mCommitCallbackRegistrar.add("TopObjects.TeleportToSelected", boost::bind(&LLFloaterTopObjects::teleportToSelectedObject, this));
}
LLFloaterTopObjects::~LLFloaterTopObjects()
@@ -92,10 +95,11 @@ LLFloaterTopObjects::~LLFloaterTopObjects()
// virtual
BOOL LLFloaterTopObjects::postBuild()
{
- LLScrollListCtrl *objects_list = getChild<LLScrollListCtrl>("objects_list");
- getChild<LLUICtrl>("objects_list")->setFocus(TRUE);
- objects_list->setDoubleClickCallback(onDoubleClickObjectsList, this);
- objects_list->setCommitOnSelectionChange(TRUE);
+ mObjectsScrollList = getChild<LLScrollListCtrl>("objects_list");
+ mObjectsScrollList->setFocus(TRUE);
+ mObjectsScrollList->setDoubleClickCallback(onDoubleClickObjectsList, this);
+ mObjectsScrollList->setCommitOnSelectionChange(TRUE);
+ mObjectsScrollList->setCommitCallback(boost::bind(&LLFloaterTopObjects::onSelectionChanged, this));
setDefaultBtn("show_beacon_btn");
@@ -421,6 +425,8 @@ void LLFloaterTopObjects::clearList()
mObjectListData.clear();
mObjectListIDs.clear();
mtotalScore = 0.f;
+
+ onSelectionChanged();
}
@@ -507,3 +513,38 @@ void LLFloaterTopObjects::showBeacon()
std::string tooltip("");
LLTracker::trackLocation(pos_global, name, tooltip, LLTracker::LOCATION_ITEM);
}
+
+void LLFloaterTopObjects::teleportToSelectedObject()
+{
+ std::vector<LLScrollListItem*> selected_items = mObjectsScrollList->getAllSelected();
+ if (selected_items.size() == 1)
+ {
+ LLScrollListItem* first_selected = selected_items.front();
+
+ LLVector3d teleport_location;
+ LLViewerObject *viewer_object = gObjectList.findObject(first_selected->getUUID());
+ if (viewer_object == NULL)
+ {
+ // If we cannot find the object in the viewer list, teleport to the last reported position
+ std::string pos_string = first_selected->getColumn(3)->getValue().asString();
+
+ F32 x, y, z;
+ S32 matched = sscanf(pos_string.c_str(), "<%g,%g,%g>", &x, &y, &z);
+ if (matched != 3) return;
+
+ LLVector3 pos_agent(x, y, z);
+ teleport_location = gAgent.getPosGlobalFromAgent(pos_agent);
+ }
+ else
+ {
+ // If we can find the object in the viewer list, teleport to the known current position
+ teleport_location = viewer_object->getPositionGlobal();
+ }
+ gAgent.teleportViaLocationLookAt(teleport_location);
+ }
+}
+
+void LLFloaterTopObjects::onSelectionChanged()
+{
+ getChildView("teleport_btn")->setEnabled(mObjectsScrollList->getNumSelected() == 1);
+}
diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h
index 3138249c7a..b73401e50d 100644
--- a/indra/newview/llfloatertopobjects.h
+++ b/indra/newview/llfloatertopobjects.h
@@ -30,6 +30,7 @@
#include "llfloater.h"
class LLUICtrl;
+class LLScrollListCtrl;
// Bits for simulator performance query flags
enum LAND_STAT_FLAGS
@@ -75,6 +76,7 @@ private:
void initColumns(LLCtrlListInterface *list);
void onCommitObjectsList();
+ void onSelectionChanged();
static void onDoubleClickObjectsList(void* data);
void onClickShowBeacon();
@@ -90,6 +92,7 @@ private:
void onGetByParcelName();
void showBeacon();
+ void teleportToSelectedObject();
private:
std::string mMethod;
@@ -106,6 +109,7 @@ private:
F32 mtotalScore;
static LLFloaterTopObjects* sInstance;
+ LLScrollListCtrl* mObjectsScrollList;
};
#endif
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 704abd269f..8f3ec8af05 100755
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -124,8 +124,10 @@ public:
// requires trusted browser to trigger
LLWorldMapHandler() : LLCommandHandler("worldmap", UNTRUSTED_CLICK_ONLY ) { }
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableWorldMap"))
{
@@ -163,7 +165,10 @@ public:
{
}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableWorldMap"))
{
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 0c8e248538..03c1b6f631 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -741,6 +741,12 @@ void LLViewerParcelMgr::renderCollisionSegments(U8* segments, BOOL use_pass, LLV
gGL.end();
}
+void LLViewerParcelMgr::resetCollisionTimer()
+{
+ mCollisionTimer.reset();
+ mRenderCollision = TRUE;
+}
+
void draw_line_cube(F32 width, const LLVector3& center)
{
width = 0.5f * width;
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index aec6c23e34..043316ccca 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -78,8 +78,10 @@ public:
return true;
}
- bool handle(const LLSD& tokens, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& tokens,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (LLStartUp::getStartupState() < STATE_STARTED)
{
diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp
index 3536b83989..948793681d 100644
--- a/indra/newview/llimprocessing.cpp
+++ b/indra/newview/llimprocessing.cpp
@@ -1631,14 +1631,19 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)
from_group = message_data["from_group"].asString() == "Y";
}
-
+ EInstantMessage dialog = static_cast<EInstantMessage>(message_data["dialog"].asInteger());
+ LLUUID session_id = message_data["transaction-id"].asUUID();
+ if (session_id.isNull() && dialog == IM_FROM_TASK)
+ {
+ session_id = message_data["asset_id"].asUUID();
+ }
LLIMProcessing::processNewMessage(
message_data["from_agent_id"].asUUID(),
from_group,
message_data["to_agent_id"].asUUID(),
message_data.has("offline") ? static_cast<U8>(message_data["offline"].asInteger()) : IM_OFFLINE,
- static_cast<EInstantMessage>(message_data["dialog"].asInteger()),
- message_data["transaction-id"].asUUID(),
+ dialog,
+ session_id,
static_cast<U32>(message_data["timestamp"].asInteger()),
message_data["from_agent_name"].asString(),
message_data["message"].asString(),
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 67240ac7e7..145814ab41 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -213,8 +213,7 @@ bool contains_nocopy_items(const LLUUID& id)
return false;
}
-// Generates a string containing the path to the item specified by
-// item_id.
+// Generates a string containing the path to the item specified by id.
void append_path(const LLUUID& id, std::string& path)
{
std::string temp;
@@ -234,6 +233,36 @@ void append_path(const LLUUID& id, std::string& path)
path.append(temp);
}
+// Generates a string containing the path name of the object.
+std::string make_path(const LLInventoryObject* object)
+{
+ std::string path;
+ append_path(object->getUUID(), path);
+ return path + "/" + object->getName();
+}
+
+// Generates a string containing the path name of the object specified by id.
+std::string make_inventory_path(const LLUUID& id)
+{
+ if (LLInventoryObject* object = gInventory.getObject(id))
+ return make_path(object);
+ return "";
+}
+
+// Generates a string containing the path name and id of the object.
+std::string make_info(const LLInventoryObject* object)
+{
+ return "'" + make_path(object) + "' (" + object->getUUID().asString() + ")";
+}
+
+// Generates a string containing the path name and id of the object specified by id.
+std::string make_inventory_info(const LLUUID& id)
+{
+ if (LLInventoryObject* object = gInventory.getObject(id))
+ return make_info(object);
+ return "<Inventory object not found!> (" + id.asString() + ")";
+}
+
void update_marketplace_folder_hierarchy(const LLUUID cat_id)
{
// When changing the marketplace status of a folder, the only thing that needs to happen is
@@ -1415,6 +1444,7 @@ bool move_item_to_marketplacelistings(LLInventoryItem* inv_item, LLUUID dest_fol
if (copy)
{
// Copy the item
+ LL_INFOS("SLM") << "Copy item '" << make_info(viewer_inv_item) << "' to '" << make_inventory_path(dest_folder) << "'" << LL_ENDL;
LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(update_folder_cb, dest_folder));
copy_inventory_item(
gAgent.getID(),
@@ -1426,6 +1456,7 @@ bool move_item_to_marketplacelistings(LLInventoryItem* inv_item, LLUUID dest_fol
}
else
{
+ LL_INFOS("SLM") << "Move item '" << make_info(viewer_inv_item) << "' to '" << make_inventory_path(dest_folder) << "'" << LL_ENDL;
// Reparent the item
gInventory.changeItemParent(viewer_inv_item, dest_folder, true);
}
@@ -1472,6 +1503,7 @@ bool move_folder_to_marketplacelistings(LLInventoryCategory* inv_cat, const LLUU
}
else
{
+ LL_INFOS("SLM") << "Move category " << make_info(viewer_inv_cat) << " to '" << make_inventory_path(dest_folder) << "'" << LL_ENDL;
// Reparent the folder
gInventory.changeCategoryParent(viewer_inv_cat, dest_folder, false);
// Check the destination folder recursively for no copy items and promote the including folders if any
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index 56ad6f6496..8c8bd789c2 100644
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -78,9 +78,19 @@ void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory*
void copy_inventory_category_content(const LLUUID& new_cat_uuid, LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& root_copy_id, bool move_no_copy_items);
-// Generates a string containing the path to the item specified by item_id.
+// Generates a string containing the path to the object specified by id (not including the object name).
void append_path(const LLUUID& id, std::string& path);
+// Generates a string containing the path name of the object.
+std::string make_path(const LLInventoryObject* object);
+// Generates a string containing the path name of the object specified by id.
+std::string make_inventory_path(const LLUUID& id);
+
+// Generates a string containing the path name and id of the object.
+std::string make_info(const LLInventoryObject* object);
+// Generates a string containing the path name and id of the object specified by id.
+std::string make_inventory_info(const LLUUID& id);
+
typedef boost::function<void(std::string& validation_message, S32 depth, LLError::ELevel log_level)> validation_callback_t;
bool can_move_item_to_marketplace(const LLInventoryCategory* root_folder, LLInventoryCategory* dest_folder, LLInventoryItem* inv_item, std::string& tooltip_msg, S32 bundle_size = 1, bool from_paste = false);
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index b4727de77f..9c4e122481 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -62,6 +62,7 @@
#include "bufferarray.h"
#include "bufferstream.h"
#include "llcorehttputil.h"
+#include "hbxxh.h"
//#define DIFF_INVENTORY_FILES
#ifdef DIFF_INVENTORY_FILES
@@ -451,17 +452,16 @@ void LLInventoryModel::getDirectDescendentsOf(const LLUUID& cat_id,
items = get_ptr_in_map(mParentChildItemTree, cat_id);
}
-LLMD5 LLInventoryModel::hashDirectDescendentNames(const LLUUID& cat_id) const
+LLInventoryModel::digest_t LLInventoryModel::hashDirectDescendentNames(const LLUUID& cat_id) const
{
LLInventoryModel::cat_array_t* cat_array;
LLInventoryModel::item_array_t* item_array;
getDirectDescendentsOf(cat_id,cat_array,item_array);
- LLMD5 item_name_hash;
if (!item_array)
{
- item_name_hash.finalize();
- return item_name_hash;
+ return LLUUID::null;
}
+ HBXXH128 item_name_hash;
for (LLInventoryModel::item_array_t::const_iterator iter = item_array->begin();
iter != item_array->end();
iter++)
@@ -471,8 +471,7 @@ LLMD5 LLInventoryModel::hashDirectDescendentNames(const LLUUID& cat_id) const
continue;
item_name_hash.update(item->getName());
}
- item_name_hash.finalize();
- return item_name_hash;
+ return item_name_hash.digest();
}
// SJB: Added version to lock the arrays to catch potential logic bugs
@@ -673,6 +672,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
const std::string& pname,
inventory_func_type callback)
{
+ LL_DEBUGS(LOG_INV) << "Create '" << pname << "' in '" << make_inventory_path(parent_id) << "'" << LL_ENDL;
LLUUID id;
if (!isInventoryUsable())
{
@@ -764,6 +764,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
cat->packMessage(msg);
gAgent.sendReliableMessage();
+ LL_INFOS(LOG_INV) << "Created new category '" << make_inventory_path(id) << "'" << LL_ENDL;
// return the folder id of the newly created folder
return id;
}
@@ -1352,6 +1353,7 @@ void LLInventoryModel::moveObject(const LLUUID& object_id, const LLUUID& cat_id)
LLPointer<LLViewerInventoryCategory> cat = getCategory(object_id);
if(cat && (cat->getParentUUID() != cat_id))
{
+ LL_DEBUGS(LOG_INV) << "Move category '" << make_path(cat) << "' to '" << make_inventory_path(cat_id) << "'" << LL_ENDL;
cat_array_t* cat_array;
cat_array = getUnlockedCatArray(cat->getParentUUID());
if(cat_array) vector_replace_with_last(*cat_array, cat);
@@ -1364,6 +1366,7 @@ void LLInventoryModel::moveObject(const LLUUID& object_id, const LLUUID& cat_id)
LLPointer<LLViewerInventoryItem> item = getItem(object_id);
if(item && (item->getParentUUID() != cat_id))
{
+ LL_DEBUGS(LOG_INV) << "Move item '" << make_path(item) << "' to '" << make_inventory_path(cat_id) << "'" << LL_ENDL;
item_array_t* item_array;
item_array = getUnlockedItemArray(item->getParentUUID());
if(item_array) vector_replace_with_last(*item_array, item);
@@ -1382,14 +1385,14 @@ void LLInventoryModel::changeItemParent(LLViewerInventoryItem* item,
{
if (item->getParentUUID() == new_parent_id)
{
- LL_DEBUGS(LOG_INV) << "'" << item->getName() << "' (" << item->getUUID()
- << ") is already in folder " << new_parent_id << LL_ENDL;
+ LL_DEBUGS(LOG_INV) << make_info(item) << " is already in folder " << make_inventory_info(new_parent_id) << LL_ENDL;
}
else
{
- LL_INFOS(LOG_INV) << "Moving '" << item->getName() << "' (" << item->getUUID()
- << ") from " << item->getParentUUID() << " to folder "
- << new_parent_id << LL_ENDL;
+ LL_INFOS(LOG_INV) << "Move item " << make_info(item)
+ << " from " << make_inventory_info(item->getParentUUID())
+ << " to " << make_inventory_info(new_parent_id) << LL_ENDL;
+
LLInventoryModel::update_list_t update;
LLInventoryModel::LLCategoryUpdate old_folder(item->getParentUUID(),-1);
update.push_back(old_folder);
@@ -1421,6 +1424,10 @@ void LLInventoryModel::changeCategoryParent(LLViewerInventoryCategory* cat,
return;
}
+ LL_INFOS(LOG_INV) << "Move category " << make_info(cat)
+ << " from " << make_inventory_info(cat->getParentUUID())
+ << " to " << make_inventory_info(new_parent_id) << LL_ENDL;
+
LLInventoryModel::update_list_t update;
LLInventoryModel::LLCategoryUpdate old_folder(cat->getParentUUID(), -1);
update.push_back(old_folder);
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index 685c2c0fe5..6c5706f871 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -39,7 +39,6 @@
#include "llpermissionsflags.h"
#include "llviewerinventory.h"
#include "llstring.h"
-#include "llmd5.h"
#include "httpcommon.h"
#include "httprequest.h"
#include "httpoptions.h"
@@ -257,8 +256,9 @@ public:
cat_array_t*& categories,
item_array_t*& items) const;
+ typedef LLUUID digest_t; // To clarify the actual usage of this "UUID"
// Compute a hash of direct descendant names (for detecting child name changes)
- LLMD5 hashDirectDescendentNames(const LLUUID& cat_id) const;
+ digest_t hashDirectDescendentNames(const LLUUID& cat_id) const;
// Starting with the object specified, add its descendants to the
// array provided, but do not add the inventory object specified
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 26d7a7a28a..db0751cb89 100644
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -640,7 +640,7 @@ void LLInventoryCategoriesObserver::changed(U32 mask)
// computed, or (b) a name has changed.
if (!cat_data.mIsNameHashInitialized || (mask & LLInventoryObserver::LABEL))
{
- LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cat_id);
+ digest_t item_name_hash = gInventory.hashDirectDescendentNames(cat_id);
if (cat_data.mItemNameHash != item_name_hash)
{
cat_data.mIsNameHashInitialized = true;
@@ -701,7 +701,7 @@ bool LLInventoryCategoriesObserver::addCategory(const LLUUID& cat_id, callback_t
{
if(init_name_hash)
{
- LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cat_id);
+ digest_t item_name_hash = gInventory.hashDirectDescendentNames(cat_id);
mCategoryMap.insert(category_map_value_t(cat_id,LLCategoryData(cat_id, cb, version, current_num_known_descendents,item_name_hash)));
}
else
@@ -727,11 +727,10 @@ LLInventoryCategoriesObserver::LLCategoryData::LLCategoryData(
, mDescendentsCount(num_descendents)
, mIsNameHashInitialized(false)
{
- mItemNameHash.finalize();
}
LLInventoryCategoriesObserver::LLCategoryData::LLCategoryData(
- const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, LLMD5 name_hash)
+ const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, const digest_t& name_hash)
: mCatID(cat_id)
, mCallback(cb)
diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h
index 36d8ee3f59..4af8102055 100644
--- a/indra/newview/llinventoryobserver.h
+++ b/indra/newview/llinventoryobserver.h
@@ -28,7 +28,6 @@
#define LL_LLINVENTORYOBSERVERS_H
#include "lluuid.h"
-#include "llmd5.h"
#include <string>
#include <vector>
@@ -271,14 +270,15 @@ public:
void removeCategory(const LLUUID& cat_id);
protected:
+ typedef LLUUID digest_t; // To clarify the actual usage of this "UUID"
struct LLCategoryData
{
LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents);
- LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, LLMD5 name_hash);
+ LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, const digest_t& name_hash);
callback_t mCallback;
S32 mVersion;
S32 mDescendentsCount;
- LLMD5 mItemNameHash;
+ digest_t mItemNameHash;
bool mIsNameHashInitialized;
LLUUID mCatID;
};
diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp
index 22cedf450e..92e341ce93 100644
--- a/indra/newview/llloginhandler.cpp
+++ b/indra/newview/llloginhandler.cpp
@@ -87,6 +87,7 @@ void LLLoginHandler::parse(const LLSD& queryMap)
bool LLLoginHandler::handle(const LLSD& tokens,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web)
{
// do nothing if we are already logged in
diff --git a/indra/newview/llloginhandler.h b/indra/newview/llloginhandler.h
index 1f2eacd094..2579341dbf 100644
--- a/indra/newview/llloginhandler.h
+++ b/indra/newview/llloginhandler.h
@@ -35,7 +35,7 @@ class LLLoginHandler : public LLCommandHandler
public:
// allow from external browsers
LLLoginHandler() : LLCommandHandler("login", UNTRUSTED_ALLOW) { }
- /*virtual*/ bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web);
+ /*virtual*/ bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web);
// Fill in our internal fields from a SLURL like
// secondlife:///app/login?first=Bob&last=Dobbs
diff --git a/indra/newview/llmaterialmgr.h b/indra/newview/llmaterialmgr.h
index 843dc66fbc..8f1ec8584b 100644
--- a/indra/newview/llmaterialmgr.h
+++ b/indra/newview/llmaterialmgr.h
@@ -93,7 +93,11 @@ private:
bool operator==(const TEMaterialPair& b) const { return (materialID == b.materialID) && (te == b.te); }
};
-
+
+ // definitions follow class
+ friend std::hash<TEMaterialPair>;
+ friend size_t hash_value(const TEMaterialPair&) noexcept;
+
friend inline bool operator<(
const LLMaterialMgr::TEMaterialPair& lhs,
const LLMaterialMgr::TEMaterialPair& rhs)
@@ -102,13 +106,6 @@ private:
(lhs.materialID < rhs.materialID);
}
- struct TEMaterialPairHasher
- {
- enum { bucket_size = 8 };
- size_t operator()(const TEMaterialPair& key_value) const { return *((size_t*)key_value.materialID.get()); } // cheesy, but effective
- bool operator()(const TEMaterialPair& left, const TEMaterialPair& right) const { return left < right; }
- };
-
typedef std::set<LLMaterialID> material_queue_t;
typedef std::map<LLUUID, material_queue_t> get_queue_t;
typedef std::pair<const LLUUID, LLMaterialID> pending_material_t;
@@ -116,7 +113,7 @@ private:
typedef std::map<LLMaterialID, get_callback_t*> get_callback_map_t;
- typedef boost::unordered_map<TEMaterialPair, get_callback_te_t*, TEMaterialPairHasher> get_callback_te_map_t;
+ typedef boost::unordered_map<TEMaterialPair, get_callback_te_t*> get_callback_te_map_t;
typedef std::set<LLUUID> getall_queue_t;
typedef std::map<LLUUID, F64> getall_pending_map_t;
typedef std::map<LLUUID, getall_callback_t*> getall_callback_map_t;
@@ -146,5 +143,23 @@ private:
U32 getMaxEntries(const LLViewerRegion* regionp);
};
+// std::hash implementation for TEMaterialPair
+namespace std
+{
+ template<> struct hash<LLMaterialMgr::TEMaterialPair>
+ {
+ inline size_t operator()(const LLMaterialMgr::TEMaterialPair& p) const noexcept
+ {
+ return size_t((p.te + 1) * p.materialID.getDigest64());
+ }
+ };
+}
+
+// For use with boost containers.
+inline size_t hash_value(const LLMaterialMgr::TEMaterialPair& p) noexcept
+{
+ return size_t((p.te + 1) * p.materialID.getDigest64());
+}
+
#endif // LL_LLMATERIALMGR_H
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index f937754368..d6eba6b4bf 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -56,6 +56,7 @@
#include "llviewermessage.h"
#include "llviewerobjectlist.h"
#include "llviewerregion.h"
+#include "llviewerstatsrecorder.h"
#include "llviewertexturelist.h"
#include "llvolume.h"
#include "llvolumemgr.h"
@@ -1862,10 +1863,10 @@ EMeshProcessingResult LLMeshRepoThread::headerReceived(const LLVolumeParams& mes
const LLUUID mesh_id = mesh_params.getSculptID();
LLSD header;
- U32 header_size = 0;
+ llssize header_size = 0;
if (data_size > 0)
{
- U32 dsize = data_size;
+ llssize dsize = data_size;
char* result_ptr = strip_deprecated_header((char*)data, dsize, &header_size);
data_size = dsize;
@@ -4089,6 +4090,8 @@ void LLMeshRepository::notifyMeshLoaded(const LLVolumeParams& mesh_params, LLVol
}
mLoadingMeshes[detail].erase(obj_iter);
+
+ LLViewerStatsRecorder::instance().meshLoaded();
}
}
diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp
index e1a5b22490..495153981b 100644
--- a/indra/newview/llmodelpreview.cpp
+++ b/indra/newview/llmodelpreview.cpp
@@ -2685,9 +2685,6 @@ void LLModelPreview::clearBuffers()
void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)
{
- U32 mesh_count = 0;
-
-
LLModelLoader::model_list* model = NULL;
if (lod < 0 || lod > 4)
@@ -2818,8 +2815,6 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)
vb->flush();
mVertexBuffer[lod][mdl].push_back(vb);
-
- ++mesh_count;
}
}
}
diff --git a/indra/newview/lloutfitobserver.cpp b/indra/newview/lloutfitobserver.cpp
index 5bb69367aa..3ec5bcd9fc 100644
--- a/indra/newview/lloutfitobserver.cpp
+++ b/indra/newview/lloutfitobserver.cpp
@@ -34,7 +34,6 @@
LLOutfitObserver::LLOutfitObserver() :
mCOFLastVersion(LLViewerInventoryCategory::VERSION_UNKNOWN)
{
- mItemNameHash.finalize();
gInventory.addObserver(this);
}
@@ -83,7 +82,7 @@ bool LLOutfitObserver::checkCOF()
return false;
bool cof_changed = false;
- LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cof);
+ LLUUID item_name_hash = gInventory.hashDirectDescendentNames(cof);
if (item_name_hash != mItemNameHash)
{
cof_changed = true;
diff --git a/indra/newview/lloutfitobserver.h b/indra/newview/lloutfitobserver.h
index 77041db68d..2f136d48e8 100644
--- a/indra/newview/lloutfitobserver.h
+++ b/indra/newview/lloutfitobserver.h
@@ -28,7 +28,6 @@
#define LL_OUTFITOBSERVER_H
#include "llsingleton.h"
-#include "llmd5.h"
/**
* Outfit observer facade that provides simple possibility to subscribe on
@@ -78,7 +77,7 @@ protected:
bool mLastOutfitDirtiness;
- LLMD5 mItemNameHash;
+ LLUUID mItemNameHash;
private:
signal_t mBOFReplaced;
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index 0103bf628a..1b4684d073 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -1665,7 +1665,7 @@ class LLMetricSystemHandler : public LLCommandHandler
public:
LLMetricSystemHandler() : LLCommandHandler("metricsystem", UNTRUSTED_CLICK_ONLY) { }
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
// change height units TRUE for meters and FALSE for feet
BOOL new_value = (gSavedSettings.getBOOL("HeightUnits") == FALSE) ? TRUE : FALSE;
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index b14fdbf38e..8f1e57e44c 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -97,7 +97,7 @@ class LLLoginLocationAutoHandler : public LLCommandHandler
public:
// don't allow from external browsers
LLLoginLocationAutoHandler() : LLCommandHandler("location_login", UNTRUSTED_BLOCK) { }
- bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP)
{
diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp
index 02911313ed..3c3cd5d522 100644
--- a/indra/newview/llpanelnearbymedia.cpp
+++ b/indra/newview/llpanelnearbymedia.cpp
@@ -619,7 +619,6 @@ void LLPanelNearByMedia::refreshList()
LLViewerMedia::impl_list impls = media_inst->getPriorityList();
LLViewerMedia::impl_list::iterator priority_iter;
- U32 enabled_count = 0;
U32 disabled_count = 0;
// iterate over the impl list, creating rows as necessary.
@@ -662,13 +661,10 @@ void LLPanelNearByMedia::refreshList()
{
disabled_count++;
}
- else {
- enabled_count++;
}
}
- }
mDisableAllCtrl->setEnabled((gSavedSettings.getBOOL("AudioStreamingMusic") ||
- gSavedSettings.getBOOL("AudioStreamingMedia")) &&
+ gSavedSettings.getBOOL("AudioStreamingMedia")) &&
(media_inst->isAnyMediaShowing() ||
media_inst->isParcelMediaPlaying() ||
media_inst->isParcelAudioPlaying()));
diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp
index 3e770958da..67f913a067 100644
--- a/indra/newview/llpanelpermissions.cpp
+++ b/indra/newview/llpanelpermissions.cpp
@@ -76,30 +76,34 @@ std::string click_action_to_string_value( U8 action);
U8 string_value_to_click_action(std::string p_value)
{
- if(p_value == "Touch")
+ if (p_value == "Touch")
{
return CLICK_ACTION_TOUCH;
}
- if(p_value == "Sit")
+ if (p_value == "Sit")
{
return CLICK_ACTION_SIT;
}
- if(p_value == "Buy")
+ if (p_value == "Buy")
{
return CLICK_ACTION_BUY;
}
- if(p_value == "Pay")
+ if (p_value == "Pay")
{
return CLICK_ACTION_PAY;
}
- if(p_value == "Open")
+ if (p_value == "Open")
{
return CLICK_ACTION_OPEN;
}
- if(p_value == "Zoom")
+ if (p_value == "Zoom")
{
return CLICK_ACTION_ZOOM;
}
+ if (p_value == "Ignore")
+ {
+ return CLICK_ACTION_IGNORE;
+ }
if (p_value == "None")
{
return CLICK_ACTION_DISABLED;
@@ -130,6 +134,9 @@ std::string click_action_to_string_value( U8 action)
case CLICK_ACTION_ZOOM:
return "Zoom";
break;
+ case CLICK_ACTION_IGNORE:
+ return "Ignore";
+ break;
case CLICK_ACTION_DISABLED:
return "None";
break;
@@ -274,12 +281,12 @@ void LLPanelPermissions::disableAll()
combo_click_action->setEnabled(FALSE);
combo_click_action->clear();
}
- getChildView("B:")->setVisible( FALSE);
- getChildView("O:")->setVisible( FALSE);
- getChildView("G:")->setVisible( FALSE);
- getChildView("E:")->setVisible( FALSE);
- getChildView("N:")->setVisible( FALSE);
- getChildView("F:")->setVisible( FALSE);
+ getChildView("B:")->setVisible(FALSE);
+ getChildView("O:")->setVisible(FALSE);
+ getChildView("G:")->setVisible(FALSE);
+ getChildView("E:")->setVisible(FALSE);
+ getChildView("N:")->setVisible(FALSE);
+ getChildView("F:")->setVisible(FALSE);
}
void LLPanelPermissions::refresh()
@@ -949,19 +956,19 @@ void LLPanelPermissions::refresh()
getChild<LLUICtrl>("search_check")->setValue(include_in_search);
getChild<LLUICtrl>("search_check")->setTentative( !all_include_in_search);
- // Click action (touch, sit, buy)
+ // Click action (touch, sit, buy, pay, open, play, open media, zoom, ignore)
U8 click_action = 0;
if (LLSelectMgr::getInstance()->selectionGetClickAction(&click_action))
{
LLComboBox* combo_click_action = getChild<LLComboBox>("clickaction");
- if(combo_click_action)
+ if (combo_click_action)
{
const std::string combo_value = click_action_to_string_value(click_action);
combo_click_action->setValue(LLSD(combo_value));
}
}
- if(LLSelectMgr::getInstance()->getSelection()->isAttachment())
+ if (LLSelectMgr::getInstance()->getSelection()->isAttachment())
{
getChildView("checkbox for sale")->setEnabled(FALSE);
getChildView("Edit Cost")->setEnabled(FALSE);
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 0f00231643..1d5ed93c4d 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -91,8 +91,10 @@ class LLParcelHandler : public LLCommandHandler
public:
// requires trusted browser to trigger
LLParcelHandler() : LLCommandHandler("parcel", UNTRUSTED_THROTTLE) { }
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (params.size() < 2)
{
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index 8ac1efe8e7..7aabd5247a 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -461,8 +461,10 @@ public:
// requires trusted browser to trigger
LLProfileHandler() : LLCommandHandler("profile", UNTRUSTED_THROTTLE) { }
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (params.size() < 1) return false;
std::string agent_name = params[0];
@@ -509,8 +511,10 @@ public:
return false;
}
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (params.size() < 2) return false;
LLUUID avatar_id;
diff --git a/indra/newview/llpanelprofileclassifieds.cpp b/indra/newview/llpanelprofileclassifieds.cpp
index 1ff12b4f37..dec6cfd83b 100644
--- a/indra/newview/llpanelprofileclassifieds.cpp
+++ b/indra/newview/llpanelprofileclassifieds.cpp
@@ -106,7 +106,7 @@ public:
return true;
}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (LLStartUp::getStartupState() < STATE_STARTED)
{
diff --git a/indra/newview/llpanelprofilepicks.cpp b/indra/newview/llpanelprofilepicks.cpp
index db3a3c6de5..0535036cb0 100644
--- a/indra/newview/llpanelprofilepicks.cpp
+++ b/indra/newview/llpanelprofilepicks.cpp
@@ -87,8 +87,10 @@ public:
return true;
}
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (LLStartUp::getStartupState() < STATE_STARTED)
{
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index 33656566d1..095d5a0a1e 100644
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -39,7 +39,9 @@
#include "llinventorydefines.h"
#include "llinventorymodel.h"
#include "lllineeditor.h"
+#include "llmd5.h"
#include "llnotificationsutil.h"
+#include "llmd5.h"
#include "llresmgr.h"
#include "roles_constants.h"
#include "llscrollbar.h"
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index d677a996c1..23c6cc01f5 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -40,6 +40,7 @@
#include "llinventorymodel.h"
#include "llkeyboard.h"
#include "lllineeditor.h"
+#include "llmd5.h"
#include "llhelp.h"
#include "llnotificationsutil.h"
#include "llresmgr.h"
diff --git a/indra/newview/llsceneview.cpp b/indra/newview/llsceneview.cpp
index 5e339a52bf..9b1d2d48c6 100644
--- a/indra/newview/llsceneview.cpp
+++ b/indra/newview/llsceneview.cpp
@@ -100,8 +100,6 @@ void LLSceneView::draw()
F32 total_physics[] = { 0.f, 0.f };
- U32 object_count = 0;
-
LLViewerRegion* region = gAgent.getRegion();
if (region)
{
@@ -116,8 +114,7 @@ void LLSceneView::draw()
U32 idx = object->isAttachment() ? 1 : 0;
LLVolume* volume = object->getVolume();
- object_count++;
-
+
F32 radius = object->getScale().magVec();
size[idx].push_back(radius);
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 86f7d2bf25..195b172102 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -5274,8 +5274,8 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle,
LLViewerRegion* last_region;
LLViewerRegion* current_region;
- S32 objects_sent = 0;
- S32 packets_sent = 0;
+// S32 objects_sent = 0;
+// S32 packets_sent = 0;
S32 objects_in_this_packet = 0;
bool link_operation = message_name == "ObjectLink";
@@ -5407,7 +5407,7 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle,
(*pack_body)(node, user_data);
// do any related logging
(*log_func)(node, user_data);
- ++objects_sent;
+// ++objects_sent;
++objects_in_this_packet;
// and on to the next object
@@ -5425,7 +5425,7 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle,
{
// otherwise send current message and start new one
gMessageSystem->sendReliable( last_region->getHost());
- packets_sent++;
+// packets_sent++;
objects_in_this_packet = 0;
gMessageSystem->newMessage(message_name.c_str());
@@ -5442,7 +5442,7 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle,
{
// add root instance into new message
(*pack_body)(linkset_root, user_data);
- ++objects_sent;
+// ++objects_sent;
++objects_in_this_packet;
}
}
@@ -5456,7 +5456,7 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle,
if (gMessageSystem->getCurrentSendTotal() > 0)
{
gMessageSystem->sendReliable( current_region->getHost());
- packets_sent++;
+// packets_sent++;
}
else
{
diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp
index b1eed81476..f5212a3026 100644
--- a/indra/newview/llsettingsvo.cpp
+++ b/indra/newview/llsettingsvo.cpp
@@ -312,7 +312,7 @@ void LLSettingsVOBase::onAssetDownloadComplete(const LLUUID &asset_id, S32 statu
std::stringstream llsdstream(buffer);
LLSD llsdsettings;
- if (LLSDSerialize::deserialize(llsdsettings, llsdstream, -1))
+ if (LLSDSerialize::deserialize(llsdsettings, llsdstream, LLSDSerialize::SIZE_UNLIMITED))
{
settings = createFromLLSD(llsdsettings);
}
@@ -379,7 +379,7 @@ LLSettingsBase::ptr_t LLSettingsVOBase::importFile(const std::string &filename)
return LLSettingsBase::ptr_t();
}
- if (!LLSDSerialize::deserialize(settings, file, -1))
+ if (!LLSDSerialize::deserialize(settings, file, LLSDSerialize::SIZE_UNLIMITED))
{
LL_WARNS("SETTINGS") << "Unable to deserialize settings from '" << filename << "'" << LL_ENDL;
return LLSettingsBase::ptr_t();
diff --git a/indra/newview/llshareavatarhandler.cpp b/indra/newview/llshareavatarhandler.cpp
index 142e00c3f7..8c5ebb75ef 100644
--- a/indra/newview/llshareavatarhandler.cpp
+++ b/indra/newview/llshareavatarhandler.cpp
@@ -38,7 +38,7 @@ public:
{
}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableAvatarShare"))
{
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index 7fa06f51e3..225751ab92 100644
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -849,7 +849,7 @@ void LLSidepanelTaskInfo::refresh()
const BOOL all_include_in_search = LLSelectMgr::getInstance()->selectionGetIncludeInSearch(&include_in_search);
getChildView("search_check")->setEnabled(has_change_sale_ability && all_volume);
getChild<LLUICtrl>("search_check")->setValue(include_in_search);
- getChild<LLUICtrl>("search_check")->setTentative( !all_include_in_search);
+ getChild<LLUICtrl>("search_check")->setTentative(!all_include_in_search);
// Click action (touch, sit, buy)
U8 click_action = 0;
@@ -1150,7 +1150,8 @@ static U8 string_value_to_click_action(std::string p_value)
void LLSidepanelTaskInfo::onCommitClickAction(LLUICtrl* ctrl, void*)
{
LLComboBox* box = (LLComboBox*)ctrl;
- if (!box) return;
+ if (!box)
+ return;
std::string value = box->getValue().asString();
U8 click_action = string_value_to_click_action(value);
doClickAction(click_action);
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index 42cd1133a2..17c834326c 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -237,6 +237,59 @@ BOOL LLSpatialGroup::updateInGroup(LLDrawable *drawablep, BOOL immediate)
return FALSE;
}
+void LLSpatialGroup::expandExtents(const LLVector4a* addingExtents, const LLXformMatrix& currentTransform)
+{
+ // Get coordinates of the adding extents
+ const LLVector4a& min = addingExtents[0];
+ const LLVector4a& max = addingExtents[1];
+
+ // Get coordinates of all corners of the bounding box
+ LLVector3 corners[] =
+ {
+ LLVector3(min[0], min[1], min[2]),
+ LLVector3(min[0], min[1], max[2]),
+ LLVector3(min[0], max[1], min[2]),
+ LLVector3(min[0], max[1], max[2]),
+ LLVector3(max[0], min[1], min[2]),
+ LLVector3(max[0], min[1], max[2]),
+ LLVector3(max[0], max[1], min[2]),
+ LLVector3(max[0], max[1], max[2])
+ };
+
+ // New extents (to be expanded)
+ LLVector3 extents[] =
+ {
+ LLVector3(mExtents[0].getF32ptr()),
+ LLVector3(mExtents[1].getF32ptr())
+ };
+
+ LLQuaternion backwardRotation = ~currentTransform.getRotation();
+ for (LLVector3& corner : corners)
+ {
+ // Make coordinates relative to the current position
+ corner -= currentTransform.getPosition();
+ // Rotate coordinates backward to the current rotation
+ corner.rotVec(backwardRotation);
+ // Expand root extents on the current corner
+ for (int j = 0; j < 3; ++j)
+ {
+ if (corner[j] < extents[0][j])
+ extents[0][j] = corner[j];
+ if (corner[j] > extents[1][j])
+ extents[1][j] = corner[j];
+ }
+ }
+
+ // Set new expanded extents
+ mExtents[0].load3(extents[0].mV);
+ mExtents[1].load3(extents[1].mV);
+
+ // Calculate new center and size
+ mBounds[0].setAdd(mExtents[0], mExtents[1]);
+ mBounds[0].mul(0.5f);
+ mBounds[1].setSub(mExtents[0], mExtents[1]);
+ mBounds[1].mul(0.5f);
+}
BOOL LLSpatialGroup::addObject(LLDrawable *drawablep)
{
@@ -3950,6 +4003,11 @@ public:
if (vobj)
{
+ if (vobj->getClickAction() == CLICK_ACTION_IGNORE && !LLFloater::isVisible(gFloaterTools))
+ {
+ return false;
+ }
+
LLVector4a intersection;
bool skip_check = false;
if (vobj->isAvatar())
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index 6d3ef33801..cdb591083c 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -298,6 +298,7 @@ public:
BOOL addObject(LLDrawable *drawablep);
BOOL removeObject(LLDrawable *drawablep, BOOL from_octree = FALSE);
BOOL updateInGroup(LLDrawable *drawablep, BOOL immediate = FALSE); // Update position if it's in the group
+ void expandExtents(const LLVector4a* addingExtents, const LLXformMatrix& currentTransform);
void shift(const LLVector4a &offset);
void destroyGL(bool keep_occlusion = false);
@@ -699,8 +700,10 @@ public:
class LLControlAVBridge : public LLVolumeBridge
{
+ using super = LLVolumeBridge;
public:
LLControlAVBridge(LLDrawable* drawablep, LLViewerRegion* regionp);
+ virtual void updateSpatialExtents();
};
class LLHUDBridge : public LLVolumeBridge
diff --git a/indra/newview/llsprite.cpp b/indra/newview/llsprite.cpp
index c3eb70f850..fd41cdf0d7 100644
--- a/indra/newview/llsprite.cpp
+++ b/indra/newview/llsprite.cpp
@@ -79,7 +79,6 @@ void LLSprite::updateFace(LLFace &face)
// First, figure out how many vertices/indices we need.
U32 num_vertices, num_indices;
- U32 vertex_count = 0;
// Get the total number of vertices and indices
if (mFollow)
@@ -203,25 +202,21 @@ void LLSprite::updateFace(LLFace &face)
*verticesp = mC;
tex_coordsp++;
verticesp++;
- vertex_count++;
*tex_coordsp = LLVector2(0.f, 1.f);
*verticesp = mB;
tex_coordsp++;
verticesp++;
- vertex_count++;
*tex_coordsp = LLVector2(1.f, 1.f);
*verticesp = mA;
tex_coordsp++;
verticesp++;
- vertex_count++;
*tex_coordsp = LLVector2(1.f, 0.0f);
*verticesp = mD;
tex_coordsp++;
verticesp++;
- vertex_count++;
// Generate indices, since they're easy.
// Just a series of quads.
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 75cbe94592..1b0a814c45 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -663,9 +663,22 @@ bool idle_startup()
#else
void* window_handle = NULL;
#endif
- bool init = gAudiop->init(window_handle, LLAppViewer::instance()->getSecondLifeTitle());
- if(init)
+ if (gAudiop->init(window_handle, LLAppViewer::instance()->getSecondLifeTitle()))
{
+ if (FALSE == gSavedSettings.getBOOL("UseMediaPluginsForStreamingAudio"))
+ {
+ LL_INFOS("AppInit") << "Using default impl to render streaming audio" << LL_ENDL;
+ gAudiop->setStreamingAudioImpl(gAudiop->createDefaultStreamingAudioImpl());
+ }
+
+ // if the audio engine hasn't set up its own preferred handler for streaming audio
+ // then set up the generic streaming audio implementation which uses media plugins
+ if (NULL == gAudiop->getStreamingAudioImpl())
+ {
+ LL_INFOS("AppInit") << "Using media plugins to render streaming audio" << LL_ENDL;
+ gAudiop->setStreamingAudioImpl(new LLStreamingAudio_MediaPlugins());
+ }
+
gAudiop->setMuted(TRUE);
}
else
@@ -674,16 +687,6 @@ bool idle_startup()
delete gAudiop;
gAudiop = NULL;
}
-
- if (gAudiop)
- {
- // if the audio engine hasn't set up its own preferred handler for streaming audio then set up the generic streaming audio implementation which uses media plugins
- if (NULL == gAudiop->getStreamingAudioImpl())
- {
- LL_INFOS("AppInit") << "Using media plugins to render streaming audio" << LL_ENDL;
- gAudiop->setStreamingAudioImpl(new LLStreamingAudio_MediaPlugins());
- }
- }
}
}
@@ -3260,7 +3263,7 @@ LLSD transform_cert_args(LLPointer<LLCertificate> cert)
// are actually arrays, and we want to format them as comma separated
// strings, so special case those.
LLSDSerialize::toXML(cert_info[iter->first], std::cout);
- if((iter->first== std::string(CERT_KEY_USAGE)) |
+ if((iter->first == std::string(CERT_KEY_USAGE)) ||
(iter->first == std::string(CERT_EXTENDED_KEY_USAGE)))
{
value = "";
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 0a87b14e17..1ef5d1c50b 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -729,7 +729,7 @@ class LLBalanceHandler : public LLCommandHandler
public:
// Requires "trusted" browser/URL source
LLBalanceHandler() : LLCommandHandler("balance", UNTRUSTED_BLOCK) { }
- bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& tokens, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (tokens.size() == 1
&& tokens[0].asString() == "request")
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 6f6ca2be9b..a1beec7c1f 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -2183,7 +2183,6 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
LL_DEBUGS(LOG_TXT) << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << LL_ENDL;
if (data_size > 0)
{
- LLViewerStatsRecorder::instance().textureFetch(data_size);
// *TODO: set the formatted image data here directly to avoid the copy
// Hold on to body for later copy
@@ -2249,6 +2248,13 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
mHaveAllData = TRUE;
}
mRequestedSize = data_size;
+
+ if (mHaveAllData)
+ {
+ LLViewerStatsRecorder::instance().textureFetch();
+ }
+
+ // *TODO: set the formatted image data here directly to avoid the copy
}
else
{
@@ -2258,11 +2264,6 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
mLoaded = TRUE;
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
- if (LLViewerStatsRecorder::instanceExists())
- {
- // Do not create this instance inside thread
- LLViewerStatsRecorder::instance().log(0.2f);
- }
return data_size ;
}
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index cf9211767e..84b61fc612 100644
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -845,8 +845,8 @@ void LLTextureView::draw()
if (imagep->getID() == LLAppViewer::getTextureFetch()->mDebugID)
{
- static S32 debug_count = 0;
- ++debug_count; // for breakpoints
+// static S32 debug_count = 0;
+// ++debug_count; // for breakpoints
}
F32 pri;
diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp
index 0da769999b..76fb138768 100644
--- a/indra/newview/llurldispatcher.cpp
+++ b/indra/newview/llurldispatcher.cpp
@@ -97,6 +97,8 @@ private:
// Called by LLWorldMap when a region name has been resolved to a
// location in-world, used by places-panel display.
+ static bool handleGrid(const LLSLURL& slurl);
+
friend class LLTeleportHandler;
};
@@ -155,7 +157,7 @@ bool LLURLDispatcherImpl::dispatchApp(const LLSLURL& slurl,
LL_INFOS() << "cmd: " << slurl.getAppCmd() << " path: " << slurl.getAppPath() << " query: " << slurl.getAppQuery() << LL_ENDL;
const LLSD& query_map = LLURI::queryMap(slurl.getAppQuery());
bool handled = LLCommandDispatcher::dispatch(
- slurl.getAppCmd(), slurl.getAppPath(), query_map, web, nav_type, trusted_browser);
+ slurl.getAppCmd(), slurl.getAppPath(), query_map, slurl.getGrid(), web, nav_type, trusted_browser);
// alert if we didn't handle this secondlife:///app/ SLURL
// (but still return true because it is a valid app SLURL)
@@ -184,6 +186,11 @@ bool LLURLDispatcherImpl::dispatchRegion(const LLSLURL& slurl, const std::string
return true;
}
+ if (!handleGrid(slurl))
+ {
+ return true;
+ }
+
// Request a region handle by name
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(slurl.getRegion(),
LLURLDispatcherImpl::regionNameCallback,
@@ -202,31 +209,39 @@ void LLURLDispatcherImpl::regionNameCallback(U64 region_handle, const LLSLURL& s
}
}
+bool LLURLDispatcherImpl::handleGrid(const LLSLURL& slurl)
+{
+ if (LLGridManager::getInstance()->getGrid(slurl.getGrid())
+ != LLGridManager::getInstance()->getGrid())
+ {
+ LLSD args;
+ args["SLURL"] = slurl.getLocationString();
+ args["CURRENT_GRID"] = LLGridManager::getInstance()->getGridLabel();
+ std::string grid_label =
+ LLGridManager::getInstance()->getGridLabel(slurl.getGrid());
+
+ if (!grid_label.empty())
+ {
+ args["GRID"] = grid_label;
+ }
+ else
+ {
+ args["GRID"] = slurl.getGrid();
+ }
+ LLNotificationsUtil::add("CantTeleportToGrid", args);
+ return false;
+ }
+ return true;
+}
+
/* static */
void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const LLSLURL& slurl, const LLUUID& snapshot_id, bool teleport)
{
-
- // we can't teleport cross grid at this point
- if( LLGridManager::getInstance()->getGrid(slurl.getGrid())
- != LLGridManager::getInstance()->getGrid())
- {
- LLSD args;
- args["SLURL"] = slurl.getLocationString();
- args["CURRENT_GRID"] = LLGridManager::getInstance()->getGridLabel();
- std::string grid_label =
- LLGridManager::getInstance()->getGridLabel(slurl.getGrid());
-
- if(!grid_label.empty())
- {
- args["GRID"] = grid_label;
- }
- else
- {
- args["GRID"] = slurl.getGrid();
- }
- LLNotificationsUtil::add("CantTeleportToGrid", args);
- return;
- }
+ if (!handleGrid(slurl))
+ {
+ // we can't teleport cross grid at this point
+ return;
+ }
LLVector3d global_pos = from_region_handle(region_handle);
global_pos += LLVector3d(slurl.getPosition());
@@ -274,8 +289,10 @@ public:
&LLTeleportHandler::from_event);
}
- bool handle(const LLSD& tokens, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& tokens,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
// construct a "normal" SLURL, resolve the region to
// a global position, and teleport to it
@@ -297,7 +314,7 @@ public:
LLSD payload;
payload["region_name"] = region_name;
- payload["callback_url"] = LLSLURL(region_name, coords).getSLURLString();
+ payload["callback_url"] = LLSLURL(grid, region_name, coords).getSLURLString();
LLNotificationsUtil::add("TeleportViaSLAPP", args, payload);
return true;
diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp
index cc73f7ca80..6a0edbecb1 100644
--- a/indra/newview/llvieweraudio.cpp
+++ b/indra/newview/llvieweraudio.cpp
@@ -91,17 +91,18 @@ void LLViewerAudio::startInternetStreamWithAutoFade(const std::string &streamURI
return;
}
- // Record the URI we are going to be switching to
+ if (!gAudiop)
+ {
+ LL_WARNS("AudioEngine") << "LLAudioEngine instance doesn't exist!" << LL_ENDL;
+ return;
+ }
+
+ // Record the URI we are going to be switching to
mNextStreamURI = streamURI;
switch (mFadeState)
{
case FADE_IDLE:
- if (!gAudiop)
- {
- LL_WARNS("AudioEngine") << "LLAudioEngine instance doesn't exist!" << LL_ENDL;
- break;
- }
// If a stream is playing fade it out first
if (!gAudiop->getInternetStreamURL().empty())
{
@@ -114,28 +115,28 @@ void LLViewerAudio::startInternetStreamWithAutoFade(const std::string &streamURI
mFadeState = FADE_IN;
LLStreamingAudioInterface *stream = gAudiop->getStreamingAudioImpl();
- if(stream && stream->supportsAdjustableBufferSizes())
- stream->setBufferSizes(gSavedSettings.getU32("FMODExStreamBufferSize"),gSavedSettings.getU32("FMODExDecodeBufferSize"));
+ if (stream && stream->supportsAdjustableBufferSizes())
+ stream->setBufferSizes(gSavedSettings.getU32("FMODExStreamBufferSize"), gSavedSettings.getU32("FMODExDecodeBufferSize"));
gAudiop->startInternetStream(mNextStreamURI);
- startFading();
- registerIdleListener();
- break;
}
+ startFading();
+ break;
+
case FADE_OUT:
startFading();
- registerIdleListener();
break;
case FADE_IN:
- registerIdleListener();
break;
default:
LL_WARNS() << "Unknown fading state: " << mFadeState << LL_ENDL;
- break;
+ return;
}
+
+ registerIdleListener();
}
// A return of false from onIdleUpdate means it will be called again next idle update.
@@ -236,15 +237,12 @@ void LLViewerAudio::startFading()
// This minimum fade time prevents divide by zero and negative times
const F32 AUDIO_MUSIC_MINIMUM_FADE_TIME = 0.01f;
- if(mDone)
+ if (mDone)
{
// The fade state here should only be one of FADE_IN or FADE_OUT, but, in case it is not,
// rather than check for both states assume a fade in and check for the fade out case.
- mFadeTime = AUDIO_MUSIC_FADE_IN_TIME;
- if (LLViewerAudio::getInstance()->getFadeState() == LLViewerAudio::FADE_OUT)
- {
- mFadeTime = AUDIO_MUSIC_FADE_OUT_TIME;
- }
+ mFadeTime = LLViewerAudio::getInstance()->getFadeState() == LLViewerAudio::FADE_OUT ?
+ AUDIO_MUSIC_FADE_OUT_TIME : AUDIO_MUSIC_FADE_IN_TIME;
// Prevent invalid fade time
mFadeTime = llmax(mFadeTime, AUDIO_MUSIC_MINIMUM_FADE_TIME);
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 92c862d530..0f2fe1e1cd 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -272,6 +272,7 @@ public:
bool handle(
const LLSD& params,
const LLSD& query_map,
+ const std::string& grid,
LLMediaCtrl* web) override
{
if (params.size() != 1)
diff --git a/indra/newview/llviewerhelp.cpp b/indra/newview/llviewerhelp.cpp
index 3273090da5..3181ae6283 100644
--- a/indra/newview/llviewerhelp.cpp
+++ b/indra/newview/llviewerhelp.cpp
@@ -45,7 +45,7 @@ public:
// requests will be throttled from a non-trusted browser
LLHelpHandler() : LLCommandHandler("help", UNTRUSTED_CLICK_ONLY) {}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
LLViewerHelp* vhelp = LLViewerHelp::getInstance();
if (! vhelp)
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 50252556de..793eb56734 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -234,8 +234,10 @@ public:
// requires trusted browser to trigger
LLInventoryHandler() : LLCommandHandler("inventory", UNTRUSTED_CLICK_ONLY) { }
- bool handle(const LLSD& params, const LLSD& query_map,
- LLMediaCtrl* web)
+ bool handle(const LLSD& params,
+ const LLSD& query_map,
+ const std::string& grid,
+ LLMediaCtrl* web)
{
if (params.size() < 1)
{
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 84396c2c68..cc59e559e9 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -119,8 +119,10 @@
#include "llviewerobjectlist.h"
#include "llviewerparcelmgr.h"
#include "llviewerstats.h"
+#include "llviewerstatsrecorder.h"
#include "llvoavatarself.h"
#include "llvoicevivox.h"
+#include "llworld.h"
#include "llworldmap.h"
#include "pipeline.h"
#include "llviewerjoystick.h"
@@ -328,6 +330,7 @@ void handle_debug_avatar_textures(void*);
void handle_grab_baked_texture(void*);
BOOL enable_grab_baked_texture(void*);
void handle_dump_region_object_cache(void*);
+void handle_reset_interest_lists(void *);
BOOL enable_save_into_task_inventory(void*);
@@ -1291,49 +1294,66 @@ class LLAdvancedDumpRegionObjectCache : public view_listener_t
}
};
-class LLAdvancedInterestListFullUpdate : public view_listener_t
+class LLAdvancedToggleInterestList360Mode : public view_listener_t
+{
+public:
+ bool handleEvent(const LLSD &userdata)
+ {
+ // Toggle the mode - regions will get updated
+ if (gAgent.getInterestListMode() == LLViewerRegion::IL_MODE_360)
+ {
+ gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_DEFAULT);
+ }
+ else
+ {
+ gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_360);
+ }
+ return true;
+ }
+};
+
+class LLAdvancedCheckInterestList360Mode : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- LLSD request;
- LLSD body;
- static bool using_360 = false;
+ return (gAgent.getInterestListMode() == LLViewerRegion::IL_MODE_360);
+ }
+};
- if (using_360)
- {
- body["mode"] = LLSD::String("default");
+class LLAdvancedToggleStatsRecorder : public view_listener_t
+{
+ bool handleEvent(const LLSD &userdata)
+ {
+ if (LLViewerStatsRecorder::instance().isEnabled())
+ { // Turn off both recording and logging
+ LLViewerStatsRecorder::instance().enableObjectStatsRecording(false);
}
else
- {
- body["mode"] = LLSD::String("360");
+ { // Turn on both recording and logging
+ LLViewerStatsRecorder::instance().enableObjectStatsRecording(true, true);
}
- using_360 = !using_360;
+ return true;
+ }
+};
- if (gAgent.requestPostCapability("InterestList", body, [](const LLSD& response)
- {
- LL_INFOS("360Capture") <<
- "InterestList capability responded: \n" <<
- ll_pretty_print_sd(response) <<
- LL_ENDL;
- }))
- {
- LL_INFOS("360Capture") <<
- "Successfully posted an InterestList capability request with payload: \n" <<
- ll_pretty_print_sd(body) <<
- LL_ENDL;
- return true;
- }
- else
- {
- LL_INFOS("360Capture") <<
- "Unable to post an InterestList capability request with payload: \n" <<
- ll_pretty_print_sd(body) <<
- LL_ENDL;
- return false;
- }
- }
+class LLAdvancedCheckStatsRecorder : public view_listener_t
+{
+ bool handleEvent(const LLSD &userdata)
+ { // Use the logging state as the indicator of whether the stats recorder is on
+ return LLViewerStatsRecorder::instance().isLogging();
+ }
+};
+
+class LLAdvancedResetInterestLists : public view_listener_t
+{
+ bool handleEvent(const LLSD &userdata)
+ { // Reset all region interest lists
+ handle_reset_interest_lists(NULL);
+ return true;
+ }
};
+
class LLAdvancedBuyCurrencyTest : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@@ -3885,6 +3905,22 @@ void handle_dump_region_object_cache(void*)
}
}
+void handle_reset_interest_lists(void *)
+{
+ // Check all regions and reset their interest list
+ for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
+ iter != LLWorld::getInstance()->getRegionList().end();
+ ++iter)
+ {
+ LLViewerRegion *regionp = *iter;
+ if (regionp && regionp->isAlive() && regionp->capabilitiesReceived())
+ {
+ regionp->resetInterestList();
+ }
+ }
+}
+
+
void handle_dump_focus()
{
LLUICtrl *ctrl = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus());
@@ -4495,33 +4531,6 @@ void handle_duplicate_in_place(void*)
LLSelectMgr::getInstance()->selectDuplicate(offset, TRUE);
}
-/* dead code 30-apr-2008
-void handle_deed_object_to_group(void*)
-{
- LLUUID group_id;
-
- LLSelectMgr::getInstance()->selectGetGroup(group_id);
- LLSelectMgr::getInstance()->sendOwner(LLUUID::null, group_id, FALSE);
- LLViewerStats::getInstance()->incStat(LLViewerStats::ST_RELEASE_COUNT);
-}
-
-BOOL enable_deed_object_to_group(void*)
-{
- if(LLSelectMgr::getInstance()->getSelection()->isEmpty()) return FALSE;
- LLPermissions perm;
- LLUUID group_id;
-
- if (LLSelectMgr::getInstance()->selectGetGroup(group_id) &&
- gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) &&
- LLSelectMgr::getInstance()->selectGetPermissions(perm) &&
- perm.deedToGroup(gAgent.getID(), group_id))
- {
- return TRUE;
- }
- return FALSE;
-}
-
-*/
/*
@@ -9065,6 +9074,25 @@ class LLWorldPostProcess : public view_listener_t
}
};
+class LLWorldCheckBanLines : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ S32 callback_data = userdata.asInteger();
+ return gSavedSettings.getS32("ShowBanLines") == callback_data;
+ }
+};
+
+class LLWorldShowBanLines : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ S32 callback_data = userdata.asInteger();
+ gSavedSettings.setS32("ShowBanLines", callback_data);
+ return true;
+ }
+};
+
void handle_flush_name_caches()
{
if (gCacheName) gCacheName->clear();
@@ -9354,6 +9382,8 @@ void initialize_menus()
view_listener_t::addMenu(new LLWorldEnvPreset(), "World.EnvPreset");
view_listener_t::addMenu(new LLWorldEnableEnvPreset(), "World.EnableEnvPreset");
view_listener_t::addMenu(new LLWorldPostProcess(), "World.PostProcess");
+ view_listener_t::addMenu(new LLWorldCheckBanLines() , "World.CheckBanLines");
+ view_listener_t::addMenu(new LLWorldShowBanLines() , "World.ShowBanLines");
// Tools menu
view_listener_t::addMenu(new LLToolsSelectTool(), "Tools.SelectTool");
@@ -9451,7 +9481,11 @@ void initialize_menus()
// Advanced > World
view_listener_t::addMenu(new LLAdvancedDumpScriptedCamera(), "Advanced.DumpScriptedCamera");
view_listener_t::addMenu(new LLAdvancedDumpRegionObjectCache(), "Advanced.DumpRegionObjectCache");
- view_listener_t::addMenu(new LLAdvancedInterestListFullUpdate(), "Advanced.InterestListFullUpdate");
+ view_listener_t::addMenu(new LLAdvancedToggleStatsRecorder(), "Advanced.ToggleStatsRecorder");
+ view_listener_t::addMenu(new LLAdvancedCheckStatsRecorder(), "Advanced.CheckStatsRecorder");
+ view_listener_t::addMenu(new LLAdvancedToggleInterestList360Mode(), "Advanced.ToggleInterestList360Mode");
+ view_listener_t::addMenu(new LLAdvancedCheckInterestList360Mode(), "Advanced.CheckInterestList360Mode");
+ view_listener_t::addMenu(new LLAdvancedResetInterestLists(), "Advanced.ResetInterestLists");
// Advanced > UI
commit.add("Advanced.WebBrowserTest", boost::bind(&handle_web_browser_test, _2)); // sigh! this one opens the MEDIA browser
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index e7456f77bb..7421bba733 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -99,6 +99,7 @@
#include "llviewerobjectlist.h"
#include "llviewerparcelmgr.h"
#include "llviewerstats.h"
+#include "llviewerstatsrecorder.h"
#include "llviewertexteditor.h"
#include "llviewerthrottle.h"
#include "llviewerwindow.h"
@@ -3759,31 +3760,34 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data)
continue;
}
- LLViewerObject *objectp = gObjectList.findObject(id);
- if (objectp)
+ LLViewerObject *objectp = gObjectList.findObject(id);
+ if (objectp)
+ {
+ // Display green bubble on kill
+ if ( gShowObjectUpdates )
{
- // Display green bubble on kill
- if ( gShowObjectUpdates )
- {
- LLColor4 color(0.f,1.f,0.f,1.f);
- gPipeline.addDebugBlip(objectp->getPositionAgent(), color);
- LL_DEBUGS("MessageBlip") << "Kill blip for local " << local_id << " at " << objectp->getPositionAgent() << LL_ENDL;
- }
-
- // Do the kill
- gObjectList.killObject(objectp);
+ LLColor4 color(0.f,1.f,0.f,1.f);
+ gPipeline.addDebugBlip(objectp->getPositionAgent(), color);
+ LL_DEBUGS("MessageBlip") << "Kill blip for local " << local_id << " at " << objectp->getPositionAgent() << LL_ENDL;
}
- if(delete_object)
- {
- regionp->killCacheEntry(local_id);
+ // Do the kill
+ gObjectList.killObject(objectp);
+ }
+
+ if(delete_object)
+ {
+ regionp->killCacheEntry(local_id);
}
// We should remove the object from selection after it is marked dead by gObjectList to make LLToolGrab,
// which is using the object, release the mouse capture correctly when the object dies.
// See LLToolGrab::handleHoverActive() and LLToolGrab::handleHoverNonPhysical().
LLSelectMgr::getInstance()->removeObjectFromSelections(id);
- }
+
+ } // end for loop
+
+ LLViewerStatsRecorder::instance().recordObjectKills(num_objects);
}
void process_time_synch(LLMessageSystem *mesgsys, void **user_data)
@@ -5151,6 +5155,11 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
LandBuyAccessBlocked_AdultsOnlyContent
-----------------------------------------------------------------------*/
+ static LLCachedControl<S32> ban_lines_mode(gSavedSettings , "ShowBanLines" , LLViewerParcelMgr::PARCEL_BAN_LINES_ON_COLLISION);
+ if (ban_lines_mode == LLViewerParcelMgr::PARCEL_BAN_LINES_ON_COLLISION)
+ {
+ LLViewerParcelMgr::getInstance()->resetCollisionTimer();
+ }
if (handle_special_notification(notificationID, llsdBlock))
{
return true;
@@ -5319,6 +5328,13 @@ void process_alert_message(LLMessageSystem *msgsystem, void **user_data)
{
BOOL modal = FALSE;
process_alert_core(message, modal);
+
+ static LLCachedControl<S32> ban_lines_mode(gSavedSettings , "ShowBanLines" , LLViewerParcelMgr::PARCEL_BAN_LINES_ON_COLLISION);
+ if (ban_lines_mode == LLViewerParcelMgr::PARCEL_BAN_LINES_ON_COLLISION
+ && message.find("Cannot enter parcel") != std::string::npos)
+ {
+ LLViewerParcelMgr::getInstance()->resetCollisionTimer();
+ }
}
}
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index efc4ded79e..c479afaa52 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -369,7 +369,7 @@ LLViewerObject* LLViewerObjectList::processObjectUpdateFromCache(LLVOCacheEntry*
if (!objectp)
{
LL_INFOS() << "createObject failure for object: " << fullid << LL_ENDL;
- recorder.objectUpdateFailure(entry->getLocalID(), OUT_FULL_CACHED, 0);
+ recorder.objectUpdateFailure();
return NULL;
}
justCreated = true;
@@ -393,7 +393,6 @@ LLViewerObject* LLViewerObjectList::processObjectUpdateFromCache(LLVOCacheEntry*
objectp->setLastUpdateType(OUT_FULL_COMPRESSED); //newly cached
objectp->setLastUpdateCached(TRUE);
}
- recorder.log(0.2f);
LLVOAvatar::cullAvatarsByPixelArea();
return objectp;
@@ -472,18 +471,14 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
for (i = 0; i < num_objects; i++)
{
- // timer is unused?
- LLTimer update_timer;
BOOL justCreated = FALSE;
- S32 msg_size = 0;
bool update_cache = false; //update object cache if it is a full-update or terse update
if (compressed)
{
- S32 uncompressed_length = 2048;
compressed_dp.reset();
- uncompressed_length = mesgsys->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_Data);
+ S32 uncompressed_length = mesgsys->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_Data);
LL_DEBUGS("ObjectUpdate") << "got binary data from message to compressed_dpbuffer" << LL_ENDL;
mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_Data, compressed_dpbuffer, 0, i, 2048);
compressed_dp.assignBuffer(compressed_dpbuffer, uncompressed_length);
@@ -505,7 +500,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
<< " Flags: " << flags
<< " Region: " << regionp->getName()
<< " Region id: " << regionp->getRegionID() << LL_ENDL;
- recorder.objectUpdateFailure(local_id, update_type, msg_size);
+ recorder.objectUpdateFailure();
continue;
}
else if ((flags & FLAGS_TEMPORARY_ON_REZ) == 0)
@@ -533,7 +528,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
else if (update_type != OUT_FULL) // !compressed, !OUT_FULL ==> OUT_FULL_CACHED only?
{
mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, local_id, i);
- msg_size += sizeof(U32);
getUUIDFromLocal(fullid,
local_id,
@@ -554,8 +548,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
update_cache = true;
mesgsys->getUUIDFast(_PREHASH_ObjectData, _PREHASH_FullID, fullid, i);
mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, local_id, i);
- msg_size += sizeof(LLUUID);
- msg_size += sizeof(U32);
LL_DEBUGS("ObjectUpdate") << "Full Update, obj " << local_id << ", global ID " << fullid << " from " << mesgsys->getSender() << LL_ENDL;
}
objectp = findObject(fullid);
@@ -616,7 +608,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
if (update_type == OUT_TERSE_IMPROVED)
{
// LL_INFOS() << "terse update for an unknown object (compressed):" << fullid << LL_ENDL;
- recorder.objectUpdateFailure(local_id, update_type, msg_size);
+ recorder.objectUpdateFailure();
continue;
}
}
@@ -625,12 +617,11 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
if (update_type != OUT_FULL)
{
//LL_INFOS() << "terse update for an unknown object:" << fullid << LL_ENDL;
- recorder.objectUpdateFailure(local_id, update_type, msg_size);
+ recorder.objectUpdateFailure();
continue;
}
mesgsys->getU8Fast(_PREHASH_ObjectData, _PREHASH_PCode, pcode, i);
- msg_size += sizeof(U8);
}
#ifdef IGNORE_DEAD
@@ -638,7 +629,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
{
mNumDeadObjectUpdates++;
//LL_INFOS() << "update for a dead object:" << fullid << LL_ENDL;
- recorder.objectUpdateFailure(local_id, update_type, msg_size);
+ recorder.objectUpdateFailure();
continue;
}
#endif
@@ -651,7 +642,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
if (!objectp)
{
LL_INFOS() << "createObject failure for object: " << fullid << LL_ENDL;
- recorder.objectUpdateFailure(local_id, update_type, msg_size);
+ recorder.objectUpdateFailure();
continue;
}
@@ -681,11 +672,11 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
if(!(flags & FLAGS_TEMPORARY_ON_REZ))
{
- bCached = true;
+ bCached = true;
LLViewerRegion::eCacheUpdateResult result = objectp->mRegionp->cacheFullUpdate(objectp, compressed_dp, flags);
- recorder.cacheFullUpdate(local_id, update_type, result, objectp, msg_size);
+ recorder.cacheFullUpdate(result);
+ }
}
- }
#endif
}
else
@@ -696,12 +687,10 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
}
processUpdateCore(objectp, user_data, i, update_type, NULL, justCreated);
}
- recorder.objectUpdateEvent(local_id, update_type, objectp, msg_size);
+ recorder.objectUpdateEvent(update_type);
objectp->setLastUpdateType(update_type);
}
- recorder.log(0.2f);
-
LLVOAvatar::cullAvatarsByPixelArea();
}
@@ -734,28 +723,26 @@ void LLViewerObjectList::processCachedObjectUpdate(LLMessageSystem *mesgsys,
for (S32 i = 0; i < num_objects; i++)
{
- S32 msg_size = 0;
U32 id;
U32 crc;
U32 flags;
mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, id, i);
mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_CRC, crc, i);
mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_UpdateFlags, flags, i);
- msg_size += sizeof(U32) * 2;
LL_DEBUGS("ObjectUpdate") << "got probe for id " << id << " crc " << crc << LL_ENDL;
dumpStack("ObjectUpdateStack");
// Lookup data packer and add this id to cache miss lists if necessary.
U8 cache_miss_type = LLViewerRegion::CACHE_MISS_TYPE_NONE;
- if(!regionp->probeCache(id, crc, flags, cache_miss_type))
- {
- // Cache Miss.
+ if (regionp->probeCache(id, crc, flags, cache_miss_type))
+ { // Cache Hit
+ recorder.cacheHitEvent();
+ }
+ else
+ { // Cache Miss
LL_DEBUGS("ObjectUpdate") << "cache miss for id " << id << " crc " << crc << " miss type " << (S32) cache_miss_type << LL_ENDL;
-
- recorder.cacheMissEvent(id, update_type, cache_miss_type, msg_size);
-
- continue; // no data packer, skip this object
+ recorder.cacheMissEvent(cache_miss_type);
}
}
@@ -773,7 +760,6 @@ void LLViewerObjectList::dirtyAllObjectInventory()
void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
{
S32 i;
- S32 num_objects = 0;
LLViewerObject *objectp;
S32 num_updates, max_value;
@@ -830,8 +816,6 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
objectp = mObjects[i];
if (!objectp->isDead())
{
- num_objects++;
-
// Update distance & gpw
objectp->setPixelAreaAndAngle(agent); // Also sets the approx. pixel area
objectp->updateTextures(); // Update the image levels of textures for this object.
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 97dc916bfe..15accd0547 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -72,12 +72,16 @@
#include "llenvironment.h"
-const F32 PARCEL_COLLISION_DRAW_SECS = 1.f;
+const F32 PARCEL_BAN_LINES_DRAW_SECS_ON_COLLISION = 10.f;
+const F32 PARCEL_COLLISION_DRAW_SECS_ON_PROXIMITY = 1.f;
// Globals
U8* LLViewerParcelMgr::sPackedOverlay = NULL;
+S32 LLViewerParcelMgr::PARCEL_BAN_LINES_HIDE = 0;
+S32 LLViewerParcelMgr::PARCEL_BAN_LINES_ON_COLLISION = 1;
+S32 LLViewerParcelMgr::PARCEL_BAN_LINES_ON_PROXIMITY = 2;
LLUUID gCurrentMovieID = LLUUID::null;
@@ -892,13 +896,18 @@ void LLViewerParcelMgr::render()
void LLViewerParcelMgr::renderParcelCollision()
{
+ static LLCachedControl<S32> ban_lines_mode(gSavedSettings , "ShowBanLines" , PARCEL_BAN_LINES_ON_COLLISION);
+
// check for expiration
- if (mCollisionTimer.getElapsedTimeF32() > PARCEL_COLLISION_DRAW_SECS)
+ F32 expiration = (ban_lines_mode == PARCEL_BAN_LINES_ON_PROXIMITY)
+ ? PARCEL_COLLISION_DRAW_SECS_ON_PROXIMITY
+ : PARCEL_BAN_LINES_DRAW_SECS_ON_COLLISION;
+ if (mCollisionTimer.getElapsedTimeF32() > expiration)
{
- mRenderCollision = FALSE;
+ mRenderCollision = false;
}
- if (mRenderCollision && gSavedSettings.getBOOL("ShowBanLines"))
+ if (mRenderCollision && ban_lines_mode != PARCEL_BAN_LINES_HIDE)
{
LLViewerRegion* regionp = gAgent.getRegion();
if (regionp)
@@ -1842,8 +1851,11 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID)
{
// We're about to collide with this parcel
- parcel_mgr.mRenderCollision = TRUE;
- parcel_mgr.mCollisionTimer.reset();
+ static LLCachedControl<S32> ban_lines_mode(gSavedSettings , "ShowBanLines" , PARCEL_BAN_LINES_ON_COLLISION);
+ if (ban_lines_mode == PARCEL_BAN_LINES_ON_PROXIMITY)
+ {
+ parcel_mgr.resetCollisionTimer();
+ }
// Differentiate this parcel if we are banned from it.
if (sequence_id == COLLISION_BANNED_PARCEL_SEQ_ID)
diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h
index 6ce389ab88..56dacd3efd 100644
--- a/indra/newview/llviewerparcelmgr.h
+++ b/indra/newview/llviewerparcelmgr.h
@@ -205,6 +205,11 @@ public:
void renderHighlightSegments(const U8* segments, LLViewerRegion* regionp);
void renderCollisionSegments(U8* segments, BOOL use_pass, LLViewerRegion* regionp);
+ static S32 PARCEL_BAN_LINES_HIDE;
+ static S32 PARCEL_BAN_LINES_ON_COLLISION;
+ static S32 PARCEL_BAN_LINES_ON_PROXIMITY;
+ void resetCollisionTimer(); // Ban lines visibility timer
+
void sendParcelGodForceOwner(const LLUUID& owner_id);
// make the selected parcel a content parcel.
@@ -361,7 +366,7 @@ private:
// If it's coming, draw the parcel's boundaries.
LLParcel* mCollisionParcel;
U8* mCollisionSegments;
- BOOL mRenderCollision;
+ bool mRenderCollision;
BOOL mRenderSelection;
S32 mCollisionBanned;
LLFrameTimer mCollisionTimer;
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index b582e38c78..4a1dd1b8d6 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -104,6 +104,9 @@ S32 LLViewerRegion::sLastCameraUpdated = 0;
S32 LLViewerRegion::sNewObjectCreationThrottle = -1;
LLViewerRegion::vocache_entry_map_t LLViewerRegion::sRegionCacheCleanup;
+const std::string LLViewerRegion::IL_MODE_DEFAULT = "default";
+const std::string LLViewerRegion::IL_MODE_360 = "360";
+
typedef std::map<std::string, std::string> CapabilityMap;
static void log_capabilities(const CapabilityMap &capmap);
@@ -131,8 +134,8 @@ class LLRegionHandler : public LLCommandHandler
public:
// requests will be throttled from a non-trusted browser
LLRegionHandler() : LLCommandHandler("region", UNTRUSTED_THROTTLE) {}
-
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
// make sure that we at least have a region name
int num_params = params.size();
@@ -143,6 +146,10 @@ public:
// build a secondlife://{PLACE} SLurl from this SLapp
std::string url = "secondlife://";
+ if (!grid.empty())
+ {
+ url += grid + "/secondlife/";
+ }
boost::regex name_rx("[A-Za-z0-9()_%]+");
boost::regex coord_rx("[0-9]+");
for (int i = 0; i < num_params; i++)
@@ -642,7 +649,8 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
mInvisibilityCheckHistory(-1),
mPaused(FALSE),
mRegionCacheHitCount(0),
- mRegionCacheMissCount(0)
+ mRegionCacheMissCount(0),
+ mInterestListMode(IL_MODE_DEFAULT)
{
mWidth = region_width_meters;
mImpl->mOriginGlobal = from_region_handle(handle);
@@ -2618,14 +2626,10 @@ LLVOCacheEntry* LLViewerRegion::getCacheEntry(U32 local_id, bool valid)
return NULL;
}
-void LLViewerRegion::addCacheMiss(U32 id, LLViewerRegion::eCacheMissType miss_type)
+void LLViewerRegion::addCacheMiss(U32 id, LLViewerRegion::eCacheMissType cache_miss_type)
{
mRegionCacheMissCount++;
-#if 0
- mCacheMissList.insert(CacheMissItem(id, miss_type));
-#else
- mCacheMissList.push_back(CacheMissItem(id, miss_type));
-#endif
+ mCacheMissList.push_back(CacheMissItem(id, cache_miss_type));
}
//check if a non-cacheable object is already created.
@@ -2701,10 +2705,10 @@ bool LLViewerRegion::probeCache(U32 local_id, U32 crc, U32 flags, U8 &cache_miss
}
}
else
- {
+ { // Total miss, don't have the object in cache
// LL_INFOS() << "Cache miss for " << local_id << LL_ENDL;
- addCacheMiss(local_id, CACHE_MISS_TYPE_FULL);
- cache_miss_type = CACHE_MISS_TYPE_FULL;
+ addCacheMiss(local_id, CACHE_MISS_TYPE_TOTAL);
+ cache_miss_type = CACHE_MISS_TYPE_TOTAL;
}
return false;
@@ -2712,7 +2716,7 @@ bool LLViewerRegion::probeCache(U32 local_id, U32 crc, U32 flags, U8 &cache_miss
void LLViewerRegion::addCacheMissFull(const U32 local_id)
{
- addCacheMiss(local_id, CACHE_MISS_TYPE_FULL);
+ addCacheMiss(local_id, CACHE_MISS_TYPE_TOTAL);
}
void LLViewerRegion::requestCacheMisses()
@@ -2763,7 +2767,6 @@ void LLViewerRegion::requestCacheMisses()
mCacheDirty = TRUE ;
// LL_INFOS() << "KILLDEBUG Sent cache miss full " << full_count << " crc " << crc_count << LL_ENDL;
LLViewerStatsRecorder::instance().requestCacheMissesEvent(mCacheMissList.size());
- LLViewerStatsRecorder::instance().log(0.2f);
mCacheMissList.clear();
}
@@ -3284,6 +3287,9 @@ void LLViewerRegion::setCapabilitiesReceived(bool received)
// This is a single-shot signal. Forget callbacks to save resources.
mCapabilitiesReceivedSignal.disconnect_all_slots();
+
+ // Set the region to the desired interest list mode
+ setInterestListMode(gAgent.getInterestListMode());
}
}
@@ -3302,7 +3308,111 @@ void LLViewerRegion::logActiveCapabilities() const
log_capabilities(mImpl->mCapabilities);
}
-LLSpatialPartition* LLViewerRegion::getSpatialPartition(U32 type)
+
+bool LLViewerRegion::requestPostCapability(const std::string &capName, LLSD &postData, httpCallback_t cbSuccess, httpCallback_t cbFailure)
+{
+ std::string url = getCapability(capName);
+
+ if (url.empty())
+ {
+ LL_WARNS("Region") << "Could not retrieve region " << getRegionID()
+ << " POST capability \"" << capName << "\"" << LL_ENDL;
+ return false;
+ }
+
+ LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(url, gAgent.getAgentPolicy(), postData, cbSuccess, cbFailure);
+ return true;
+}
+
+bool LLViewerRegion::requestGetCapability(const std::string &capName, httpCallback_t cbSuccess, httpCallback_t cbFailure)
+{
+ std::string url;
+
+ url = getCapability(capName);
+
+ if (url.empty())
+ {
+ LL_WARNS("Region") << "Could not retrieve region " << getRegionID()
+ << " GET capability \"" << capName << "\"" << LL_ENDL;
+ return false;
+ }
+
+ LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(url, gAgent.getAgentPolicy(), cbSuccess, cbFailure);
+ return true;
+}
+
+bool LLViewerRegion::requestDelCapability(const std::string &capName, httpCallback_t cbSuccess, httpCallback_t cbFailure)
+{
+ std::string url;
+
+ url = getCapability(capName);
+
+ if (url.empty())
+ {
+ LL_WARNS("Region") << "Could not retrieve region " << getRegionID() << " DEL capability \"" << capName << "\"" << LL_ENDL;
+ return false;
+ }
+
+ LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpDel(url, gAgent.getAgentPolicy(), cbSuccess, cbFailure);
+ return true;
+}
+
+void LLViewerRegion::setInterestListMode(const std::string &new_mode)
+{
+ if (new_mode != mInterestListMode)
+ {
+ mInterestListMode = new_mode;
+
+ if (mInterestListMode != std::string(IL_MODE_DEFAULT) && mInterestListMode != std::string(IL_MODE_360))
+ {
+ LL_WARNS("360Capture") << "Region " << getRegionID() << " setInterestListMode() invalid interest list mode: "
+ << mInterestListMode << ", setting to default" << LL_ENDL;
+ mInterestListMode = IL_MODE_DEFAULT;
+ }
+
+ LLSD body;
+ body["mode"] = mInterestListMode;
+ if (requestPostCapability("InterestList", body,
+ [](const LLSD &response) {
+ LL_DEBUGS("360Capture") << "InterestList capability responded: \n"
+ << ll_pretty_print_sd(response) << LL_ENDL;
+ }))
+ {
+ LL_DEBUGS("360Capture") << "Region " << getRegionID()
+ << " Successfully posted an InterestList capability request with payload: \n"
+ << ll_pretty_print_sd(body) << LL_ENDL;
+ }
+ else
+ {
+ LL_WARNS("360Capture") << "Region " << getRegionID()
+ << " Unable to post an InterestList capability request with payload: \n"
+ << ll_pretty_print_sd(body) << LL_ENDL;
+ }
+ }
+ else
+ {
+ LL_DEBUGS("360Capture") << "Region " << getRegionID() << "No change, skipping Interest List mode POST to "
+ << new_mode << " mode" << LL_ENDL;
+ }
+}
+
+
+void LLViewerRegion::resetInterestList()
+{
+ if (requestDelCapability("InterestList", [](const LLSD &response) {
+ LL_DEBUGS("360Capture") << "InterestList capability DEL responded: \n" << ll_pretty_print_sd(response) << LL_ENDL;
+ }))
+ {
+ LL_DEBUGS("360Capture") << "Region " << getRegionID() << " Successfully reset InterestList capability" << LL_ENDL;
+ }
+ else
+ {
+ LL_WARNS("360Capture") << "Region " << getRegionID() << " Unable to DEL InterestList capability request" << LL_ENDL;
+ }
+}
+
+
+LLSpatialPartition *LLViewerRegion::getSpatialPartition(U32 type)
{
if (type < mImpl->mObjectPartition.size() && type < PARTITION_VO_CACHE)
{
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 6548e8d372..6956e9eb08 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -32,6 +32,7 @@
#include <string>
#include <boost/signals2.hpp>
+#include "llcorehttputil.h"
#include "llwind.h"
#include "v3dmath.h"
#include "llstring.h"
@@ -278,6 +279,16 @@ public:
static bool isSpecialCapabilityName(const std::string &name);
void logActiveCapabilities() const;
+ // Utilities to post and get via
+ // HTTP using the agent's policy settings and headers.
+ typedef LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t httpCallback_t;
+ bool requestPostCapability(const std::string &capName,
+ LLSD &postData,
+ httpCallback_t cbSuccess = NULL,
+ httpCallback_t cbFailure = NULL);
+ bool requestGetCapability(const std::string &capName, httpCallback_t cbSuccess = NULL, httpCallback_t cbFailure = NULL);
+ bool requestDelCapability(const std::string &capName, httpCallback_t cbSuccess = NULL, httpCallback_t cbFailure = NULL);
+
/// implements LLCapabilityProvider
/*virtual*/ const LLHost& getHost() const;
const U64 &getHandle() const { return mHandle; }
@@ -332,9 +343,9 @@ public:
typedef enum
{
- CACHE_MISS_TYPE_FULL = 0,
- CACHE_MISS_TYPE_CRC,
- CACHE_MISS_TYPE_NONE
+ CACHE_MISS_TYPE_TOTAL = 0, // total cache miss - object not in cache
+ CACHE_MISS_TYPE_CRC, // object in cache, but CRC doesn't match
+ CACHE_MISS_TYPE_NONE // not a miss: cache hit
} eCacheMissType;
typedef enum
@@ -477,7 +488,15 @@ public:
};
typedef std::set<LLViewerRegion*, CompareRegionByLastUpdate> region_priority_list_t;
-private:
+ void setInterestListMode(const std::string & new_mode);
+ const std::string & getInterestListMode() const { return mInterestListMode; }
+
+ void resetInterestList();
+
+ static const std::string IL_MODE_DEFAULT;
+ static const std::string IL_MODE_360;
+
+ private:
static S32 sNewObjectCreationThrottle;
LLViewerRegionImpl * mImpl;
LLFrameTimer mRegionTimer;
@@ -551,10 +570,10 @@ private:
class CacheMissItem
{
public:
- CacheMissItem(U32 id, LLViewerRegion::eCacheMissType miss_type) : mID(id), mType(miss_type){}
+ CacheMissItem(U32 id, LLViewerRegion::eCacheMissType miss_type) : mID(id), mType(miss_type) {}
- U32 mID; //local object id
- LLViewerRegion::eCacheMissType mType; //cache miss type
+ U32 mID; //local object id
+ LLViewerRegion::eCacheMissType mType; // cache miss type
typedef std::list<CacheMissItem> cache_miss_list_t;
};
@@ -574,6 +593,9 @@ private:
LLFrameTimer mMaterialsCapThrottleTimer;
LLFrameTimer mRenderInfoRequestTimer;
LLFrameTimer mRenderInfoReportTimer;
+
+ // how the server interest list works
+ std::string mInterestListMode;
};
inline BOOL LLViewerRegion::getRegionProtocol(U64 protocol) const
diff --git a/indra/newview/llviewerstatsrecorder.cpp b/indra/newview/llviewerstatsrecorder.cpp
index b5ccf4ffa0..6372679a07 100644
--- a/indra/newview/llviewerstatsrecorder.cpp
+++ b/indra/newview/llviewerstatsrecorder.cpp
@@ -28,24 +28,25 @@
#include "llviewerstatsrecorder.h"
+#include "llcontrol.h"
#include "llfile.h"
#include "llviewerregion.h"
#include "llviewerobject.h"
+#include "llworld.h"
-
-// To do - something using region name or global position
-#if LL_WINDOWS
- static const std::string STATS_FILE_NAME("C:\\ViewerObjectCacheStats.csv");
-#else
- static const std::string STATS_FILE_NAME("/tmp/viewerstats.csv");
-#endif
+extern LLControlGroup gSavedSettings;
LLViewerStatsRecorder* LLViewerStatsRecorder::sInstance = NULL;
LLViewerStatsRecorder::LLViewerStatsRecorder() :
- mObjectCacheFile(NULL),
+ mStatsFile(NULL),
mTimer(),
- mStartTime(0.0),
- mLastSnapshotTime(0.0)
+ mFileOpenTime(0.0),
+ mLastSnapshotTime(0.0),
+ mEnableStatsRecording(false),
+ mEnableStatsLogging(false),
+ mInterval(0.2),
+ mMaxDuration(300.f),
+ mSkipSaveIfZeros(false)
{
if (NULL != sInstance)
{
@@ -57,79 +58,70 @@ LLViewerStatsRecorder::LLViewerStatsRecorder() :
LLViewerStatsRecorder::~LLViewerStatsRecorder()
{
- if (mObjectCacheFile != NULL)
+ if (mStatsFile)
{
- // last chance snapshot
- writeToLog(0.f);
- LLFile::close(mObjectCacheFile);
- mObjectCacheFile = NULL;
+ writeToLog(0.f); // Save last data
+ closeStatsFile();
}
}
void LLViewerStatsRecorder::clearStats()
{
mObjectCacheHitCount = 0;
- mObjectCacheHitSize = 0;
mObjectCacheMissFullCount = 0;
- mObjectCacheMissFullSize = 0;
mObjectCacheMissCrcCount = 0;
- mObjectCacheMissCrcSize = 0;
mObjectFullUpdates = 0;
- mObjectFullUpdatesSize = 0;
mObjectTerseUpdates = 0;
- mObjectTerseUpdatesSize = 0;
mObjectCacheMissRequests = 0;
- mObjectCacheMissResponses = 0;
- mObjectCacheMissResponsesSize = 0;
mObjectCacheUpdateDupes = 0;
mObjectCacheUpdateChanges = 0;
mObjectCacheUpdateAdds = 0;
mObjectCacheUpdateReplacements = 0;
mObjectUpdateFailures = 0;
- mObjectUpdateFailuresSize = 0;
- mTextureFetchSize = 0;
+ mTextureFetchCount = 0;
+ mMeshLoadedCount = 0;
+ mObjectKills = 0;
}
-void LLViewerStatsRecorder::recordObjectUpdateFailure(U32 local_id, const EObjectUpdateType update_type, S32 msg_size)
+void LLViewerStatsRecorder::enableObjectStatsRecording(bool enable, bool logging /* false */)
{
- mObjectUpdateFailures++;
- mObjectUpdateFailuresSize += msg_size;
+ mEnableStatsRecording = enable;
+
+ // if logging is stopping, close the file
+ if (mStatsFile && !logging)
+ {
+ writeToLog(0.f); // Save last data
+ closeStatsFile();
+ }
+ mEnableStatsLogging = logging;
}
-void LLViewerStatsRecorder::recordCacheMissEvent(U32 local_id, const EObjectUpdateType update_type, U8 cache_miss_type, S32 msg_size)
+
+
+void LLViewerStatsRecorder::recordCacheMissEvent(U8 cache_miss_type)
{
- if (LLViewerRegion::CACHE_MISS_TYPE_FULL == cache_miss_type)
+ if (LLViewerRegion::CACHE_MISS_TYPE_TOTAL == cache_miss_type)
{
mObjectCacheMissFullCount++;
- mObjectCacheMissFullSize += msg_size;
}
else
{
mObjectCacheMissCrcCount++;
- mObjectCacheMissCrcSize += msg_size;
}
}
-void LLViewerStatsRecorder::recordObjectUpdateEvent(U32 local_id, const EObjectUpdateType update_type, LLViewerObject * objectp, S32 msg_size)
+
+void LLViewerStatsRecorder::recordObjectUpdateEvent(const EObjectUpdateType update_type)
{
- switch (update_type)
+ switch (update_type)
{
case OUT_FULL:
- mObjectFullUpdates++;
- mObjectFullUpdatesSize += msg_size;
+ case OUT_FULL_COMPRESSED:
+ mObjectFullUpdates++;
break;
case OUT_TERSE_IMPROVED:
mObjectTerseUpdates++;
- mObjectTerseUpdatesSize += msg_size;
- break;
- case OUT_FULL_COMPRESSED:
- mObjectCacheMissResponses++;
- mObjectCacheMissResponsesSize += msg_size;
- break;
- case OUT_FULL_CACHED:
- mObjectCacheHitCount++;
- mObjectCacheHitSize += msg_size;
break;
default:
LL_WARNS() << "Unknown update_type" << LL_ENDL;
@@ -137,9 +129,9 @@ void LLViewerStatsRecorder::recordObjectUpdateEvent(U32 local_id, const EObjectU
};
}
-void LLViewerStatsRecorder::recordCacheFullUpdate(U32 local_id, const EObjectUpdateType update_type, LLViewerRegion::eCacheUpdateResult update_result, LLViewerObject* objectp, S32 msg_size)
+void LLViewerStatsRecorder::recordCacheFullUpdate(LLViewerRegion::eCacheUpdateResult update_result)
{
- switch (update_result)
+ switch (update_result)
{
case LLViewerRegion::CACHE_UPDATE_DUPE:
mObjectCacheUpdateDupes++;
@@ -154,124 +146,176 @@ void LLViewerStatsRecorder::recordCacheFullUpdate(U32 local_id, const EObjectUpd
mObjectCacheUpdateReplacements++;
break;
default:
- LL_WARNS() << "Unknown update_result type" << LL_ENDL;
+ LL_WARNS() << "Unknown update_result type " << (S32) update_result << LL_ENDL;
break;
};
}
-void LLViewerStatsRecorder::recordRequestCacheMissesEvent(S32 count)
-{
- mObjectCacheMissRequests += count;
-}
-
void LLViewerStatsRecorder::writeToLog( F32 interval )
{
+ if (!mEnableStatsLogging || !mEnableStatsRecording)
+ {
+ return;
+ }
+
size_t data_size = 0;
- F64 delta_time = LLTimer::getTotalSeconds() - mLastSnapshotTime;
- S32 total_objects = mObjectCacheHitCount + mObjectCacheMissCrcCount + mObjectCacheMissFullCount + mObjectFullUpdates + mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheMissResponses + mObjectCacheUpdateDupes + mObjectCacheUpdateChanges + mObjectCacheUpdateAdds + mObjectCacheUpdateReplacements + mObjectUpdateFailures;
+ F64 delta_time = LLFrameTimer::getTotalSeconds() - mLastSnapshotTime;
+ if (delta_time < interval)
+ return;
- if ( delta_time < interval || total_objects == 0) return;
+ if (mSkipSaveIfZeros)
+ {
+ S32 total_events = mObjectCacheHitCount + mObjectCacheMissCrcCount + mObjectCacheMissFullCount + mObjectFullUpdates +
+ mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheUpdateDupes +
+ mObjectCacheUpdateChanges + mObjectCacheUpdateAdds + mObjectCacheUpdateReplacements + mObjectUpdateFailures;
+ if (total_events == 0)
+ {
+ LL_DEBUGS("ILXZeroData") << "ILX: not saving zero data" << LL_ENDL;
+ return;
+ }
+ }
- mLastSnapshotTime = LLTimer::getTotalSeconds();
- LL_DEBUGS() << "ILX: "
+ mLastSnapshotTime = LLFrameTimer::getTotalSeconds();
+ LL_DEBUGS("ILX") << "ILX: "
<< mObjectCacheHitCount << " hits, "
<< mObjectCacheMissFullCount << " full misses, "
<< mObjectCacheMissCrcCount << " crc misses, "
<< mObjectFullUpdates << " full updates, "
<< mObjectTerseUpdates << " terse updates, "
<< mObjectCacheMissRequests << " cache miss requests, "
- << mObjectCacheMissResponses << " cache miss responses, "
<< mObjectCacheUpdateDupes << " cache update dupes, "
<< mObjectCacheUpdateChanges << " cache update changes, "
<< mObjectCacheUpdateAdds << " cache update adds, "
- << mObjectCacheUpdateReplacements << " cache update replacements, "
- << mObjectUpdateFailures << " update failures"
+ << mObjectCacheUpdateReplacements << " cache update replacements,"
+ << mObjectUpdateFailures << " update failures,"
+ << mTextureFetchCount << " texture fetches, "
+ << mMeshLoadedCount << " mesh loads, "
+ << mObjectKills << " object kills"
<< LL_ENDL;
-
- if (mObjectCacheFile == NULL)
+
+ if (mStatsFile == NULL)
{
- mStartTime = LLTimer::getTotalSeconds();
- mObjectCacheFile = LLFile::fopen(STATS_FILE_NAME, "wb");
- if (mObjectCacheFile)
- { // Write column headers
- std::ostringstream data_msg;
- data_msg << "EventTime(ms)\t"
- << "Cache Hits\t"
- << "Cache Full Misses\t"
- << "Cache Crc Misses\t"
- << "Full Updates\t"
- << "Terse Updates\t"
- << "Cache Miss Requests\t"
- << "Cache Miss Responses\t"
- << "Cache Update Dupes\t"
- << "Cache Update Changes\t"
- << "Cache Update Adds\t"
- << "Cache Update Replacements\t"
- << "Update Failures\t"
- << "Cache Hits bps\t"
- << "Cache Full Misses bps\t"
- << "Cache Crc Misses bps\t"
- << "Full Updates bps\t"
- << "Terse Updates bps\t"
- << "Cache Miss Responses bps\t"
- << "Texture Fetch bps\t"
- << "\n";
-
- data_size = data_msg.str().size();
- if (fwrite(data_msg.str().c_str(), 1, data_size, mObjectCacheFile ) != data_size)
+ // Refresh settings
+ mInterval = gSavedSettings.getF32("StatsReportFileInterval");
+ mSkipSaveIfZeros = gSavedSettings.getBOOL("StatsReportSkipZeroDataSaves");
+ mMaxDuration = gSavedSettings.getF32("StatsReportMaxDuration");
+
+ // Open the data file
+ makeStatsFileName();
+ mStatsFile = LLFile::fopen(mStatsFileName, "wb");
+
+ if (mStatsFile)
+ {
+ LL_INFOS("ILX") << "ILX: Writing update information to " << mStatsFileName << LL_ENDL;
+
+ mFileOpenTime = LLFrameTimer::getTotalSeconds();
+
+ // Write column headers
+ std::ostringstream col_headers;
+ col_headers << "Time (sec),"
+ << "Regions,"
+ << "Active Cached Objects,"
+ << "Cache Hits,"
+ << "Cache Full Misses,"
+ << "Cache Crc Misses,"
+ << "Full Updates,"
+ << "Terse Updates,"
+ << "Cache Miss Requests," // Normally results in a Full Update from simulator
+ << "Cache Update Dupes,"
+ << "Cache Update Changes,"
+ << "Cache Update Adds,"
+ << "Cache Update Replacements,"
+ << "Update Failures,"
+ << "Texture Count,"
+ << "Mesh Load Count,"
+ << "Object Kills"
+ << "\n";
+
+ data_size = col_headers.str().size();
+ if (fwrite(col_headers.str().c_str(), 1, data_size, mStatsFile ) != data_size)
{
- LL_WARNS() << "failed to write full headers to " << STATS_FILE_NAME << LL_ENDL;
+ LL_WARNS() << "failed to write full headers to " << mStatsFileName << LL_ENDL;
+ // Close the file and turn off stats logging
+ closeStatsFile();
+ return;
}
}
else
- {
- //LL_WARNS() << "Couldn't open " << STATS_FILE_NAME << " for logging." << LL_ENDL;
+ { // Failed to open file
+ LL_WARNS() << "Couldn't open " << mStatsFileName << " for logging, turning off stats recording." << LL_ENDL;
+ mEnableStatsLogging = false;
return;
}
}
- std::ostringstream data_msg;
-
- data_msg << getTimeSinceStart()
- << "\t " << mObjectCacheHitCount
- << "\t" << mObjectCacheMissFullCount
- << "\t" << mObjectCacheMissCrcCount
- << "\t" << mObjectFullUpdates
- << "\t" << mObjectTerseUpdates
- << "\t" << mObjectCacheMissRequests
- << "\t" << mObjectCacheMissResponses
- << "\t" << mObjectCacheUpdateDupes
- << "\t" << mObjectCacheUpdateChanges
- << "\t" << mObjectCacheUpdateAdds
- << "\t" << mObjectCacheUpdateReplacements
- << "\t" << mObjectUpdateFailures
- << "\t" << (mObjectCacheHitSize * 8 / delta_time)
- << "\t" << (mObjectCacheMissFullSize * 8 / delta_time)
- << "\t" << (mObjectCacheMissCrcSize * 8 / delta_time)
- << "\t" << (mObjectFullUpdatesSize * 8 / delta_time)
- << "\t" << (mObjectTerseUpdatesSize * 8 / delta_time)
- << "\t" << (mObjectCacheMissResponsesSize * 8 / delta_time)
- << "\t" << (mTextureFetchSize * 8 / delta_time)
+ std::ostringstream stats_data;
+
+ stats_data << getTimeSinceStart()
+ << "," << LLWorld::getInstance()->getRegionList().size()
+ << "," << LLWorld::getInstance()->getNumOfActiveCachedObjects()
+ << "," << mObjectCacheHitCount
+ << "," << mObjectCacheMissFullCount
+ << "," << mObjectCacheMissCrcCount
+ << "," << mObjectFullUpdates
+ << "," << mObjectTerseUpdates
+ << "," << mObjectCacheMissRequests
+ << "," << mObjectCacheUpdateDupes
+ << "," << mObjectCacheUpdateChanges
+ << "," << mObjectCacheUpdateAdds
+ << "," << mObjectCacheUpdateReplacements
+ << "," << mObjectUpdateFailures
+ << "," << mTextureFetchCount
+ << "," << mMeshLoadedCount
+ << "," << mObjectKills
<< "\n";
- data_size = data_msg.str().size();
- if ( data_size != fwrite(data_msg.str().c_str(), 1, data_size, mObjectCacheFile ))
+ data_size = stats_data.str().size();
+ if ( data_size != fwrite(stats_data.str().c_str(), 1, data_size, mStatsFile ))
{
- LL_WARNS() << "Unable to write complete column data to " << STATS_FILE_NAME << LL_ENDL;
- }
+ LL_WARNS() << "Unable to write complete column data to " << mStatsFileName << LL_ENDL;
+ closeStatsFile();
+ }
clearStats();
+
+ if (getTimeSinceStart() >= mMaxDuration)
+ { // If file recording has been running for too long, stop it.
+ closeStatsFile();
+ }
}
-F32 LLViewerStatsRecorder::getTimeSinceStart()
+void LLViewerStatsRecorder::closeStatsFile()
{
- return (F32) (LLTimer::getTotalSeconds() - mStartTime);
+ if (mStatsFile)
+ {
+ LL_INFOS("ILX") << "ILX: Stopped writing update information to " << mStatsFileName << " after " << getTimeSinceStart()
+ << " seconds." << LL_ENDL;
+ LLFile::close(mStatsFile);
+ mStatsFile = NULL;
+ }
+ mEnableStatsLogging = false;
}
-void LLViewerStatsRecorder::recordTextureFetch( S32 msg_size )
+void LLViewerStatsRecorder::makeStatsFileName()
{
- mTextureFetchSize += msg_size;
+ // Create filename - tbd: use pid?
+#if LL_WINDOWS
+ std::string stats_file_name("SLViewerStats-");
+#else
+ std::string stats_file_name("slviewerstats-");
+#endif
+
+ F64 now = LLFrameTimer::getTotalSeconds();
+ std::string date_str = LLDate(now).asString();
+ std::replace(date_str.begin(), date_str.end(), ':', '-'); // Make it valid for a filename
+ stats_file_name.append(date_str);
+ stats_file_name.append(".csv");
+ mStatsFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, stats_file_name);
}
+F32 LLViewerStatsRecorder::getTimeSinceStart()
+{
+ return (F32) (LLFrameTimer::getTotalSeconds() - mFileOpenTime);
+}
diff --git a/indra/newview/llviewerstatsrecorder.h b/indra/newview/llviewerstatsrecorder.h
index c974bea49d..b9fe02e54d 100644
--- a/indra/newview/llviewerstatsrecorder.h
+++ b/indra/newview/llviewerstatsrecorder.h
@@ -31,10 +31,6 @@
// This is a diagnostic class used to record information from the viewer
// for analysis.
-// This is normally 0. Set to 1 to enable viewer stats recording
-#define LL_RECORD_VIEWER_STATS 0
-
-
#include "llframetimer.h"
#include "llviewerobject.h"
#include "llviewerregion.h"
@@ -49,97 +45,132 @@ class LLViewerStatsRecorder : public LLSingleton<LLViewerStatsRecorder>
~LLViewerStatsRecorder();
public:
- void objectUpdateFailure(U32 local_id, const EObjectUpdateType update_type, S32 msg_size)
- {
-#if LL_RECORD_VIEWER_STATS
- recordObjectUpdateFailure(local_id, update_type, msg_size);
-#endif
+ // Enable/disable stats recording. This is broken down into two
+ // flags so we can record stats without writing them to the log
+ // file. This is useful to analyzing updates for scene loading.
+ void enableObjectStatsRecording(bool enable, bool logging = false);
+
+ bool isEnabled() const { return mEnableStatsRecording; }
+ bool isLogging() const { return mEnableStatsLogging; }
+
+ void objectUpdateFailure()
+ {
+ if (mEnableStatsRecording)
+ {
+ mObjectUpdateFailures++;
+ }
}
- void cacheMissEvent(U32 local_id, const EObjectUpdateType update_type, U8 cache_miss_type, S32 msg_size)
+ void cacheMissEvent(U8 cache_miss_type)
{
-#if LL_RECORD_VIEWER_STATS
- recordCacheMissEvent(local_id, update_type, cache_miss_type, msg_size);
-#endif
+ if (mEnableStatsRecording)
+ {
+ recordCacheMissEvent(cache_miss_type);
+ }
+ }
+
+ void cacheHitEvent()
+ {
+ if (mEnableStatsRecording)
+ {
+ mObjectCacheHitCount++;
+ }
+ }
+
+ void objectUpdateEvent(const EObjectUpdateType update_type)
+ {
+ if (mEnableStatsRecording)
+ {
+ recordObjectUpdateEvent(update_type);
+ }
}
- void objectUpdateEvent(U32 local_id, const EObjectUpdateType update_type, LLViewerObject * objectp, S32 msg_size)
- {
-#if LL_RECORD_VIEWER_STATS
- recordObjectUpdateEvent(local_id, update_type, objectp, msg_size);
-#endif
+ void cacheFullUpdate(LLViewerRegion::eCacheUpdateResult update_result)
+ {
+ if (mEnableStatsRecording)
+ {
+ recordCacheFullUpdate(update_result);
+ }
}
- void cacheFullUpdate(U32 local_id, const EObjectUpdateType update_type, LLViewerRegion::eCacheUpdateResult update_result, LLViewerObject* objectp, S32 msg_size)
+ void requestCacheMissesEvent(S32 count)
{
-#if LL_RECORD_VIEWER_STATS
- recordCacheFullUpdate(local_id, update_type, update_result, objectp, msg_size);
-#endif
+ if (mEnableStatsRecording)
+ {
+ mObjectCacheMissRequests += count;
+ }
}
- void requestCacheMissesEvent(S32 count)
+ void textureFetch()
{
-#if LL_RECORD_VIEWER_STATS
- recordRequestCacheMissesEvent(count);
-#endif
+ if (mEnableStatsRecording)
+ {
+ mTextureFetchCount += 1;
+ }
}
- void textureFetch(S32 msg_size)
+ void meshLoaded()
{
-#if LL_RECORD_VIEWER_STATS
- recordTextureFetch(msg_size);
-#endif
+ if (mEnableStatsRecording)
+ {
+ mMeshLoadedCount += 1;
+ }
}
- void log(F32 interval)
+ void recordObjectKills(S32 num_objects)
+ {
+ if (mEnableStatsRecording)
+ {
+ mObjectKills += num_objects;
+ }
+ }
+
+ void idle()
{
-#if LL_RECORD_VIEWER_STATS
- writeToLog(interval);
-#endif
+ writeToLog(mInterval);
}
F32 getTimeSinceStart();
private:
- void recordObjectUpdateFailure(U32 local_id, const EObjectUpdateType update_type, S32 msg_size);
- void recordCacheMissEvent(U32 local_id, const EObjectUpdateType update_type, U8 cache_miss_type, S32 msg_size);
- void recordObjectUpdateEvent(U32 local_id, const EObjectUpdateType update_type, LLViewerObject * objectp, S32 msg_size);
- void recordCacheFullUpdate(U32 local_id, const EObjectUpdateType update_type, LLViewerRegion::eCacheUpdateResult update_result, LLViewerObject* objectp, S32 msg_size);
- void recordRequestCacheMissesEvent(S32 count);
- void recordTextureFetch(S32 msg_size);
+ void recordCacheMissEvent(U8 cache_miss_type);
+ void recordObjectUpdateEvent(const EObjectUpdateType update_type);
+ void recordCacheFullUpdate(LLViewerRegion::eCacheUpdateResult update_result);
void writeToLog(F32 interval);
+ void closeStatsFile();
+ void makeStatsFileName();
static LLViewerStatsRecorder* sInstance;
- LLFILE * mObjectCacheFile; // File to write data into
+ LLFILE * mStatsFile; // File to write data into
+ std::string mStatsFileName;
+
LLFrameTimer mTimer;
- F64 mStartTime;
+ F64 mFileOpenTime;
F64 mLastSnapshotTime;
+ F32 mInterval; // Interval between data log writes
+ F32 mMaxDuration; // Time limit on file
+
+ bool mEnableStatsRecording; // Set to true to enable recording stats data
+ bool mEnableStatsLogging; // Set true to write stats to log file
+ bool mSkipSaveIfZeros; // Set true to skip saving stats if all values are zero
S32 mObjectCacheHitCount;
- S32 mObjectCacheHitSize;
S32 mObjectCacheMissFullCount;
- S32 mObjectCacheMissFullSize;
S32 mObjectCacheMissCrcCount;
- S32 mObjectCacheMissCrcSize;
S32 mObjectFullUpdates;
- S32 mObjectFullUpdatesSize;
S32 mObjectTerseUpdates;
- S32 mObjectTerseUpdatesSize;
S32 mObjectCacheMissRequests;
- S32 mObjectCacheMissResponses;
- S32 mObjectCacheMissResponsesSize;
S32 mObjectCacheUpdateDupes;
S32 mObjectCacheUpdateChanges;
S32 mObjectCacheUpdateAdds;
S32 mObjectCacheUpdateReplacements;
S32 mObjectUpdateFailures;
- S32 mObjectUpdateFailuresSize;
- S32 mTextureFetchSize;
-
+ S32 mTextureFetchCount;
+ S32 mMeshLoadedCount;
+ S32 mObjectKills;
void clearStats();
};
#endif // LLVIEWERSTATSRECORDER_H
-
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index 7abb42dd8a..d2701f0aff 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -1194,7 +1194,11 @@ void LLViewerTextEditor::openEmbeddedLandmark( LLPointer<LLInventoryItem> item_p
void LLViewerTextEditor::openEmbeddedCallingcard( LLInventoryItem* item, llwchar wc )
{
- if(item && !item->getCreatorUUID().isNull())
+ if (item && !item->getDescription().empty())
+ {
+ LLAvatarActions::showProfile(LLUUID(item->getDescription()));
+ }
+ else if (item && !item->getCreatorUUID().isNull())
{
LLAvatarActions::showProfile(item->getCreatorUUID());
}
diff --git a/indra/newview/llviewerwearable.h b/indra/newview/llviewerwearable.h
index cc99f6af2f..24b1323b2b 100644
--- a/indra/newview/llviewerwearable.h
+++ b/indra/newview/llviewerwearable.h
@@ -93,7 +93,6 @@ public:
// the wearable was worn. make sure the name of the wearable object matches the LLViewerInventoryItem,
// not the wearable asset itself.
void refreshName();
- /*virtual*/void addToBakedTextureHash(LLMD5& hash) const {}
protected:
LLAssetID mAssetID;
diff --git a/indra/newview/llvoicecallhandler.cpp b/indra/newview/llvoicecallhandler.cpp
index 1e993d1384..95e11abd82 100644
--- a/indra/newview/llvoicecallhandler.cpp
+++ b/indra/newview/llvoicecallhandler.cpp
@@ -38,7 +38,7 @@ public:
{
}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableVoiceCall"))
{
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 150b556284..68d9f4ffab 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -53,7 +53,7 @@ public:
// requests will be throttled from a non-trusted browser
LLVoiceHandler() : LLCommandHandler("voice", UNTRUSTED_THROTTLE) {}
- bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ bool handle(const LLSD& params, const LLSD& query_map, const std::string& grid, LLMediaCtrl* web)
{
if (params[0].asString() == "effects")
{
diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp
index b0af565867..5cb7e7478b 100644
--- a/indra/newview/llvosurfacepatch.cpp
+++ b/indra/newview/llvosurfacepatch.cpp
@@ -408,7 +408,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
LLStrider<U16> &indicesp,
U32 &index_offset)
{
- S32 vertex_count = 0;
S32 i, x, y;
S32 num_vertices;
@@ -443,7 +442,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
normalsp++;
texCoords0p++;
texCoords1p++;
- vertex_count++;
}
// North patch
@@ -456,7 +454,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
normalsp++;
texCoords0p++;
texCoords1p++;
- vertex_count++;
}
@@ -493,7 +490,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
normalsp++;
texCoords0p++;
texCoords1p++;
- vertex_count++;
}
// Iterate through the north patch's points
@@ -507,7 +503,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
normalsp++;
texCoords0p++;
texCoords1p++;
- vertex_count++;
}
@@ -551,7 +546,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
normalsp++;
texCoords0p++;
texCoords1p++;
- vertex_count++;
}
// Iterate through the north patch's points
@@ -565,7 +559,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,
normalsp++;
texCoords0p++;
texCoords1p++;
- vertex_count++;
}
for (i = 0; i < length; i++)
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index bf9a4dfa12..4ddba872f1 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -5110,6 +5110,28 @@ LLControlAVBridge::LLControlAVBridge(LLDrawable* drawablep, LLViewerRegion* regi
mPartitionType = LLViewerRegion::PARTITION_CONTROL_AV;
}
+void LLControlAVBridge::updateSpatialExtents()
+{
+ LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWABLE
+
+ LLControlAvatar* controlAvatar = getVObj()->getControlAvatar();
+
+ LLSpatialGroup* root = (LLSpatialGroup*)mOctree->getListener(0);
+
+ bool rootWasDirty = root->isDirty();
+
+ super::updateSpatialExtents(); // root becomes non-dirty here
+
+ // SL-18251 "On-screen animesh characters using pelvis offset animations
+ // disappear when root goes off-screen"
+ //
+ // Expand extents to include Control Avatar placed outside of the bounds
+ if (controlAvatar && (rootWasDirty || controlAvatar->mPlaying))
+ {
+ root->expandExtents(controlAvatar->mDrawable->getSpatialExtents(), *mDrawable->getXform());
+ }
+}
+
bool can_batch_texture(LLFace* facep)
{
if (facep->getTextureEntry()->getBumpmap())
@@ -6306,7 +6328,6 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
LLSpatialGroup::buffer_map_t buffer_map;
LLViewerTexture* last_tex = NULL;
- S32 buffer_index = 0;
S32 texture_index_channels = 1;
@@ -6319,11 +6340,6 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
{
texture_index_channels = gDeferredAlphaProgram.mFeatures.mIndexedTextureChannels;
}
-
- if (distance_sort)
- {
- buffer_index = -1;
- }
static LLCachedControl<U32> max_texture_index(gSavedSettings, "RenderMaxTextureIndex", 16);
texture_index_channels = llmin(texture_index_channels, (S32) max_texture_index);
@@ -6347,14 +6363,9 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
tex = NULL;
}
- if (last_tex == tex)
- {
- buffer_index++;
- }
- else
+ if (last_tex != tex)
{
last_tex = tex;
- buffer_index = 0;
}
bool bake_sunlight = LLPipeline::sBakeSunlight && facep->getDrawable()->isStatic();
diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
index 89b74ae962..8681f7c14e 100644
--- a/indra/newview/llwearableitemslist.cpp
+++ b/indra/newview/llwearableitemslist.cpp
@@ -104,8 +104,6 @@ BOOL LLPanelWearableOutfitItem::postBuild()
{
LLPanelWearableListItem::postBuild();
- LLViewerInventoryItem* inv_item = getItem();
- mShowWidgets &= (inv_item->getType() != LLAssetType::AT_BODYPART);
if(mShowWidgets)
{
addWidgetToRightSide("add_wearable");
@@ -208,7 +206,12 @@ void LLPanelWearableOutfitItem::updateItem(const std::string& name,
if(mShowWidgets)
{
setShowWidget("add_wearable", !is_worn);
- setShowWidget("remove_wearable", is_worn);
+
+ // Body parts can't be removed, only replaced
+ LLViewerInventoryItem* inv_item = getItem();
+ bool show_remove = is_worn && inv_item && (inv_item->getType() != LLAssetType::AT_BODYPART);
+ setShowWidget("remove_wearable", show_remove);
+
if(mHovered)
{
setWidgetsVisible(true);
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 8f46e66551..6dd58518c5 100755
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -50,6 +50,7 @@
#include "lltextureview.h"
#include "lltracker.h"
#include "llviewercamera.h"
+#include "llviewernetwork.h"
#include "llviewertexture.h"
#include "llviewertexturelist.h"
#include "llviewerregion.h"
@@ -1829,7 +1830,7 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
// Invoke the event details floater if someone is clicking on an event.
LLSD params(LLSD::emptyArray());
params.append(event_id);
- LLCommandDispatcher::dispatch("event", params, LLSD(), NULL, LLCommandHandler::NAV_TYPE_CLICKED, true);
+ LLCommandDispatcher::dispatch("event", params, LLSD(), LLGridManager::getInstance()->getGrid(), NULL, LLCommandHandler::NAV_TYPE_CLICKED, true);
break;
}
case MAP_ITEM_LAND_FOR_SALE:
diff --git a/indra/newview/skins/default/xui/da/floater_animation_preview.xml b/indra/newview/skins/default/xui/da/floater_animation_preview.xml
deleted file mode 100644
index adf96841c0..0000000000
--- a/indra/newview/skins/default/xui/da/floater_animation_preview.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Animation Preview" title="">
- <floater.string name="failed_to_initialize">
- Fejlede at starte bevægelse
- </floater.string>
- <floater.string name="anim_too_long">
- Animations filen er [LENGTH] sekunder lang.
-
-Maksimal animations længde er [MAX_LENGTH] sekunder.
- </floater.string>
- <floater.string name="failed_file_read">
- Kan ikke læse animations fil.
-
-[STATUS]
- </floater.string>
- <floater.string name="E_ST_OK">
- OK
- </floater.string>
- <floater.string name="E_ST_EOF">
- Fil afsluttet for tidligt.
- </floater.string>
- <floater.string name="E_ST_NO_CONSTRAINT">
- Kan ikke læse &quot;constraint definition&quot;.
- </floater.string>
- <floater.string name="E_ST_NO_FILE">
- Kan ikke åbne BVH fil.
- </floater.string>
- <floater.string name="E_ST_NO_HIER">
- Ugyldig header i HIERARCHY.
- </floater.string>
- <floater.string name="E_ST_NO_JOINT">
- Kan ikke finde &quot;ROOT&quot; eller &quot;JOINT&quot;.
- </floater.string>
- <floater.string name="E_ST_NO_NAME">
- Kan ikke finde JOINT navn.
- </floater.string>
- <floater.string name="E_ST_NO_OFFSET">
- Kan ikke finde OFFSET.
- </floater.string>
- <floater.string name="E_ST_NO_CHANNELS">
- Kan ikke finde CHANNELS.
- </floater.string>
- <floater.string name="E_ST_NO_ROTATION">
- Kan ikke læse &quot;rotation order&quot;.
- </floater.string>
- <floater.string name="E_ST_NO_AXIS">
- Kan ikke finde rotationsakser.
- </floater.string>
- <floater.string name="E_ST_NO_MOTION">
- Kan ikke finde MOTION.
- </floater.string>
- <floater.string name="E_ST_NO_FRAMES">
- Kan ikke læse antal &quot;frames&quot;.
- </floater.string>
- <floater.string name="E_ST_NO_FRAME_TIME">
- Kan ikke læse &quot;frame time&quot;.
- </floater.string>
- <floater.string name="E_ST_NO_POS">
- Kan ikke læse positionsværdier.
- </floater.string>
- <floater.string name="E_ST_NO_ROT">
- Kan ikke læse rotationsværdier.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_FILE">
- kan ikke åbne &quot;translation file&quot;.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_HEADER">
- Kan ikke læse &quot;translation header.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_NAME">
- Kan ikke aflæse &quot;translation&quot; navne.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_IGNORE">
- Kan ikke læse &quot;translation ignore&quot; værdi.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_RELATIVE">
- Kan ikke læse &quot;translation relative&quot; værdi.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_OUTNAME">
- Kan ikke læse &quot;translation outname&quot; værdi.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_MATRIX">
- Kan ikke læse &quot;translation matrix&quot;.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_MERGECHILD">
- Kan ikke læse &quot;mergechild&quot; navn.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_MERGEPARENT">
- Kan ikke læse &quot;mergeparent&quot; navn.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_PRIORITY">
- Kan ikke finde prioritetsværdi.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_LOOP">
- Kan ikke læse &quot;loop&quot; værdi.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_EASEIN">
- kan ikke læse &quot;easeIn&quot; værdier.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_EASEOUT">
- Kan ikke læse &quot;easeOut&quot; værdier.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_HAND">
- Kan ikke læse &quot;hand morph&quot; værdi.
- </floater.string>
- <floater.string name="E_ST_NO_XLT_EMOTE">
- kan ikke læse &quot;emote&quot; navn.
- </floater.string>
- <floater.string name="E_ST_BAD_ROOT">
- Incorrect root joint name, use &quot;hip&quot;.
- </floater.string>
- <text name="name_label">
- Navn:
- </text>
- <text name="description_label">
- Beskrivelse:
- </text>
- <spinner label="Prioritet" name="priority" tool_tip="Vælg hvilke andre animationer der &quot;overstyres&quot; af denne"/>
- <check_box label="Gentag" name="loop_check" tool_tip="Gentager animationen konstant"/>
- <spinner label="Ind(%)" label_width="40" left="76" name="loop_in_point" tool_tip="Sætter punktet hvor gentagelsen genstarter fra" width="105"/>
- <spinner label="Ud (%)" name="loop_out_point" tool_tip="Sætter punktet i animationen der afslutter gentagelsen"/>
- <text name="hand_label">
- Hånd posering
- </text>
- <combo_box label="" name="hand_pose_combo" tool_tip="Kontrollerer hvad hænderne går i løbet af animationen" width="140">
- <combo_box.item label="Spredt" name="Spread"/>
- <combo_box.item label="Afslappet" name="Relaxed"/>
- <combo_box.item label="Peg begge" name="PointBoth"/>
- <combo_box.item label="Knytnæver" name="Fist"/>
- <combo_box.item label="Afslappet venstre" name="RelaxedLeft"/>
- <combo_box.item label="Peg venstre" name="PointLeft"/>
- <combo_box.item label="Knytnæve venstre" name="FistLeft"/>
- <combo_box.item label="Afslappet højre" name="RelaxedRight"/>
- <combo_box.item label="peg højre" name="PointRight"/>
- <combo_box.item label="knytnæve højre" name="FistRight"/>
- <combo_box.item label="Honnør højre" name="SaluteRight"/>
- <combo_box.item label="Skrivende" name="Typing"/>
- <combo_box.item label="Fredstegn højre" name="PeaceRight"/>
- </combo_box>
- <text name="emote_label">
- Ansigtsudtryk
- </text>
- <combo_box label="" name="emote_combo" tool_tip="Angiver hvad ansigtet gør under animationen" width="140">
- <item label="(Intet)" name="[None]" value=""/>
- <item label="Aaaaah" name="Aaaaah" value="Aaaaah"/>
- <item label="Bange" name="Afraid" value="Bange"/>
- <item label="Vred" name="Angry" value="Vred"/>
- <item label="Stort smil" name="BigSmile" value="Stort smil"/>
- <item label="Keder sig" name="Bored" value="Keder sig"/>
- <item label="Græder" name="Cry" value="Grædende"/>
- <item label="Forarget" name="Disdain" value="Foragt"/>
- <item label="Flov" name="Embarrassed" value="Embarrassed"/>
- <item label="Skuler" name="Frown" value="Alvorlig"/>
- <item label="Kysser" name="Kiss" value="Kys"/>
- <item label="Griner" name="Laugh" value="Leende"/>
- <item label="Plllppt" name="Plllppt" value="Plllppt"/>
- <item label="Frastødt" name="Repulsed" value="Frastødt"/>
- <item label="Ked af det" name="Sad" value="Ked af det"/>
- <item label="Skuldertræk" name="Shrug" value="Skuldertræk"/>
- <item label="Smil" name="Smile" value="Smilende"/>
- <item label="Overrasket" name="Surprise" value="Overrasket"/>
- <item label="Blinker" name="Wink" value="Blink"/>
- <item label="Bekymret" name="Worry" value="Bekymret"/>
- </combo_box>
- <text name="preview_label">
- Vis mens
- </text>
- <combo_box label="" name="preview_base_anim" tool_tip="Se hvordan animation ser ud i forskellige typiske avatar-situationer." width="140">
- <item label="Stående" name="Standing" value="Stående"/>
- <item label="Gående" name="Walking" value="Gående"/>
- <item label="Sidder" name="Sitting" value="Siddende"/>
- <item label="Flyver" name="Flying" value="Flyvende"/>
- </combo_box>
- <spinner label="start (sec)" name="ease_in_time" tool_tip="Tid (i sekunder) animationen bruger på at komme i gang."/>
- <spinner label="Afslut (sec)" name="ease_out_time" tool_tip="Tid (i sekunder) animationen bruger på at afslutte"/>
- <button label="" name="play_btn" tool_tip="Start din animation"/>
- <button name="pause_btn" tool_tip="Pause din animation"/>
- <button label="" name="stop_btn" tool_tip="Stop afspilning af animation"/>
- <slider label="" name="playback_slider"/>
- <text name="bad_animation_text">
- Kan ikke læse animations fil.
-
-Vi anbefaler BVH filer der er exporteret fra Poser 4.
- </text>
- <button label="Hent (L$[AMOUNT])" name="ok_btn"/>
- <button label="Annullér" name="cancel_btn"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_inventory.xml b/indra/newview/skins/default/xui/da/floater_inventory.xml
deleted file mode 100644
index 3a4b0fbd6b..0000000000
--- a/indra/newview/skins/default/xui/da/floater_inventory.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Inventory" title="MIN BEHOLDNING">
- <floater.string name="Title">
- MIN BEHOLDNING
- </floater.string>
- <floater.string name="TitleFetching">
- MIN BEHOLDNING (Henter [ITEM_COUNT] genstande...) [FILTER]
- </floater.string>
- <floater.string name="TitleCompleted">
- MIN BEHOLDNING ([ITEM_COUNT] genstande) [FILTER]
- </floater.string>
- <floater.string name="Fetched">
- Hentet
- </floater.string>
- <panel label="Beholdningspanel" name="Inventory Panel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_nearby_chat.xml b/indra/newview/skins/default/xui/da/floater_nearby_chat.xml
deleted file mode 100644
index 76bc40edac..0000000000
--- a/indra/newview/skins/default/xui/da/floater_nearby_chat.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT NÆRVED">
- <check_box label="Oversæt chat" name="translate_chat_checkbox"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_perm_prefs.xml b/indra/newview/skins/default/xui/da/floater_perm_prefs.xml
deleted file mode 100644
index eecddbcdb0..0000000000
--- a/indra/newview/skins/default/xui/da/floater_perm_prefs.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="STANDARD RETTIGHEDER">
- <panel label="Tilladelser" name="permissions">
- <button label="?" label_selected="?" name="help"/>
- <check_box label="Del med gruppe" name="share_with_group"/>
- <check_box label="Tillad enhver at kopiere" name="everyone_copy"/>
- <text name="NextOwnerLabel">
- Næste ejer kan:
- </text>
- <check_box label="Redigere" name="next_owner_modify"/>
- <check_box label="Kopiére" name="next_owner_copy"/>
- <check_box label="Sælge/Give væk" name="next_owner_transfer"/>
- </panel>
- <button label="OK" label_selected="OK" name="ok"/>
- <button label="Annullér" label_selected="Annullér" name="cancel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_postcard.xml b/indra/newview/skins/default/xui/da/floater_postcard.xml
deleted file mode 100644
index 44b0fd4faa..0000000000
--- a/indra/newview/skins/default/xui/da/floater_postcard.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Postcard" title="EMAIL FOTO">
- <text name="to_label">
- Send til:
- </text>
- <text name="from_label">
- Din e-mail:
- </text>
- <text name="name_label">
- Dit navn:
- </text>
- <text name="subject_label">
- Emne:
- </text>
- <line_editor label="Skriv dit emne her." name="subject_form"/>
- <text name="msg_label">
- Besked:
- </text>
- <text_editor name="msg_form">
- Skriv din besked her.
- </text_editor>
- <text name="fine_print">
- Hvis din modtager opretter en konto i SL, vil du få en henvisnings bonus.
- </text>
- <button label="Annullér" name="cancel_btn"/>
- <button label="Send" name="send_btn"/>
- <string name="default_subject">
- Postkort fra [SECOND_LIFE].
- </string>
- <string name="default_message">
- Tjek det her ud!
- </string>
- <string name="upload_message">
- Sender...
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_voice_controls.xml b/indra/newview/skins/default/xui/da/floater_voice_controls.xml
deleted file mode 100644
index 69de696bf5..0000000000
--- a/indra/newview/skins/default/xui/da/floater_voice_controls.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_voice_controls" title="Stemme opsætning">
- <string name="title_nearby">
- STEMMER NÆR
- </string>
- <string name="title_group">
- Gruppe opkald med [GROUP]
- </string>
- <string name="title_adhoc">
- Konference kald
- </string>
- <string name="title_peer_2_peer">
- Opkald med [NAME]
- </string>
- <string name="no_one_near">
- Ingen i nærheden har aktiveret stemmer
- </string>
- <layout_stack name="my_call_stack">
- <layout_panel name="my_panel">
- <text name="user_text" value="Min avatar:"/>
- </layout_panel>
- <layout_panel name="leave_call_panel">
- <layout_stack name="voice_effect_and_leave_call_stack">
- <layout_panel name="leave_call_btn_panel">
- <button label="Forlad samtale" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </layout_panel>
- </layout_stack>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/menu_bottomtray.xml b/indra/newview/skins/default/xui/da/menu_bottomtray.xml
deleted file mode 100644
index a0d74db36d..0000000000
--- a/indra/newview/skins/default/xui/da/menu_bottomtray.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="hide_camera_move_controls_menu">
- <menu_item_check label="Tal knap" name="EnableVoiceChat"/>
- <menu_item_check label="Faste bevægelser" name="ShowGestureButton"/>
- <menu_item_check label="Bevægelse knap" name="ShowMoveButton"/>
- <menu_item_check label="Vis knap" name="ShowCameraButton"/>
- <menu_item_check label="Foto knap" name="ShowSnapshotButton"/>
- <menu_item_check label="Bygge knap" name="ShowBuildButton"/>
- <menu_item_check label="Søge knap" name="ShowSearchButton"/>
- <menu_item_check label="Kort knap" name="ShowWorldMapButton"/>
- <menu_item_check label="Mini-Map button" name="ShowMiniMapButton"/>
- <menu_item_call label="Klip" name="NearbyChatBar_Cut"/>
- <menu_item_call label="Kopiér" name="NearbyChatBar_Copy"/>
- <menu_item_call label="Sæt ind" name="NearbyChatBar_Paste"/>
- <menu_item_call label="Slet" name="NearbyChatBar_Delete"/>
- <menu_item_call label="Vælg alt" name="NearbyChatBar_Select_All"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml
deleted file mode 100644
index 8da35adb1b..0000000000
--- a/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="Profil" name="view_profile"/>
- <menu_item_call label="Tilføj ven" name="add_friend"/>
- <menu_item_call label="Besked" name="im"/>
- <menu_item_call label="Opkald" name="call"/>
- <menu_item_call label="Teleportér" name="teleport"/>
- <menu_item_call label="Invitér til gruppe" name="invite_to_group"/>
- <menu_item_call label="Blokér" name="block"/>
- <menu_item_call label="Fjern blokering" name="unblock"/>
- <menu_item_call label="Rapportér" name="report"/>
- <menu_item_call label="Frys" name="freeze"/>
- <menu_item_call label="Smid ud" name="eject"/>
- <menu_item_call label="Spark" name="kick"/>
- <menu_item_call label="CSR" name="csr"/>
- <menu_item_call label="Debug teksturer" name="debug"/>
- <menu_item_call label="Find på kort" name="find_on_map"/>
- <menu_item_call label="Zoom ind" name="zoom_in"/>
- <menu_item_call label="Betal" name="pay"/>
- <menu_item_call label="Del" name="share"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml
deleted file mode 100644
index 887c6484bc..0000000000
--- a/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="Sid ned" name="Sit Down Here"/>
- <menu_item_call label="Stå op" name="Stand Up"/>
- <context_menu label="Tag af" name="Take Off &gt;">
- <context_menu label="Tøj" name="Clothes &gt;">
- <menu_item_call label="Trøje" name="Shirt"/>
- <menu_item_call label="Bukser" name="Pants"/>
- <menu_item_call label="Nederdel" name="Skirt"/>
- <menu_item_call label="Sko" name="Shoes"/>
- <menu_item_call label="Strømper" name="Socks"/>
- <menu_item_call label="Jakke" name="Jacket"/>
- <menu_item_call label="Handsker" name="Gloves"/>
- <menu_item_call label="Undertrøje" name="Self Undershirt"/>
- <menu_item_call label="Underbukser" name="Self Underpants"/>
- <menu_item_call label="Tatovering" name="Self Tattoo"/>
- <menu_item_call label="Alpha" name="Self Alpha"/>
- <menu_item_call label="Alt tøj" name="All Clothes"/>
- </context_menu>
- <context_menu label="HUD" name="Object Detach HUD"/>
- <context_menu label="Tag af" name="Object Detach"/>
- <menu_item_call label="Tag alt af" name="Detach All"/>
- </context_menu>
- <menu_item_call label="Skift sæt" name="Chenge Outfit"/>
- <menu_item_call label="Redigér sæt" name="Edit Outfit"/>
- <menu_item_call label="Redigér min figur" name="Edit My Shape"/>
- <menu_item_call label="Mine venner" name="Friends..."/>
- <menu_item_call label="Mine grupper" name="Groups..."/>
- <menu_item_call label="Min profil" name="Profile..."/>
- <menu_item_call label="Debug teksturer" name="Debug..."/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml
deleted file mode 100644
index 32c5e6a6c7..0000000000
--- a/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Sortér efter navn" name="sort_name"/>
- <menu_item_check label="Sortér efter status" name="sort_status"/>
- <menu_item_check label="Vis person ikoner" name="view_icons"/>
- <menu_item_check label="Vis tildelte rettigheder" name="view_permissions"/>
- <menu_item_call label="Vis blokerede beboere og objekter" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/da/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_groups_view_sort.xml
deleted file mode 100644
index 0b9a791530..0000000000
--- a/indra/newview/skins/default/xui/da/menu_people_groups_view_sort.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Vis gruppe ikoner" name="Display Group Icons"/>
- <menu_item_call label="Forlad valgte gruppe" name="Leave Selected Group"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/da/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_nearby_view_sort.xml
deleted file mode 100644
index 2f35ff3c92..0000000000
--- a/indra/newview/skins/default/xui/da/menu_people_nearby_view_sort.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Sortér efter tidligere talere" name="sort_by_recent_speakers"/>
- <menu_item_check label="Sortér efter navn" name="sort_name"/>
- <menu_item_check label="Sortér efter afstand" name="sort_distance"/>
- <menu_item_check label="Se ikoner for personer" name="view_icons"/>
- <menu_item_call label="Vis blokerede beboere og objekter" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/da/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_recent_view_sort.xml
deleted file mode 100644
index d081f637f2..0000000000
--- a/indra/newview/skins/default/xui/da/menu_people_recent_view_sort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Sortér efter nyeste" name="sort_most"/>
- <menu_item_check label="Sortér efter navn" name="sort_name"/>
- <menu_item_check label="Vis person ikoner" name="view_icons"/>
- <menu_item_call label="Vis blokerede beboere og objekter" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml
deleted file mode 100644
index 1953fad31f..0000000000
--- a/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="call_btn_panel">
- <button label="Opkald" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Forlad opkald" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Stemmekontroller" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_bottomtray.xml b/indra/newview/skins/default/xui/da/panel_bottomtray.xml
deleted file mode 100644
index 3cd9d55dd0..0000000000
--- a/indra/newview/skins/default/xui/da/panel_bottomtray.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="bottom_tray">
- <string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
- <string name="SpeakBtnToolTip" value="Slå mikrofon til/fra"/>
- <string name="VoiceControlBtnToolTip" value="Vis/skjul stemme kontrolpanel"/>
- <layout_stack name="toolbar_stack">
- <layout_panel name="speak_panel">
- <talk_button name="talk">
- <speak_button label="Tal" label_selected="Tal" name="speak_btn"/>
- </talk_button>
- </layout_panel>
- <layout_panel name="gesture_panel">
- <gesture_combo_list label="Bevægelse" name="Gesture" tool_tip="Skjuler/viser bevægelser"/>
- </layout_panel>
- <layout_panel name="movement_panel">
- <bottomtray_button label="Flyt" name="movement_btn" tool_tip="Vis/skjul bevægelseskontroller"/>
- </layout_panel>
- <layout_panel name="cam_panel">
- <bottomtray_button label="Vis" name="camera_btn" tool_tip="Vis/Skjul kamerakontroller"/>
- </layout_panel>
- <layout_panel name="snapshot_panel">
- <bottomtray_button label="" name="snapshots" tool_tip="Tag foto"/>
- </layout_panel>
- <layout_panel name="build_btn_panel">
- <bottomtray_button label="Byg" name="build_btn" tool_tip="Vis/skjul byggeværktøjer"/>
- </layout_panel>
- <layout_panel name="search_btn_panel">
- <bottomtray_button label="Søg" name="search_btn" tool_tip="Vis/skjul søgning"/>
- </layout_panel>
- <layout_panel name="world_map_btn_panel">
- <bottomtray_button label="Kort" name="world_map_btn" tool_tip="Vis/skjul verdenskort"/>
- </layout_panel>
- <layout_panel name="mini_map_btn_panel">
- <bottomtray_button label="Mini-kort" name="mini_map_btn" tool_tip="Vis/skjul Mini-kort"/>
- </layout_panel>
- <layout_panel name="im_well_panel">
- <chiclet_im_well name="im_well">
- <button name="Unread IM messages" tool_tip="Konversationer"/>
- </chiclet_im_well>
- </layout_panel>
- <layout_panel name="notification_well_panel">
- <chiclet_notification name="notification_well">
- <button name="Unread" tool_tip="Notifikationer"/>
- </chiclet_notification>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_group_control_panel.xml b/indra/newview/skins/default/xui/da/panel_group_control_panel.xml
deleted file mode 100644
index 26fe4f6ebe..0000000000
--- a/indra/newview/skins/default/xui/da/panel_group_control_panel.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="group_info_btn_panel">
- <button label="Gruppe profil" name="group_info_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Opkald gruppe" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Forlad opkald" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Åben stemmekontroller" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_im_control_panel.xml b/indra/newview/skins/default/xui/da/panel_im_control_panel.xml
deleted file mode 100644
index 5cecb93d40..0000000000
--- a/indra/newview/skins/default/xui/da/panel_im_control_panel.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="button_stack">
- <layout_panel name="view_profile_btn_panel">
- <button label="Profil" name="view_profile_btn"/>
- </layout_panel>
- <layout_panel name="add_friend_btn_panel">
- <button label="Tilføj ven" name="add_friend_btn"/>
- </layout_panel>
- <layout_panel name="teleport_btn_panel">
- <button label="Teleport" name="teleport_btn" tool_tip="Tilbyd teleport til denne person"/>
- </layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Del" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Betal" name="pay_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Opkald" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Afslut kald" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Stemme kontroller" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/da/panel_region_texture.xml b/indra/newview/skins/default/xui/da/panel_region_texture.xml
deleted file mode 100644
index c8a3ad328e..0000000000
--- a/indra/newview/skins/default/xui/da/panel_region_texture.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Terræn textures" name="Textures">
- <text name="region_text_lbl">
- Region:
- </text>
- <text name="region_text">
- ukendt
- </text>
- <text name="detail_texture_text">
- Terræn teksturer (kræver 1024x1024, 24 bit .tga filer)
- </text>
- <text name="height_text_lbl">
- 1 (Lav)
- </text>
- <text name="height_text_lbl2">
- 2
- </text>
- <text name="height_text_lbl3">
- 3
- </text>
- <text name="height_text_lbl4">
- 4 (Høj)
- </text>
- <text name="height_text_lbl5">
- Texture højde intervaller
- </text>
- <text name="height_text_lbl6">
- Nordvest
- </text>
- <text name="height_text_lbl7">
- Nordøst
- </text>
- <text name="height_text_lbl8">
- Sydvest
- </text>
- <text name="height_text_lbl9">
- Sydøst
- </text>
- <spinner label="Lav" name="height_start_spin_0"/>
- <spinner label="Lav" name="height_start_spin_1"/>
- <spinner label="Lav" name="height_start_spin_2"/>
- <spinner label="Lav" name="height_start_spin_3"/>
- <spinner label="Høj" name="height_range_spin_0"/>
- <spinner label="Høj" name="height_range_spin_1"/>
- <spinner label="Høj" name="height_range_spin_2"/>
- <spinner label="Høj" name="height_range_spin_3"/>
- <text name="height_text_lbl10">
- Disse værdier repræsenterer blandingsforhold for teksturer ovenfor.
- </text>
- <text name="height_text_lbl11">
- Målt i meter, angiver LAV værdien MAKSIMUM højden for tekstur 1 og HØJ værdien er MINIMUMSshøjden for tekstur 4.
- </text>
- <text name="height_text_lbl12">
- og HØJ værdien er MIMIMUM højde for texture nummer 4.
- </text>
- <button label="Gem" name="apply_btn"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/floater_chat_bar.xml b/indra/newview/skins/default/xui/de/floater_chat_bar.xml
deleted file mode 100644
index ab77d4dae5..0000000000
--- a/indra/newview/skins/default/xui/de/floater_chat_bar.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT IN DER NÄHE">
- <panel name="bottom_panel">
- <line_editor label="Zum Chatten hier klicken." name="chat_box" tool_tip="Eingabetaste zum Sprechen, Strg+Eingabe zum Rufen"/>
- <button name="show_nearby_chat" tool_tip="Chatprotokoll in der Nähe ein-/ausblenden"/>
- </panel>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_perm_prefs.xml b/indra/newview/skins/default/xui/de/floater_perm_prefs.xml
deleted file mode 100644
index 9be22f3ccb..0000000000
--- a/indra/newview/skins/default/xui/de/floater_perm_prefs.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="STANDARD-BERECHTIGUNGEN FÜR HOCHLADEN">
- <panel label="Berechtigungen" name="permissions">
- <button label="?" label_selected="?" name="help"/>
- <check_box label="Mit Gruppe teilen" name="share_with_group"/>
- <check_box label="Kopieren allen erlauben" name="everyone_copy"/>
- <text name="NextOwnerLabel">
- Nächster Eigentümer kann:
- </text>
- <check_box label="Bearbeiten" name="next_owner_modify"/>
- <check_box label="Kopieren" name="next_owner_copy"/>
- <check_box label="Verkaufen/Weggeben" name="next_owner_transfer"/>
- </panel>
- <button label="OK" label_selected="OK" name="ok"/>
- <button label="Abbrechen" label_selected="Abbrechen" name="cancel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_voice_controls.xml b/indra/newview/skins/default/xui/de/floater_voice_controls.xml
deleted file mode 100644
index 5efda4136e..0000000000
--- a/indra/newview/skins/default/xui/de/floater_voice_controls.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_voice_controls" title="SPRACHSTEUERUNGEN">
- <string name="title_nearby">
- VOICE-EINSTELLUNGEN
- </string>
- <string name="title_group">
- GRUPPENGESPRÄCH MIT [GROUP]
- </string>
- <string name="title_adhoc">
- KONFERENZGESPRÄCH
- </string>
- <string name="title_peer_2_peer">
- GESPRÄCH MIT [NAME]
- </string>
- <string name="no_one_near">
- Es ist niemand in der Nähe, der Voice aktiviert hat.
- </string>
- <layout_stack name="my_call_stack">
- <layout_panel name="my_panel">
- <text name="user_text" value="Mein Avatar:"/>
- </layout_panel>
- <layout_panel name="leave_call_panel">
- <layout_stack name="voice_effect_and_leave_call_stack">
- <layout_panel name="leave_call_btn_panel">
- <button label="Anruf beenden" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </layout_panel>
- </layout_stack>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml
deleted file mode 100644
index 641a0ceebe..0000000000
--- a/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="Profil anzeigen" name="view_profile"/>
- <menu_item_call label="Freund hinzufügen" name="add_friend"/>
- <menu_item_call label="IM" name="im"/>
- <menu_item_call label="Anrufen" name="call"/>
- <menu_item_call label="Teleportieren" name="teleport"/>
- <menu_item_call label="In Gruppe einladen" name="invite_to_group"/>
- <menu_item_call label="Ignorieren" name="block"/>
- <menu_item_call label="Freischalten" name="unblock"/>
- <menu_item_call label="Melden" name="report"/>
- <menu_item_call label="Einfrieren" name="freeze"/>
- <menu_item_call label="Hinauswerfen" name="eject"/>
- <menu_item_call label="Hinauswerfen" name="kick"/>
- <menu_item_call label="CSR" name="csr"/>
- <menu_item_call label="Fehler in Texturen beseitigen" name="debug"/>
- <menu_item_call label="Auf Karte anzeigen" name="find_on_map"/>
- <menu_item_call label="Hineinzoomen" name="zoom_in"/>
- <menu_item_call label="Bezahlen" name="pay"/>
- <menu_item_call label="Teilen" name="share"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml
deleted file mode 100644
index 5979194bfb..0000000000
--- a/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="Hinsetzen" name="Sit Down Here"/>
- <menu_item_call label="Aufstehen" name="Stand Up"/>
- <context_menu label="Ausziehen" name="Take Off &gt;">
- <context_menu label="Kleidung" name="Clothes &gt;">
- <menu_item_call label="Hemd" name="Shirt"/>
- <menu_item_call label="Hose" name="Pants"/>
- <menu_item_call label="Rock" name="Skirt"/>
- <menu_item_call label="Schuhe" name="Shoes"/>
- <menu_item_call label="Strümpfe" name="Socks"/>
- <menu_item_call label="Jacke" name="Jacket"/>
- <menu_item_call label="Handschuhe" name="Gloves"/>
- <menu_item_call label="Unterhemd" name="Self Undershirt"/>
- <menu_item_call label="Unterhose" name="Self Underpants"/>
- <menu_item_call label="Tätowierung" name="Self Tattoo"/>
- <menu_item_call label="Alpha" name="Self Alpha"/>
- <menu_item_call label="Alle Kleider" name="All Clothes"/>
- </context_menu>
- <context_menu label="HUD" name="Object Detach HUD"/>
- <context_menu label="Abnehmen" name="Object Detach"/>
- <menu_item_call label="Alles abnehmen" name="Detach All"/>
- </context_menu>
- <menu_item_call label="Outfit ändern" name="Chenge Outfit"/>
- <menu_item_call label="Mein Outfit bearbeiten" name="Edit Outfit"/>
- <menu_item_call label="Meine Form bearbeiten" name="Edit My Shape"/>
- <menu_item_call label="Meine Freunde" name="Friends..."/>
- <menu_item_call label="Meine Gruppen" name="Groups..."/>
- <menu_item_call label="Mein Profil" name="Profile..."/>
- <menu_item_call label="Fehler in Texturen beseitigen" name="Debug..."/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_name_field.xml b/indra/newview/skins/default/xui/de/menu_name_field.xml
deleted file mode 100644
index 1d293c9361..0000000000
--- a/indra/newview/skins/default/xui/de/menu_name_field.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="CopyMenu">
- <menu_item_call label="Anzeigenamen kopieren" name="copy_display"/>
- <menu_item_call label="Agent-Namen kopieren" name="copy_name"/>
- <menu_item_call label="Agent-ID kopieren" name="copy_id"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml
deleted file mode 100644
index 84d9d8938c..0000000000
--- a/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Nach Name sortieren" name="sort_name"/>
- <menu_item_check label="Nach Status sortieren" name="sort_status"/>
- <menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
- <menu_item_check label="Erteilte Genehmigungen anzeigen" name="view_permissions"/>
- <menu_item_call label="Ignorierte Einwohner &amp; Objekte anzeigen" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_groups_view_sort.xml
deleted file mode 100644
index b68597d8aa..0000000000
--- a/indra/newview/skins/default/xui/de/menu_people_groups_view_sort.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Gruppensymbole anzeigen" name="Display Group Icons"/>
- <menu_item_call label="Ausgewählte Gruppe verlassen" name="Leave Selected Group"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml
deleted file mode 100644
index a001544f3e..0000000000
--- a/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Nach letzten Sprechern sortieren" name="sort_by_recent_speakers"/>
- <menu_item_check label="Nach Name sortieren" name="sort_name"/>
- <menu_item_check label="Nach Entfernung sortieren" name="sort_distance"/>
- <menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
- <menu_item_check label="Karte anzeigen" name="view_map"/>
- <menu_item_call label="Ignorierte Einwohner &amp; Objekte anzeigen" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_recent_view_sort.xml
deleted file mode 100644
index 1ef020f5e1..0000000000
--- a/indra/newview/skins/default/xui/de/menu_people_recent_view_sort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Nach aktuellesten Sprechern sortieren" name="sort_most"/>
- <menu_item_check label="Nach Name sortieren" name="sort_name"/>
- <menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
- <menu_item_call label="Ignorierte Einwohner &amp; Objekte anzeigen" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/de/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/de/panel_adhoc_control_panel.xml
deleted file mode 100644
index 6ad18781f5..0000000000
--- a/indra/newview/skins/default/xui/de/panel_adhoc_control_panel.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="call_btn_panel">
- <button label="Anrufen" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Anruf beenden" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Voice-Steuerung" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_facebook_account.xml b/indra/newview/skins/default/xui/de/panel_facebook_account.xml
deleted file mode 100644
index caa5f55186..0000000000
--- a/indra/newview/skins/default/xui/de/panel_facebook_account.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<panel name="panel_facebook_account">
- <string name="facebook_connected" value="Sie sind mit Facebook verbunden als:"/>
- <string name="facebook_disconnected" value="Nicht mit Facebook verbunden"/>
- <text name="account_caption_label">
- Nicht mit Facebook verbunden.
- </text>
- <panel name="panel_buttons">
- <button label="Verbinden..." name="connect_btn"/>
- <button label="Trennen" name="disconnect_btn"/>
- <text name="account_learn_more_label">
- [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Anweisungen zum Posten auf Facebook]
- </text>
- </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_control_panel.xml b/indra/newview/skins/default/xui/de/panel_group_control_panel.xml
deleted file mode 100644
index 9cb72fafff..0000000000
--- a/indra/newview/skins/default/xui/de/panel_group_control_panel.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="group_info_btn_panel">
- <button label="Gruppenprofil" name="group_info_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Gruppe anrufen" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Anruf beenden" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Voice-Steuerung öffnen" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_im_control_panel.xml b/indra/newview/skins/default/xui/de/panel_im_control_panel.xml
deleted file mode 100644
index abf8011d9d..0000000000
--- a/indra/newview/skins/default/xui/de/panel_im_control_panel.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <text name="avatar_name" value="Unbekannt"/>
- <layout_stack name="button_stack">
- <layout_panel name="view_profile_btn_panel">
- <button label="Profil" name="view_profile_btn"/>
- </layout_panel>
- <layout_panel name="add_friend_btn_panel">
- <button label="Freund hinzufügen" name="add_friend_btn"/>
- </layout_panel>
- <layout_panel name="teleport_btn_panel">
- <button label="Teleportieren" name="teleport_btn" tool_tip="Dieser Person einen Teleport anbieten."/>
- </layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Teilen" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Bezahlen" name="pay_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Anrufen" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Anruf beenden" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Voice-Steuerung" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_profile_interests.xml b/indra/newview/skins/default/xui/de/panel_profile_interests.xml
deleted file mode 100644
index 0f36f76aa0..0000000000
--- a/indra/newview/skins/default/xui/de/panel_profile_interests.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Interessen" name="panel_profile_interests">
- <text name="I Want To:">
- Ich möchte:
- </text>
- <check_box label="Erstellen" name="chk0"/>
- <check_box label="Erkunden" name="chk1"/>
- <check_box label="Treffen" name="chk2"/>
- <check_box label="Angestellt werden" name="chk6"/>
- <check_box label="Gruppe" name="chk3"/>
- <check_box label="Kaufen" name="chk4"/>
- <check_box label="Verkaufen" name="chk5"/>
- <check_box label="Anstellen" name="chk7"/>
- <line_editor name="want_to_edit">
- (wird geladen...)
- </line_editor>
- <text name="Skills:">
- Fähigkeiten:
- </text>
- <check_box label="Texturen" name="schk0"/>
- <check_box label="Architektur" name="schk1"/>
- <check_box label="Modellierung" name="schk3"/>
- <check_box label="Eventplanung" name="schk2"/>
- <check_box label="Scripting" name="schk4"/>
- <check_box label="Benutzerdefinierte Charaktere" name="schk5"/>
- <line_editor name="skills_edit">
- (wird geladen...)
- </line_editor>
- <text name="Languages:">
- Sprachen:
- </text>
- <line_editor name="languages_edit">
- (wird geladen...)
- </line_editor>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index d9b0ac0060..684470e0fc 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -1114,11 +1114,15 @@
label="Open"
name="Open"
value="Open" />
- <combo_box.item
+ <combo_box.item
label="Zoom"
name="Zoom"
value="Zoom" />
<combo_box.item
+ label="Ignore object"
+ name="Ignoreobject"
+ value="Ignore" />
+ <combo_box.item
label="None"
name="None"
value="None" />
diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml
index b82fe43e74..a8b4b84ab7 100644
--- a/indra/newview/skins/default/xui/en/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/en/floater_top_objects.xml
@@ -273,4 +273,17 @@
<button.commit_callback
function="TopObjects.ReturnAll" />
</button>
+ <button
+ follows="bottom|left"
+ height="23"
+ label="Teleport to selected"
+ layout="topleft"
+ left_pad="10"
+ name="teleport_btn"
+ enabled="false"
+ top_delta="0"
+ width="160">
+ <button.commit_callback
+ function="TopObjects.TeleportToSelected" />
+</button>
</floater>
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby.xml b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
index c1500d4e7c..425de6cab8 100644
--- a/indra/newview/skins/default/xui/en/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
@@ -75,7 +75,7 @@
name="remove_friend">
<menu_item_call.on_click
function="Avatar.RemoveFriend" />
- <menu_item_call.on_enable
+ <menu_item_call.on_visible
function="Avatar.EnableItem"
parameter="can_delete" />
</menu_item_call>
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index f72d1f0bf9..810d3fddd5 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -794,14 +794,36 @@
name="LandShow"
tear_off="true">
<menu_item_check
- label="Ban Lines"
- name="Ban Lines">
+ label="Hide Ban Lines"
+ name="Hide Ban Lines">
<menu_item_check.on_check
- control="ShowBanLines" />
+ function="World.CheckBanLines"
+ parameter="0" />
<menu_item_check.on_click
- function="ToggleControl"
- parameter="ShowBanLines" />
+ function="World.ShowBanLines"
+ parameter="0" />
+ </menu_item_check>
+ <menu_item_check
+ label="Show Ban Lines On Collision"
+ name="Show Ban Lines On Collision">
+ <menu_item_check.on_check
+ function="World.CheckBanLines"
+ parameter="1" />
+ <menu_item_check.on_click
+ function="World.ShowBanLines"
+ parameter="1" />
+ </menu_item_check>
+ <menu_item_check
+ label="Show Ban Lines On Proximity"
+ name="Show Ban Lines On Proximity">
+ <menu_item_check.on_check
+ function="World.CheckBanLines"
+ parameter="2" />
+ <menu_item_check.on_click
+ function="World.ShowBanLines"
+ parameter="2" />
</menu_item_check>
+ <menu_item_separator />
<menu_item_check
label="Beacons"
name="beacons"
@@ -3463,15 +3485,30 @@ function="World.EnvPreset"
<menu_item_call.on_click
function="Advanced.DumpRegionObjectCache" />
</menu_item_call>
-
-<menu_item_call
- label="Interest List: Full Update"
- name="Interest List: Full Update"
+ <menu_item_check
+ label="Record Stats to File"
+ name="Stats Recorder File">
+ <menu_item_check.on_check
+ function="Advanced.CheckStatsRecorder" />
+ <menu_item_check.on_click
+ function="Advanced.ToggleStatsRecorder" />
+ </menu_item_check>
+ <menu_item_check
+ label="Interest Lists 360 Mode"
+ name="Interest List: 360 Mode"
shortcut="alt|shift|I">
- <menu_item_call.on_click
- function="Advanced.InterestListFullUpdate" />
- </menu_item_call>
- </menu>
+ <menu_item_check.on_check
+ function="Advanced.CheckInterestList360Mode" />
+ <menu_item_check.on_click
+ function="Advanced.ToggleInterestList360Mode" />
+ </menu_item_check>
+ <menu_item_call
+ label="Reset Interest Lists"
+ name="Reset Interest Lists">
+ <menu_item_call.on_click
+ function="Advanced.ResetInterestLists" />
+ </menu_item_call>
+ </menu>
<menu
create_jump_keys="true"
label="UI"
@@ -3486,13 +3523,6 @@ function="World.EnvPreset"
parameter="http://duckduckgo.com"/>
</menu_item_call>
<menu_item_call
- label="FB Connect Test"
- name="FB Connect Test">
- <menu_item_call.on_click
- function="Advanced.WebContentTest"
- parameter="https://cryptic-ridge-1632.herokuapp.com/"/>
- </menu_item_call>
- <menu_item_call
label="Dump SelectMgr"
name="Dump SelectMgr">
<menu_item_call.on_click
diff --git a/indra/newview/skins/default/xui/en/panel_script_experience.xml b/indra/newview/skins/default/xui/en/panel_script_experience.xml
index e798638751..9ae5b201a6 100644
--- a/indra/newview/skins/default/xui/en/panel_script_experience.xml
+++ b/indra/newview/skins/default/xui/en/panel_script_experience.xml
@@ -48,23 +48,28 @@
layout="topleft"
visible="false">
<layout_panel width="120"
- height="140">
- <text >
+ height="140"
+ name="xp_layout_panel">
+ <text name="lbl_script">
Script:
</text>
- <text bottom_delta="25">
+ <text bottom_delta="25"
+ name="lbl_associated">
Associated with:
</text>
- <text bottom_delta="25">
+ <text bottom_delta="25"
+ name="lbl_contribute">
You can contribute:
</text>
- <text bottom_delta="25">
+ <text bottom_delta="25"
+ name="lbl_associate">
Associate with:
</text>
</layout_panel>
<layout_panel width="250"
- height="140">
+ height="140"
+ name="xp_choose_panel">
<text >
EasySit Animator 1.2.4
</text>
diff --git a/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml b/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml
index 5647fd27db..fa2d4dfe73 100644
--- a/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml
+++ b/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml
@@ -319,7 +319,7 @@
Maximum Altitude:
</text>
<slider
- decimal_digits="1"
+ decimal_digits="2"
follows="left|top"
height="16"
increment="0.01"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
index 0b32215964..5f0241512a 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -300,6 +300,10 @@
name="Zoom"
value="Zoom" />
<combo_box.item
+ label="Ignore object"
+ name="Ignoreobject"
+ value="Ignore" />
+ <combo_box.item
label="None"
name="None"
value="None" />
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 01f5b513c7..0b19ad1473 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -233,7 +233,7 @@ If you feel this is an error, please contact support@secondlife.com</string>
<string name="TooltipForSaleL$">For Sale: L$[AMOUNT]</string> <!-- L$ version -->
<string name="TooltipFlagGroupBuild">Group Build</string>
<string name="TooltipFlagNoBuild">No Build</string>
- <string name="TooltipFlagNoEdit">Group Build</string>
+ <string name="TooltipFlagNoEdit">No Edit</string>
<string name="TooltipFlagNotSafe">Not Safe</string><!-- damage area -->
<string name="TooltipFlagNoFly">No Fly</string>
<string name="TooltipFlagGroupScripts">Group Scripts</string>
diff --git a/indra/newview/skins/default/xui/es/floater_chat_bar.xml b/indra/newview/skins/default/xui/es/floater_chat_bar.xml
deleted file mode 100644
index 02369c9a43..0000000000
--- a/indra/newview/skins/default/xui/es/floater_chat_bar.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT">
- <panel name="bottom_panel">
- <line_editor label="Pulsa aquí para chatear." name="chat_box" tool_tip="Pulsa Enter para decirlo o Ctrl+Enter para gritarlo"/>
- <button name="show_nearby_chat" tool_tip="Muestra o esconde el registro del chat"/>
- </panel>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_perm_prefs.xml b/indra/newview/skins/default/xui/es/floater_perm_prefs.xml
deleted file mode 100644
index 93e2088aba..0000000000
--- a/indra/newview/skins/default/xui/es/floater_perm_prefs.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="PERMISOS POR DEFECTO DE SUBIDA">
- <panel label="Permisos" name="permissions">
- <button label="?" label_selected="?" name="help"/>
- <check_box label="Compartir con el grupo" name="share_with_group"/>
- <check_box label="Permitir a cualquiera que lo copie" name="everyone_copy"/>
- <text name="NextOwnerLabel">
- El próximo propietario puede:
- </text>
- <check_box label="Modificarlo" name="next_owner_modify"/>
- <check_box label="Copiarlo" name="next_owner_copy"/>
- <check_box label="Revenderlo/Darlo" name="next_owner_transfer"/>
- </panel>
- <button label="OK" label_selected="OK" name="ok"/>
- <button label="Cancelar" label_selected="Cancelar" name="cancel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_voice_controls.xml b/indra/newview/skins/default/xui/es/floater_voice_controls.xml
deleted file mode 100644
index eff21239be..0000000000
--- a/indra/newview/skins/default/xui/es/floater_voice_controls.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_voice_controls" title="CONTROLES DE LA VOZ">
- <string name="title_nearby">
- CONFIGURACIÓN DE VOZ
- </string>
- <string name="title_group">
- MULTICONFERENCIA DE VOZ CON [GROUP]
- </string>
- <string name="title_adhoc">
- MULTICONFERENCIA DE VOZ
- </string>
- <string name="title_peer_2_peer">
- LLAMADA A [NAME]
- </string>
- <string name="no_one_near">
- Nadie cercano tiene activada la voz
- </string>
- <layout_stack name="my_call_stack">
- <layout_panel name="my_panel">
- <text name="user_text" value="Mi avatar:"/>
- </layout_panel>
- <layout_panel name="leave_call_panel">
- <layout_stack name="voice_effect_and_leave_call_stack">
- <layout_panel name="leave_call_btn_panel">
- <button label="Colgar" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </layout_panel>
- </layout_stack>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml
deleted file mode 100644
index 82fc8ddd39..0000000000
--- a/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="Ver el perfil" name="view_profile"/>
- <menu_item_call label="Añadir como amigo" name="add_friend"/>
- <menu_item_call label="MI" name="im"/>
- <menu_item_call label="Llamada" name="call"/>
- <menu_item_call label="Teleportar" name="teleport"/>
- <menu_item_call label="Invitar al grupo" name="invite_to_group"/>
- <menu_item_call label="Ignorar" name="block"/>
- <menu_item_call label="Designorar" name="unblock"/>
- <menu_item_call label="Denunciar" name="report"/>
- <menu_item_call label="Congelar" name="freeze"/>
- <menu_item_call label="Expulsar" name="eject"/>
- <menu_item_call label="Expulsar" name="kick"/>
- <menu_item_call label="CSR" name="csr"/>
- <menu_item_call label="Depurar las texturas" name="debug"/>
- <menu_item_call label="Encontrar en el mapa" name="find_on_map"/>
- <menu_item_call label="Acercar el zoom" name="zoom_in"/>
- <menu_item_call label="Pagar" name="pay"/>
- <menu_item_call label="Compartir" name="share"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml
deleted file mode 100644
index 29ad718fdd..0000000000
--- a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="Sentarme" name="Sit Down Here"/>
- <menu_item_call label="Levantarme" name="Stand Up"/>
- <context_menu label="Quitarme" name="Take Off &gt;">
- <context_menu label="Ropas" name="Clothes &gt;">
- <menu_item_call label="Camisa" name="Shirt"/>
- <menu_item_call label="Pantalones" name="Pants"/>
- <menu_item_call label="Falda" name="Skirt"/>
- <menu_item_call label="Zapatos" name="Shoes"/>
- <menu_item_call label="Calcetines" name="Socks"/>
- <menu_item_call label="Chaqueta" name="Jacket"/>
- <menu_item_call label="Guantes" name="Gloves"/>
- <menu_item_call label="Camiseta" name="Self Undershirt"/>
- <menu_item_call label="Ropa interior" name="Self Underpants"/>
- <menu_item_call label="Tatuaje" name="Self Tattoo"/>
- <menu_item_call label="Alfa" name="Self Alpha"/>
- <menu_item_call label="Toda la ropa" name="All Clothes"/>
- </context_menu>
- <context_menu label="HUD" name="Object Detach HUD"/>
- <context_menu label="Quitar" name="Object Detach"/>
- <menu_item_call label="Quitarse todo" name="Detach All"/>
- </context_menu>
- <menu_item_call label="Cambiar vestuario" name="Chenge Outfit"/>
- <menu_item_call label="Editar mi vestuario" name="Edit Outfit"/>
- <menu_item_call label="Editar mi anatomía" name="Edit My Shape"/>
- <menu_item_call label="Mis amigos" name="Friends..."/>
- <menu_item_call label="Mis grupos" name="Groups..."/>
- <menu_item_call label="Mi perfil" name="Profile..."/>
- <menu_item_call label="Depurar las texturas" name="Debug..."/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_name_field.xml b/indra/newview/skins/default/xui/es/menu_name_field.xml
deleted file mode 100644
index 0d51fbffeb..0000000000
--- a/indra/newview/skins/default/xui/es/menu_name_field.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="CopyMenu">
- <menu_item_call label="Copiar Nombre mostrado" name="copy_display"/>
- <menu_item_call label="Copiar Nombre de agente" name="copy_name"/>
- <menu_item_call label="Copiar ID de agente" name="copy_id"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml
deleted file mode 100644
index 3899ad9e96..0000000000
--- a/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
- <menu_item_check label="Ordenar por estatus" name="sort_status"/>
- <menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
- <menu_item_check label="Ver permisos concedidos" name="view_permissions"/>
- <menu_item_call label="Ver la lista de Residentes y Objetos ignorados" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_groups_view_sort.xml
deleted file mode 100644
index 1bd3efb611..0000000000
--- a/indra/newview/skins/default/xui/es/menu_people_groups_view_sort.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Mostrar los iconos de grupo" name="Display Group Icons"/>
- <menu_item_call label="Dejar el grupo seleccionado" name="Leave Selected Group"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml
deleted file mode 100644
index 1403e4db01..0000000000
--- a/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Ordenar según las intervenciones recientes" name="sort_by_recent_speakers"/>
- <menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
- <menu_item_check label="Ordenar según distancia" name="sort_distance"/>
- <menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
- <menu_item_check label="Ver mapa" name="view_map"/>
- <menu_item_call label="Ver la lista de Residentes y Objetos ignorados" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml
deleted file mode 100644
index e4aaa89110..0000000000
--- a/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Ordenar por los más recientes" name="sort_most"/>
- <menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
- <menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
- <menu_item_call label="Ver la lista de Residentes y Objetos ignorados" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml
deleted file mode 100644
index c64a93e0e5..0000000000
--- a/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="call_btn_panel">
- <button label="Llamar" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Colgar" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Controles de la voz" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_facebook_account.xml b/indra/newview/skins/default/xui/es/panel_facebook_account.xml
deleted file mode 100644
index 2b6d407ad7..0000000000
--- a/indra/newview/skins/default/xui/es/panel_facebook_account.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<panel name="panel_facebook_account">
- <string name="facebook_connected" value="Estás conectado a Facebook como:"/>
- <string name="facebook_disconnected" value="No conectado a Facebook"/>
- <text name="account_caption_label">
- No conectado a Facebook.
- </text>
- <panel name="panel_buttons">
- <button label="Conectar..." name="connect_btn"/>
- <button label="Desconectar" name="disconnect_btn"/>
- <text name="account_learn_more_label">
- [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Aprende a publicar en Facebook]
- </text>
- </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_group_control_panel.xml b/indra/newview/skins/default/xui/es/panel_group_control_panel.xml
deleted file mode 100644
index b398293175..0000000000
--- a/indra/newview/skins/default/xui/es/panel_group_control_panel.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="group_info_btn_panel">
- <button label="Perfil del grupo" name="group_info_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Llamar al grupo" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Colgar" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Abrir los controles de la voz" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_im_control_panel.xml b/indra/newview/skins/default/xui/es/panel_im_control_panel.xml
deleted file mode 100644
index f218324d50..0000000000
--- a/indra/newview/skins/default/xui/es/panel_im_control_panel.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="button_stack">
- <layout_panel name="view_profile_btn_panel">
- <button label="Perfil" name="view_profile_btn"/>
- </layout_panel>
- <layout_panel name="add_friend_btn_panel">
- <button label="Añadir como amigo" name="add_friend_btn"/>
- </layout_panel>
- <layout_panel name="teleport_btn_panel">
- <button label="Teleportar" name="teleport_btn" tool_tip="Ofrecer teleporte a esta persona"/>
- </layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Compartir" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Pagar" name="pay_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Llamar" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Colgar" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Controles de la voz" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_profile_interests.xml b/indra/newview/skins/default/xui/es/panel_profile_interests.xml
deleted file mode 100644
index 86dd63390c..0000000000
--- a/indra/newview/skins/default/xui/es/panel_profile_interests.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Intereses" name="panel_profile_interests">
- <text name="I Want To:">
- Quiero:
- </text>
- <check_box label="Construye" name="chk0"/>
- <check_box label="Explora" name="chk1"/>
- <check_box label="Conoce" name="chk2"/>
- <check_box label="Encuentra empleo" name="chk6"/>
- <check_box label="Agrupa" name="chk3"/>
- <check_box label="Compra" name="chk4"/>
- <check_box label="Vende" name="chk5"/>
- <check_box label="Contrata" name="chk7"/>
- <line_editor name="want_to_edit">
- (cargando...)
- </line_editor>
- <text name="Skills:">
- Habilidades:
- </text>
- <check_box label="Texturas" name="schk0"/>
- <check_box label="Arquitectura" name="schk1"/>
- <check_box label="Modelo" name="schk3"/>
- <check_box label="Planificación de eventos" name="schk2"/>
- <check_box label="Preparación de scripts" name="schk4"/>
- <check_box label="Personajes personalizados" name="schk5"/>
- <line_editor name="skills_edit">
- (cargando...)
- </line_editor>
- <text name="Languages:">
- Idiomas:
- </text>
- <line_editor name="languages_edit">
- (cargando...)
- </line_editor>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/floater_chat_bar.xml b/indra/newview/skins/default/xui/fr/floater_chat_bar.xml
deleted file mode 100644
index 7dcb9a280d..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_chat_bar.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT PRÈS DE MOI">
- <panel name="bottom_panel">
- <line_editor label="Cliquer ici pour chatter." name="chat_box" tool_tip="Appuyer sur Entrée pour dire, Ctrl+Entrée pour crier"/>
- <button name="show_nearby_chat" tool_tip="Afficher/masquer le journal de chat près de vous."/>
- </panel>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
deleted file mode 100644
index 36bec80561..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="DROITS DE CHARGEMENT PAR DÉFAUT">
- <panel label="Droits" name="permissions">
- <button label="?" label_selected="?" name="help"/>
- <check_box label="Partager avec le groupe" name="share_with_group"/>
- <check_box label="Autoriser tout le monde à copier" name="everyone_copy"/>
- <text name="NextOwnerLabel">
- Le prochain propriétaire pourra :
- </text>
- <check_box label="Modifier" name="next_owner_modify"/>
- <check_box label="Copier" name="next_owner_copy"/>
- <check_box label="Revendre/Donner" name="next_owner_transfer"/>
- </panel>
- <button label="OK" label_selected="OK" name="ok"/>
- <button label="Annuler" label_selected="Annuler" name="cancel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
deleted file mode 100644
index fc4de4a5a6..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_voice_controls" title="CONTROLES DE LA VOIX">
- <string name="title_nearby">
- PARAMÈTRES VOCAUX
- </string>
- <string name="title_group">
- APPEL DE GROUPE AVEC [GROUP]
- </string>
- <string name="title_adhoc">
- CONFÉRENCE
- </string>
- <string name="title_peer_2_peer">
- APPEL AVEC [NAME]
- </string>
- <string name="no_one_near">
- Il n&apos;y a personne près de vous avec le chat vocal activé
- </string>
- <layout_stack name="my_call_stack">
- <layout_panel name="my_panel">
- <text name="user_text" value="Mon avatar :"/>
- </layout_panel>
- <layout_panel name="leave_call_panel">
- <layout_stack name="voice_effect_and_leave_call_stack">
- <layout_panel name="leave_call_btn_panel">
- <button label="Quitter l&apos;appel" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </layout_panel>
- </layout_stack>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml
deleted file mode 100644
index 53f22bb44a..0000000000
--- a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="Voir le profil" name="view_profile"/>
- <menu_item_call label="Devenir amis" name="add_friend"/>
- <menu_item_call label="IM" name="im"/>
- <menu_item_call label="Appel" name="call"/>
- <menu_item_call label="Téléporter" name="teleport"/>
- <menu_item_call label="Inviter dans le groupe" name="invite_to_group"/>
- <menu_item_call label="Ignorer" name="block"/>
- <menu_item_call label="Ne plus ignorer" name="unblock"/>
- <menu_item_call label="Signaler" name="report"/>
- <menu_item_call label="Figer" name="freeze"/>
- <menu_item_call label="Expulser" name="eject"/>
- <menu_item_call label="Éjecter" name="kick"/>
- <menu_item_call label="Représentant de l&apos;Assistance client" name="csr"/>
- <menu_item_call label="Déboguer les textures" name="debug"/>
- <menu_item_call label="Situer sur la carte" name="find_on_map"/>
- <menu_item_call label="Zoomer en avant" name="zoom_in"/>
- <menu_item_call label="Payer" name="pay"/>
- <menu_item_call label="Partager" name="share"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml
deleted file mode 100644
index ac70df472d..0000000000
--- a/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="M&apos;asseoir" name="Sit Down Here"/>
- <menu_item_call label="Me lever" name="Stand Up"/>
- <context_menu label="Enlever" name="Take Off &gt;">
- <context_menu label="Habits" name="Clothes &gt;">
- <menu_item_call label="Chemise" name="Shirt"/>
- <menu_item_call label="Pantalon" name="Pants"/>
- <menu_item_call label="Jupe" name="Skirt"/>
- <menu_item_call label="Chaussures" name="Shoes"/>
- <menu_item_call label="Chaussettes" name="Socks"/>
- <menu_item_call label="Veste" name="Jacket"/>
- <menu_item_call label="Gants" name="Gloves"/>
- <menu_item_call label="Débardeur" name="Self Undershirt"/>
- <menu_item_call label="Caleçon" name="Self Underpants"/>
- <menu_item_call label="Tatouage" name="Self Tattoo"/>
- <menu_item_call label="Alpha" name="Self Alpha"/>
- <menu_item_call label="Tous les habits" name="All Clothes"/>
- </context_menu>
- <context_menu label="HUD" name="Object Detach HUD"/>
- <context_menu label="Détacher" name="Object Detach"/>
- <menu_item_call label="Tout détacher" name="Detach All"/>
- </context_menu>
- <menu_item_call label="Changer de tenue" name="Chenge Outfit"/>
- <menu_item_call label="Modifier ma tenue" name="Edit Outfit"/>
- <menu_item_call label="Modifier ma silhouette" name="Edit My Shape"/>
- <menu_item_call label="Mes amis" name="Friends..."/>
- <menu_item_call label="Mes groupes" name="Groups..."/>
- <menu_item_call label="Mon profil" name="Profile..."/>
- <menu_item_call label="Déboguer les textures" name="Debug..."/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_name_field.xml b/indra/newview/skins/default/xui/fr/menu_name_field.xml
deleted file mode 100644
index 6c3fba4110..0000000000
--- a/indra/newview/skins/default/xui/fr/menu_name_field.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="CopyMenu">
- <menu_item_call label="Copier le Nom d&apos;affichage" name="copy_display"/>
- <menu_item_call label="Copier le Nom de l&apos;agent" name="copy_name"/>
- <menu_item_call label="Copier l&apos;ID de l&apos;agent" name="copy_id"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml
deleted file mode 100644
index a6170a6c16..0000000000
--- a/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Trier par nom" name="sort_name"/>
- <menu_item_check label="Trier par statut" name="sort_status"/>
- <menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
- <menu_item_check label="Afficher les droits octroyés" name="view_permissions"/>
- <menu_item_call label="Afficher les résidents et les objets ignorés" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_groups_view_sort.xml
deleted file mode 100644
index 34f949cf2c..0000000000
--- a/indra/newview/skins/default/xui/fr/menu_people_groups_view_sort.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Afficher les icônes des groupes" name="Display Group Icons"/>
- <menu_item_call label="Quitter le groupe sélectionné" name="Leave Selected Group"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml
deleted file mode 100644
index 8bb466b8d6..0000000000
--- a/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Trier par intervenants récents" name="sort_by_recent_speakers"/>
- <menu_item_check label="Trier par nom" name="sort_name"/>
- <menu_item_check label="Trier par distance" name="sort_distance"/>
- <menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
- <menu_item_check label="Afficher la carte" name="view_map"/>
- <menu_item_call label="Afficher les résidents et les objets ignorés" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_recent_view_sort.xml
deleted file mode 100644
index 93b90ae61c..0000000000
--- a/indra/newview/skins/default/xui/fr/menu_people_recent_view_sort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Trier en commençant par le plus récent" name="sort_most"/>
- <menu_item_check label="Trier par nom" name="sort_name"/>
- <menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
- <menu_item_call label="Afficher les résidents et les objets ignorés" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/fr/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_adhoc_control_panel.xml
deleted file mode 100644
index 4191ba42f9..0000000000
--- a/indra/newview/skins/default/xui/fr/panel_adhoc_control_panel.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="call_btn_panel">
- <button label="Appeler" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Quitter l&apos;appel" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Contrôles vocaux" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_facebook_account.xml b/indra/newview/skins/default/xui/fr/panel_facebook_account.xml
deleted file mode 100644
index 6406ae4ae7..0000000000
--- a/indra/newview/skins/default/xui/fr/panel_facebook_account.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<panel name="panel_facebook_account">
- <string name="facebook_connected" value="Vous êtes connecté(e) à Facebook en tant que :"/>
- <string name="facebook_disconnected" value="Pas connecté(e) à Facebook"/>
- <text name="account_caption_label">
- Pas connecté(e) à Facebook.
- </text>
- <panel name="panel_buttons">
- <button label="Connexion..." name="connect_btn"/>
- <button label="Déconnexion" name="disconnect_btn"/>
- <text name="account_learn_more_label">
- [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Apprenez comment publier sur Facebook]
- </text>
- </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml
deleted file mode 100644
index 3e66b3c72a..0000000000
--- a/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="group_info_btn_panel">
- <button label="Profil du groupe" name="group_info_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Appeler le groupe" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Quitter l&apos;appel" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Ouvrir contrôles vocaux" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml
deleted file mode 100644
index 1f2169e22c..0000000000
--- a/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <text name="avatar_name" value="Inconnu"/>
- <layout_stack name="button_stack">
- <layout_panel name="view_profile_btn_panel">
- <button label="Profil" name="view_profile_btn"/>
- </layout_panel>
- <layout_panel name="add_friend_btn_panel">
- <button label="Devenir amis" name="add_friend_btn"/>
- </layout_panel>
- <layout_panel name="teleport_btn_panel">
- <button label="Téléporter" name="teleport_btn" tool_tip="Proposer de téléporter cette personne"/>
- </layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Partager" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Payer" name="pay_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Appeler" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Quitter l&apos;appel" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Contrôles vocaux" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_profile_interests.xml b/indra/newview/skins/default/xui/fr/panel_profile_interests.xml
deleted file mode 100644
index e8212817d2..0000000000
--- a/indra/newview/skins/default/xui/fr/panel_profile_interests.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Centres d&apos;intérêt" name="panel_profile_interests">
- <text name="I Want To:">
- Je veux :
- </text>
- <check_box label="Construire" name="chk0"/>
- <check_box label="Explorer" name="chk1"/>
- <check_box label="Rencontrer" name="chk2"/>
- <check_box label="Être recruté" name="chk6"/>
- <check_box label="Grouper" name="chk3"/>
- <check_box label="Acheter" name="chk4"/>
- <check_box label="Vendre" name="chk5"/>
- <check_box label="Louer" name="chk7"/>
- <line_editor name="want_to_edit">
- (en cours de chargement...)
- </line_editor>
- <text name="Skills:">
- Compétences :
- </text>
- <check_box label="Textures" name="schk0"/>
- <check_box label="Architecture" name="schk1"/>
- <check_box label="Modèle" name="schk3"/>
- <check_box label="Planification des événements" name="schk2"/>
- <check_box label="Langage de scripts" name="schk4"/>
- <check_box label="Personnages personnalisés" name="schk5"/>
- <line_editor name="skills_edit">
- (en cours de chargement...)
- </line_editor>
- <text name="Languages:">
- Langues :
- </text>
- <line_editor name="languages_edit">
- (en cours de chargement...)
- </line_editor>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/floater_chat_bar.xml b/indra/newview/skins/default/xui/it/floater_chat_bar.xml
deleted file mode 100644
index b47e32ce90..0000000000
--- a/indra/newview/skins/default/xui/it/floater_chat_bar.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="CHAT NEI DINTORNI">
- <panel name="bottom_panel">
- <line_editor label="Clicca qui per la chat." name="chat_box" tool_tip="Premi Invio per parlare, Ctrl+Invio per gridare"/>
- <button name="show_nearby_chat" tool_tip="Mostra/Nasconde il registro della chat nei dintorni"/>
- </panel>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml b/indra/newview/skins/default/xui/it/floater_perm_prefs.xml
deleted file mode 100644
index a02b3b5075..0000000000
--- a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="DIRITTI DI CARICAMENTO PREDEFINITI">
- <panel label="Permessi" name="permissions">
- <button label="?" label_selected="?" name="help"/>
- <check_box label="Condividi con il gruppo" name="share_with_group"/>
- <check_box label="Permetti a chiunque di copiare" name="everyone_copy"/>
- <text name="NextOwnerLabel">
- Il prossimo possessore può:
- </text>
- <check_box label="Modificare" name="next_owner_modify"/>
- <check_box label="Copiare" name="next_owner_copy"/>
- <check_box label="Rivendere/Regalare" name="next_owner_transfer"/>
- </panel>
- <button label="OK" label_selected="OK" name="ok"/>
- <button label="Annulla" label_selected="Annulla" name="cancel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_voice_controls.xml b/indra/newview/skins/default/xui/it/floater_voice_controls.xml
deleted file mode 100644
index 77973eef1e..0000000000
--- a/indra/newview/skins/default/xui/it/floater_voice_controls.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_voice_controls" title="CONTROLLI VOCE">
- <string name="title_nearby">
- IMPOSTAZIONI VOCE
- </string>
- <string name="title_group">
- CHIAMATA DI GRUPPO CON [GROUP]
- </string>
- <string name="title_adhoc">
- CHIAMATA IN CONFERENZA
- </string>
- <string name="title_peer_2_peer">
- CHIAMATA CON [NAME]
- </string>
- <string name="no_one_near">
- Nessuno nei dintorni ha attivato la funzione voce
- </string>
- <layout_stack name="my_call_stack">
- <layout_panel name="my_panel">
- <text name="user_text" value="Il mio avatar:"/>
- </layout_panel>
- <layout_panel name="leave_call_panel">
- <layout_stack name="voice_effect_and_leave_call_stack">
- <layout_panel name="leave_call_btn_panel">
- <button label="Abbandona chiamata" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </layout_panel>
- </layout_stack>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml
deleted file mode 100644
index 1f10734c4a..0000000000
--- a/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="Vedi profilo" name="view_profile"/>
- <menu_item_call label="Aggiungi amico" name="add_friend"/>
- <menu_item_call label="IM" name="im"/>
- <menu_item_call label="Chiama" name="call"/>
- <menu_item_call label="Teleport" name="teleport"/>
- <menu_item_call label="Invita al gruppo" name="invite_to_group"/>
- <menu_item_call label="Blocca" name="block"/>
- <menu_item_call label="Sblocca" name="unblock"/>
- <menu_item_call label="Segnala" name="report"/>
- <menu_item_call label="Congela" name="freeze"/>
- <menu_item_call label="Espelli" name="eject"/>
- <menu_item_call label="Espelli" name="kick"/>
- <menu_item_call label="CSR" name="csr"/>
- <menu_item_call label="Debug delle texture" name="debug"/>
- <menu_item_call label="Trova sulla mappa" name="find_on_map"/>
- <menu_item_call label="Zoom avanti" name="zoom_in"/>
- <menu_item_call label="Paga" name="pay"/>
- <menu_item_call label="Condividi" name="share"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml
deleted file mode 100644
index 4f62ccaa9c..0000000000
--- a/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="Siedi" name="Sit Down Here"/>
- <menu_item_call label="Alzati" name="Stand Up"/>
- <context_menu label="Togli" name="Take Off &gt;">
- <context_menu label="Abiti" name="Clothes &gt;">
- <menu_item_call label="Camicia" name="Shirt"/>
- <menu_item_call label="Pantaloni" name="Pants"/>
- <menu_item_call label="Gonna" name="Skirt"/>
- <menu_item_call label="Scarpe" name="Shoes"/>
- <menu_item_call label="Calzini" name="Socks"/>
- <menu_item_call label="Giacca" name="Jacket"/>
- <menu_item_call label="Guanti" name="Gloves"/>
- <menu_item_call label="Maglietta intima" name="Self Undershirt"/>
- <menu_item_call label="Slip" name="Self Underpants"/>
- <menu_item_call label="Tatuaggio" name="Self Tattoo"/>
- <menu_item_call label="Alpha (Trasparenza)" name="Self Alpha"/>
- <menu_item_call label="Tutti gli abiti" name="All Clothes"/>
- </context_menu>
- <context_menu label="HUD" name="Object Detach HUD"/>
- <context_menu label="Stacca" name="Object Detach"/>
- <menu_item_call label="Stacca tutto" name="Detach All"/>
- </context_menu>
- <menu_item_call label="Cambia vestiario" name="Chenge Outfit"/>
- <menu_item_call label="Modifica il mio vestiario" name="Edit Outfit"/>
- <menu_item_call label="Modifica la figura corporea" name="Edit My Shape"/>
- <menu_item_call label="I miei amici" name="Friends..."/>
- <menu_item_call label="I miei gruppi" name="Groups..."/>
- <menu_item_call label="Il mio profilo" name="Profile..."/>
- <menu_item_call label="Debug delle texture" name="Debug..."/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_name_field.xml b/indra/newview/skins/default/xui/it/menu_name_field.xml
deleted file mode 100644
index 9ac863323c..0000000000
--- a/indra/newview/skins/default/xui/it/menu_name_field.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="CopyMenu">
- <menu_item_call label="Copia Nome Visualizzato" name="copy_display"/>
- <menu_item_call label="Copia Nome Agente" name="copy_name"/>
- <menu_item_call label="Copia ID Agente" name="copy_id"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml
deleted file mode 100644
index 3a799f44eb..0000000000
--- a/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Ordina in base al nome" name="sort_name"/>
- <menu_item_check label="Ordina in base allo stato" name="sort_status"/>
- <menu_item_check label="Icone persone" name="view_icons"/>
- <menu_item_check label="Visualizza autorizzazioni concesse" name="view_permissions"/>
- <menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_groups_view_sort.xml
deleted file mode 100644
index d31ddaf1aa..0000000000
--- a/indra/newview/skins/default/xui/it/menu_people_groups_view_sort.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Visualizza le icone di gruppo" name="Display Group Icons"/>
- <menu_item_call label="Lascia i gruppi selezionati" name="Leave Selected Group"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml
deleted file mode 100644
index 2b5c235706..0000000000
--- a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Ordina in base a intervenuti recenti" name="sort_by_recent_speakers"/>
- <menu_item_check label="Ordina in base al nome" name="sort_name"/>
- <menu_item_check label="Ordina in base alla distanza" name="sort_distance"/>
- <menu_item_check label="Icone persone" name="view_icons"/>
- <menu_item_check label="Visualizza mappa" name="view_map"/>
- <menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml
deleted file mode 100644
index 7fccd1621a..0000000000
--- a/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Mostra prima i più recenti" name="sort_most"/>
- <menu_item_check label="Ordina in base al nome" name="sort_name"/>
- <menu_item_check label="Icone persone" name="view_icons"/>
- <menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml
deleted file mode 100644
index be001d09f8..0000000000
--- a/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="call_btn_panel">
- <button label="Chiama" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Abbandona chiamata" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Regolazione voce" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_facebook_account.xml b/indra/newview/skins/default/xui/it/panel_facebook_account.xml
deleted file mode 100644
index e887e7e4dc..0000000000
--- a/indra/newview/skins/default/xui/it/panel_facebook_account.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<panel name="panel_facebook_account">
- <string name="facebook_connected" value="Sei in collegamento con Facebook come:"/>
- <string name="facebook_disconnected" value="Non in collegamento con Facebook"/>
- <text name="account_caption_label">
- Non in collegamento con Facebook.
- </text>
- <panel name="panel_buttons">
- <button label="Collegamento..." name="connect_btn"/>
- <button label="Interrompi collegamento" name="disconnect_btn"/>
- <text name="account_learn_more_label">
- [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Come pubblicare su Facebook]
- </text>
- </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_control_panel.xml b/indra/newview/skins/default/xui/it/panel_group_control_panel.xml
deleted file mode 100644
index 2d17e4a0cd..0000000000
--- a/indra/newview/skins/default/xui/it/panel_group_control_panel.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="group_info_btn_panel">
- <button label="Profilo del gruppo" name="group_info_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Chiama il gruppo" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Abbandona chiamata" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Apri la regolazione voce" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_im_control_panel.xml b/indra/newview/skins/default/xui/it/panel_im_control_panel.xml
deleted file mode 100644
index 76b28eab24..0000000000
--- a/indra/newview/skins/default/xui/it/panel_im_control_panel.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="button_stack">
- <layout_panel name="view_profile_btn_panel">
- <button label="Profilo" name="view_profile_btn"/>
- </layout_panel>
- <layout_panel name="add_friend_btn_panel">
- <button label="Aggiungi amico" name="add_friend_btn"/>
- </layout_panel>
- <layout_panel name="teleport_btn_panel">
- <button label="Teleport" name="teleport_btn" tool_tip="Offri teleport a questa persona"/>
- </layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Condividi" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Paga" name="pay_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Chiama" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Chiudi chiamata" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Regolazione voce" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_profile_interests.xml b/indra/newview/skins/default/xui/it/panel_profile_interests.xml
deleted file mode 100644
index 9fe7331e5c..0000000000
--- a/indra/newview/skins/default/xui/it/panel_profile_interests.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Interessi" name="panel_profile_interests">
- <text name="I Want To:">
- Desidero:
- </text>
- <check_box label="Costruire" name="chk0"/>
- <check_box label="Esplorare" name="chk1"/>
- <check_box label="Incontrare" name="chk2"/>
- <check_box label="Essere assunto" name="chk6"/>
- <check_box label="Gruppo" name="chk3"/>
- <check_box label="Acquistare" name="chk4"/>
- <check_box label="Vendere" name="chk5"/>
- <check_box label="Assumere" name="chk7"/>
- <line_editor name="want_to_edit">
- (caricamento in corso...)
- </line_editor>
- <text name="Skills:">
- Abilità:
- </text>
- <check_box label="Texture" name="schk0"/>
- <check_box label="Architettura" name="schk1"/>
- <check_box label="Realizzazione modelli 3D" name="schk3"/>
- <check_box label="Organizzazione eventi" name="schk2"/>
- <check_box label="Scripting" name="schk4"/>
- <check_box label="Personaggi personalizzati" name="schk5"/>
- <line_editor name="skills_edit">
- (caricamento in corso...)
- </line_editor>
- <text name="Languages:">
- Lingue:
- </text>
- <line_editor name="languages_edit">
- (caricamento in corso...)
- </line_editor>
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/floater_chat_bar.xml b/indra/newview/skins/default/xui/ja/floater_chat_bar.xml
deleted file mode 100644
index 9f5df6fb85..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_chat_bar.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="近くのチャット">
- <panel name="bottom_panel">
- <line_editor label="ここをクリックしてチャットを開始します。" name="chat_box" tool_tip="Enter キーを押して話し、Ctrl + Enter キーで叫びます。"/>
- <button name="show_nearby_chat" tool_tip="近くのチャットログを表示/非表示"/>
- </panel>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml b/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml
deleted file mode 100644
index 98cda25a81..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="デフォルトのアップロード権限">
- <panel label="権限" name="permissions">
- <button label="?" label_selected="?" name="help"/>
- <check_box label="グループで共同管理" name="share_with_group"/>
- <check_box label="誰に対してもコピーを許可" name="everyone_copy"/>
- <text name="NextOwnerLabel">
- 次の所有者ができる操作:
- </text>
- <check_box label="修正" name="next_owner_modify"/>
- <check_box label="コピー" name="next_owner_copy"/>
- <check_box label="再販・プレゼント" name="next_owner_transfer"/>
- </panel>
- <button label="OK" label_selected="OK" name="ok"/>
- <button label="取り消し" label_selected="取り消し" name="cancel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
deleted file mode 100644
index f7d3fd11e0..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_voice_controls" title="ボイスコントロール">
- <string name="title_nearby">
- ボイス設定
- </string>
- <string name="title_group">
- [GROUP] とグループコール
- </string>
- <string name="title_adhoc">
- コンファレンスコール
- </string>
- <string name="title_peer_2_peer">
- [NAME] とコール
- </string>
- <string name="no_one_near">
- 近くにボイスを有効にしている人はいません。
- </string>
- <layout_stack name="my_call_stack">
- <layout_panel name="my_panel">
- <text name="user_text" value="マイ アバター:"/>
- </layout_panel>
- <layout_panel name="leave_call_panel">
- <layout_stack name="voice_effect_and_leave_call_stack">
- <layout_panel name="leave_call_btn_panel">
- <button label="コール終了" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </layout_panel>
- </layout_stack>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_avatar_gear.xml
deleted file mode 100644
index 9d0d0f10a6..0000000000
--- a/indra/newview/skins/default/xui/ja/menu_inspect_avatar_gear.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="プロフィールの表示" name="view_profile"/>
- <menu_item_call label="フレンド登録" name="add_friend"/>
- <menu_item_call label="IM" name="im"/>
- <menu_item_call label="コール" name="call"/>
- <menu_item_call label="テレポート" name="teleport"/>
- <menu_item_call label="グループに招待" name="invite_to_group"/>
- <menu_item_call label="ブロック" name="block"/>
- <menu_item_call label="ブロック解除" name="unblock"/>
- <menu_item_call label="報告" name="report"/>
- <menu_item_call label="フリーズ" name="freeze"/>
- <menu_item_call label="追放" name="eject"/>
- <menu_item_call label="追放" name="kick"/>
- <menu_item_call label="CSR" name="csr"/>
- <menu_item_call label="テクスチャのデバッグ" name="debug"/>
- <menu_item_call label="地図で探す" name="find_on_map"/>
- <menu_item_call label="ズームイン" name="zoom_in"/>
- <menu_item_call label="支払う" name="pay"/>
- <menu_item_call label="共有" name="share"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml
deleted file mode 100644
index e3e206f3aa..0000000000
--- a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="座る" name="Sit Down Here"/>
- <menu_item_call label="立ち上がる" name="Stand Up"/>
- <context_menu label="取り外す" name="Take Off &gt;">
- <context_menu label="衣類" name="Clothes &gt;">
- <menu_item_call label="シャツ" name="Shirt"/>
- <menu_item_call label="パンツ" name="Pants"/>
- <menu_item_call label="スカート" name="Skirt"/>
- <menu_item_call label="靴" name="Shoes"/>
- <menu_item_call label="靴下" name="Socks"/>
- <menu_item_call label="ジャケット" name="Jacket"/>
- <menu_item_call label="手袋" name="Gloves"/>
- <menu_item_call label="下着シャツ" name="Self Undershirt"/>
- <menu_item_call label="下着パンツ" name="Self Underpants"/>
- <menu_item_call label="タトゥ" name="Self Tattoo"/>
- <menu_item_call label="アルファ" name="Self Alpha"/>
- <menu_item_call label="すべての衣類" name="All Clothes"/>
- </context_menu>
- <context_menu label="HUD" name="Object Detach HUD"/>
- <context_menu label="取り外す" name="Object Detach"/>
- <menu_item_call label="すべて取り外す" name="Detach All"/>
- </context_menu>
- <menu_item_call label="アウトフィットの変更" name="Chenge Outfit"/>
- <menu_item_call label="アウトフィットの編集" name="Edit Outfit"/>
- <menu_item_call label="シェイプの編集" name="Edit My Shape"/>
- <menu_item_call label="フレンド" name="Friends..."/>
- <menu_item_call label="グループ" name="Groups..."/>
- <menu_item_call label="プロフィール" name="Profile..."/>
- <menu_item_call label="テクスチャのデバッグ" name="Debug..."/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_name_field.xml b/indra/newview/skins/default/xui/ja/menu_name_field.xml
deleted file mode 100644
index 8c37d95073..0000000000
--- a/indra/newview/skins/default/xui/ja/menu_name_field.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="CopyMenu">
- <menu_item_call label="表示名をコピー" name="copy_display"/>
- <menu_item_call label="エージェント名をコピー" name="copy_name"/>
- <menu_item_call label="エージェント ID をコピー" name="copy_id"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml
deleted file mode 100644
index 76340e4d76..0000000000
--- a/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="名前で並べ替え" name="sort_name"/>
- <menu_item_check label="オンライン状態で並べ替え" name="sort_status"/>
- <menu_item_check label="人のアイコン表示" name="view_icons"/>
- <menu_item_check label="与えられた権限を表示" name="view_permissions"/>
- <menu_item_call label="ブロックされた住人とオブジェクトを表示" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_groups_view_sort.xml
deleted file mode 100644
index bfc7d15017..0000000000
--- a/indra/newview/skins/default/xui/ja/menu_people_groups_view_sort.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="グループアイコンを表示" name="Display Group Icons"/>
- <menu_item_call label="選択したグループから脱退" name="Leave Selected Group"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml
deleted file mode 100644
index 44c5438509..0000000000
--- a/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="最近の発言者で並べ替え" name="sort_by_recent_speakers"/>
- <menu_item_check label="名前で並べ替え" name="sort_name"/>
- <menu_item_check label="距離で並べ替え" name="sort_distance"/>
- <menu_item_check label="人のアイコン表示" name="view_icons"/>
- <menu_item_check label="地図を表示" name="view_map"/>
- <menu_item_call label="ブロックされた住人とオブジェクトを表示" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_recent_view_sort.xml
deleted file mode 100644
index b4f177a068..0000000000
--- a/indra/newview/skins/default/xui/ja/menu_people_recent_view_sort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="新しい順に並べ替え" name="sort_most"/>
- <menu_item_check label="名前で並べ替え" name="sort_name"/>
- <menu_item_check label="人のアイコン表示" name="view_icons"/>
- <menu_item_call label="ブロックされた住人とオブジェクトを表示" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/ja/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_adhoc_control_panel.xml
deleted file mode 100644
index 17e1283d24..0000000000
--- a/indra/newview/skins/default/xui/ja/panel_adhoc_control_panel.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="call_btn_panel">
- <button label="コール" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="コール終了" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="ボイスコントロール" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_facebook_account.xml b/indra/newview/skins/default/xui/ja/panel_facebook_account.xml
deleted file mode 100644
index 5269e5a2da..0000000000
--- a/indra/newview/skins/default/xui/ja/panel_facebook_account.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<panel name="panel_facebook_account">
- <string name="facebook_connected" value="次のユーザーとして Facebook に接続:"/>
- <string name="facebook_disconnected" value="Facebook に接続していません"/>
- <text name="account_caption_label">
- Facebook に接続していません。
- </text>
- <panel name="panel_buttons">
- <button label="接続..." name="connect_btn"/>
- <button label="切断" name="disconnect_btn"/>
- <text name="account_learn_more_label">
- [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Facebook への投稿について]
- </text>
- </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml
deleted file mode 100644
index 49749732c9..0000000000
--- a/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="group_info_btn_panel">
- <button label="グループプロフィール" name="group_info_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="グループコール" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="コール終了" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="ボイスコントロールを開く" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml
deleted file mode 100644
index f2429ac12a..0000000000
--- a/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <text name="avatar_name" value="不明"/>
- <layout_stack name="button_stack">
- <layout_panel name="view_profile_btn_panel">
- <button label="プロフィール" name="view_profile_btn"/>
- </layout_panel>
- <layout_panel name="add_friend_btn_panel">
- <button label="フレンド登録" name="add_friend_btn"/>
- </layout_panel>
- <layout_panel name="teleport_btn_panel">
- <button label="テレポート" name="teleport_btn" tool_tip="この人にテレポートを送ります"/>
- </layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="共有" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="支払う" name="pay_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="コール" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="コール終了" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="ボイスコントロール" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_profile_interests.xml b/indra/newview/skins/default/xui/ja/panel_profile_interests.xml
deleted file mode 100644
index 93cde6ffec..0000000000
--- a/indra/newview/skins/default/xui/ja/panel_profile_interests.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="趣味" name="panel_profile_interests">
- <text name="I Want To:">
- 次の内容を実行:
- </text>
- <check_box label="作る" name="chk0"/>
- <check_box label="探検" name="chk1"/>
- <check_box label="出会う" name="chk2"/>
- <check_box label="雇ってもらう" name="chk6"/>
- <check_box label="グループ" name="chk3"/>
- <check_box label="買う" name="chk4"/>
- <check_box label="販売する" name="chk5"/>
- <check_box label="雇う" name="chk7"/>
- <line_editor name="want_to_edit">
- (ロード中...)
- </line_editor>
- <text name="Skills:">
- スキル:
- </text>
- <check_box label="テクスチャ" name="schk0"/>
- <check_box label="建築" name="schk1"/>
- <check_box label="モデリング" name="schk3"/>
- <check_box label="イベント計画" name="schk2"/>
- <check_box label="スクリプト" name="schk4"/>
- <check_box label="キャラクターのカスタマイズ" name="schk5"/>
- <line_editor name="skills_edit">
- (ロード中...)
- </line_editor>
- <text name="Languages:">
- 言語:
- </text>
- <line_editor name="languages_edit">
- (ロード中...)
- </line_editor>
-</panel>
diff --git a/indra/newview/skins/default/xui/pl/floater_about.xml b/indra/newview/skins/default/xui/pl/floater_about.xml
index b9c75e8e88..b8d75315de 100644
--- a/indra/newview/skins/default/xui/pl/floater_about.xml
+++ b/indra/newview/skins/default/xui/pl/floater_about.xml
@@ -6,8 +6,8 @@
</panel>
<panel label="Podziękowania" name="credits_panel">
<text name="linden_intro">
- Second Life zostało dla Ciebie stworzone przez Lindenów,
- z wkładem open source od:
+Second Life zostało dla Ciebie stworzone przez Lindenów,
+z wkładem open source od:
</text>
</panel>
<panel label="Licencje" name="licenses_panel" />
diff --git a/indra/newview/skins/default/xui/pl/floater_about_land.xml b/indra/newview/skins/default/xui/pl/floater_about_land.xml
index 1646db897a..9f8e110dd6 100644
--- a/indra/newview/skins/default/xui/pl/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pl/floater_about_land.xml
@@ -1,17 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="floaterland" title="O DZIAŁCE">
+ <floater.string name="Hours">
+ [HOURS] godz.
+ </floater.string>
+ <floater.string name="Hour">
+ godz.
+ </floater.string>
<floater.string name="Minutes">
- [MINUTES] minuty
+ [MINUTES] min.
</floater.string>
<floater.string name="Minute">
- minuta
+ min.
</floater.string>
<floater.string name="Seconds">
- [SECONDS] sekund
+ [SECONDS] sek.
</floater.string>
<floater.string name="Remaining">
pozostało
</floater.string>
+ <floater.string name="Always">
+ Zawsze
+ </floater.string>
<tab_container name="landtab">
<panel label="OGÓLNE" name="land_general_panel">
<panel.string name="new users only">
@@ -65,16 +74,10 @@
<text name="Owner:">
Właściciel:
</text>
- <text name="OwnerText">
- Ładowanie...
- </text>
<button label="Profil" name="Profile..." />
<text name="Group:">
Grupa:
</text>
- <text name="GroupText">
- Ładowanie...
- </text>
<button label="Ustaw" name="Set..." />
<check_box label="Udostępnij przypisywanie na Grupę" name="check deed" tool_tip="Oficer Grupy ma prawo przepisać prawo własności działki na Grupę. Działka wspierana jest przez przydziały pochodzące od członków Grupy." />
<button label="Przypisz" name="Deed..." tool_tip="Prawo przypisania działki na Grupę może dokonać jedynie oficer Grupy." />
@@ -111,7 +114,7 @@
<text name="DwellText">
Wczytywanie...
</text>
- <button label="Kup działkę" name="Buy Land..." />
+ <button label="Kup działkę" label_selected="Kup działkę" name="Buy Land..." />
<button label="Sprzedaż przez Lindenów" name="Linden Sale..." tool_tip="Działka musi mieć Właściciela, zawartość oraz nie może być wystawiona na Aukcję." />
<button label="Skrypty" name="Scripts..."/>
<button label="Kup dla Grupy" name="Buy For Group..." />
@@ -130,7 +133,7 @@
Działka zakupiona w tym Regionie może być łączona/dzielona.
</panel.string>
<panel.string name="can_not_change">
- Działka zakupiona w tym Regionie nie może być
+ Działka zakupiona w tym Regionie nie może być
łączona/dzielona.
</panel.string>
<text name="estate_section_lbl">
@@ -151,9 +154,6 @@
<text name="covenant_timestamp_text">
Ostatnia modyfikacja Wed Dec 31 16:00:00 1969
</text>
- <text name="region_name_text">
- Wczytywanie...
- </text>
<text name="region_landtype_lbl">
Typ:
</text>
@@ -220,8 +220,8 @@
<text name="Object Owners:">
Właściciele:
</text>
- <button name="Refresh List" tool_tip="Odśwież listę obiektów" />
- <button label="Zwróć obiekty" name="Return objects..." />
+ <button label="Odśwież listę" label_selected="Odśwież listę" name="Refresh List" tool_tip="Odśwież listę obiektów" />
+ <button label="Zwróć obiekty" label_selected="Zwróć obiekty" name="Return objects..." />
<name_list name="owner list">
<name_list.columns label="Typ" name="type" />
<name_list.columns label="Nazwa" name="name" />
@@ -250,7 +250,7 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki.
Twoja działka bądź treść jaką zawiera klasyfikowana jest jako Moderate.
</panel.string>
<panel.string name="mature_check_adult_tooltip">
- Twoja działka bądź treść jaką zawiera klasyfikowana jest jako Adult
+ Twoja działka bądź treść jaką zawiera klasyfikowana jest jako Adult.
</panel.string>
<panel.string name="landing_point_none">
(brak)
@@ -271,21 +271,21 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki.
<text name="allow_label2">
Budowanie:
</text>
- <check_box label="Wszyscy" name="edit objects check" />
- <check_box label="Grupa" name="edit group objects check" />
+ <check_box label="Wszyscy" name="edit objects check" tool_tip="Gdy ta opcja jest włączona, to Rezydenci mogą tworzyć i rezzować obiekty na Twojej działce." />
+ <check_box label="Grupa" name="edit group objects check" tool_tip="Gdy ta opcja jest włączona, to osoby będące w grupie przypisanej do Twojej działki mogą na niej tworzyć i rezzować obiekty." />
<text name="allow_label3">
Nowe obiekty:
</text>
- <check_box label="Wszyscy" name="all object entry check" />
- <check_box label="Grupa" name="group object entry check" />
+ <check_box label="Wszyscy" name="all object entry check" tool_tip="Gdy ta opcja jest włączona, to Rezydenci mogą przenosić istniejące obiekty z innych działek na tę działkę." />
+ <check_box label="Grupa" name="group object entry check" tool_tip="Gdy ta opcja jest włączona, to osoby będące w grupie przypisanej do tej działki mogą na nią przenosić istniejące obiekty z innych działek." />
<text name="allow_label4">
Skrypty:
</text>
- <check_box label="Wszyscy" name="check other scripts" />
- <check_box label="Grupa" name="check group scripts" />
+ <check_box label="Wszyscy" name="check other scripts" tool_tip="Gdy ta opcja jest włączona, to Rezydenci mogą uruchamiać skrypty na Twojej działce, włączając w to te z dodatków." />
+ <check_box label="Grupa" name="check group scripts" tool_tip="Gdy ta opcja jest włączona, to osoby będące w grupie przypisanej do Twojej działki mogą na niej uruchamiać skrypty, włączając w to te z dodatków." />
<check_box label="Bezpieczna (brak uszkodzeń)" name="check safe" tool_tip="Wybrana - działka jest bezpieczna - uszkodzenia w walce są zablokowane. Nie jest wybrana - uszkodzenia w walce są włączone." />
<check_box label="Popychanie niedozwolone" name="PushRestrictCheck" tool_tip="Nie pozwalaj skryptom na popychanie. Wybranie tej opcji może być przydatne do ograniczenia zakłóceń spokoju na Twojej działce." />
- <check_box label="Wyświetlaj w wyszukiwarce (30L$/tyg.)" name="ShowDirectoryCheck" tool_tip="Udostępnij ukazywanie się nazwy działki w wyszukiwarce" />
+ <check_box label="Wyświetlaj w wyszukiwarce (30L$/tyg.)" name="ShowDirectoryCheck" tool_tip="Udostępnij ukazywanie się nazwy działki w wyszukiwarce"/>
<combo_box name="land category">
<combo_box.item label="Każda kategoria" name="item0" />
<combo_box.item label="Lokalizacja Lindenów" name="item1" />
@@ -301,24 +301,24 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki.
<combo_box.item label="Wynajem" name="item13" />
<combo_box.item label="Inna" name="item12" />
</combo_box>
- <check_box label="Treść Moderate" name="MatureCheck" />
+ <check_box label="Treść Moderate" name="MatureCheck"/>
<text name="Snapshot:">
Zdjęcie:
</text>
<texture_picker name="snapshot_ctrl" tool_tip="Kliknij by wybrać zdjęcie" />
- <text name="allow_label5">
+ <text name="allow_see_label">
Awatary na innych działkach mogą rozmawiać/widzieć awatary na tej działce
</text>
- <check_box name="SeeAvatarsCheck" tool_tip="Pozwala Rezydentom z innych działek widzieć i rozmawiać z Rezydentami na tej działce - oraz Tobie, widzieć ich i rozmawiać z nimi." />
+ <check_box label="Widzieć awatary" name="SeeAvatarsCheck" tool_tip="Pozwala Rezydentom z innych działek widzieć i rozmawiać z Rezydentami na tej działce - oraz Tobie, widzieć ich i rozmawiać z nimi." />
<text name="landing_point">
Punkt Lądowania: [LANDING]
</text>
<button label="Ustaw" label_selected="Ustaw" name="Set" tool_tip="Ustal miejsce lądowania dla przybywających gości. Używa położenia Twojego awatara na tej działce." />
- <button label="Wyczyść" label_selected="Wyczyść" name="Clear" tool_tip="Usuń dotychczasowe miejsce lądowania" />
+ <button label="Wyczyść" label_selected="Wyczyść" name="Clear" tool_tip="Usuń dotychczasowe miejsce lądowania." />
<text name="Teleport Routing: ">
Trasa teleportacji:
</text>
- <combo_box name="landing type" tool_tip="Trasa teleportacji - ustaw w jaki sposób będzie się odbywać proces teleportacji na działce">
+ <combo_box name="landing type" tool_tip="Trasa teleportacji - ustaw w jaki sposób będzie się odbywać proces teleportacji na działce.">
<combo_box.item label="Zablokowana" name="Blocked" />
<combo_box.item label="Punkt Lądowania" name="LandingPoint" />
<combo_box.item label="Gdziekolwiek" name="Anywhere" />
@@ -345,18 +345,18 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki.
Obiekty używające tej tekstury będą wyświetlały film lub stronę internetową po naciśnięciu przycisku odtwarzania. Wybierz miniaturę, jeśli chcesz zmienić teksturę.
</text>
<check_box label="Skaluj automatycznie" name="media_auto_scale" tool_tip="Wybranie tej opcji dobierze rozmiar zawartości mediów dla tej działki automatycznie. Może to mieć znaczący wpływ na jakość odtwarzanego materiału - może on być odtwarzany wolniej i w gorszej jakości, ale żadne dalsze działania nie będą potrzebne." />
- <text name="media_size" tool_tip="Rozmiar dla ładowania mediów internetowych. Zostaw 0 dla ustawień domyślnych.">
+ <text name="media_size" tool_tip="Rozmiar dla przesyłanych mediów internetowych. Zostaw 0 dla ustawień domyślnych.">
Rozmiar:
</text>
- <spinner name="media_size_width" tool_tip="Rozmiar dla ładowania mediów internetowych. Zostaw 0 dla ustawień domyślnych." />
- <spinner name="media_size_height" tool_tip="Rozmiar dla ładowania mediów internetowych. Zostaw 0 dla ustawień domyślnych." />
+ <spinner name="media_size_width" tool_tip="Rozmiar dla przesyłanych mediów internetowych. Zostaw 0 dla ustawień domyślnych." />
+ <spinner name="media_size_height" tool_tip="Rozmiar dla przesyłanych mediów internetowych. Zostaw 0 dla ustawień domyślnych." />
<text name="pixels">
pikseli
</text>
<text name="Options:">
Opcje:
</text>
- <check_box label="Odtwarzanie mediów w pętli" name="media_loop" tool_tip="Powtarzaj odtwarzanie mediów w pętli. Po wyświetleniu materiału odtwarzanie rozpocznie się od początku." />
+ <check_box label="Odtwarzaj w pętli" name="media_loop" tool_tip="Powtarzaj odtwarzanie mediów w pętli. Po wyświetleniu materiału odtwarzanie rozpocznie się od początku." />
</panel>
<panel label="DŹWIĘK" name="land_audio_panel">
<text name="MusicURL:">
@@ -377,6 +377,7 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki.
<check_box label="Rozmowy włączone" name="parcel_enable_voice_channel" />
<check_box label="Rozmowy włączone (ustawione przez Majątek)" name="parcel_enable_voice_channel_is_estate_disabled" />
<check_box label="Ogranicz komunikację głosową do obszaru tej działki" name="parcel_enable_voice_channel_local" />
+ <check_box label="Ogranicz MOAP do obecnej działki" name="obscure_moap" tool_tip="Media na primach znajdujących się poza tą działką nie powinny odtwarzać się automatycznie dla rezydentów będących na niej - i odwrotnie." />
</panel>
<panel label="DOSTĘP" name="land_access_panel">
<panel.string name="access_estate_defined">
@@ -385,13 +386,10 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki.
<panel.string name="estate_override">
Jedna lub więcej z tych opcji ustawiona jest z poziomu Majątku
</panel.string>
- <check_box name="public_access" label="Dostęp publiczny (brak zaznaczenia tej opcji = widoczne linie zakazu)" />
- <text name="Only Allow">
- Umożliwiaj dostęp tylko dla:
- </text>
- <check_box label="Rezydentów zarejestrowanych w systemie płatniczym Linden Lab [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Zbanuj Rezydentów niezarejestrowanych w systemie płatniczym Linden Lab. Odwiedź [SUPPORT_SITE], aby uzyskać więcej informacji." />
- <check_box label="Rezydentów, którzy mają 18+ lat [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Zbanuj Rezydetów, którzy mają mniej niż 18 lat. Odwiedź [SUPPORT_SITE], aby uzyskać więcej informacji." />
- <check_box label="Udostępnij wejście grupie [GROUP]" name="GroupCheck" tool_tip="Ustaw Grupę w głównej zakładce." />
+ <check_box label="Każdy może odwiedzać (brak zaznaczenia = widoczne linie zakazu)" name="public_access" />
+ <check_box label="Osoba musi mieć 18+ lat [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Zbanuj Rezydetów, którzy mają mniej niż 18 lat. Odwiedź [SUPPORT_SITE], aby uzyskać więcej informacji." />
+ <check_box label="Osoba musi mieć dane płatnicze w systemie Linden Lab [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Zbanuj Rezydentów niezarejestrowanych w systemie płatniczym Linden Lab. Odwiedź [SUPPORT_SITE], aby uzyskać więcej informacji." />
+ <check_box label="Umożliwiaj wejście bez ograniczeń grupie [GROUP]" name="GroupCheck" tool_tip="Ustaw Grupę w głównej zakładce." />
<check_box label="Sprzedaj przepustki:" name="PassCheck" tool_tip="Otwórz tymczasowy dostęp do tej działki" />
<combo_box name="pass_combo">
<combo_box.item label="Każdemu" name="Anyone" />
@@ -399,22 +397,32 @@ Jedynie większe działki mogą być umieszczone w bazie wyszukiwarki.
</combo_box>
<spinner label="Cena w L$:" name="PriceSpin" />
<spinner label="Godziny dostępu:" name="HoursSpin" />
- <panel name="Allowed_layout_panel">
- <text label="Zawsze Zezwalaj" name="AllowedText">
- Dozwoleni Rezydenci
- </text>
- <name_list name="AccessList" tool_tip="([LISTED] na liście, [MAX] maksimum)" />
- <button label="Dodaj" name="add_allowed" />
- <button label="Usuń" label_selected="Usuń" name="remove_allowed" />
- </panel>
- <panel name="Banned_layout_panel">
- <text label="Banuj" name="BanCheck">
- Zbanowani Rezydenci
- </text>
- <name_list name="BannedList" tool_tip="([LISTED] na liście, [MAX] maksimum)" />
- <button label="Dodaj" name="add_banned" />
- <button label="Usuń" label_selected="Usuń" name="remove_banned" />
- </panel>
+ <text name="OwnerLimited">
+ (właściciel Majątku może ograniczać te wybory)
+ </text>
+ <layout_stack name="access_stack">
+ <layout_panel name="Allowed_layout_panel">
+ <text label="Zawsze zezwalaj" name="AllowedText">
+ Zawsze zezwalaj ([COUNT]/[MAX])
+ </text>
+ <name_list name="AccessList" tool_tip="([LISTED] na liście, [MAX] maksimum)"/>
+ <button label="Dodaj" name="add_allowed"/>
+ <button label="Usuń" label_selected="Usuń" name="remove_allowed"/>
+ </layout_panel>
+ <layout_panel name="Banned_layout_panel">
+ <text label="Banuj" name="BanCheck">
+ Zbanowani ([COUNT]/[MAX])
+ </text>
+ <name_list name="BannedList" tool_tip="([LISTED] na liście, [MAX] maksimum)">
+ <columns label="Imię" name="name" />
+ <columns label="Czas" name="duration" />
+ </name_list>
+ <button label="Dodaj" name="add_banned"/>
+ <button label="Usuń" label_selected="Usuń" name="remove_banned"/>
+ </layout_panel>
+ </layout_stack>
</panel>
+ <panel label="PRZYGODY" name="land_experiences_panel"/>
+ <panel label="OTOCZENIE" name="land_environment_panel" />
</tab_container>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/pl/floater_animation_anim_preview.xml
index ff2fee6f2f..c56f103d21 100644
--- a/indra/newview/skins/default/xui/pl/floater_animation_anim_preview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_animation_anim_preview.xml
@@ -6,6 +6,6 @@
<text name="description_label">
Opis:
</text>
- <button label="Załaduj ([AMOUNT]L$)" name="ok_btn" />
+ <button label="Prześlij ([AMOUNT]L$)" name="ok_btn" />
<button label="Anuluj" label_selected="Anuluj" name="cancel_btn" />
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/pl/floater_animation_bvh_preview.xml
index 18212fad9c..63b0931b2b 100644
--- a/indra/newview/skins/default/xui/pl/floater_animation_bvh_preview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_animation_bvh_preview.xml
@@ -173,6 +173,6 @@ Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund.
Nie można wczytać pliku animacji.
Doradzamy eksport plików BVH z Poser 4.
</text>
- <button label="Załaduj ([AMOUNT]L$)" name="ok_btn" />
+ <button label="Prześlij ([AMOUNT]L$)" name="ok_btn" />
<button label="Anuluj" name="cancel_btn" />
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_associate_listing.xml b/indra/newview/skins/default/xui/pl/floater_associate_listing.xml
index b5464dd59b..7ef99457c9 100644
--- a/indra/newview/skins/default/xui/pl/floater_associate_listing.xml
+++ b/indra/newview/skins/default/xui/pl/floater_associate_listing.xml
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="associate listing" title="PRZYPISANE PRZEDMIOTY">
- <text name="message">ID przedmiotu:</text>
+<floater name="associate listing" title="PRZYPISZ RZECZ">
+ <text name="message">ID rzeczy:</text>
<line_editor name="listing_id">Wpisz tutaj ID</line_editor>
- <button label="OK" name="OK"/>
<button label="Anuluj" name="Cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
index 87e318be1b..e668c6cc20 100644
--- a/indra/newview/skins/default/xui/pl/notifications.xml
+++ b/indra/newview/skins/default/xui/pl/notifications.xml
@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="utf-8" ?>
<notifications>
<global name="skipnexttime">
- Nie pokazuj tego następnym razem
+ Nie pokazuj tego ponownie
+ </global>
+ <global name="skipnexttimesessiononly">
+ Nie pokazuj tego ponownie
+(dla obecnej sesji)
</global>
<global name="alwayschoose">
- Zawsze wybieraj tą opcję
+ Zawsze wybieraj tę opcję
</global>
<global name="implicitclosebutton">
Zamknij
@@ -20,20 +24,25 @@ Szczegóły błędu: Błąd o nazwie &apos;[_NAME]&apos; nie został odnaleziony
[CONTROLS]
</notification>
<notification name="TutorialNotFound">
- Brak samouczka na ten temat
+ Brak samouczka na ten temat.
</notification>
<notification name="GenericAlertYesCancel">
[MESSAGE]
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Tak" />
</notification>
<notification name="BadInstallation">
- Podczas aktualizacji [APP_NAME] wystąpił błąd. Proszę [http://get.secondlife.com odwiedzić stronę] aby ściągnąć ostatnią wersję klienta.
+ Instalacja [APP_NAME] jest uszkodzona. Proszę [http://get.secondlife.com pobrać nową kopię] przeglądarki i ponownie ją zainstalować.
</notification>
<notification name="LoginFailedNoNetwork">
Nie można połączyć z [SECOND_LIFE_GRID].
&apos;[DIAGNOSTIC]&apos;
Upewnij się, że Twoje połączenie z internetem działa.
</notification>
+ <notification name="LoginFailedToParse">
+ Przeglądarka otrzymała zniekształconą odpowiedź z serwera. Upewnij się, że połączenie internetowe działa prawidłowo i spróbuj ponownie później.
+
+Jeśli uważasz, że to błąd - skontaktuj się z pomocą techniczną.
+ </notification>
<notification name="MessageTemplateNotFound">
Szablon komunikatu dla [PATH] nie został odnaleziony.
</notification>
@@ -72,11 +81,96 @@ Foldery nie zostały wysłane na Marketplace z powodu błędu sieci lub systemu.
Inicjalizacja Marketplace nieudana z powodu błędu sieci lub systemu. Spróbuj później.
</notification>
+ <notification name="StockPasteFailed">
+ Kopiowanie lub przeniesienie do folderu Magazynowego nie powiodło się:
+
+&apos;[ERROR_CODE]&apos;
+ </notification>
+ <notification name="MyOutfitsPasteFailed">
+ Jeden lub więcej przedmiotów nie może być użyty w "Strojach"
+ </notification>
+ <notification name="MerchantPasteFailed">
+ Kopiowanie lub przenoszenie przedmiotów na Marketplace nie powiodło się:
+
+&apos;[ERROR_CODE]&apos;
+ </notification>
+ <notification name="MerchantTransactionFailed">
+ Transakcja z Marketplace nie powiodła się:
+
+[ERROR_REASON][ERROR_DESCRIPTION]
+ </notification>
+ <notification name="MerchantUnprocessableEntity">
+ Wylistowanie tej rzeczy lub aktywowanie folderu z wersją nie było możliwe. Zazwyczaj jest to spowodowane brakującymi informacjami w formularzu z opisem przedmiotu, ale może to również wynikać z błędów w strukturze folderów. Zmień opis przedmiotu lub sprawdź foldery, aby znaleźć błędy.
+ </notification>
+ <notification name="MerchantListingFailed">
+ Listowanie na Marketplace nie powiodło się:
+
+ &apos;[ERROR_CODE]&apos;
+ </notification>
+ <notification name="MerchantFolderActivationFailed">
+ Aktywacja tego folderu wersji nie powiodła się:
+
+ &apos;[ERROR_CODE]&apos;
+ </notification>
+ <notification name="MerchantForceValidateListing">
+ Aby wylistowanie tej rzeczy było możliwe hierarchia w jej zawartości została automatycznie naprawiona.
+ <usetemplate ignoretext="Ostrzegaj, gdy wylistowanie rzeczy automatycznie naprawia hierarchię zawartości" name="okignore" />
+ </notification>
+ <notification name="ConfirmMerchantActiveChange">
+ Jeśli kontynuujesz, to zmieni się aktywna zawartość tej rzeczy. Czy chcesz kontynuować?
+ <usetemplate ignoretext="Potwierdź przed zmodyfikowaniem aktywnej rzeczy na Marketplace" name="okcancelignore" notext="Anuluj" />
+ </notification>
+ <notification name="ConfirmMerchantMoveInventory">
+ Przedmioty przeciągnięte do okna listowania na Marketplace są przenoszone z ich oryginalnych lokalizacji, a nie kopiowane. Czy chcesz kontynuować?
+ <usetemplate ignoretext="Potwierdź, zanim prześlę na Marketplace przedmiot z mojej Szafy" name="okcancelignore" notext="Anuluj" />
+ </notification>
+ <notification name="ConfirmListingCutOrDelete">
+ Przeniesienie lub usunięcie folderu usunie również Twój przedmiot na Marketplace. Jeśli chcesz, aby przedmiot był ciągle widoczny na Marketplace musisz przesunąć lub usunąć zawartość folderu z wersją, którą chcesz zmodyfikować. Czy chcesz kontynuować?
+ <usetemplate ignoretext="Potwierdź, zanim usunę lub przeniosę przedmiot z Marketplace" name="okcancelignore" notext="Anuluj" />
+ </notification>
+ <notification name="ConfirmCopyToMarketplace">
+ Nie masz praw do skopiowania jednego lub więcej obiektów na Marketplace. Możesz je przenieść lub pozostawić.
+ <usetemplate canceltext="Anuluj" ignoretext="Potwierdź, zanim wyślę na Marketplace przedmioty bez praw kopiowania" name="yesnocancelbuttons" notext="Nie przenoś" yestext="Przenieś"/>
+ </notification>
+ <notification name="ConfirmMerchantUnlist">
+ Jeśli kontynuujesz, to ta rzecz zostanie usunięta z listy. Czy chcesz kontynuować?
+ <usetemplate ignoretext="Potwierdź, zanim usunę z listy rzecz na Marketplace" name="okcancelignore" notext="Anuluj" />
+ </notification>
+ <notification name="ConfirmMerchantClearVersion">
+ Jeśli kontynuujesz, to folder wersji tej rzeczy zostanie zdeaktywowany. Czy chcesz kontynuować?
+ <usetemplate ignoretext="Potwierdź przed wyłączeniem folderu wersji dla rzeczy na Marketplace" name="okcancelignore" notext="Anuluj" />
+ </notification>
+ <notification name="AlertMerchantListingNotUpdated">
+ Ta rzecz nie może zostać zaktualizowana.
+[[URL] Kliknij tutaj] aby zaktualizować ją na Marketplace.
+ </notification>
+ <notification name="AlertMerchantListingCannotWear">
+ Nie możesz założyć ubrań lub części ciała, które znajdują się w folderze listy rzeczy Marketplace.
+ </notification>
+ <notification name="AlertMerchantListingInvalidID">
+ Nieprawidłowy ID rzeczy.
+ </notification>
+ <notification name="AlertMerchantListingActivateRequired">
+ Istnieje kilka, lub żadna, wersji folderu dla tej rzeczy. Będziesz musiał/a wybrać i uaktywnić jedną oddzielnie później.
+ <usetemplate ignoretext="Powiadamiaj o aktywacji folderu wersji, gdy tworzę rzecz z kilkoma folderami wersji" name="okignore" />
+ </notification>
+ <notification name="AlertMerchantStockFolderSplit">
+ Przedmioty z ograniczonymi zasobami magazynowymi różnych typów zostały rozdzielone do osobnych folderów, aby ogólna hierarchia katalogów umożliwiała ich listowanie.
+ <usetemplate ignoretext="Powiadom, gdy folder Magazynowy jest dzielony przed listowaniem" name="okignore" />
+ </notification>
+ <notification name="AlertMerchantStockFolderEmpty">
+ Twoja rzecz została usunięta z listy, ponieważ nie ma jej już w Magazynie. Musisz dodać więcej jej jednostek do folderu Magazynowego, aby można było ją ponownie wyświetlać na liście.
+ <usetemplate ignoretext="Powiadom, gdy rzecz jest zdjęta z listy, bo folder zasobów Magazynowych jest pusty" name="okignore" />
+ </notification>
+ <notification name="AlertMerchantVersionFolderEmpty">
+ Twoja rzecz została usunięta z listy, ponieważ folder wersji jest pusty. Musisz dodać więcej jej jednostek do folderu wersji, aby można było ją ponownie wyświetlać na liście.
+ <usetemplate ignoretext="Powiadom, gdy rzecz jest zdjęta z listy, bo folder wersji jest pusty" name="okignore" />
+ </notification>
<notification name="WriteAnimationFail">
Problem w zapisywaniu danych animacji. Spróbuj ponownie za kilka minut.
</notification>
<notification name="UploadAuctionSnapshotFail">
- W trakcie ładowania obrazu aukcji pojawił się problem z następującego powodu: [REASON].
+ W trakcie przesyłania obrazu aukcji pojawił się problem z następującego powodu: [REASON].
</notification>
<notification name="UnableToViewContentsMoreThanOne">
Nie można przeglądać zawartości więcej niż jednego obiektu naraz.
@@ -89,9 +183,12 @@ Wybierz pojedynczy obiekt i spróbuj jeszcze raz.
<notification name="FriendsAndGroupsOnly">
Osoby spoza listy znajomych nie będą wiedzieć, że zdecydowałeś/aś się ignorować ich rozmowy głosowe i wiadomości IM.
</notification>
- <notification name="FavoritesOnLogin">
+ <notification name="FavoritesOnLogin">
Pamiętaj: kiedy włączysz tą opcję to każdy kto używa tego komputera będzie mógł zobaczyć Twoją listę ulubionych miejsc.
</notification>
+ <notification name="AllowMultipleViewers">
+ Uruchamianie kilku przeglądarek Second Life nie podlega wsparciu. Może prowadzić do kolizji pamięci podręcznej tekstur, jej uszkodzeń, pogorszenia efektów wizualnych oraz wydajności.
+ </notification>
<notification name="GrantModifyRights">
Udzielenie praw modyfikacji innemu Rezydentowi umożliwia modyfikację, usuwanie lub wzięcie JAKIEGOKOLWIEK z Twoich obiektów. Używaj tej opcji z rozwagą!
Czy chcesz udzielić prawa do modyfikacji [NAME]?
@@ -110,6 +207,9 @@ Czy chcesz dać prawa modyfikacji wybranym osobom?
Czy chcesz odebrać prawa modyfikacji wybranym Rezydentom?
<usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak" />
</notification>
+ <notification name="GroupNameLengthWarning">
+ Nazwa grupy musi zawierać od [MIN_LEN] do [MAX_LEN] znaków.
+ </notification>
<notification name="UnableToCreateGroup">
Założenie grupy nie jest możliwe.
[MESSAGE]
@@ -171,6 +271,17 @@ Jeśli nie chcesz, aby te przywileje były dłużej przypisane do tej roli, to w
Zamierzasz wyrzucić [COUNT] osób z grupy.
<usetemplate ignoretext="Potwierdź wyrzucenie kilku osób z grupy" name="okcancelignore" notext="Anuluj" yestext="Wyrzuć" />
</notification>
+ <notification name="BanGroupMemberWarning">
+ Zamierzasz zbanować [AVATAR_NAME] z grupy.
+ <usetemplate ignoretext="Potwierdź przed zbanowaniem osoby z grupy" name="okcancelignore" notext="Anuluj" yestext="Banuj" />
+ </notification>
+ <notification name="BanGroupMembersWarning">
+ Zamierzasz zbanować [COUNT] osób z grupy.
+ <usetemplate ignoretext="Potwierdź przed zbanowaniem z grupy kilku osób na raz" name="okcancelignore" notext="Anuluj" yestext="Banuj" />
+ </notification>
+ <notification name="GroupBanUserOnBanlist">
+ Niektórzy rezydenci nie dostali zaproszenia, ponieważ są zbanowani w grupie.
+ </notification>
<notification name="AttachmentDrop">
Wybrałeś/aś opcję upuszczenia swojego dodatku.
Czy chcesz kontynuować?
@@ -182,7 +293,7 @@ Chcesz kontynuować?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Dołącz" />
</notification>
<notification name="JoinGroupNoCost">
- Dołączasz do grupy [NAME].
+ Dołączasz do grupy &lt;nolink&gt;[NAME]&lt;/nolink&gt;.
Czy chcesz kontynuować?
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Dołącz" />
</notification>
@@ -194,7 +305,30 @@ Masz za mało L$ żeby do niej dołączyć.
Stworzenie tej grupy kosztuje [COST]L$.
W grupie powinna być więcej niż jedna osoba, w przeciwnym razie zostanie ona na zawsze skasowana.
Zaproś kogoś w ciągu 48 godzin.
- <usetemplate canceltext="Anuluj" name="okcancelbuttons" notext="Anuluj" yestext="Stwórz grupę za 100L$" />
+ <usetemplate canceltext="Anuluj" name="okcancelbuttons" notext="Anuluj" yestext="Stwórz grupę za [COST]L$" />
+ </notification>
+ <notification name="JoinGroupInaccessible">
+ Ta grupa nie jest dla Ciebie dostępna.
+ </notification>
+ <notification name="JoinGroupError">
+ Wystąpił błąd podczas próby dołączenia do grupy.
+ </notification>
+ <notification name="JoinGroupErrorReason">
+ Nie można dołączyć do grupy: [reason]
+ </notification>
+ <notification name="JoinGroupTrialUser">
+ Przepraszamy, ale konta próbne nie mogą dołączać do grup.
+ </notification>
+ <notification name="JoinGroupMaxGroups">
+ Nie możesz dołączyć do &apos;&lt;nolink&gt;[group_name]&lt;/nolink&gt;&apos;:
+Jesteś już w [group_count] grupach, a maksymalny dozwolony limit to [max_groups]
+ </notification>
+ <notification name="JoinGroupClosedEnrollment">
+ Nie możesz dołączyć do &apos;&lt;nolink&gt;[group_name]&lt;/nolink&gt;&apos;:
+Grupa nie umożliwia już swobodnego dołączania.
+ </notification>
+ <notification name="JoinGroupInsufficientFunds">
+ Nie można przekazać wymaganej opłaty wstępu ([membership_fee] L$).
</notification>
<notification name="LandBuyPass">
Za [COST]L$ możesz odwiedzić tą działkę (&apos;[PARCEL_NAME]&apos;) na [TIME] godzin. Chcesz kupić przepustkę?
@@ -217,10 +351,9 @@ Cena wynosi [SALE_PRICE]L$, a sprzedaż będzie autoryzowana dla [NAME].
<usetemplate name="okcancelbuttons" notext="Anuluj" />
</notification>
<notification name="ReturnObjectsDeededToGroup">
- Czy na pewno chcesz zwrócić wszystkie obiekty udostępnione grupie &apos;[NAME]&apos; na tej działce do szaf ich poprzednich właścicieli?
+ Czy na pewno chcesz zwrócić wszystkie obiekty udostępnione grupie &apos;&lt;nolink&gt;[NAME]&lt;/nolink&gt;&apos; na tej działce do szaf ich poprzednich właścicieli?
-*UWAGA* Wybrana opcja spowoduje usunięcie wszystkich obiektów
-udostępnionych grupie, które nie mają praw transferu!
+*UWAGA* Wybrana opcja spowoduje usunięcie wszystkich obiektów udostępnionych grupie, które nie mają praw transferu!
Obiekty: [N]
<usetemplate name="okcancelbuttons" notext="Anuluj" />
@@ -256,7 +389,7 @@ Obiekty: [N]
<usetemplate name="okcancelbuttons" notext="Anuluj" />
</notification>
<notification name="ReturnAllTopObjects">
- Czy na pewno chcesz zwrócić wszystkie wymienione obiekty znajdujące się na tej działce do szaf ich właścicieli?
+ Czy na pewno chcesz zwrócić wszystkie wymienione obiekty znajdujące się na tej działce do szaf ich właścicieli? Spowoduje to zwrot WSZYSTKICH oskryptowanych obiektów w regionie!
<usetemplate name="okcancelbuttons" notext="Anuluj" />
</notification>
<notification name="DisableAllTopObjects">
@@ -264,7 +397,7 @@ Obiekty: [N]
<usetemplate name="okcancelbuttons" notext="Anuluj" />
</notification>
<notification name="ReturnObjectsNotOwnedByGroup">
- Zwrócić obiekty z tej działki, które NIE są udostępnione grupie [NAME] do ich właścicieli?
+ Zwrócić obiekty z tej działki, które NIE są udostępnione grupie &lt;nolink&gt;[NAME]&lt;/nolink&gt; do ich właścicieli?
Obiekty: [N]
<usetemplate name="okcancelbuttons" notext="Anuluj" />
@@ -299,14 +432,23 @@ W celu umieszczenia mediów tylko na jednej powierzchni skorzystaj z narzędzia
<notification name="ErrorEncodingSnapshot">
Błąd w kodowaniu zdjęcia.
</notification>
+ <notification name="ErrorPhotoCannotAfford">
+ Potrzebujesz [COST]L$ aby zapisać zdjęcie do swojej Szafy. Możesz zamiast tego kupić L$ lub zapisać zdjęcie na swoim komputerze.
+ </notification>
+ <notification name="ErrorCannotAffordUpload">
+ Potrzebujesz [COST]L$ aby przesłać ten element.
+ </notification>
+ <notification name="ErrorTextureCannotAfford">
+ Potrzebujesz [COST]L$ aby zapisać teksturę do swojej Szafy. Możesz zamiast tego kupić L$ lub zapisać teksturę na swoim komputerze.
+ </notification>
<notification name="ErrorUploadingPostcard">
- W trakcie ładowania zdjęcia pojawił się problem z następującego powodu: [REASON]
+ W trakcie przesyłania zdjęcia pojawił się problem z następującego powodu: [REASON]
</notification>
<notification name="ErrorUploadingReportScreenshot">
- W trakcie ładowania zdjęcia ekranu do raportu pojawił się problem z następującego powodu: [REASON]
+ W trakcie przesyłania zdjęcia ekranu do raportu pojawił się problem z następującego powodu: [REASON]
</notification>
<notification name="MustAgreeToLogIn">
- Musisz zaakceptować Warunki Umowy (Terms of Service) by kontynuować logowanie się do [SECOND_LIFE].
+ Musisz zaakceptować Regulamin (Terms and Conditions), Politykę Prywatności (Privacy Policy) i Warunki korzystania z Usług (Terms of Service) by kontynuować logowanie się do [SECOND_LIFE].
</notification>
<notification name="CouldNotPutOnOutfit">
Założenie stroju nie powiodło się.
@@ -322,6 +464,9 @@ Limit [MAX_ATTACHMENTS] dodatków został przekroczony. Proszę najpierw odłąc
<notification name="CannotWearInfoNotComplete">
Nie możesz założyć tego przedmiotu, ponieważ jeszcze się nie załadował do końca. Spróbuj ponownie za kilka minut.
</notification>
+ <notification name="MustEnterPasswordToLogIn">
+ Należy wprowadzić hasło.
+ </notification>
<notification name="MustHaveAccountToLogIn">
Należy wprowadzić nazwę użytkownika.
@@ -332,10 +477,10 @@ Potrzebujesz konta aby się zalogować do [SECOND_LIFE]. Czy chcesz utworzyć je
Należy wprowadzić nazwę użytkownika lub imię oraz nazwisko Twojego awatara w pole nazwy użytkownika, a następnie ponownie się zalogować.
</notification>
<notification name="InvalidGrid">
- '[GRID]' nie jest prawidłowym identyfikatorem siatki.
+ '[GRID]' nie jest prawidłowym identyfikatorem świata.
</notification>
<notification name="InvalidLocationSLURL">
- Twój punkt startowy nie znajduje się na prawidłowej siatce.
+ Twój punkt startowy nie znajduje się w prawidłowym świecie.
</notification>
<notification name="DeleteClassified">
Usunąć reklamę &apos;[NAME]&apos;?
@@ -354,10 +499,22 @@ Czy na pewno chcesz kontynuować?
<notification name="ClassifiedInsufficientFunds">
Nie posiadasz wystarczających środków aby dodać reklamę.
</notification>
- <notification name="DeleteAvatarPick">
+ <notification name="ProfileDeleteClassified">
+ Usunąć reklamę &lt;nolink&gt;[CLASSIFIED]&lt;/nolink&gt;?
+ <usetemplate name="okcancelbuttons" notext="Anuluj" />
+ </notification>
+ <notification name="ProfileDeletePick">
Usunąć miejsce &lt;nolink&gt;[PICK]&lt;/nolink&gt;?
<usetemplate name="okcancelbuttons" notext="Anuluj" />
</notification>
+ <notification name="ProfileUnpublishedClassified">
+ Masz nieopublikowane reklamy. Przepadną, jeśli zamkniesz okno.
+ <usetemplate name="okcancelbuttons" notext="Anuluj" />
+ </notification>
+ <notification name="ProfileUnsavedChanges">
+ Masz niezapisane zmiany.
+ <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Odrzuć" yestext="Zapisz" />
+ </notification>
<notification name="DeleteOutfits">
Skasować wybrane stroje?
<usetemplate name="okcancelbuttons" notext="Anuluj" />
@@ -372,14 +529,6 @@ Czy na pewno chcesz kontynuować?
<notification name="SelectHistoryItemToView">
Wybierz obiekt z historii, który chcesz zobaczyć.
</notification>
- <notification name="ResetShowNextTimeDialogs">
- Czy chcesz aktywować ponownie wszystkie te powiadomienia, przy których wcześniej zaznaczono &apos;nie pokazuj ponownie&apos;?
- <usetemplate name="okcancelbuttons" notext="Anuluj" />
- </notification>
- <notification name="SkipShowNextTimeDialogs">
- Czy chcesz dezaktywować wszystkie powiadomienia, jakie tylko można?
- <usetemplate name="okcancelbuttons" notext="Anuluj" />
- </notification>
<notification name="CacheWillClear">
Bufor danych zostanie wyczyszczony po restarcie aplikacji [APP_NAME].
</notification>
@@ -390,6 +539,9 @@ Pamiętaj: Opcja ta wyczyszcza bufor danych.
<notification name="ChangeConnectionPort">
Ustawienia portu zostają zaktualizowane po restarcie aplikacji [APP_NAME].
</notification>
+ <notification name="ChangeDeferredDebugSetting">
+ To ustawienie debugowania zostanie zaktualizowane po restarcie aplikacji [APP_NAME].
+ </notification>
<notification name="ChangeSkin">
Nowa skórka pojawi się po restarcie aplikacji [APP_NAME].
</notification>
@@ -405,7 +557,11 @@ Pamiętaj: Opcja ta wyczyszcza bufor danych.
<usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Nie zapisuj" yestext="Zapisz" />
</notification>
<notification name="DeleteNotecard">
- Usunąć notkę?
+ Czy na pewno chcesz usunąć tą notkę?
+ <usetemplate ignoretext="Potwierdź usuwanie notki" name="okcancelignore" notext="Anuluj" />
+ </notification>
+ <notification name="LoadPreviousReportScreenshot">
+ Czy chcesz użyć poprzedniego zrzutu ekranu dla swojego zgłoszenia?
<usetemplate name="okcancelbuttons" notext="Anuluj" />
</notification>
<notification name="GestureSaveFailedTooManySteps">
@@ -451,6 +607,10 @@ Obiekt może znajdować się zbyt daleko albo został usunięty.
<notification name="CannotDownloadFile">
Nie można pobrać pliku
</notification>
+ <notification name="MediaFileDownloadUnsupported">
+ Zażądano pobrania pliku, jaki nie jest obsługiwany w [SECOND_LIFE].
+ <usetemplate ignoretext="Ostrzegaj o pobieraniu nieobsługiwanych typów plików" name="okignore" />
+ </notification>
<notification name="CannotWriteFile">
Nie można zapisać pliku [[FILE]]
</notification>
@@ -460,23 +620,11 @@ Obiekt może znajdować się zbyt daleko albo został usunięty.
Odwiedzić [_URL], aby uzyskać więcej informacji?
<usetemplate ignoretext="Sprzęt w moim komputerze nie jest wspierany" name="okcancelignore" notext="Nie" yestext="Tak" />
</notification>
- <notification name="IntelOldDriver">
- Prawdopodobnie istnieje nowszy sterownik dla Twojej karty graficznej. Aktualizacja sterowników graficznych może znacznie zwiększyć wydajność.
-
-Odwiedzić [_URL] aby sprawdzić, czy są nowsze sterowniki?
- <usetemplate ignoretext="Moje sterowniki grafiki są przestarzałe" name="okcancelignore" notext="Nie" yestext="Tak" />
- </notification>
- <notification name="AMDOldDriver">
- Prawdopodobnie istnieje nowszy sterownik dla Twojej karty graficznej. Aktualizacja sterowników graficznych może znacznie zwiększyć wydajność.
-
-Odwiedzić [_URL] aby sprawdzić, czy są nowsze sterowniki?
- <usetemplate ignoretext="Moje sterowniki grafiki są przestarzałe" name="okcancelignore" notext="Nie" yestext="Tak" />
- </notification>
- <notification name="NVIDIAOldDriver">
+ <notification name="OldGPUDriver">
Prawdopodobnie istnieje nowszy sterownik dla Twojej karty graficznej. Aktualizacja sterowników graficznych może znacznie zwiększyć wydajność.
-Odwiedzić [_URL] aby sprawdzić, czy są nowsze sterowniki?
- <usetemplate ignoretext="Moje sterowniki grafiki są przestarzałe" name="okcancelignore" notext="Nie" yestext="Tak" />
+Odwiedzić [URL] aby sprawdzić, czy są nowsze sterowniki?
+ <usetemplate ignoretext="Moje sterowniki grafiki są przestarzałe" name="okcancelignore" notext="Nie" yestext="Tak"/>
</notification>
<notification name="UnknownGPU">
Twój system jest wyposażony w kartę graficzną, która nie jest rozpoznana przez [APP_NAME].
@@ -500,7 +648,7 @@ Możesz podnieść jakość grafiki pod Ustawienia &gt; Grafika.
</notification>
<notification name="CannotCopyWarning">
Nie masz pozwolenia na kopiowanie następujących obiektów:
-[ITEMS]
+&lt;nolink&gt;[ITEMS]&lt;/nolink&gt;
i stracisz je w momencie przekazania. Czy na pewno chcesz oddać te obiekty?
<usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak" />
</notification>
@@ -547,7 +695,7 @@ Ta osoba tymczasowo nie będzie mogła się poruszać, używać czatu (IM) lub o
<usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Wyrzuć" />
</notification>
<notification name="EjectAvatarFromGroup">
- Wyrzuciłeś/aś [AVATAR_NAME] z grupy [GROUP_NAME]
+ Wyrzuciłeś/aś [AVATAR_NAME] z grupy &lt;nolink&gt;[GROUP_NAME]&lt;/nolink&gt;.
</notification>
<notification name="AcquireErrorTooManyObjects">
BŁĄD OTRZYMYWANIA: Zbyt wiele wybranych obiektów.
@@ -562,6 +710,9 @@ Przemieść wszystkie otrzymywane obiekty do jednego regionu.
Odwiedzić [_URL] po więcej informacji na temat zakupu L$?
<usetemplate name="okcancelbuttons" notext="Anuluj" />
</notification>
+ <notification name="MuteLimitReached">
+ Nie można dodać kolejnego wpisu do listy zablokowanych, ponieważ limit [MUTE_LIMIT] rekordów został osiągnięty.
+ </notification>
<notification name="UnableToLinkObjects">
Nie można połączyć [COUNT] obiektów.
Maksymalnie można połączyć [MAX] obiektów.
@@ -577,6 +728,9 @@ Upewnij się, że żaden z obiektów nie jest zablokowany i wszystkie należą d
<notification name="CannotLinkPermanent">
Nie możesz łączyć obiektów przez granice regionów.
</notification>
+ <notification name="CannotLinkAcrossRegions">
+ Nie możesz łączyć obiektów przez granice regionów.
+ </notification>
<notification name="CannotLinkDifferentOwners">
Nie możesz połączyć obiektów, ponieważ należą one do różnych osób.
@@ -592,7 +746,7 @@ Upewnij się, że nazwa pliku ma poprawne rozszerzenie.
Oczekiwane: [VALIDS]
</notification>
<notification name="CannotUploadSoundFile">
- Nie można otworzyć załadowanego pliku dźwiękowego:
+ Nie można otworzyć przesłanego pliku dźwiękowego:
[FILE]
</notification>
<notification name="SoundFileNotRIFF">
@@ -624,7 +778,7 @@ Oczekiwane: [VALIDS]
[FILE]
</notification>
<notification name="SoundFileInvalidTooLong">
- Plik audio jest zbyt długi (10 sekund maksimum):
+ Plik audio jest zbyt długi (maksymalnie 30 sekund):
[FILE]
</notification>
<notification name="ProblemWithFile">
@@ -655,10 +809,10 @@ To może się zdarzyć, kiedy zmieniasz ustawienia sieci. Zrestartowanie Przegl
Nie można utworzyć pliku wyjściowego: [FILE]
</notification>
<notification name="DoNotSupportBulkAnimationUpload">
- [APP_NAME] obecnie nie wspomaga ładowania grupowego plików animacji w formacie BVH.
+ [APP_NAME] obecnie nie wspomaga przesyłania grupowego plików animacji w formacie BVH.
</notification>
<notification name="CannotUploadReason">
- Ładowanie pliku [FILE] nie powiodło się z powodu: [REASON]
+ Przesyłanie pliku [FILE] nie powiodło się z powodu: [REASON]
Spróbuj jeszcze raz później.
</notification>
<notification name="LandmarkCreated">
@@ -670,6 +824,12 @@ Spróbuj jeszcze raz później.
<notification name="CannotCreateLandmarkNotOwner">
Nie możesz zapamiętać tego miejsca (LM) ponieważ właściciel działki nie pozwala na to.
</notification>
+ <notification label="Utwórz folder" name="CreateLandmarkFolder">
+ Wybierz nazwę folderu:
+ <form name="form">
+ <button name="Cancel" text="Anuluj" />
+ </form>
+ </notification>
<notification name="CannotRecompileSelectObjectsNoScripts">
&apos;Rekompilacja&apos; nie powiodła się.
@@ -719,8 +879,7 @@ Nowe zapytanie: [FINALQUERY]
[REASON]
</notification>
<notification name="invalid_tport">
- Niestety, pojawił się błąd podczas próby teleportacji. Proponujemy wylogowanie się i spróbowanie teleportacji ponownie.
-Jeżeli nadal otrzymujesz tę wiadomość proponujemy odwiedzić stronę [SUPPORT_SITE].
+ Próby teleportacji są ograniczone do 6 na minutę. Jeśli masz problemy odczekaj minutę i spróbuj ponownie się teleportować. Jeśli problem będzie się powtarzał wyloguj się i zaloguj ponownie.
</notification>
<notification name="invalid_region_handoff">
Niestety, pojawił się błąd podczas próby przedostania się na drugi region. Proponujemy wylogowanie się i spróbowanie przedostania się na drugi region ponownie.
@@ -750,6 +909,9 @@ Jeżeli nadal otrzymujesz tę wiadomość proponujemy odwiedzić stronę [SUPPOR
<notification name="expired_region_handoff">
Przepraszamy, ale nie udało się przeprowadzić zmiany regionu wystarczająco szybko. Spróbuj jeszcze raz za kilka minut.
</notification>
+ <notification name="preexisting_tport">
+ Przepraszamy, ale system nie mógł zainicjować teleportacji. Spróbuj jeszcze raz za kilka minut.
+ </notification>
<notification name="no_host">
Nie można znaleźć miejsca docelowego. To miejsce może być chwilowo nieosiągalne albo przestało istnieć. Spróbuj jeszcze raz za kilka minut.
</notification>
@@ -937,13 +1099,16 @@ Zazwyczaj jest to tymczasowy problem. Możesz kontynuować modyfikacje i zapisa
<notification name="YouHaveBeenLoggedOut">
Nastąpiło wylogowanie z [SECOND_LIFE]
[MESSAGE]
- <usetemplate name="okcancelbuttons" notext="Wyłącz" yestext="Pokaż IM/czat" />
+ <usetemplate name="okcancelbuttons" notext="Zakończ" yestext="Pokaż IM/czat" />
+ </notification>
+ <notification name="InventoryUnusable">
+ Wystąpił problem podczas ładowania szafy. Spróbuj się wylogować i zalogować ponownie. Jeśli zobaczysz ten komunikat jeszcze raz, to skontaktuj się z pomocą techniczną, aby rozwiązać problem.
</notification>
<notification name="OnlyOfficerCanBuyLand">
Nie możesz kupić działek dla grupy.
Nie masz praw kupowania działek dla Twojej aktywnej grupy.
</notification>
- <notification label="Add Friend" name="AddFriendWithMessage">
+ <notification label="Dodaj znajomego" name="AddFriendWithMessage">
Znajomi mogą pozwalać na odnajdywanie się wzajemnie na mapie i na otrzymywanie informacji o statusie online.
Zaproponować znajomość [NAME]?
@@ -1007,6 +1172,18 @@ do
<notification label="Zmień nazwę stroju" name="RenameOutfit">
Nowa nazwa stroju:
<form name="form">
+ <button name="Cancel" text="Anuluj"/>
+ </form>
+ </notification>
+ <notification label="Zmień nazwę gestu" name="RenameGesture">
+ Nowa nazwa gestu:
+ <form name="form">
+ <button name="Cancel" text="Anuluj"/>
+ </form>
+ </notification>
+ <notification label="Zmień nazwę Landmarka" name="RenameLandmark">
+ Wybierz nową nazwę dla [NAME]
+ <form name="form">
<button name="Cancel" text="Anuluj" />
</form>
</notification>
@@ -1127,7 +1304,7 @@ Wybierz mniejszy obszar i spróbuj jeszcze raz.
Po przekazaniu tej działki grupa będzie musiała mieć i utrzymywać wystarczający kredyt na używanie działki.
Cena zakupu działki nie jest zwracana właścicielowi. Jeżeli przekazana działka zostanie sprzedana, cena sprzedaży zostanie podzielona pomiędzy członków grupy.
-Przekazać tą działkę o powierzchni [AREA] m² grupie &apos;[GROUP_NAME]&apos;?
+Przekazać tą działkę o powierzchni [AREA] m² grupie &apos;&lt;nolink&gt;[GROUP_NAME]&lt;/nolink&gt;&apos;?
<usetemplate name="okcancelbuttons" notext="Anuluj" />
</notification>
<notification name="DeedLandToGroupWithContribution">
@@ -1135,7 +1312,7 @@ Przekazać tą działkę o powierzchni [AREA] m² grupie &apos;[GROUP_NAME]&apos
Przekazanie będzie zawierać równoczesne przypisanie działki do grupy od &apos;[NAME]&apos;.
Cena zakupu działki nie jest zwracana właścicielowi. Jeżeli przekazana działka zostanie sprzedana, cena sprzedaży zostanie podzielona pomiędzy członków grupy.
-Przekazać tą działkę o powierzchni [AREA] m² grupie &apos;[GROUP_NAME]&apos;?
+Przekazać tą działkę o powierzchni [AREA] m² grupie &apos;&lt;nolink&gt;[GROUP_NAME]&lt;/nolink&gt;&apos;?
<usetemplate name="okcancelbuttons" notext="Anuluj" />
</notification>
<notification name="DisplaySetToSafe">
@@ -1169,12 +1346,32 @@ Możesz normalnie używać [SECOND_LIFE], inni użytkownicy będą Cię widzieli
<ignore name="ignore" text="Ładowanie ubrań nadal trwa" />
</form>
</notification>
+ <notification name="AgentComplexityWithVisibility">
+ Twój [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 stopień złożoności awatara] to [AGENT_COMPLEXITY].
+[OVERLIMIT_MSG]
+ <usetemplate ignoretext="Ostrzegaj mnie, gdy stopień złożoności mojego awatara jest zbyt wysoki" name="notifyignore" />
+ </notification>
+ <notification name="AgentComplexity">
+ Twój [https://community.secondlife.com/t5/English-Knowledge-Base/Avatar-Rendering-Complexity/ta-p/2967838 stopień złożoności awatara] to [AGENT_COMPLEXITY].
+ <usetemplate ignoretext="Ostrzegaj mnie, gdy zmienia się stopień złożoności mojego awatara" name="notifyignore"/>
+ </notification>
+ <notification name="HUDComplexityWarning">
+ [HUD_REASON]. Bardzo prawdopodobne, że wpłynie to negatywnie na Twoją wydajność.
+ <usetemplate ignoretext="Ostrzegaj mnie, gdy stopień złożoności moich dodatków HUD jest zbyt wysoki" name="notifyignore"/>
+ </notification>
<notification name="FirstRun">
Instalacja [APP_NAME] zakończona.
Jeżeli używasz [SECOND_LIFE] po raz pierwszy to musisz stworzyć konto żeby móc się zalogować.
<usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Stwórz konto..." />
</notification>
+ <notification name="LoginCantRemoveUsername">
+ Zapamiętany użytkownik może zostać zapomniany w Awatar &gt; Ustawienia &gt; Zaawansowane &gt; Zapamiętani użytkownicy.
+ </notification>
+ <notification name="LoginCantRemoveCurUsername">
+ Zapomnienie zalogowanego użytkownika wymaga jego wylogowania.
+ <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Potwierdź i wyloguj się" />
+ </notification>
<notification name="LoginPacketNeverReceived">
Problemy z połączeniem. Problem może być spowodowany Twoim połączeniem z Internetem albo może istnieć po stronie [SECOND_LIFE_GRID].
@@ -1184,6 +1381,18 @@ Możesz sprawdzić swoje połączenie z Internetem i spróbować ponownie za kil
<button name="Teleport" text="Teleportuj" />
</form>
</notification>
+ <notification name="LoginPacketNeverReceivedNoTP">
+ Problemy z połączeniem. Problem może być spowodowany Twoim połączeniem z Internetem albo może istnieć po stronie [SECOND_LIFE_GRID].
+
+Możesz sprawdzić swoje połączenie z Internetem i spróbować ponownie za kilka minut lub połączyć się ze stroną pomocy technicznej [SUPPORT_SITE].
+ <form name="form">
+ <button name="Help" text="Pomoc"/>
+ </form>
+ </notification>
+ <notification name="LoginRemoveMultiGridUserData">
+ Usuwane Dane Lokalne są współużytkowane przez wiele światów, czy na pewno chcesz je usunąć?
+ <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Potwierdź" />
+ </notification>
<notification name="WelcomeChooseSex">
Twoja postać pojawi się za moment.
@@ -1193,7 +1402,11 @@ Wybierz awatara właściwej płci. Ten wybór będzie można później zmienić.
<usetemplate name="okcancelbuttons" notext="Kobieta" yestext="Mężczyzna" />
</notification>
<notification name="CantTeleportToGrid">
- Nie można teleportować do [SLURL], ponieważ jest na innej siatce ([GRID]) niż obecna siatka ([CURRENT_GRID]). Proszę zamknąć przeglądarkę i spróbować ponownie.
+ Nie można teleportować do [SLURL], ponieważ jest w innym świecie ([GRID]) niż obecny ([CURRENT_GRID]). Proszę zamknąć przeglądarkę i spróbować ponownie.
+ </notification>
+ <notification name="GeneralCertificateErrorShort">
+ Połączenie z serwerem nie mogło zostać nawiązane.
+[REASON]
</notification>
<notification name="GeneralCertificateError">
Połączenie z serwerem nie mogło zostać nawiązane.
@@ -1208,7 +1421,6 @@ Odcisk palca SHA1: [MD5_DIGEST]
Użycie klucza: [KEYUSAGE]
Rozszerzone użycie klucza: [EXTENDEDKEYUSAGE]
Identyfikator klucza podmiotu: [SUBJECTKEYIDENTIFIER]
-
</notification>
<notification name="TrustCertificateError">
Wydawca certyfikatu dla tego serwera nie jest znany.
@@ -1254,6 +1466,10 @@ Wybierz pojedynczy obiekt i spróbuj jeszcze raz.
Teleportować wszystkich Rezydentów z tego regionu do ich miejsc startu?
<usetemplate name="okcancelbuttons" notext="Anuluj" />
</notification>
+ <notification name="ChangeObjectBonusFactor">
+ Obniżenie limitu obiektów bonusowych po tym, gdy konstrukcje zostały już poustawiane w regionie może spowodować, że część z nich może zostać zwrócona lub usunięta. Na pewno chcesz zmienić tą wartość?
+ <usetemplate ignoretext="Potwierdź zmianę mnożnika obiektów bonusowych" name="okcancelignore" notext="Anuluj"/>
+ </notification>
<notification name="EstateObjectReturn">
Na pewno chcesz odesłać wszystkie obiekty należące do [USER_NAME]?
<usetemplate name="okcancelbuttons" notext="Anuluj" />
@@ -1262,21 +1478,25 @@ Wybierz pojedynczy obiekt i spróbuj jeszcze raz.
Nie można ustawić tekstur regionu:
Tekstura terenu [TEXTURE_NUM] ma niewłaściwą głębię koloru - [TEXTURE_BIT_DEPTH].
-Zamień teksturę [TEXTURE_NUM] na 24-bitową teksturę o wymiarze 1024x1024 lub mniejszą i ponownie kliknij na &quot;Zastosuj&quot;.
+Zamień teksturę [TEXTURE_NUM] na 24-bitową teksturę o wymiarze [MAX_SIZE]x[MAX_SIZE] lub mniejszą i ponownie kliknij na &quot;Zastosuj&quot;.
</notification>
<notification name="InvalidTerrainSize">
Nie można ustawić tekstur regionu:
Tekstura terenu [TEXTURE_NUM] jest za duża - [TEXTURE_SIZE_X]x[TEXTURE_SIZE_Y].
-Zamień teksturę [TEXTURE_NUM] na 24-bitową teksturę o wymiarze 1024x1024 lub mniejszą i ponownie kliknij na &quot;Zastosuj&quot;.
+Zamień teksturę [TEXTURE_NUM] na 24-bitową teksturę o wymiarze [MAX_SIZE]x[MAX_SIZE] lub mniejszą i ponownie kliknij na &quot;Zastosuj&quot;.
</notification>
<notification name="RawUploadStarted">
- Ładowanie rozpoczęte. Może potrwać do dwóch minut zależnie od prędkości Twojego połączenia.
+ Przesyłanie rozpoczęte. Może potrwać do dwóch minut zależnie od prędkości Twojego połączenia.
</notification>
<notification name="ConfirmBakeTerrain">
Na pewno chcesz zapisać obecne ukształtowanie terenu jako punkt odniesienia dla górnego i dolnego limitu terenu oraz jako domyślną wartość dla opcji &apos;Odtwórz&apos;?
<usetemplate name="okcancelbuttons" notext="Anuluj" />
</notification>
+ <notification name="ConfirmTextureHeights">
+ Zamierzasz użyć wartości 'niższych' większych niż 'wyższe' dla zakresów elewacji. Chcesz kontynuować?
+ <usetemplate name="yesnocancelbuttons" notext="Anuluj" canceltext="Nie pytaj" />
+ </notification>
<notification name="MaxAllowedAgentOnRegion">
Maksymalna liczba Rezydentów wynosi [MAX_AGENTS].
</notification>
@@ -1295,7 +1515,34 @@ Zamień teksturę [TEXTURE_NUM] na 24-bitową teksturę o wymiarze 1024x1024 lub
Możesz mieć maksymalnie [MAX_MANAGER] zarządców Majątku.
</notification>
<notification name="OwnerCanNotBeDenied">
- Nie możesz dodać właściciela majątku do listy &apos;Niepożądanych Rezydentów (banów)&apos; majątku.
+ Nie możesz dodać właściciela Majątku do listy &apos;Niepożądanych Rezydentów (banów)&apos; Majątku.
+ </notification>
+ <notification name="ProblemAddingEstateManagerBanned">
+ Nie możesz dodać zbanowanego rezydenta do listy zarządców Majątku.
+ </notification>
+ <notification name="ProblemBanningEstateManager">
+ Nie można dodać zarządcy Majątku [AGENT] do listy zbanowanych.
+ </notification>
+ <notification name="GroupIsAlreadyInList">
+ &lt;nolink&gt;[GROUP]&lt;/nolink&gt; już jest na liście dostępu grup.
+ </notification>
+ <notification name="AgentIsAlreadyInList">
+ [AGENT] już jest na Twojej liście: [LIST_TYPE].
+ </notification>
+ <notification name="AgentsAreAlreadyInList">
+ [AGENT] już są na Twojej liście: [LIST_TYPE].
+ </notification>
+ <notification name="AgentWasAddedToList">
+ [AGENT] został/a dodany/a do listy: [LIST_TYPE] w: [ESTATE].
+ </notification>
+ <notification name="AgentsWereAddedToList">
+ [AGENT] zostali dodani do listy: [LIST_TYPE] w: [ESTATE].
+ </notification>
+ <notification name="AgentWasRemovedFromList">
+ [AGENT] został/a usunięty/a z listy: [LIST_TYPE] w: [ESTATE].
+ </notification>
+ <notification name="AgentsWereRemovedFromList">
+ [AGENT] zostali usunięci z listy: [LIST_TYPE] w: [ESTATE].
</notification>
<notification name="CanNotChangeAppearanceUntilLoaded">
Nie możesz zmienić wyglądu podczas ładowania ubrań i kształtu.
@@ -1311,133 +1558,36 @@ Wybierz obiekt na sprzedaż i spróbuj jeszcze raz.
Plik surowego terenu pobrany do:
[DOWNLOAD_PATH].
</notification>
- <notification name="DownloadWindowsMandatory">
- Nowa wersja [APP_NAME] została opublikowana.
-[MESSAGE]
-Musisz zainstalować nową wersję żeby używać [APP_NAME].
- <usetemplate name="okcancelbuttons" notext="Wyłącz" yestext="Pobierz" />
- </notification>
- <notification name="DownloadWindows">
- Uaktualniona wersja [APP_NAME] została opublikowana.
-[MESSAGE]
-Aktualizacja nie jest wymagana, ale jest zalecana w celu poprawy wydajności i stabilności.
- <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobierz" />
+ <notification name="RequiredUpdate">
+ Do zalogowania się wymagana jest wersja [VERSION].
+Pobierz ją z https://secondlife.com/support/downloads/
</notification>
- <notification name="DownloadWindowsReleaseForDownload">
- Uaktualniona wersja [APP_NAME] została opublikowana.
-[MESSAGE]
-Aktualizacja nie jest wymagana, ale jest zalecana w celu poprawy wydajności i stabilności.
- <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobierz" />
- </notification>
- <notification name="DownloadLinuxMandatory">
- Nowa wersja [APP_NAME] jest dostępna.
-[MESSAGE]
-Musisz pobrać aktualizację aby korzystać z [APP_NAME].
- <usetemplate name="okcancelbuttons" notext="Wyłącz" yestext="Pobierz" />
- </notification>
- <notification name="DownloadLinux">
- Aktualizacja [APP_NAME] jest dostępna.
-[MESSAGE]
-Ta aktualizacja nie jest wymagana, ale zaleca się jej instalację w celu poprawienia wydajności i stabilności.
- <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobierz" />
- </notification>
- <notification name="DownloadLinuxReleaseForDownload">
- Uaktualniona wersja [APP_NAME]została opublikowana.
-[MESSAGE]
-Aktualizacja nie jest wymagana, ale jest zalecana w celu poprawy wydajności i stabilności.
- <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobierz" />
+ <notification name="PauseForUpdate">
+ Do zalogowania się wymagana jest wersja [VERSION].
+Informacje o wydaniu: [URL]
+
+Kliknij OK, aby pobrać i zainstalować.
</notification>
- <notification name="DownloadMacMandatory">
- Nowa wersja [APP_NAME] została opublikowana.
-[MESSAGE]
-Musisz zainstalować nową wersję żeby używać [APP_NAME].
+ <notification name="OptionalUpdateReady">
+ Wersja [VERSION] została pobrana i jest gotowa do zainstalowania.
+Informacje o wydaniu: [URL]
-Pobrać i zapisać w folderze Aplikacje?
- <usetemplate name="okcancelbuttons" notext="Wyłącz" yestext="Pobierz" />
+Kliknij OK, aby zainstalować.
</notification>
- <notification name="DownloadMac">
- Uaktualniona wersja [APP_NAME] została opublikowana.
-[MESSAGE]
-Aktualizacja nie jest wymagana, ale jest zalecana w celu poprawy wydajności i stabilności.
+ <notification name="PromptOptionalUpdate">
+ Wersja [VERSION] została pobrana i jest gotowa do zainstalowania.
+Informacje o wydaniu: [URL]
-Pobrać i zapisać w folderze Aplikacje?
- <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobierz" />
+Kontynuować?
+ <usetemplate canceltext="Nie teraz" name="yesnocancelbuttons" notext="Pomiń" yestext="Instaluj" />
</notification>
- <notification name="DownloadMacReleaseForDownload">
- Uaktualniona wersja [APP_NAME] została opublikowana.
-[MESSAGE]
-Aktualizacja nie jest wymagana, ale jest zalecana w celu poprawy wydajności i stabilności.
-
-Pobrać i zapisać w folderze Aplikacje?
- <usetemplate name="okcancelbuttons" notext="Kontynuuj" yestext="Pobierz" />
- </notification>
- <notification name="FailedUpdateInstall">
- Podczas aktualizacji pojawił się błąd.
-Proszę pobrać i zainstalować najnowszego klienta z
-http://secondlife.com/download
- </notification>
- <notification name="FailedRequiredUpdateInstall">
- Nie można zainstalować wymaganej aktualizacji.
-Nie będzie można zalogować się dopóki [APP_NAME] nie zostanie zaktualizowana.
-Proszę pobrać i zainstalować najnowszą wersję z
-http://secondlife.com/download
- <usetemplate name="okbutton" yestext="Wyjdź" />
- </notification>
- <notification name="UpdaterServiceNotRunning">
- Istnieje obowiązkowa aktualizacja dla Second Life.
-Możesz ją pobrać z http://www.secondlife.com/downloads
-lub zainstalować teraz.
- <usetemplate name="okcancelbuttons" notext="Opuść Second Life" yestext="Pobierz i instaluj teraz" />
- </notification>
- <notification name="DownloadBackgroundTip">
- Aktualizacja dla [APP_NAME] została pobrana.
-Wersja [VERSION] [[INFO_URL] Informacja o tej aktualizacji]
- <usetemplate name="okcancelbuttons" notext="Później..." yestext="Instaluj teraz i restartuj [APP_NAME]" />
- </notification>
- <notification name="DownloadBackgroundDialog">
- Aktualizacja [APP_NAME] została pobrana.
-Wersja [VERSION] [[INFO_URL] Informacja o aktualizacji]
- <usetemplate name="okcancelbuttons" notext="Później..." yestext="Instaluj teraz i restartuj [APP_NAME]" />
- </notification>
- <notification name="RequiredUpdateDownloadedVerboseDialog">
- Pobrano wymaganą aktualizację.
-Wersja [VERSION] [[INFO_URL] Informacje o tej aktualizacji]
-
-W celu instalacji aktualizacji [APP_NAME] musi zostać zrestartowany.
- </notification>
- <notification name="RequiredUpdateDownloadedDialog">
- W celu instalacji aktualizacji [APP_NAME] musi zostać zrestartowany.
-[[INFO_URL] Informacje o tej aktualizacji]
- </notification>
- <notification name="OtherChannelDownloadBackgroundTip">
- Została pobrana aktualizacja dla Twojej instalacji [APP_NAME].
-Wersja [VERSION]
-Ta eksperymentalna przeglądarka została zastąpiona przez wersję [NEW_CHANNEL];
-zobacz [[INFO_URL] Więcej informacji o tej aktualizacji]
- <usetemplate name="okcancelbuttons" notext="Później..." yestext="Instaluj teraz i zrestartuj [APP_NAME]" />
- </notification>
- <notification name="OtherChannelDownloadBackgroundDialog">
- Została pobrana aktualizacja dla Twojej instalacji [APP_NAME].
-Wersja [VERSION]
-Ta eksperymentalna przeglądarka została zastąpiona przez wersję [NEW_CHANNEL];
-zobacz [[INFO_URL] Więcej informacji o tej aktualizacji]
- <usetemplate name="okcancelbuttons" notext="Później..." yestext="Instaluj teraz i zrestartuj [APP_NAME]" />
- </notification>
- <notification name="OtherChannelRequiredUpdateDownloadedVerboseDialog">
- Została pobrana wymagana aktualizacja.
-Wersja [VERSION]
-Ta eksperymentalna przeglądarka została zastąpiona przez wersję [NEW_CHANNEL];
-zobacz [[INFO_URL] Więcej informacji o tej aktualizacji]
-
-W celu instalacji aktualizacji [APP_NAME] musi zostać zrestartowany.
- </notification>
- <notification name="OtherChannelRequiredUpdateDownloadedDialog">
- W celu instalacji aktualizacji [APP_NAME] musi zostać zrestartowany.
-Ta eksperymentalna przeglądarka została zastąpiona przez wersję [NEW_CHANNEL];
-zobacz [[INFO_URL] Więcej informacji o tej aktualizacji]
+ <notification name="LoginFailedUnknown">
+ Przepraszamy, ale nie udało się zalogować - powód jest nieznany.
+Jeśli ciągle widzisz tą wiadomość sprawdź [SUPPORT_SITE].
+ <usetemplate name="okbutton" yestext="Wyjdź"/>
</notification>
<notification name="DeedObjectToGroup">
- Przekazanie tego obiektu spowoduje, że grupa:
+ Przypisanie tego obiektu spowoduje, że grupa:
* Otrzyma L$ zapłacone temu obiektowi
<usetemplate ignoretext="Potwierdź decyzję przypisania obiektu do grupy" name="okcancelignore" notext="Anuluj" yestext="Przekaż" />
</notification>
@@ -1489,14 +1639,11 @@ Chcesz ją opuścić?
Nie możesz opuścić tej grupy, ponieważ jesteś ostatnim z jej właścicieli. Przydziel najpierw innemu użytkownikowi rolę właściciela.
</notification>
<notification name="GroupDepartError">
- Nie można opuścić grupy: [reason].
- </notification>
- <notification name="GroupDepart">
- Opuściłeś/aś grupę [group_name].
+ Nie możesz opuścić tej grupy.
</notification>
<notification name="ConfirmKick">
- Na pewno chcesz wyrzucić wszystkich Rezydentów z siatki?
- <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Wyrzuć Rezydentów" />
+ Na pewno chcesz wyrzucić wszystkich Rezydentów ze świata?
+ <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Wyrzuć Rezydentów"/>
</notification>
<notification name="MuteLinden">
Przepraszamy, ale nie możesz zablokować Lindena.
@@ -1520,8 +1667,7 @@ Chcesz ją opuścić?
<notification name="DoNotDisturbModeSet">
Tryb Zajętości jest włączony. Nie będziesz powiadamiany/a o nadchodzących rozmowach.
-- Inni Rezydenci będą otrzymywać Twoją wiadomość Trybu Zajętości (Ustawienia &gt; Prywatność &gt; Autoodpowiedzi).
-- Propozycje teleportacji będą odrzucane.
+- Inni Rezydenci będą otrzymywać Twoją wiadomość Trybu Zajętości (Ustawienia &gt; Ogólne).
- Propozycje rozmów głosowych będą odrzucane.
<usetemplate ignoretext="Status zmieniony na Tryb Zajętości" name="okignore" />
</notification>
@@ -1533,6 +1679,17 @@ Chcesz ją opuścić?
<notification name="JoinedTooManyGroups">
Należysz już do maksymalnej ilości grup. Opuść proszę przynajmniej jedną grupę żeby przyjąć członkostwo w tej grupie, albo odmów.
</notification>
+ <notification name="GroupLimitInfo">
+ Rezydenci z członkostwem podstawowym mogą dołączyć do [MAX_BASIC] grup.
+Członkostwo premium pozwala na [MAX_PREMIUM]. [https://secondlife.com/my/account/membership.php? Dowiedz się więcej]
+ <usetemplate name="okbutton" yestext="Zamknij" />
+ </notification>
+ <notification name="GroupLimitInfoPlus">
+ Rezydenci z członkostwem podstawowym mogą dołączyć do [MAX_BASIC] grup.
+Członkostwo premium pozwala na [MAX_PREMIUM]. Członkostwo
+Premium Plus pozwala na [MAX_PREMIUM_PLUS]. [https://secondlife.com/my/account/membership.php? Dowiedz się więcej]
+ <usetemplate name="okbutton" yestext="Zamknij" />
+ </notification>
<notification name="KickUser">
Wyrzuć tego Rezydenta, wysyłając następujący komunikat.
<form name="form">
@@ -1543,7 +1700,7 @@ Chcesz ją opuścić?
</form>
</notification>
<notification name="KickAllUsers">
- Z jakim komunikatem wyrzucić wszystkich użytkowników z regionu?
+ Z jakim komunikatem wyrzucić wszystkich użytkowników ze świata?
<form name="form">
<input name="message">
Administrator wylogował Cię.
@@ -1644,7 +1801,7 @@ co przekracza limit [LIMIT].
<notification name="TeleportViaSLAPP">
Na pewno chcesz się teleportować do &lt;nolink&gt;[LOCATION]&lt;/nolink&gt;?
<usetemplate ignoretext="Potwierdź próbę teleportacji przez SLAPP" name="okcancelignore" notext="Anuluj" yestext="Teleportuj" />
- </notification>
+ </notification>
<notification name="TeleportToPick">
Teleportować do [PICK]?
<usetemplate ignoretext="Potwierdź, że chcesz teleportować się do miejsca w Ulubionych" name="okcancelignore" notext="Anuluj" yestext="Teleportuj" />
@@ -1674,7 +1831,7 @@ Kontynuować?
<notification label="Zmiana dostępu do Majątku Lindenów" name="ChangeLindenAccess">
Dokonujesz zmiany w liście dostępu Regionu głównego należącego do Lindenów (Regiony Główne, Teen Grid, Orientacja).
-Żądana operacja jest wyjątkowo niebezpieczna dla wszystkich Rezydentów przebywających w regionie i powinna być używana wyłącznie w celu zablokowania opcji pozwalającej na przeniesienie obiektów/L$ do/z sieci.
+Żądana operacja jest wyjątkowo niebezpieczna dla wszystkich Rezydentów przebywających w regionie i powinna być używana wyłącznie w celu zablokowania opcji pozwalającej na przeniesienie obiektów/L$ do/ze świata.
Dodatkowo, zmiany dokonane w Regionie Głównym mogą spowodować problemy przestrzeni serwerowej innych regionów.
Kontynuować?
@@ -1712,6 +1869,30 @@ Kontynuować?
Usunąć zarządcę majątku tylko z tego majątku czy z [ALL_ESTATES]?
<usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek" />
</notification>
+ <notification label="Wybierz Majątek" name="EstateAllowedExperienceAdd">
+ Dodać do listy dostępu tylko do tego majątku czy do [ALL_ESTATES]?
+ <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek"/>
+ </notification>
+ <notification label="Wybierz Majątek" name="EstateAllowedExperienceRemove">
+ Usunąć z listy dostępu tylko z tego majątku czy do [ALL_ESTATES]?
+ <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek"/>
+ </notification>
+ <notification label="Wybierz Majątek" name="EstateBlockedExperienceAdd">
+ Zablokować dostęp tylko dla tego majątku czy dla [ALL_ESTATES]?
+ <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek"/>
+ </notification>
+ <notification label="Wybierz Majątek" name="EstateBlockedExperienceRemove">
+ Odblokować dostęp tylko dla tego majątku czy dla [ALL_ESTATES]?
+ <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek"/>
+ </notification>
+ <notification label="Wybierz Majątek" name="EstateTrustedExperienceAdd">
+ Dodać do listy kluczy tylko dla tego majątku czy dla [ALL_ESTATES]?
+ <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek"/>
+ </notification>
+ <notification label="Wybierz Majątek" name="EstateTrustedExperienceRemove">
+ Usunąć z listy kluczy tylko dla tego majątku czy dla [ALL_ESTATES]?
+ <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Wszystkie majątki" yestext="Ten majątek"/>
+ </notification>
<notification label="Potwierdź Wyrzucenie" name="EstateKickUser">
Wyrzucić [EVIL_USER] z tego majątku?
<usetemplate name="okcancelbuttons" notext="Anuluj" />
@@ -1720,8 +1901,18 @@ Kontynuować?
Na pewno chcesz zmienić treść umowy dla tego majątku?
<usetemplate name="okcancelbuttons" notext="Anuluj" />
</notification>
+ <notification name="EstateParcelAccessOverride">
+ Odznaczenie tej opcji może usunąć ograniczenia nadane przez właścicieli działek w celu zapobiegania dokuczaniu, zachowaniu prywatności lub aby chronić nieletnich przed materiałami dla dorosłych. Porozmawiaj z właścicielami działek, jeśli to konieczne.
+ </notification>
+ <notification name="EstateParcelEnvironmentOverride">
+ (Zmiana w całym majątku: [ESTATENAME]) Odznaczenie tej opcji spowoduje usunięcie wszelkich niestandardowych otoczeń, które zostały dodane do działek przez ich właścicieli. Przedyskutuj zmianę z właścicielami działek w razie potrzeby.
+Czy chcesz kontynuować?
+ <usetemplate name="okcancelbuttons" notext="Anuluj" />
+ </notification>
<notification name="RegionEntryAccessBlocked">
- Region, który próbujesz odwiedzić zawiera treści przekraczające Twoje bieżące preferencje. Możesz je zmienić używając Ja &gt; Ustawienia &gt; Ogólne.
+ Region, który próbujesz odwiedzić, ma klasyfikację treści przekraczającą Twoje maksymalne preferencje. Możesz je zmienić używając Ja &gt; Ustawienia &gt; Ogólne.
+
+Pełne informacje na temat klasyfikacji treści można znaleźć [https://community.secondlife.com/knowledgebase/english/maturity-ratings-r52/ tutaj].
</notification>
<notification name="RegionEntryAccessBlocked_AdultsOnlyContent">
Region, który próbujesz odwiedzić zawiera treści [REGIONMATURITY], które są dostępne tylko dla dorosłych.
@@ -1745,7 +1936,9 @@ Kontynuować?
Mamy trudności techniczne z Twoim wejściem w region, ponieważ Twoje preferencje są rozsynchronizowane z serwerem.
</notification>
<notification name="TeleportEntryAccessBlocked">
- Region, który próbujesz odwiedzić zawiera treści przekraczające Twoje bieżące preferencje. Możesz je zmienić używając Ja &gt; Ustawienia &gt; Ogólne.
+ Region, który próbujesz odwiedzić, ma klasyfikację treści przekraczającą Twoje maksymalne preferencje. Możesz je zmienić używając Ja &gt; Ustawienia &gt; Ogólne.
+
+Pełne informacje na temat klasyfikacji treści można znaleźć [https://community.secondlife.com/knowledgebase/english/maturity-ratings-r52/ tutaj].
</notification>
<notification name="TeleportEntryAccessBlocked_AdultsOnlyContent">
Region, który próbujesz odwiedzić zawiera treści [REGIONMATURITY], które są dostępne tylko dla dorosłych.
@@ -1777,7 +1970,7 @@ Kontynuować?
Mamy trudności techniczne z Twoim teleportem, ponieważ Twoje preferencje są rozsynchronizowane z serwerem.
</notification>
<notification name="RegionTPSpecialUsageBlocked">
- Nie można wejść do tego regionu. '[REGION_NAME]' jest miejscem z grami (Skill Gaming Region) - musisz spełnić określone wymagania, jeśli chcesz go odwiedzić. Aby dowiedzieć się więcej zapoznaj się z [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ].
+ Nie można wejść do tego regionu. '[REGION_NAME]' jest miejscem z grami (Skill Gaming Region) - musisz spełnić określone wymagania, jeśli chcesz go odwiedzić. Aby dowiedzieć się więcej zapoznaj się z [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Second_Life_Skill_Gaming_FAQ Skill Gaming FAQ].
</notification>
<notification name="PreferredMaturityChanged">
Nie będziesz już otrzymywać żadnych powiadomień związanych z odwiedzaniem regionów z treściami [RATING]. Możesz zmienić swoją preferencję treści w przyszłości używając Ja &gt; Ustawienia &gt; Ogólne w pasku menu.
@@ -1787,6 +1980,8 @@ Kontynuować?
</notification>
<notification name="LandClaimAccessBlocked">
Ziemia, którą próbujesz odzyskać ma klasyfikację treści przekraczającą Twoje obecne preferencje treści. Możesz je zmienić używając Ja &gt; Ustawienia &gt; Ogólne w pasku menu.
+
+Pełne informacje na temat klasyfikacji treści można znaleźć [https://community.secondlife.com/knowledgebase/english/maturity-ratings-r52/ tutaj].
</notification>
<notification name="LandClaimAccessBlocked_AdultsOnlyContent">
Tylko dorośli mogą odzyskać tą ziemię.
@@ -1808,6 +2003,8 @@ Kontynuować?
</notification>
<notification name="LandBuyAccessBlocked">
Ziemia, którą próbujesz kupić ma klasyfikację treści przekraczającą Twoje obecne preferencje treści. Możesz je zmienić używając Ja &gt; Ustawienia &gt; Ogólne w pasku menu.
+
+Pełne informacje na temat klasyfikacji treści można znaleźć [https://community.secondlife.com/knowledgebase/english/maturity-ratings-r52/ tutaj].
</notification>
<notification name="LandBuyAccessBlocked_AdultsOnlyContent">
Tylko dorośli mogą kupić tą ziemię.
@@ -1830,6 +2027,9 @@ Kontynuować?
<notification name="TooManyPrimsSelected">
Zbyt wiele wybranych obiektów. Wybierz [MAX_PRIM_COUNT] lub mniej i spróbuj ponownie
</notification>
+ <notification name="TooManyScriptsSelected">
+ Zbyt wiele skryptów w wybranych obiektach. Wybierz mniej obiektów i spróbuj ponownie
+ </notification>
<notification name="ProblemImportingEstateCovenant">
Problem z importem umowy majątku.
</notification>
@@ -1956,7 +2156,6 @@ Wpisz hasło ponownie i kliknij na OK.
<notification name="SetPickLocation">
Uwaga:
Lokalizacja tego miejsca została zaktualizowana, ale pozostałe szczegóły zachowają oryginalne wartości.
-
</notification>
<notification name="MoveInventoryFromObject">
Wybrane obiekty Szafy nie mają praw kopiowania.
@@ -1986,6 +2185,9 @@ Przenieść obiekty szafy?
<notification name="PayObjectFailed">
Płatność nie powiodła się: nie można znaleźć obiektu.
</notification>
+ <notification name="PaymentBlockedButtonMismatch">
+ Płatność nie powiodła się: zapłacona suma nie pasuje do żadnego z przycisków płatności dla tego obiektu.
+ </notification>
<notification name="OpenObjectCannotCopy">
W tym obiekcie nie ma elementów które możesz skopiować.
</notification>
@@ -1998,8 +2200,8 @@ Przenieść obiekty szafy?
<usetemplate ignoretext="Potwierdź dodanie uczestników rozmowy" name="okcancelignore" notext="Anuluj" />
</notification>
<notification name="ConfirmQuit">
- Na pewno chcesz zakończyć?
- <usetemplate ignoretext="Na pewno chcesz zakończyć?" name="okcancelignore" notext="Nie kończ" yestext="Wyłącz" />
+ Na pewno chcesz zakończyć sesję i wyłączyć przeglądarkę?
+ <usetemplate ignoretext="Na pewno chcesz zakończyć sesję?" name="okcancelignore" notext="Anuluj" yestext="Zakończ"/>
</notification>
<notification name="ConfirmRestoreToybox">
Ta akcja przywróci domyślny układ przycisków i pasków.
@@ -2015,12 +2217,24 @@ Nie możesz tego cofnąć.
</notification>
<notification name="DeleteItems">
[QUESTION]
- <usetemplate ignoretext="Potwierdź, że na pewno chcesz skasować obiekty" name="okcancelignore" notext="Anuluj" />
+ <form name="form">
+ <ignore name="ignore" text="Potwierdź przed kasowaniem obiektów" />
+ <button name="No" text="Anuluj" />
+ </form>
</notification>
- <notification name="HelpReportAbuseEmailLL">
- Używaj tej opcji do zgłaszania nadużyć [http://secondlife.com/corporate/tos.php Warunków Umowy (Terms of Service)] i [http://secondlife.com/corporate/cs.php Standardów Społeczeństwa (Community Standards)].
+ <notification name="DeleteFilteredItems">
+ Twoja Szafa jest obecnie filtrowana i nie wszystkie obiekty jakie masz zamiar usunąć są teraz widoczne.
-Wszystkie zgłoszone nadużycia są badane i rozwiązywane.
+Czy na pewno chcesz je skasować?
+ <usetemplate ignoretext="Potwierdź przed kasowaniem filtrowanych obiektów" name="okcancelignore" notext="Anuluj" />
+ </notification>
+ <notification name="ConfirmUnlink">
+ To duże zaznaczenie z wieloma zestawami obiektów. Jeśli rozłączysz, to ponowne połączenie może nie być możliwe. Możesz chcieć na wszelki wypadek wziąć kopie zestawów obiektów do swojej szafy.
+ <usetemplate ignoretext="Potwierdź podczas rozłączania zestawu obiektów" name="okcancelignore" notext="Anuluj" yestext="Rozłącz" />
+ </notification>
+ <notification name="HelpReportAbuseConfirm">
+ Dziękujemy za poświęcenie czasu na poinformowanie nas o tym problemie.
+Przejrzymy Twoje zgłoszenie pod kątem ewentualnych nadużyć i podejmiemy odpowiednią akcję.
</notification>
<notification name="HelpReportAbuseSelectCategory">
Wybierz kategorię dla tego raportu o nadużyciu.
@@ -2048,7 +2262,7 @@ Dokładne dane pomogą nam w klasyfikacji i przetwarzaniu raportu.
Jeżeli składasz raport dotyczący naruszenia praw autorskich proszę się upewnić, że robisz to poprawnie:
-(1) Przypadek Nadużycia. Możesz złożyć raport jeżeli sądzisz, że Rezydent narusza system przywilejów [SECOND_LIFE], na przykład używając CopyBot lub podobnych narzędzi robiących kopie, naruszając prawa autorskie. Komisja Nadużyć bada wykroczenia i stosuje akcje dyscyplinarne za zachowania sprzeczne z zasadami [http://secondlife.com/corporate/tos.php Warunków Umowy] i [http://secondlife.com/corporate/cs.php Standardów Społeczeństwa] w [SECOND_LIFE]. Komisja Nadużyć nie zajmuje się i nie odpowiada na żądania usunięcia treści ze środowiska [SECOND_LIFE].
+(1) Przypadek Nadużycia. Możesz złożyć raport jeżeli sądzisz, że Rezydent narusza system przywilejów [SECOND_LIFE], na przykład używając CopyBot lub podobnych narzędzi robiących kopie, naruszając prawa autorskie. Komisja Nadużyć bada wykroczenia i stosuje akcje dyscyplinarne za zachowania sprzeczne z zasadami Warunków Umowy [http://secondlife.com/corporate/tos.php Warunków Umowy] i [http://secondlife.com/corporate/cs.php Standardów Społeczeństwa] w [SECOND_LIFE]. Komisja Nadużyć nie zajmuje się i nie odpowiada na żądania usunięcia treści ze środowiska [SECOND_LIFE].
(2) Przypadek DMCA lub Usuwanie Treści. Aby wystąpić z żądaniem o usunięcie treści ze środowiska [SECOND_LIFE] MUSISZ przedłożyć ważne zawiadomienie o nadużyciu zgodne z naszą polityką DMCA [http://secondlife.com/corporate/dmca.php DMCA Policy].
@@ -2084,13 +2298,31 @@ Chcesz wyłączyć Tryb Zajętości przed zakończeniem tej transakcji?
<button ignore="Nigdy nie wyłączaj trybu Zajętości" name="No" text="Anuluj" />
</form>
</notification>
+ <notification label="Działka odtwarza media" name="ParcelPlayingMedia">
+ Ta lokalizacja odtwarza media:
+[URL]
+Czy chcesz je odtworzyć?
+ <form name="form">
+ <ignore name="ignore" text="Zawsze wybieraj tę opcję dla tej ziemi."/>
+ <button ignore="Odtwarzaj media" name="Yes" text="Odtwarzaj"/>
+ <button ignore="Ignoruj media" name="No" text="Nie odtwarzaj"/>
+ </form>
+ </notification>
<notification name="ConfirmDeleteProtectedCategory">
Ten folder &apos;[FOLDERNAME]&apos; to folder systemowy. Usunięcie folderu systemowego spowoduje niestabilność. Czy na pewno chcesz go skasować?
<usetemplate ignoretext="Potwierdź zanim folder systemu zostanie skasowany" name="okcancelignore" notext="Anuluj" />
</notification>
+ <notification name="PurgeSelectedItems">
+ [COUNT] przedmiotów zostanie usuniętych. Na pewno chcesz permanentnie usunąć zaznaczoną zawartość Kosza?
+ <usetemplate name="okcancelbuttons" notext="Anuluj" />
+ </notification>
<notification name="ConfirmEmptyTrash">
- Na pewno chcesz permanentnie usunąć zawartość Kosza?
- <usetemplate ignoretext="Potwierdź przed usunięciem zawartości Kosza" name="okcancelignore" notext="Anuluj" />
+ [COUNT] przedmiotów i folderów zostanie usuniętych. Na pewno chcesz permanentnie usunąć zawartość Kosza?
+ <usetemplate name="okcancelbuttons" notext="Anuluj" />
+ </notification>
+ <notification name="TrashIsFull">
+ Twój kosz się przepełnia. Może to sprawić, że będziesz mieć problemy z zalogowaniem się.
+ <usetemplate name="okcancelbuttons" notext="Wyczyszczę kosz ręcznie później" yestext="Sprawdź kosz teraz" />
</notification>
<notification name="ConfirmClearBrowserCache">
Na pewno chcesz wyczyścić bufory przeglądarki internetowej, wyszukiwania i podróży?
@@ -2112,6 +2344,12 @@ Chcesz wyłączyć Tryb Zajętości przed zakończeniem tej transakcji?
Na pewno chcesz permanentnie usunąć zawartość Twojego folderu Zagubione i odnalezione?
<usetemplate ignoretext="Potwierdź przed usunięciem zawartości foldera Zagubione i odnalezione" name="okcancelignore" notext="Nie" yestext="Tak" />
</notification>
+ <notification name="ConfirmReplaceLink">
+ Zamierzasz zastąpić link do części ciała o typie '[TYPE]' elementem, który nie pasuje do tego typu.
+
+Na pewno chcesz kontynuować?
+ <usetemplate ignoretext="Potwierdź przed zamianą linku" name="okcancelignore" notext="Nie" yestext="Tak" />
+ </notification>
<notification name="CopySLURL">
Następujący link SLurl został skopiowany do schowka:
[SLURL]
@@ -2132,7 +2370,15 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t
Ten plik cyklu dziennego używa brakującego pliku nieba: [SKY].
</notification>
<notification name="WLRegionApplyFail">
- Ustawienia nie mogą zostać zastosowane w regionie. Opuszczenie regionu, a następnie powrócenie do niego może naprawić problem. Powód: [FAIL_REASON]
+ Ustawienia nie mogą zostać zastosowane w regionie. Powód: [FAIL_REASON]
+ </notification>
+ <notification name="WLLocalTextureDayBlock">
+ Lokalna tekstura jest używana na ścieżce [TRACK], klatce #[FRAMENO] ([FRAME]%) w polu [FIELD].
+Otoczenia nie mogą zostać zapisane gdy lokalne tekstury są w użyciu.
+ </notification>
+ <notification name="WLLocalTextureFixedBlock">
+ Lokalna tekstura jest używana w polu [FIELD].
+Otoczenia nie mogą zostać zapisane gdy lokalne tekstury są w użyciu.
</notification>
<notification name="EnvCannotDeleteLastDayCycleKey">
Nie można usunąć ostatniego klucza w cyklu dnia, bo nie może on być pusty. Zmodyfikuj ten klucz zamiast go usuwać, a potem dodaj nowy.
@@ -2182,13 +2428,10 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t
Ciąg [STRING_NAME] nie został znaleziony w strings.xml
</notification>
<notification name="Cancelled">
- Anulowane
- </notification>
- <notification name="CancelledSit">
- Siadanie anulowane
+ Anulowane.
</notification>
<notification name="CancelledAttach">
- Dołączanie anulowane
+ Dołączanie anulowane.
</notification>
<notification name="ReplacedMissingWearable">
Brakujące ubranie/części ciała zastąpiono domyślnymi obiektami.
@@ -2197,23 +2440,26 @@ Zamieść go na stronie internetowej żeby umożliwić innym łatwy dostęp do t
Temat: [SUBJECT], Treść: [MESSAGE]
</notification>
<notification name="FriendOnlineOffline">
- &lt;nolink&gt;[NAME]&lt;/nolink&gt; jest [STATUS]
+ &lt;nolink&gt;[NAME]&lt;/nolink&gt; jest [STATUS].
</notification>
<notification name="AddSelfFriend">
Niewątpliwie znasz siebie najlepiej, ale nie możesz dodać swojej własnej osoby do listy znajomych.
</notification>
+ <notification name="AddSelfRenderExceptions">
+ Nie możesz dodać siebie do listy wyjątków renderowania.
+ </notification>
<notification name="UploadingAuctionSnapshot">
- Ładowanie obrazów z Internetu...
+ Przesyłanie obrazów...
(Zajmuje około 5 minut.)
</notification>
<notification name="UploadPayment">
- Ładowanie kosztowało [AMOUNT]L$.
+ Przesyłanie kosztowało [AMOUNT]L$.
</notification>
<notification name="UploadWebSnapshotDone">
- Ładowanie obrazu z Internetu zakończone pomyślnie.
+ Przesyłanie obrazu do sieci zakończone pomyślnie.
</notification>
<notification name="UploadSnapshotDone">
- Ładowanie zdjęcia zakończone pomyślnie.
+ Przesyłanie zdjęcia zakończone pomyślnie.
</notification>
<notification name="TerrainDownloaded">
Plik terrain.raw ściągnięty.
@@ -2377,7 +2623,7 @@ Zainstaluj wtyczki ponownie lub skontaktuj się z dostawcą, jeśli problem nada
Obiekty z działki należącej do Rezydenta [NAME] zostały zwrócone do jego Szafy.
</notification>
<notification name="GroupObjectsReturned">
- Obiekty z wybranej działki przypisane do grupy [GROUPNAME] zostały zwrócone do szaf ich właścicieli.
+ Obiekty z wybranej działki przypisane do grupy &lt;nolink&gt;[GROUPNAME]&lt;/nolink&gt; zostały zwrócone do szaf ich właścicieli.
Przekazywalne obiekty przekazane grupie zostały zwrócone do ich poprzednich właścicieli.
Nieprzekazywalne obiekty przekazane grupie zostały usunięte.
</notification>
@@ -2400,7 +2646,7 @@ Nie możesz tutaj latać.
Popychanie niedozwolone. Nie możesz tutaj popychać innych chyba, że jesteś właścicielem tej działki.
</notification>
<notification name="NoVoice">
- Ta działka nie pozwala na rozmowy głosowe.
+ Ta działka nie pozwala na rozmowy głosowe. Nie będziesz słyszeć, jak ktoś rozmawia.
</notification>
<notification name="NoBuild">
Ta działka nie pozwala na budowanie. Nie możesz tworzyć tutaj obiektów.
@@ -2408,6 +2654,10 @@ Nie możesz tutaj latać.
<notification name="PathfindingDirty">
W tym regionie są oczekujące zmiany w odnajdywaniu ścieżek. Jeśli posiadasz prawa budowania możesz odświeżyć region klikając na przycisk “Odśwież region”.
</notification>
+ <notification name="PathfindingDirtyRebake">
+ W tym regionie są oczekujące zmiany w odnajdywaniu ścieżek. Jeśli posiadasz prawa budowania możesz odświeżyć region klikając na przycisk “Odśwież region”.
+ <usetemplate name="okbutton" yestext="Odśwież" />
+ </notification>
<notification name="DynamicPathfindingDisabled">
Dynamiczne odnajdywanie ścieżek nie jest włączone w tym regionie. Oskryptowane obiekty używające odwołań LSL wykorzystujących odnajdywanie ścieżek mogą nie działać zgodnie z oczekiwaniami.
</notification>
@@ -2432,13 +2682,15 @@ Nie możesz tutaj latać.
Tylko publiczne działki w tym regionie, co Ty, mogą być przejęte.
</notification>
<notification name="RegionTPAccessBlocked">
- Region, który próbujesz odwiedzić ma klasyfikację treści przekraczającą Twoje obecne preferencje treści. Możesz je zmienić używając Ja &gt; Ustawienia &gt; Ogólne w pasku menu.
+ Region, który próbujesz odwiedzić, ma klasyfikację treści przekraczającą Twoje maksymalne preferencje. Możesz je zmienić używając Ja &gt; Ustawienia &gt; Ogólne.
+
+Pełne informacje na temat klasyfikacji treści można znaleźć [https://community.secondlife.com/knowledgebase/english/maturity-ratings-r52/ tutaj].
</notification>
<notification name="RegionAboutToShutdown">
Region, do którego próbujesz się dostać, właśnie się wyłącza.
</notification>
<notification name="URBannedFromRegion">
- Zostałeś zbanowany w regionie.
+ Zostałeś/aś zbanowany/a w regionie.
</notification>
<notification name="NoTeenGridAccess">
Twoje konto nie może zostać połączone z podanym regionem Teen Grid.
@@ -2529,7 +2781,7 @@ Spróbuj ponownie za kilka minut.
[ITEM_SLURL]
<form name="form">
<button name="Show" text="Pokaż" />
- <button name="Discard" text="Wyrzuć" />
+ <button name="Discard" text="Odrzuć" />
<button name="Mute" text="Zablokuj" />
</form>
</notification>
@@ -2673,22 +2925,80 @@ Czy się zgadzasz?
<button name="Mute" text="Zablokuj" />
</form>
</notification>
- <notification name="ScriptQuestionCaution">
- Obiekt &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; chciałby uzyskać zgodę na pobieranie Linden Dolarów (L$) z Twojego konta. Jeśli zezwolisz, to będzie on mógł brać z niego wszystkie lub część środków, w dowolnej chwili, bez dodatkowych ostrzeżeń.
+ <notification name="ExperienceAcquireFailed">
+ Nie można uzyskać nowej przygody:
+[ERROR_MESSAGE]
+ </notification>
+ <notification name="NotInGroupExperienceProfileMessage">
+ Zmiana do grupy przygody została zignorowana, ponieważ właściciel nie jest członkiem wybranej grupy.
+ </notification>
+ <notification name="UneditableExperienceProfileMessage">
+ Niemodyfikowalne pole '[field]' zostało zignorowane podczas aktualizacji profilu przygody.
+ </notification>
+ <notification name="RestrictedToOwnerExperienceProfileMessage">
+ Zignorowano zmiany dla pola '[field]', ponieważ może ono być zmieniane tylko przez właściciela przygody.
+ </notification>
+ <notification name="MaturityRatingExceedsOwnerExperienceProfileMessage">
+ Nie możesz ustawić poziomu treści dla przygody większego, niż ten właściciela.
+ </notification>
+ <notification name="RestrictedTermExperienceProfileMessage">
+ Następujące rzeczy uniemożliwiły zaktualizowanie nazwy/opisu profilu przygody: [extra_info]
+ </notification>
+ <notification name="TeleportedHomeExperienceRemoved">
+ Zostałeś/aś wyteleportowany/a z regionu [region_name] za usunięcie przygody secondlife:///app/experience/[public_id]/profile i wobec tego nie możesz tam dłużej przebywać.
+ <form name="form">
+ <ignore name="ignore" text="Wyteleportowanie z regionu za usunięcie przygody"/>
+ </form>
+ </notification>
+ <notification name="TrustedExperienceEntry">
+ Dostałeś/aś przyzwolenie na przebywanie w regionie [region_name], ponieważ zgodziłeś/aś się uczestniczyć w przygodzie secondlife:///app/experience/[public_id]/profile - usunięcie jej może spowodować, że zostaniesz usunięty/a z regionu.
+ <form name="form">
+ <ignore name="ignore" text="Przyzwolenie na przebywanie w regionie po akceptacji przygody"/>
+ </form>
+ </notification>
+ <notification name="TrustedExperiencesAvailable">
+ Nie masz dostępu do tego miejsca. Może będziesz go mieć, jeśli zaakceptujesz następującą przygodę:
-Zanim zezwolisz na dostęp upewnij się, że wiesz jaki to obiekt i dlaczego pyta o zgodę - oraz że ufasz jego twórcy. Jeśli nie masz pewności kliknij na Odmów.
+[EXPERIENCE_LIST]
+
+Inne przygody również mogą stać się dostępne.
+ </notification>
+ <notification name="ExperienceEvent">
+ Obiekt dostał zezwolenie: [EventType] - poprzez przygodę: secondlife:///app/experience/[public_id]/profile
+Właściciel: secondlife:///app/agent/[OwnerID]/inspect
+Nazwa obiektu: [ObjectName]
+Nazwa działki: [ParcelName]
+ </notification>
+ <notification name="ExperienceEventAttachment">
+ Dodatek na Tobie dostał zezwolenie: [EventType] - poprzez przygodę: secondlife:///app/experience/[public_id]/profile
+Właściciel: secondlife:///app/agent/[OwnerID]/inspect
+ </notification>
+ <notification name="ScriptQuestionExperience">
+ Obiekt &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; którego właścicielem jest &apos;[NAME]&apos; prosi Cię o udział w przygodzie ([GRID_WIDE]):
+
+[EXPERIENCE]
+
+Gdy zezwolenie zostanie zatwierdzone nie zobaczysz tej wiadomości ponownie, dla tej przygody - chyba, że zostanie ono cofnięte w profilu przygody.
+
+Skrypty powiązane z tą przygodą będą mogły robić następujące rzeczy w regionach, gdzie przygoda jest aktywna:
+
+[QUESTIONS]
+
+Czy wyrażasz na to zgodę?
<form name="form">
- <button name="Grant" text="Zezwól na dostęp" />
- <button name="Deny" text="Odmów" />
+ <button name="BlockExperience" text="Zablokuj przygodę"/>
+ <button name="Mute" text="Zablokuj obiekt"/>
+ <button name="Yes" text="Tak"/>
+ <button name="No" text="Nie"/>
</form>
</notification>
- <notification name="UnknownScriptQuestion">
- Zezwolenia, o jakie prosi skrypt z &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, którego właścicielem jest &apos;[NAME]&apos;, nie są rozpoznawane przez przeglądarkę i nie mogą zostać udzielone.
+ <notification name="ScriptQuestionCaution">
+ Obiekt &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; chciałby uzyskać zgodę na pobieranie Linden Dolarów (L$) z Twojego konta. Jeśli zezwolisz, to będzie on mógł brać z niego wszystkie lub część środków, w dowolnej chwili, bez dodatkowych ostrzeżeń.
-Aby ich udzielić prosimy zaktualizować przeglądarkę do najnowszej wersji z [DOWNLOADURL].
+Zanim zezwolisz na dostęp upewnij się, że wiesz jaki to obiekt i dlaczego pyta o zgodę - oraz że ufasz jego twórcy. Jeśli nie masz pewności kliknij na Odmów.
<form name="form">
- <button name="Deny" text="Ok, odmów jednorazowo" />
- <button name="Mute" text="Zablokuj/Wycisz" />
+ <button name="Grant" text="Zezwól na dostęp"/>
+ <button name="Deny" text="Odmów"/>
</form>
</notification>
<notification name="ScriptDialog">
@@ -2700,21 +3010,13 @@ Aby ich udzielić prosimy zaktualizować przeglądarkę do najnowszej wersji z [
</form>
</notification>
<notification name="ScriptDialogGroup">
- &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos; - [GROUPNAME]
+ &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos; - &lt;nolink&gt;[GROUPNAME]&lt;/nolink&gt;
[MESSAGE]
<form name="form">
<button name="Client_Side_Mute" text="Blokuj" />
<button name="Client_Side_Ignore" text="Zignoruj" />
</form>
</notification>
- <notification name="FirstBalanceIncrease">
- Właśnie otrzymałeś/aś [AMOUNT] L$.
-Twój stan L$ jest widoczny w prawym górnym narożniku ekranu.
- </notification>
- <notification name="FirstBalanceDecrease">
- Właśnie wydałeś/aś [AMOUNT] L$.
-Twój stan L$ jest widoczny w prawym górnym narożniku ekranu.
- </notification>
<notification name="BuyLindenDollarSuccess">
Dziękujemy za wpłatę!
@@ -2756,7 +3058,7 @@ Wybierz Zablokuj żeby wyciszyć wszystkie wiadomości od tej osoby.
Zaoferowano [NAME] obiekty i ta osoba została automatycznie odblokowana.
</notification>
<notification name="VoiceInviteGroup">
- [NAME] zaczyna rozmowę głosową z grupą [GROUP].
+ [NAME] zaczyna rozmowę głosową z grupą &lt;nolink&gt;[GROUP]&lt;/nolink&gt;.
Wybierz Zaakceptuj żeby rozmawiać albo Odmów żeby nie przyjąć zaproszenia.
Wybierz Zablokuj żeby wyciszyć dzwoniącą osobę.
<form name="form">
@@ -2792,31 +3094,34 @@ Wybierz Zablokuj żeby wyciszyć tą osobę.
Przepraszamy. Limit rozmów został przekroczony w tym obszarze. Spróbuj w innym miejscu.
</notification>
<notification name="VoiceChannelDisconnected">
- [VOICE_CHANNEL_NAME] odłączył się. Przełączanie do rozmowy w czacie lokalnym.
+ [VOICE_CHANNEL_NAME] odłączył się. Przełączanie do rozmowy w czacie w pobliżu.
</notification>
<notification name="VoiceChannelDisconnectedP2P">
- [VOICE_CHANNEL_NAME] skończył rozmowę. Przełączanie do rozmowy w czacie lokalnym.
+ [VOICE_CHANNEL_NAME] skończył rozmowę. Przełączanie do rozmowy w czacie w pobliżu.
</notification>
<notification name="P2PCallDeclined">
- [VOICE_CHANNEL_NAME] odmówił połączenia. Przełączanie do rozmowy w czacie lokalnym.
+ [VOICE_CHANNEL_NAME] odmówił połączenia. Przełączanie do rozmowy w czacie w pobliżu.
</notification>
<notification name="P2PCallNoAnswer">
- [VOICE_CHANNEL_NAME] nie odpowiada. Przełączanie do rozmowy w czacie lokalnym.
+ [VOICE_CHANNEL_NAME] nie odpowiada. Przełączanie do rozmowy w czacie w pobliżu.
</notification>
<notification name="VoiceChannelJoinFailed">
- Brak połączenia z [VOICE_CHANNEL_NAME], spróbuj później. Przełączanie do rozmowy w czacie lokalnym.
+ Brak połączenia z [VOICE_CHANNEL_NAME], spróbuj później. Przełączanie do rozmowy w czacie w pobliżu.
</notification>
<notification name="VoiceEffectsExpired">
Subskrypcja jednego lub więcej Przekształceń Głosu wygasła.
[[URL] Kliknij tutaj] oby odnowić subskrypcję.
+Jeśli jesteś użytkownikiem premium, to [[PREMIUM_URL] kliknij tutaj] aby otrzymać swój perk Przekształceń Głosu.
</notification>
<notification name="VoiceEffectsExpiredInUse">
Czas aktywności Przekształcenia Głosu wygasł, normalne ustawienia Twojego głosu zostały zastosowane.
[[URL] Kliknij tutaj] aby odnowić subskrypcję.
+Jeśli jesteś użytkownikiem premium, to [[PREMIUM_URL] kliknij tutaj] aby otrzymać swój perk Przekształceń Głosu.
</notification>
<notification name="VoiceEffectsWillExpire">
Jedno lub więcej z Twoich Przekształceń Głosu wygaśnie za mniej niż [INTERVAL] dni.
[[URL] Kliknij tutaj] aby odnowić subskrypcję.
+Jeśli jesteś użytkownikiem premium, to [[PREMIUM_URL] kliknij tutaj] aby otrzymać swój perk Przekształceń Głosu.
</notification>
<notification name="VoiceEffectsNew">
Nowe Przekształcenia Głosu są dostępne!
@@ -2859,6 +3164,31 @@ Zostaną zablokowane na kilka sekund dla bezpieczeństwa.
<notification name="AttachmentSaved">
Załącznik został zapisany.
</notification>
+ <notification name="AppearanceToXMLSaved">
+ Wygląd został zapisany do XML, w [PATH]
+ </notification>
+ <notification name="AppearanceToXMLFailed">
+ Nie udało się zapisać wyglądu do XML.
+ </notification>
+ <notification name="SnapshotToComputerFailed">
+ Nie można zapisać zrzutu ekranu do [PATH]: Dysk jest pełny. Potrzeba [NEED_MEMORY]KB, ale wolnego jest [FREE_MEMORY]KB.
+ </notification>
+ <notification name="SnapshotToLocalDirNotExist">
+ Nie można zapisać zrzutu ekranu do [PATH]: Katalog nie istnieje.
+ </notification>
+ <notification name="PresetNotSaved">
+ Błąd podczas zapisywania ustawienia [NAME].
+ </notification>
+ <notification name="DefaultPresetNotSaved">
+ Nie można zastąpić domyślnego ustawienia.
+ </notification>
+ <notification name="PresetAlreadyExists">
+ &apos;[NAME]&apos; jest w użyciu. Możesz zastąpić
+to ustawienie lub wybrać inną nazwę.
+ </notification>
+ <notification name="PresetNotDeleted">
+ Błąd podczas usuwania ustawienia [NAME].
+ </notification>
<notification name="UnableToFindHelpTopic">
Nie można znaleźć tematu pomocy dla tego elementu.
</notification>
@@ -2872,12 +3202,25 @@ Zostaną zablokowane na kilka sekund dla bezpieczeństwa.
<notification name="VoiceIsMutedByModerator">
Twoja rozmowa głosowa została wyciszona przez moderatora.
</notification>
+ <notification name="FailedToGetBenefits">
+ Niestety nie udało nam się uzyskać informacji o korzyściach dla tej sesji. Nie powinno się to zdarzyć w normalnym środowisku produkcyjnym. Skontaktuj się z pomocą techniczną. Ta sesja nie będzie działać normalnie i zalecamy restart.
+ </notification>
+ <notification name="BulkUploadCostConfirmation">
+ Spowoduje to przesłanie [COUNT] elementów o łącznym koszcie [COST]L$. Czy chcesz kontynuować przesyłanie?
+ <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Prześlij"/>
+ </notification>
+ <notification name="BulkUploadNoCompatibleFiles">
+ Wybranych plików nie można przesłać zbiorczo.
+ </notification>
+ <notification name="BulkUploadIncompatibleFiles">
+ Niektórych z wybranych plików nie można przesłać zbiorczo.
+ </notification>
<notification name="UploadCostConfirmation">
- Załadowanie tego na serwer będzie kosztować [PRICE]L$, chcesz kontynuować?
- <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Załaduj" />
+ Przesłanie tego na serwer będzie kosztować [PRICE]L$, chcesz kontynuować?
+ <usetemplate name="okcancelbuttons" notext="Anuluj" yestext="Prześlij"/>
</notification>
<notification name="ConfirmClearTeleportHistory">
- Czy na pewno chcesz usunąć historię teleportacji?
+ Spowoduje to usunięcie całej listy odwiedzonych przez Ciebie miejsc i nie będzie można tego cofnąć. Kontynuować?
<usetemplate name="okcancelbuttons" notext="Anuluj" />
</notification>
<notification name="BottomTrayButtonCanNotBeShown">
@@ -2887,13 +3230,16 @@ Przycisk zostanie wyświetlony w przypadku dostatecznej ilości przestrzeni.
<notification name="ShareNotification">
Zaznacz Rezydentów, z którymi chcesz się podzielić.
</notification>
+ <notification name="MeshUploadErrorDetails">
+ Nie można przesłać [LABEL]: [MESSAGE]
+[DETAILS] Zobacz SecondLife.log, aby dowiedzieć się więcej.
+ </notification>
<notification name="MeshUploadError">
- Nie można załadować [LABEL]: [MESSAGE] [IDENTIFIER]
-
-Zobacz log, aby dowiedzieć się więcej.
+ Nie można przesłać [LABEL]: [MESSAGE]
+Zobacz SecondLife.log, aby dowiedzieć się więcej.
</notification>
<notification name="MeshUploadPermError">
- Wystąpił błąd podczas pobierania uprawnień ładowania meszy.
+ Wystąpił błąd podczas pobierania uprawnień przesyłania meszy.
</notification>
<notification name="RegionCapabilityRequestError">
Nie udało się uzyskać zdolności regionu: &apos;[CAPABILITY]&apos;.
@@ -2973,14 +3319,26 @@ Awatar &apos;[NAME]&apos; rozpoczął edycję wyglądu.
Awatar &apos;[NAME]&apos; opuścił edycję wyglądu.
</notification>
<notification name="NoConnect">
- Występuje problem z połączeniem [PROTOCOL] [HOSTID].
+ Występuje problem z połączeniem [PROTOCOL] &lt;nolink&gt;[HOSTID]&lt;/nolink&gt;.
Proszę sprawdź swoją sieć i ustawienia firewall.
</notification>
<notification name="NoVoiceConnect">
- Występuje problem z Twoim połączeniem głosowym:
+ Nie możemy połączyć się z serwerem głosowym:
[HOSTID]
+Porty, które muszą być otwarte dla połączeń głosowych, to:
+:TCP: 80, 443
+:UDP: 3478, 3479, 5060, 5062, 6250, 12000-32000
+
+Proszę sprawdź swoją sieć i ustawienia firewall.
+Wyłącz wszelkie funkcjonalności SIP ALG (Application Layer Gateway) w swoim routerze.
+
+Komunikacja głosowa nie będzie dostępna.
+ </notification>
+ <notification name="NoVoiceConnect-GIAB">
+ Występuje problem z Twoim połączeniem głosowym.
+
Komunikacja głosowa nie będzie dostępna.
Proszę sprawdź swoją sieć i ustawienia firewall.
</notification>
@@ -2990,20 +3348,27 @@ Awatar &apos;[NAME]&apos; pozostał w pełni załadowany.
</notification>
<notification name="AvatarRezSelfBakedTextureUploadNotification">
( [EXISTENCE] sekund w Second Life )
-Wstępnie przetworzone tekstury [RESOLUTION] dla &apos;[BODYREGION]&apos; zostały załadowane po [TIME] sekundach.
+Wstępnie przetworzone tekstury [RESOLUTION] dla &apos;[BODYREGION]&apos; zostały przesłane po [TIME] sekundach.
</notification>
<notification name="AvatarRezSelfBakedTextureUpdateNotification">
( [EXISTENCE] sekund w Second Life )
Wstępnie przetworzone tekstury [RESOLUTION] zostały lokalnie zaktualizowane dla &apos;[BODYREGION]&apos; po [TIME] sekundach.
</notification>
<notification name="CannotUploadTexture">
- Nie można załadować tekstury.
-[REASON]
- </notification>
+ Nie można przesłać tekstury.
+[REASON]
+ </notification>
<notification name="LivePreviewUnavailable">
Nie można wyświetlić podglądu tej tekstury - jest niekopiowalna lub/oraz nietransferowalna.
<usetemplate ignoretext="Ostrzegaj, gdy podgląd na żywo nie może wyświetlić niekopiowalnych/nietransferowalnych tekstur" name="okignore" />
</notification>
+ <notification name="FacePasteFailed">
+ Wklejanie nie powiodło się. [REASON]
+ </notification>
+ <notification name="FacePasteTexturePermissions">
+ Zastosowano teksturę z ograniczonymi uprawnieniami, obiekt odziedziczy więc te uprawnienia.
+ <usetemplate ignoretext="Wklejanie: zastosowano teksturę z ograniczonymi uprawnieniami" name="notifyignore" />
+ </notification>
<notification name="ConfirmLeaveCall">
Czy jesteś pewien/pewna, że chcesz zakończyć rozmowę?
<usetemplate ignoretext="Potwierdź zanim rozmowa głosowa zostanie zakończona" name="okcancelignore" notext="Nie" yestext="Tak" />
@@ -3063,13 +3428,6 @@ Kliknij i przeciągnij gdziekolwiek aby obrócić widok.
<notification name="ForceQuitDueToLowMemory">
SL zostanie wyłączone za 30 sekund, brak pamięci.
</notification>
- <notification name="PopupAttempt">
- Wyskakujące okienko zostało zablokowane.
- <form name="form">
- <ignore name="ignore" text="Zezwól na wyskakujące okienka" />
- <button name="open" text="Otwórz wyskakujące okno" />
- </form>
- </notification>
<notification name="SOCKS_NOT_PERMITTED">
Serwer proxy SOCKS 5 "[HOST]:[PORT]" odmawia połączenia, brak dostępu na podstawie zestawu reguł.
</notification>
@@ -3161,7 +3519,7 @@ Kliknij i przeciągnij gdziekolwiek aby obrócić widok.
</notification>
<notification name="ConfirmHideUI">
Ta akcja ukryje wszystkie menu i przyciski. Aby je pokazać użyj skrótu [SHORTCUT] ponownie.
- <usetemplate name="okcancelignore" notext="Anuluj" ignoretext="Potwierdź przed ukryciem interfejsu" />
+ <usetemplate name="okcancelignore" notext="Anuluj" ignoretext="Potwierdź przed ukryciem interfejsu" />
</notification>
<notification name="PathfindingLinksets_WarnOnPhantom">
Niektórym z zaznaczonych zbiorów części zostanie przełączony status Widmowy.
@@ -3219,10 +3577,10 @@ Czy chcesz kontynuować?
Wybrany obiekt ma wpływ na Navmesh. Dodanie elastyczności spowoduje usunięcie go z Navmesha.
<usetemplate ignoretext="Wybrany obiekt ma wpływ na Navmesh. Dodanie elastyczności spowoduje usunięcie go z Navmesha." name="okcancelignore" notext="Anuluj" />
</notification>
- <global name="UnsupportedGLRequirements">
- Wygląda na to, że Twój system nie spełnia wymagań sprzętowych [APP_NAME]. [APP_NAME] wymaga karty graficznej kompatybilnej z OpenGL z multiteksturami. Jeżeli masz taką kartę zainstaluj najnowsze sterowniki do niej i uaktualnienia systemu operacyjnego.
+ <global name="UnsupportedIntelDriver">
+ Zainstalowany sterownik graficzny Intela dla [GPUNAME], wersja [VERSION], jest przestarzały i jest znany z powodowania awarii. Zdecydowanie zaleca się aktualizację do aktualnego sterownika Intel.
-Jeżeli wciąż masz problemy sprawdź: [SUPPORT_SITE].
+Czy chcesz sprawdzić witrynę sterowników firmy Intel?
</global>
<global name="UnsupportedGPU">
- Twoja karta graficzna nie spełnia minimalnych wymagań.
@@ -3230,9 +3588,12 @@ Jeżeli wciąż masz problemy sprawdź: [SUPPORT_SITE].
<global name="UnsupportedRAM">
- Pamięć Twojego systemu nie spełnia minimalnych wymagań.
</global>
+ <global name="LLLeapUpdaterFailure">
+ Nie udało się uruchomić usługi aktualizatora [UPDATER_APP]. Sprawdź, czy przeglądarka jest poprawnie zainstalowana i czy ma niezbędne uprawnienia do uruchomienia. Jeśli nadal będziesz mieć problemy, odwiedź [SUPPORT_SITE].
+ </global>
<global name="You can only set your 'Home Location' on your land or at a mainland Infohub.">
- If you own a piece of land, you can make it your home location.
-Otherwise, you can look at the Map and find places marked &quot;Infohub&quot;.
+ Jeśli jesteś właścicielem działki, to możesz ustawić na niej miejsce startu.
+W innym przypadku możesz poszukać na mapie miejsc oznaczonych jako &quot;Infohub&quot;.
</global>
<global name="You died and have been teleported to your home location">
Nastąpiła śmierć i teleportacja do Miejsca Startu.
@@ -3309,13 +3670,13 @@ Anulowano.
Nie możesz tworzyć drzew i trawy na ziemi, która nie należy do Ciebie.
</notification>
<notification name="NoCopyPermsNoObject">
- Kopiowanie nie powiodło się, ponieważ nie masz zezwoleń na kopiowanie obiektu '[OBJ_NAME]'.
+ Kopiowanie nie powiodło się, ponieważ nie masz zezwoleń na kopiowanie obiektu &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt;.
</notification>
<notification name="NoTransPermsNoObject">
- Kopiowanie nie powiodło się, ponieważ obiekt '[OBJ_NAME]' nie może zostać przetransferowany do Ciebie.
+ Kopiowanie nie powiodło się, ponieważ obiekt &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt; nie może zostać przetransferowany do Ciebie.
</notification>
<notification name="AddToNavMeshNoCopy">
- Kopiowanie nie powiodło się, ponieważ obiekt '[OBJ_NAME]' ma wpływ na Navmesh.
+ Kopiowanie nie powiodło się, ponieważ obiekt &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt; ma wpływ na Navmesh.
</notification>
<notification name="DupeWithNoRootsSelected">
Wybrano duplikat bez obiektów głównych.
@@ -3362,34 +3723,37 @@ Spróbuj ponownie za minutę.
Zabieranie z powrotem do Szafy zostało wyłączone.
</notification>
<notification name="NoExistNoSaveToContents">
- Nie można zapisać '[OBJ_NAME]' do zawartości obiektu, ponieważ obiekt z którego został zrezzowany już nie istnieje.
+ Nie można zapisać &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt; do zawartości obiektu, ponieważ obiekt z którego został zrezzowany już nie istnieje.
</notification>
<notification name="NoModNoSaveToContents">
- Nie można zapisać '[OBJ_NAME]' do zawartości obiektu, ponieważ nie masz praw do modyfikacji obiektu '[DEST_NAME]'.
+ Nie można zapisać &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt; do zawartości obiektu, ponieważ nie masz praw do modyfikacji obiektu &lt;nolink&gt;'[DEST_NAME]'&lt;/nolink&gt;.
</notification>
<notification name="NoSaveBackToInvDisabled">
- Nie można zabrać '[OBJ_NAME]' z powrotem do Szafy -- ta operacja została wyłączona.
+ Nie można zabrać &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt; z powrotem do Szafy -- ta operacja została wyłączona.
</notification>
<notification name="NoCopyNoSelCopy">
- Nie możesz skopiować tego, co jest zaznaczone, ponieważ nie masz prawa do skopiowania obiektu '[OBJ_NAME]'.
+ Nie możesz skopiować tego, co jest zaznaczone, ponieważ nie masz prawa do skopiowania obiektu &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt;.
</notification>
<notification name="NoTransNoSelCopy">
- Nie możesz skopiować tego, co jest zaznaczone, ponieważ obiektu '[OBJ_NAME]' nie można transferować.
+ Nie możesz skopiować tego, co jest zaznaczone, ponieważ obiektu &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt; nie można transferować.
</notification>
<notification name="NoTransNoCopy">
- Nie możesz skopiować tego, co jest zaznaczone, ponieważ obiektu '[OBJ_NAME]' nie można transferować.
+ Nie możesz skopiować tego, co jest zaznaczone, ponieważ obiektu &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt; nie można transferować.
</notification>
<notification name="NoPermsNoRemoval">
- Usunięcie obiektu '[OBJ_NAME]' z symulatora zostało wzbronione przez system zezwoleń.
+ Usunięcie obiektu &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt; z symulatora zostało wzbronione przez system zezwoleń.
</notification>
<notification name="NoModNoSaveSelection">
- Nie możesz zapisać tego, co jest zaznaczone, ponieważ nie masz prawa do modyfikacji obiektu '[OBJ_NAME]'.
+ Nie możesz zapisać tego, co jest zaznaczone, ponieważ nie masz prawa do modyfikacji obiektu &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt;.
+ </notification>
+ <notification name="NoTransNoSaveToContents">
+ Nie można zapisać &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt; do zawartości obiektu, ponieważ nie masz uprawnień do przeniesienia praw własności obiektu.
</notification>
<notification name="NoCopyNoSaveSelection">
- Nie możesz zapisać tego, co jest zaznaczone, ponieważ obiektu '[OBJ_NAME]' nie można kopiować.
+ Nie możesz zapisać tego, co jest zaznaczone, ponieważ obiektu &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt; nie można kopiować.
</notification>
<notification name="NoModNoTaking">
- Nie możesz zabrać tego, co jest zaznaczone, ponieważ nie masz prawa do modyfikacji obiektu '[OBJ_NAME]'.
+ Nie możesz zabrać tego, co jest zaznaczone, ponieważ nie masz prawa do modyfikacji obiektu &lt;nolink&gt;'[OBJ_NAME]'&lt;/nolink&gt;.
</notification>
<notification name="RezDestInternalError">
Błąd wewnętrzny: Nieznany typ lokalizacji docelowej.
@@ -3415,33 +3779,39 @@ Spróbuj ponownie za minutę.
<notification name="AvatarEjectFailed">
Wyrzucenie nie powiodło się, ponieważ nie masz uprawnień administratora na tej działce.
</notification>
- <notification name="CantMoveObjectParcelFull">
- Nie można przesunąć obiektu '[OBJECT_NAME]' do
-[OBJ_POSITION] w regionie [REGION_NAME], ponieważ działka jest zbyt pełna.
+ <notification name="CMOParcelFull">
+ Nie można przesunąć obiektu '[O]' do
+[P] w regionie [R], ponieważ działka jest zbyt pełna.
+ </notification>
+ <notification name="CMOParcelPerms">
+ Nie można przesunąć obiektu '[O]' do
+[P] w regionie [R], ponieważ Twoje obiekty nie są dozwolone na tej działce.
</notification>
- <notification name="CantMoveObjectParcelPerms">
- Nie można przesunąć obiektu '[OBJECT_NAME]' do
-[OBJ_POSITION] w regionie [REGION_NAME], ponieważ Twoje obiekty nie są dozwolone na tej działce.
+ <notification name="CMOParcelResources">
+ Nie można przesunąć obiektu '[O]' do
+[P] w regionie [R], ponieważ nie ma wystarczającej ilości zasobów na tej działce.
</notification>
- <notification name="CantMoveObjectParcelResources">
- Nie można przesunąć obiektu '[OBJECT_NAME]' do
-[OBJ_POSITION] w regionie [REGION_NAME], ponieważ nie ma wystarczającej ilości zasobów na tej działce.
+ <notification name="NoParcelPermsNoObject">
+ Kopiowanie nie powiodło się, ponieważ nie masz dostępu do tej działki.
</notification>
- <notification name="CantMoveObjectRegionVersion">
- Nie można przesunąć obiektu '[OBJECT_NAME]' do
-[OBJ_POSITION] w regionie [REGION_NAME], ponieważ the region działa na starszej wersji symulatora, która nie obsługuje otrzymywania obiektów przez granice działek.
+ <notification name="CMORegionVersion">
+ Nie można przesunąć obiektu '[O]' do
+[P] w regionie [R], ponieważ the region działa na starszej wersji symulatora, która nie obsługuje otrzymywania obiektów przez granice działek.
</notification>
- <notification name="CantMoveObjectNavMesh">
- Nie można przesunąć obiektu '[OBJECT_NAME]' do
-[OBJ_POSITION] w regionie [REGION_NAME], ponieważ nie możesz modyfikować Navmesha przez granice regionów.
+ <notification name="CMONavMesh">
+ Nie można przesunąć obiektu '[O]' do
+[P] w regionie [R], ponieważ nie możesz modyfikować Navmesha przez granice regionów.
</notification>
- <notification name="CantMoveObjectWTF">
- Nie można przesunąć obiektu '[OBJECT_NAME]' do
-[OBJ_POSITION] w regionie [REGION_NAME] ze względu na nieznany powód. ([FAILURE_TYPE])
+ <notification name="CMOWTF">
+ Nie można przesunąć obiektu '[O]' do
+[P] w regionie [R] ze względu na nieznany powód. ([F])
</notification>
<notification name="NoPermModifyObject">
Nie masz uprawnień do modyfikowania tego obiektu
</notification>
+ <notification name="TooMuchObjectInventorySelected">
+ Zbyt wiele obiektów z dużą zawartością zostało zaznaczonych. Zaznacz mniej obiektów i spróbuj ponownie.
+ </notification>
<notification name="CantEnablePhysObjContributesToNav">
Nie można włączyć fizyki dla obiektu, który ma wpływ na Navmesh.
</notification>
@@ -3478,6 +3848,12 @@ Spróbuj ponownie za minutę.
<notification name="CantSaveModifyAttachment">
Nie można zapisać do zawartości obiektu: To zmodyfikowałoby prawa dodatku.
</notification>
+ <notification name="AttachmentHasTooMuchInventory">
+ Twoje dodatki zawierają w sobie zbyt dużo obiektów, aby dodać więcej.
+ </notification>
+ <notification name="IllegalAttachment">
+ Dodatek chciał się doczepić do punktu, jaki nie istnieje na awatarze. Został on zamiast tego dołączony do klatki piersiowej.
+ </notification>
<notification name="TooManyScripts">
Za dużo skryptów.
</notification>
@@ -3485,7 +3861,7 @@ Spróbuj ponownie za minutę.
Nie można dodać skryptu!
</notification>
<notification name="AssetServerTimeoutObjReturn">
- Czas odpowiedzi z serwera zasobów danych przekroczył dozwolony limit. Obiekt został zwrócony do sima.
+ Czas odpowiedzi z serwera zasobów danych przekroczył dozwolony limit. Obiekt został zwrócony do regionu.
</notification>
<notification name="RegionDisablePhysicsShapes">
Ten region nie ma włączonych kształtów fizycznych.
@@ -3518,7 +3894,7 @@ Spróbuj ponownie za minutę.
Nie możesz zmieniać kształtu obiektu meszowego.
</notification>
<notification name="FullRegionCantEnter">
- Nie możesz wejść do tego regionu, \nponieważ jest pełny.
+ Nie możesz wejść do tego regionu, ponieważ jest pełny.
</notification>
<notification name="LinkFailedOwnersDiffer">
Scalanie nie powiodło się -- właściciele są różni
@@ -3570,9 +3946,18 @@ Spróbuj ponownie za minutę.
<notification name="TeleportedByObjectUnknownUser">
Zostałeś/aś teleportowany/a przez obiekt '[OBJECT_NAME]' należący do nieznanej osoby.
</notification>
+ <notification name="StandDeniedByObject">
+ '[OBJECT_NAME]' nie pozwala Ci w tej chwili stać.
+ </notification>
+ <notification name="ResitDeniedByObject">
+ '[OBJECT_NAME]' nie pozwala Ci w tej chwili zmieniać siedzeń.
+ </notification>
<notification name="CantCreateObjectRegionFull">
Nie można utworzyć żądanego obiektu. Region jest pełny.
</notification>
+ <notification name="CantCreateAnimatedObjectTooLarge">
+ Nie można utworzyć żądanego obiektu animowanego, ponieważ przekracza on limit trójkątów riggowania.
+ </notification>
<notification name="CantAttackMultipleObjOneSpot">
Nie możesz podłączyć wielu obiektów do jednego punktu.
</notification>
@@ -3621,6 +4006,21 @@ Spróbuj ponownie za minutę.
<notification name="CantChangeShape">
Nie masz pozwolenia na zmianę tego kształtu.
</notification>
+ <notification name="NoPermsTooManyAttachedAnimatedObjects">
+ Operacja spowodowałaby przekroczenie limitu liczby dołączonych animowanych obiektów.
+ </notification>
+ <notification name="NoPermsLinkAnimatedObjectTooLarge">
+ Nie można połączyć tych obiektów, ponieważ powstały animowany obiekt przekroczyłby limit trójkątów riggowania.
+ </notification>
+ <notification name="NoPermsSetFlagAnimatedObjectTooLarge">
+ Nie można przekształcić tego obiektu w animowany obiekt, ponieważ przekroczyłby limit trójkątów riggowania.
+ </notification>
+ <notification name="CantChangeAnimatedObjectStateInsufficientLand">
+ Nie można zmienić stanu animowanego obiektu dla tej rzeczy, ponieważ spowodowałoby to przekroczenie limitu działki.
+ </notification>
+ <notification name="ErrorNoMeshData">
+ Błąd serwera: nie można ukończyć tej operacji, ponieważ dane meszu nie zostały załadowane.
+ </notification>
<notification name="NoAccessToClaimObjects">
Twoje uprawnienia nie pozwalają Ci na żądanie obiektów w tym miejscu.
</notification>
@@ -3679,7 +4079,7 @@ Spróbuj ponownie za minutę.
Sprecyzuj proszę swoje parametry usuwania.
</notification>
<notification name="UnableToUploadAsset">
- Nie można załadować zasobu danych (assetu).
+ Nie można przesłać zasobu danych (assetu).
</notification>
<notification name="CantTeleportCouldNotFindUser">
Nie można znaleźć użytkownika, aby teleportować do domu
@@ -3691,7 +4091,7 @@ Spróbuj ponownie za minutę.
żądanie ogólne nie powiodło się
</notification>
<notification name="CantUploadPostcard">
- Nie można załadować pocztówki. Spróbuj ponownie później.
+ Nie można przesłać pocztówki. Spróbuj ponownie później.
</notification>
<notification name="CantFetchInventoryForGroupNotice">
Nie można pobrać szczegółów dołączonego przedmiotu dla ogłoszenia grupy.
@@ -3706,7 +4106,7 @@ Spróbuj ponownie za minutę.
Nie można zanalizować przedmiotu z ogłoszenia.
</notification>
<notification name="TerrainUploadFailed">
- Ładowanie podłoża na serwer nie powiodło się.
+ Przesyłanie podłoża na serwer nie powiodło się.
</notification>
<notification name="TerrainFileWritten">
Plik podłoża zapisany.
@@ -3799,7 +4199,7 @@ Spróbuj zaznaczyć mniejszy obszar ziemi.
Nie można w tej chwili kupić przepustki. Spróbuj ponownie później.
</notification>
<notification name="CantCreateObjectParcelFull">
- Nie można utworzyć obiektu, \n ponieważ działka jest pełna.
+ Nie można utworzyć obiektu, ponieważ działka jest pełna.
</notification>
<notification name="FailedPlacingObject">
Nie udało się umieścić obiektu w żądanej lokalizacji. Spróbuj ponownie.
@@ -3870,6 +4270,9 @@ Spróbuj zaznaczyć mniejszy obszar ziemi.
<notification name="CantTransfterMoneyRegionDisabled">
Transfery pieniędzy do obiektów są obecnie wyłączone w tym regionie.
</notification>
+ <notification name="DroppedMoneyTransferRequest">
+ Nie udało się dokonać płatności ze względu na obciążenie systemu.
+ </notification>
<notification name="CantPayNoAgent">
Nie udało się ustalić, komu zapłacić.
</notification>
@@ -3883,12 +4286,16 @@ Spróbuj zaznaczyć mniejszy obszar ziemi.
Błąd wewnętrzny uniemożliwił poprawną aktualizację danych przeglądarki. Stan konta L$ lub posiadane działki wyświetlane w przeglądarce mogą nie odzwierciedlać faktycznego stanu posiadania na serwerach.
</notification>
<notification name="LargePrimAgentIntersect">
- Nie można utworzyć wielkich prim, które nachodzą na innych rezydentów. Spróbuj jeszcze raz, gdy przesuną się oni.
+ Nie można tworzyć wielkich prim, które nachodzą na innych rezydentów. Spróbuj jeszcze raz, gdy się oni przesuną.
</notification>
<notification name="PreferenceChatClearLog">
Ta opcja usunie dzienniki poprzednich rozmów i wszelkie kopie zapasowe tego pliku.
<usetemplate ignoretext="Potwierdź, zanim usunę dzienniki poprzednich rozmów." name="okcancelignore" notext="Anuluj" />
</notification>
+ <notification name="PreferenceControlsDefaults">
+ Czy chcesz przywrócić domyślne ustawienia klawiszy sterowania?
+ <usetemplate canceltext="Anuluj" name="yesnocancelbuttons" notext="Obecny tryb" yestext="Wszystkie tryby" />
+ </notification>
<notification name="PreferenceChatDeleteTranscripts">
Ta opcja usunie logi wszystkich poprzednich rozmów. Nie będzie to miało wpływu na listę rozmów odbytych w przeszłości. Wszystkie pliki z przyrostkami .txt oraz txt.backup w folderze [FOLDER] zostaną usunięte.
<usetemplate ignoretext="Potwierdź, zanim usunę logi rozmów." name="okcancelignore" notext="Anuluj" />
@@ -3903,4 +4310,113 @@ Spróbuj zaznaczyć mniejszy obszar ziemi.
<notification name="ChatHistoryIsBusyAlert">
Plik historii czatu jest w tej chwili przetwarzany przez poprzednią operację. Spróbuj ponownie za kilka minut lub wybierz czat innej osoby.
</notification>
+ <notification name="AddPaymentMethod">
+ Na następnej stronie wybierz kwotę L$
+i kliknij przycisk składania zamówienia.
+Będziesz mógł/a dodać metodę płatności w kasie.
+ <form name="form">
+ <button name="Continue" text="Kontynuuj" />
+ <button name="Cancel" text="Anuluj" />
+ </form>
+ </notification>
+ <notification name="FailedToFindSettings">
+ Nie można załadować ustawień dla [NAME] z bazy danych.
+ </notification>
+ <notification name="FailedToLoadSettingsApply">
+ Nie można zastosować tych ustawień do otoczenia.
+ </notification>
+ <notification name="FailedToBuildSettingsDay">
+ Nie można zastosować tych ustawień do otoczenia.
+ </notification>
+ <notification name="NoEnvironmentSettings">
+ Ten region nie obsługuje ustawień otoczenia.
+ </notification>
+ <notification label="Zapisz otoczenie" name="SaveSettingAs">
+ Zapisz bieżące ustawienia otoczenia jako:
+ <form name="form">
+ <input name="message">
+ [DESC] (nowe)
+ </input>
+ <button name="Cancel" text="Anuluj" />
+ </form>
+ </notification>
+ <notification name="WLImportFail">
+ Nie można zaimportować starszych ustawień Windlight [NAME] z
+[FILE].
+
+[REASONS]
+ </notification>
+ <notification name="WLParcelApplyFail">
+ Nie można ustawić otoczenia dla tej działki.
+Odwiedź lub wybierz działkę, którą masz prawo zmodyfikować.
+ </notification>
+ <notification name="SettingsUnsuported">
+ Otoczenia nie są obsługiwane w tym regionie.
+Przejdź do regionu z włączonymi otoczeniami i spróbuj ponownie.
+ </notification>
+ <notification name="SettingsConfirmLoss">
+ Za chwilę stracisz zmiany wprowadzone dla [TYPE] o nazwie "[NAME]".
+Czy na pewno chcesz kontynuować?
+ <usetemplate ignoretext="Czy na pewno chcesz stracić zmiany?" name="okcancelignore" notext="Nie" yestext="Tak" />
+ </notification>
+ <notification name="SettingsConfirmReset">
+ Za chwilę usuniesz wszystkie zastosowane otoczenia.
+Czy na pewno chcesz kontynuować?
+ <usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak" />
+ </notification>
+ <notification name="PersonalSettingsConfirmReset">
+ Za chwilę usuniesz wszystkie zastosowane ustawienia własnego oświetlenia.
+Czy na pewno chcesz kontynuować?
+ <usetemplate name="okcancelbuttons" notext="Nie" yestext="Tak" />
+ </notification>
+ <notification name="SettingsMakeNoTrans">
+ Zamierzasz zaimportować nietransferowalne otoczenia do tego cyklu dnia. Kontynuowanie spowoduje, że edytowane otoczenia również staną się nietransferowalne.
+
+Tej zmiany nie można cofnąć.
+
+Czy na pewno chcesz kontynuować?
+ <usetemplate ignoretext="Czy na pewno chcesz, aby otoczenia były nietransferowalne?" name="okcancelignore" notext="Nie" yestext="Tak" />
+ </notification>
+ <notification name="NoEditFromLibrary">
+ Nie możesz edytować otoczeń bezpośrednio w bibliotece.
+Skopiuj do własnej szafy i spróbuj ponownie.
+ </notification>
+ <notification name="EnvironmentApplyFailed">
+ Napotkaliśmy problem z tymi ustawieniami otoczenia. Nie można ich teraz zapisać ani zastosować.
+ </notification>
+ <notification name="TrackLoadFailed">
+ Nie można załadować ścieżki do [TRACK].
+ </notification>
+ <notification name="TrackLoadMismatch">
+ Nie można załadować ścieżki z [TRACK1] do [TRACK2].
+ </notification>
+ <notification name="CompressionTestResults">
+Wynik testu kompresji pliku dla gzip na poziomie 6 z [FILE] o rozmiarze [SIZE] KB:
+Pakowanie: [PACK_TIME]s [PSIZE]KB
+Rozpakowywanie: [UNPACK_TIME]s [USIZE]KB
+ </notification>
+ <notification label="Monituj o token usługi MFA" name="PromptMFAToken">
+ [MESSAGE]
+ <form name="form">
+ <button name="continue" text="Kontynuuj" />
+ <button name="cancel" text="Anuluj" />
+ </form>
+ </notification>
+ <notification label="Utwórz podfolder" name="CreateSubfolder">
+ Nazwij nowy folder:
+ <form name="form">
+ <button name="Cancel" text="Anuluj" />
+ </form>
+ </notification>
+ <notification name="SameFolderRequired">
+ Wybrane elementy muszą znajdować się w tym samym folderze.
+ </notification>
+ <notification name="RiggedMeshAttachedToHUD">
+ Dodatek o nazwie "[NAME]" dołączony do HUD "[POINT]" zawiera riggowany mesz.
+
+Riggowane mesze są przeznaczone do dodawania do samego awatara. Ani ty, ani nikt inny nie zobaczy tego obiektu.
+
+Jeśli chcesz zobaczyć ten obiekt, to usuń go i ponownie dołącz do punktu doczepienia na awatarze.
+ <usetemplate ignoretext="Ostrzegaj, gdy dodatek z riggowanym meszem jest dołączany do punktu HUD" name="okignore" />
+ </notification>
</notifications>
diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml
index 90d2d86c02..26ec6cc9dc 100644
--- a/indra/newview/skins/default/xui/pl/strings.xml
+++ b/indra/newview/skins/default/xui/pl/strings.xml
@@ -18,8 +18,11 @@
<string name="StartupRequireDriverUpdate">
Nie można zainicjować grafiki. Zaktualizuj sterowniki!
</string>
+ <string name="BuildConfig">
+ Konfiguracja budowania: [BUILD_CONFIG]
+ </string>
<string name="AboutPosition">
-Położenie [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] w [REGION] zlokalizowanym w &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
+Położenie [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] w [REGION] zlokalizowanym w &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt;
SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
(koordynaty globalne [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
[SERVER_VERSION]
@@ -28,28 +31,53 @@ SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
<string name="AboutSystem">
Procesor (CPU): [CPU]
Pamięć (Memory): [MEMORY_MB] MB
-Wersja OS (OS Version): [OS_VERSION]
-Sprzedawca karty graficznej (Graphics Card Vendor): [GRAPHICS_CARD_VENDOR]
+System operacyjny (OS Version): [OS_VERSION]
+Dostawca karty graficznej (Graphics Card Vendor): [GRAPHICS_CARD_VENDOR]
Karta graficzna (Graphics Card): [GRAPHICS_CARD]
</string>
<string name="AboutDriver">
- Sterownik karty graficznej Windows (Driver Version): [GRAPHICS_DRIVER_VERSION]
+ Sterownik karty graficznej (Driver Version): [GRAPHICS_DRIVER_VERSION]
+ </string>
+ <string name="AboutOGL">
+ Wersja OpenGL: [OPENGL_VERSION]
+ </string>
+ <string name="AboutSettings">
+Rozmiar okna (Window size): [WINDOW_WIDTH]x[WINDOW_HEIGHT]
+Dostrojenie rozmiaru czcionki: [FONT_SIZE_ADJUSTMENT]pt
+Skalowanie interfejsu (UI Scaling): [UI_SCALE]
+Pole widzenia (Draw Distance): [DRAW_DISTANCE]m
+Przepustowość (Bandwidth): [NET_BANDWITH]kbit/s
+Mnożnik poziomu detali (LOD Factor): [LOD_FACTOR]
+Jakość wyświetlania (Render quality): [RENDER_QUALITY]
+Zaawansowane oświetlenie (Advanced Lighting Model): [GPU_SHADERS]
+Pamięć tekstur (Texture memory): [TEXTURE_MEMORY]MB
+Pamięć podręczna dysku (Disk cache): [DISK_CACHE_INFO]
+ </string>
+ <string name="AboutOSXHiDPI">
+ Tryb obrazu HiDPI: [HIDPI]
</string>
<string name="AboutLibs">
-Wersja OpenGL: [OPENGL_VERSION]
-
Wersja dekodera J2C: [J2C_VERSION]
Wersja sterownika dźwięku (Audio Driver): [AUDIO_DRIVER_VERSION]
-Wersja CEF: [LIBCEF_VERSION]
+[LIBCEF_VERSION]
Wersja LibVLC: [LIBVLC_VERSION]
Wersja serwera głosu (Voice Server): [VOICE_VERSION]
</string>
<string name="AboutTraffic">
Pakiety utracone: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
</string>
+ <string name="AboutTime">
+ [day, datetime, slt] [month, datetime, slt] [year, datetime, slt], [hour24, datetime, slt]:[min, datetime, slt]:[second, datetime, slt] SLT
+ </string>
+ <string name="LocalTime">
+ [day, datetime, local] [month, datetime, local] [year, datetime, local], [hour24, datetime, local]:[min, datetime, local]:[second, datetime, local]
+ </string>
<string name="ErrorFetchingServerReleaseNotesURL">
Błąd podczas pobierania informacji o wydaniu.
</string>
+ <string name="BuildConfiguration">
+ Konfiguracja budowania
+ </string>
<string name="ProgressRestoring">
Przywracanie...
</string>
@@ -123,22 +151,28 @@ Wersja serwera głosu (Voice Server): [VOICE_VERSION]
Pobieranie ubrania...
</string>
<string name="InvalidCertificate">
- Serwer zwrócił nieważny lub zniekształcony certyfikat. Proszę skontaktuj się z administratorem siatki.
+ Serwer zwrócił nieważny lub zniekształcony certyfikat. Proszę skontaktuj się z administratorem świata.
</string>
<string name="CertInvalidHostname">
- Nazwa hosta jest nieważna, proszę sprawdź SLURL lub nazwę hosta siatki.
+ Nazwa hosta jest nieważna, proszę sprawdź SLURL lub nazwę hosta świata.
</string>
<string name="CertExpired">
- Termin ważności certyfikatu zwróconego przez siatkę minął. Proszę sprawdzić swój zegar systemowy lub skontaktować się z administratorem siatki.
+ Termin ważności certyfikatu zwróconego przez świat minął. Proszę sprawdzić swój zegar systemowy lub skontaktować się z administratorem świata.
</string>
<string name="CertKeyUsage">
- Certyfikat zwrócony przez serwer nie może być użyty dla SSL. Proszę skontaktuj się z administratorem siatki.
+ Certyfikat zwrócony przez serwer nie może być użyty dla SSL. Proszę skontaktuj się z administratorem świata.
</string>
<string name="CertBasicConstraints">
- Zbyt wiele certyfikatów w łańcuchu certyfikatów serwera. Proszę skontaktować się z administratorem siatki.
+ Zbyt wiele certyfikatów w łańcuchu certyfikatów serwera. Proszę skontaktować się z administratorem świata.
+ </string>
+ <string name="CertInvalid">
+ Nie udało się załadować certyfikatu. Skontaktuj się ze swoim administratorem świata.
</string>
<string name="CertInvalidSignature">
- Podpis certyfikatu zwrócony przez siatkę nie mógł zostać zweryfikowany. Proszę skontaktować się z administratorem siatki.
+ Podpis certyfikatu zwrócony przez świat nie mógł zostać zweryfikowany. Proszę skontaktować się z administratorem świata.
+ </string>
+ <string name="CertAllocationFailure">
+ Nie udało się przydzielić pamięci openssl dla certyfikatu.
</string>
<string name="LoginFailedNoNetwork">
Błąd sieci: Brak połączenia z siecią, sprawdź status swojego połączenia internetowego.
@@ -149,6 +183,12 @@ Wersja serwera głosu (Voice Server): [VOICE_VERSION]
<string name="Quit">
Wyłącz
</string>
+ <string name="AgniGridLabel">
+ Second Life: świat główny (Agni)
+ </string>
+ <string name="AditiGridLabel">
+ Second Life Beta: świat testowy (Aditi)
+ </string>
<string name="LoginFailedViewerNotPermitted">
Przeglądarka używana przez Ciebie nie ma już dostępu do Second Life. Proszę przejść na poniższą stronę i pobrać nową:
http://secondlife.com/download
@@ -156,6 +196,10 @@ http://secondlife.com/download
Więcej informacji w naszym FAQ:
http://secondlife.com/viewer-access-faq
</string>
+ <string name="LoginFailed">
+ Logowanie nieudane.
+Jeśli uważasz, że to błąd, skontaktuj się z support@secondlife.com.
+ </string>
<string name="LoginIntermediateOptionalUpdateAvailable">
Opcjonalna aktualizacja jest dostępna: [VERSION].
</string>
@@ -170,6 +214,7 @@ http://secondlife.com/viewer-access-faq
Upewnij się, że wpisano poprawnie:
* Login (np. bobsmith12 czy steller.sunshine)
* Hasło
+ * Token weryfikacji dwuetapowej (gdy włączona)
Sprawdź też, czy klawisz Caps Lock nie jest wciśnięty.
</string>
<string name="LoginFailedPasswordChanged">
@@ -199,14 +244,17 @@ Osoby posiadające darmowe konta nie mogą się teraz zalogować, aby ludzie pos
Jeśli myślisz, że to błąd skontaktuj się z
support@secondlife.com
</string>
+ <string name="PacificTime">
+ czas pacyficzny
+ </string>
<string name="LoginFailedAcountSuspended">
Twoje konto jest niedostępne do
-[TIME] czasu pacyficznego.
+[TIME].
+Jeśli myślisz, że to błąd skontaktuj się z support@secondlife.com
</string>
<string name="LoginFailedAccountDisabled">
Nie jesteśmy w stanie na tą chwilę wykonać Twojego żądania.
-Aby uzyskać pomoc skontaktuj się ze wsparciem: http://secondlife.com/support
-Jeśli nie możesz zmienić swojego hasła zadzwoń pod numer (866) 476-9763.
+Aby uzyskać pomoc skontaktuj się ze wsparciem: http://support.secondlife.com
</string>
<string name="LoginFailedTransformError">
Podczas logowania wykryto niespójność danych.
@@ -215,7 +263,7 @@ Skontaktuj się z nami: support@secondlife.com
<string name="LoginFailedAccountMaintenance">
Twoje konto jest w trakcie drobnych konserwacji.
Nie będzie ono dostępne do
-[TIME] czasu pacyficznego.
+[TIME].
Jeśli myślisz, że to błąd skontaktuj się z support@secondlife.com
</string>
<string name="LoginFailedPendingLogoutFault">
@@ -223,8 +271,7 @@ Jeśli myślisz, że to błąd skontaktuj się z support@secondlife.com
</string>
<string name="LoginFailedPendingLogout">
System w tej chwili Cię wylogowywuje.
-Twoje konto będzie niedostępne do
-[TIME] czasu pacyficznego.
+Poczekaj chwilę, zanim spróbujesz zalogować się ponownie.
</string>
<string name="LoginFailedUnableToCreateSession">
Nie można utworzyć poprawnej sesji.
@@ -282,6 +329,10 @@ Spróbuj zalogować się ponownie za minutę.
System rozpoczął wylogowywanie Twojej ostatniej sesji.
Spróbuj zalogować się ponownie za minutę.
</string>
+ <string name="LoginFailedAuthenticationMFARequired">
+ Wprowadź nowy token z aplikacji do uwierzytelniania wieloskładnikowego.
+Jeśli myślisz, że to błąd skontaktuj się z support@secondlife.com
+ </string>
<string name="AgentLostConnection">
Ten region może mieć problemy. Sprawdź podłączenie do Internetu.
</string>
@@ -303,60 +354,6 @@ Spróbuj zalogować się ponownie za minutę.
<string name="TestingDisconnect">
Testowanie rozłączenia klienta
</string>
- <string name="SocialFacebookConnecting">
- Łączenie z Facebookiem...
- </string>
- <string name="SocialFacebookPosting">
- Wysyłanie...
- </string>
- <string name="SocialFacebookDisconnecting">
- Rozłączanie z Facebookiem...
- </string>
- <string name="SocialFacebookErrorConnecting">
- Problem z łączeniem z Facebookiem
- </string>
- <string name="SocialFacebookErrorPosting">
- Problem z wysyłaniem na Facebooka
- </string>
- <string name="SocialFacebookErrorDisconnecting">
- Problem z rozłączaniem z Facebookiem
- </string>
- <string name="SocialFlickrConnecting">
- Łączenie z Flickr...
- </string>
- <string name="SocialFlickrPosting">
- Wysyłanie...
- </string>
- <string name="SocialFlickrDisconnecting">
- Rozłączanie z Flickr...
- </string>
- <string name="SocialFlickrErrorConnecting">
- Problem z łączeniem z Flickr
- </string>
- <string name="SocialFlickrErrorPosting">
- Problem z wysyłaniem na Flickr
- </string>
- <string name="SocialFlickrErrorDisconnecting">
- Problem z rozłączaniem z Flickr
- </string>
- <string name="SocialTwitterConnecting">
- Łączenie z Twitterem...
- </string>
- <string name="SocialTwitterPosting">
- Wysyłanie...
- </string>
- <string name="SocialTwitterDisconnecting">
- Rozłączanie z Twitterem...
- </string>
- <string name="SocialTwitterErrorConnecting">
- Problem z łączeniem z Twitterem
- </string>
- <string name="SocialTwitterErrorPosting">
- Problem z wysyłaniem na Twittera
- </string>
- <string name="SocialTwitterErrorDisconnecting">
- Problem z rozłączaniem z Twittera
- </string>
<string name="BlackAndWhite">
Czerń i biel
</string>
@@ -436,29 +433,56 @@ Spróbuj zalogować się ponownie za minutę.
Nie możesz założyć folderu, który zawiera więcej niż [AMOUNT] przedmiotów. Możesz zmienić ten limit w Zaawansowane &gt; Pokaż ustawienia debugowania &gt; WearFolderLimit.
</string>
<string name="TooltipPrice" value="[AMOUNT]L$: "/>
+ <string name="TooltipSLIcon">
+ Link do strony znajdującej się w oficjalnej domenie SecondLife.com lub LindenLab.com.
+ </string>
<string name="TooltipOutboxDragToWorld">
- Nie możesz rezzować obiektów w skrzynce nadawczej kupca
+ Nie możesz rezzować obiektów z folderu rzeczy na Marketplace
+ </string>
+ <string name="TooltipOutboxWorn">
+ Nie możesz umieszczać na Marketplace przedmiotów, które masz na sobie założone
+ </string>
+ <string name="TooltipOutboxFolderLevels">
+ Głębokość zagnieżdżonych folderów przekracza [AMOUNT]. Zmniejsz ilość zagdzieżdżeń; Spakuj przedmioty w pudełka, jeśli to pomoże.
+ </string>
+ <string name="TooltipOutboxTooManyFolders">
+ Ilość podfolderów przekracza [AMOUNT]. Zmniejsz ilość folderów; Spakuj przedmioty w pudełka, jeśli to pomoże.
+ </string>
+ <string name="TooltipOutboxTooManyObjects">
+ Ilość rzeczy przekracza [AMOUNT]. Jeśli chcesz sprzedać więcej, niż [AMOUNT] rzeczy jako jedną pozycję, to musisz je spakować w pudełka.
+ </string>
+ <string name="TooltipOutboxTooManyStockItems">
+ Ilość przedmiotów w folderze Magazynowym przekracza [AMOUNT].
+ </string>
+ <string name="TooltipOutboxCannotDropOnRoot">
+ Możesz przenosić foldery lub przedmioty wyłącznie do kart WSZYSTKO lub NIEPRZYPISANE. Wybierz teraz jedną z tych kart i spróbuj ponownie.
</string>
<string name="TooltipOutboxNoTransfer">
- Jeden lub kilka z tych obiektów nie może zostać sprzedany / przetransferowany.
+ Jeden lub kilka z tych obiektów nie może zostać sprzedany / przetransferowany
</string>
<string name="TooltipOutboxNotInInventory">
- Twoja skrzynka nadawcza kupca akceptuje tylko przedmioty bezpośrednio z Twojej Szafy.
+ Marketplace akceptuje tylko przedmioty bezpośrednio z Twojej Szafy.
</string>
- <string name="TooltipOutboxWorn">
- Nie możesz umieszczać w skrzynce nadawczej kupca przedmiotów, które masz na sobie założone
+ <string name="TooltipOutboxLinked">
+ Nie możesz sprzedać zlinkowanych folderów lub przedmiotów na Marketplace
</string>
<string name="TooltipOutboxCallingCard">
- Nie możesz umieszczać wizytówek w skrzynce nadawczej kupca
+ Nie możesz umieszczać wizytówek na Marketplace
</string>
- <string name="TooltipOutboxFolderLevels">
- Głębokość zagnieżdżonych folderów przekracza 3
+ <string name="TooltipOutboxDragActive">
+ Nie można przenieść wylistowanej rzeczy
</string>
- <string name="TooltipOutboxTooManyFolders">
- Ilość podfolderów w folderze najwyższego poziomu przekracza 20
+ <string name="TooltipOutboxCannotMoveRoot">
+ Nie możesz przenieść folderu głównego rzeczy na Marketplace
</string>
- <string name="TooltipOutboxTooManyObjects">
- Ilość pozycji w folderze najwyższego poziomu przekracza 200
+ <string name="TooltipOutboxMixedStock">
+ Wszystkie rzeczy w folderze Magazynowym muszą mieć ten sam typ i zezwolenia
+ </string>
+ <string name="TooltipOutfitNotInInventory">
+ W "Strojach" możesz umieszczać tylko przedmioty lub stroje z własnej Szafy
+ </string>
+ <string name="TooltipCantCreateOutfit">
+ Jeden lub więcej przedmiotów nie może być użyty w "Strojach"
</string>
<string name="TooltipDragOntoOwnChild">
Nie możesz przenieść folderu do jego obiektu podrzędnego
@@ -521,6 +545,9 @@ Spróbuj zalogować się ponownie za minutę.
Kliknij aby uruchomić komendę secondlife://
</string>
<string name="CurrentURL" value=" Obecny URL: [CurrentURL]"/>
+ <string name="TooltipEmail">
+ Kliknij aby utworzyć wiadomość e-mail
+ </string>
<string name="SLurlLabelTeleport">
Teleportuj do
</string>
@@ -569,6 +596,15 @@ Spróbuj zalogować się ponownie za minutę.
<string name="BUTTON_HELP">
Pokaż Pomoc
</string>
+ <string name="TooltipNotecardNotAllowedTypeDrop">
+Przedmioty tego typu nie mogą być dołączane
+do notek z tego regionu.
+ </string>
+ <string name="TooltipNotecardOwnerRestrictedDrop">
+Tylko przedmioty z nieograniczonymi
+uprawnieniami 'następnego właściciela'
+mogą być dołączane do notek.
+ </string>
<string name="Searching">
Wyszukiwanie...
</string>
@@ -588,7 +624,7 @@ Spróbuj zalogować się ponownie za minutę.
(brak danych)
</string>
<string name="AvatarNameWaiting">
- (ładowanie)
+ (Wczytywanie...)
</string>
<string name="AvatarNameMultiple">
(kilka)
@@ -629,6 +665,31 @@ Spróbuj zalogować się ponownie za minutę.
<string name="AssetErrorUnknownStatus">
Status nieznany
</string>
+ <string name="AssetUploadServerUnreacheble">
+ Usługa niedostępna.
+ </string>
+ <string name="AssetUploadServerDifficulties">
+ Serwer doświadcza nieoczekiwanych trudności.
+ </string>
+ <string name="AssetUploadServerUnavaliable">
+ Usługa niedostępna lub osiągnięto limit czasu.
+ </string>
+ <string name="AssetUploadRequestInvalid">
+ Błąd podczas przesyłania. Odwiedź
+http://secondlife.com/support aby uzyskać pomoc.
+ </string>
+ <string name="SettingValidationError">
+ Walidacja nie powiodła się - importowanie ustawień [NAME]
+ </string>
+ <string name="SettingImportFileError">
+ Nie można otworzyć pliku [FILE]
+ </string>
+ <string name="SettingParseFileError">
+ Nie można otworzyć pliku [FILE]
+ </string>
+ <string name="SettingTranslateError">
+ Nie można przetłumaczyć windlight [NAME]
+ </string>
<string name="texture">
tekstury
</string>
@@ -698,15 +759,18 @@ Spróbuj zalogować się ponownie za minutę.
<string name="favorite">
ulubione
</string>
+ <string name="symbolic link">
+ link
+ </string>
<string name="symbolic folder link">
link folderu
</string>
+ <string name="settings blob">
+ otoczenie
+ </string>
<string name="mesh">
mesz
</string>
- <string name="settings">
- ustawień
- </string>
<string name="AvatarEditingAppearance">
(Edycja wyglądu)
</string>
@@ -714,7 +778,7 @@ Spróbuj zalogować się ponownie za minutę.
Śpi
</string>
<string name="AvatarDoNotDisturb">
- Zajęty
+ Zajęty/a
</string>
<string name="AvatarMuted">
Wyciszony
@@ -957,10 +1021,10 @@ Spróbuj zalogować się ponownie za minutę.
Nie można znaleźć Podstawy lub Stawu.
</string>
<string name="NearbyChatTitle">
- Czat lokalny
+ Czat w pobliżu
</string>
<string name="NearbyChatLabel">
- (Czat lokalny)
+ (Czat w pobliżu)
</string>
<string name="whisper">
szepcze:
@@ -1034,15 +1098,18 @@ Spróbuj zalogować się ponownie za minutę.
<string name="ChangeYourDefaultAnimations">
Zmieniać Twoje domyślne animacje
</string>
+ <string name="ForceSitAvatar">
+ Zmuszać Twojego awatara do siadania
+ </string>
+ <string name="ChangeEnvSettings">
+ Zmieniać Twoje ustawienia otoczenia
+ </string>
<string name="NotConnected">
Brak połączenia
</string>
<string name="AgentNameSubst">
(Ty)
</string>
- <string name="JoinAnExperience">
- Rozpocznij przygodę
- </string>
<string name="SilentlyManageEstateAccess">
Wyciszyć powiadomienia o zmianach zezwoleń Majątku
</string>
@@ -1172,6 +1239,9 @@ Spróbuj zalogować się ponownie za minutę.
<string name="tattoo">
Tatuaż
</string>
+ <string name="universal">
+ Warstwa uniwersalna
+ </string>
<string name="physics">
Fizyka
</string>
@@ -1214,6 +1284,9 @@ Spróbuj zalogować się ponownie za minutę.
<string name="tattoo_not_worn">
Tatuaż nie jest założony
</string>
+ <string name="universal_not_worn">
+ Warstwa uniwersalna nie jest założona
+ </string>
<string name="physics_not_worn">
Fizyka nie jest założona
</string>
@@ -1260,13 +1333,16 @@ Spróbuj zalogować się ponownie za minutę.
Nowa spódnica
</string>
<string name="create_new_alpha">
- Nowe alpha
+ Nowa warstwa alpha
</string>
<string name="create_new_tattoo">
Nowy tatuaż
</string>
+ <string name="create_new_universal">
+ Nowa warstwa uniwersalna
+ </string>
<string name="create_new_physics">
- Nową fizyka
+ Nowa fizyka
</string>
<string name="create_new_invalid">
nieprawidłowy
@@ -1284,7 +1360,7 @@ Spróbuj zalogować się ponownie za minutę.
Ogłoszenia grupowe
</string>
<string name="GroupNotifySentBy">
- Wysłane przez
+ Wysłał/a
</string>
<string name="GroupNotifyAttached">
Załączone:
@@ -1325,6 +1401,9 @@ Spróbuj zalogować się ponownie za minutę.
<string name="BodyPartsRightLeg">
Prawa noga
</string>
+ <string name="BodyPartsEnhancedSkeleton">
+ Rozszerzony szkielet
+ </string>
<string name="GraphicsQualityLow">
Niska
</string>
@@ -1340,11 +1419,20 @@ Spróbuj zalogować się ponownie za minutę.
<string name="InventoryNoMatchingItems">
Nie udało Ci się znaleźć tego, czego szukasz? Spróbuj [secondlife:///app/search/all/[SEARCH_TERM] Wyszukiwarki].
</string>
+ <string name="InventoryNoMatchingRecentItems">
+ Nie udało Ci się znaleźć tego, czego szukasz? Spróbuj [secondlife:///app/inventory/filters Filtrowania].
+ </string>
<string name="PlacesNoMatchingItems">
- Nie udało Ci się znaleźć tego, czego szukasz? Spróbuj [secondlife:///app/search/places/[SEARCH_TERM] Wyszukiwarki].
+ Aby dodać miejsce do ulubionych, kliknij gwiazdkę po prawej stronie nazwy lokalizacji.
</string>
<string name="FavoritesNoMatchingItems">
- Przeciągnij landmark tutaj aby dodać go do swoich ulubionych.
+ Aby dodać miejsce do ulubionych, kliknij gwiazdkę po prawej stronie nazwy lokalizacji, a następnie zapisz landmark na pasku "Ulubione".
+ </string>
+ <string name="MarketplaceNoListing">
+ Nie masz jeszcze żadnych przedmiotów na Marketplace.
+ </string>
+ <string name="MarketplaceNoMatchingItems">
+ Niczego nie znaleziono. Sprawdź pisownię i spróbuj ponownie.
</string>
<string name="InventoryNoTexture">
Nie posiadasz kopii tej tekstury w swojej Szafie.
@@ -1352,6 +1440,15 @@ Spróbuj zalogować się ponownie za minutę.
<string name="InventoryInboxNoItems">
Przedmioty zakupione na Marketplace pojawią się tutaj. Możesz następnie przeciągnąć je do głównej części Szafy.
</string>
+ <string name="InventoryPlayAnimationTooltip">
+ Otwórz okno z opcjami odtwarzania.
+ </string>
+ <string name="InventoryPlayGestureTooltip">
+ Odtwarzaj wybrany gest w świecie.
+ </string>
+ <string name="InventoryPlaySoundTooltip">
+ Otwórz okno z opcjami odtwarzania.
+ </string>
<string name="InventoryOutboxNotMerchantTitle">
Każdy może sprzedawać przedmioty na Marketplace.
</string>
@@ -1376,29 +1473,110 @@ Spróbuj zalogować się ponownie za minutę.
<string name="InventoryOutboxError">
[[MARKETPLACE_CREATE_STORE_URL] Sklep na Marketplace] zwraca błędy.
</string>
+ <string name="InventoryMarketplaceError">
+ Wystapił błąd podczas otwierania listy rzeczy z Marketplace.
+Jeśli ciągle otrzymujesz tą wiadomość, to skontaktuj się z pomocą techniczną Second Life: http://support.secondlife.com
+ </string>
+ <string name="InventoryMarketplaceConnectionError">
+ Wystapił błąd podczas łączenia z Marketplace.
+Jeśli ciągle otrzymujesz tą wiadomość, to skontaktuj się z pomocą techniczną Second Life: http://support.secondlife.com
+ </string>
+ <string name="InventoryMarketplaceConnectionErrorReason">
+ Wystapił błąd podczas łączenia z Marketplace. Powód: [REASON]
+Jeśli ciągle otrzymujesz tą wiadomość, to skontaktuj się z pomocą techniczną Second Life: http://support.secondlife.com
+ </string>
+ <string name="InventoryMarketplaceListingsNoItemsTitle">
+ Twój folder rzeczy na Marketplace jest pusty.
+ </string>
+ <string name="InventoryMarketplaceListingsNoItems">
+ Przeciągnij foldery do tego obszaru, aby dodać je na listę sprzedaży w [[MARKETPLACE_DASHBOARD_URL] Marketplace].
+ </string>
+ <string name="InventoryItemsCount">
+ ( [ITEMS_COUNT] elementów )
+ </string>
+ <string name="Marketplace Validation Warning Stock">
+ folder Magazynowy musi być zawarty w folderze wersji
+ </string>
+ <string name="Marketplace Validation Error Mixed Stock">
+ : Błąd: wszystkie przedmioty w folderze Magazynowym muszą mieć ten sam typ i być niekopiowalne
+ </string>
+ <string name="Marketplace Validation Error Subfolder In Stock">
+ : Błąd: folder Magazynowy nie może zawierać podfolderów
+ </string>
+ <string name="Marketplace Validation Warning Empty">
+ : Uwaga: folder jest pusty
+ </string>
+ <string name="Marketplace Validation Warning Create Stock">
+ : Uwaga: tworzę folder Magazynowy
+ </string>
+ <string name="Marketplace Validation Warning Create Version">
+ : Uwaga: tworzę folder wersji
+ </string>
+ <string name="Marketplace Validation Warning Move">
+ : Uwaga: przenoszę przedmioty
+ </string>
+ <string name="Marketplace Validation Warning Delete">
+ : Uwaga: zawartość folderu przeniesiona do folderu Magazynowego, usuwam pusty katalog
+ </string>
+ <string name="Marketplace Validation Error Stock Item">
+ : Błąd: przedmioty bez praw kopiowania muszą się znajdować w folderze Magazynowym
+ </string>
+ <string name="Marketplace Validation Warning Unwrapped Item">
+ : Uwaga: przedmioty muszą się znajdować w folderze wersji
+ </string>
+ <string name="Marketplace Validation Error">
+ : Błąd:
+ </string>
+ <string name="Marketplace Validation Warning">
+ : Uwaga:
+ </string>
+ <string name="Marketplace Validation Error Empty Version">
+ : Uwaga: folder wersji musi zawierać przynajmniej jedną pozycję
+ </string>
+ <string name="Marketplace Validation Error Empty Stock">
+ : Uwaga: folder Magazynowy musi zawierać przynajmniej jedną pozycję
+ </string>
+ <string name="Marketplace Validation No Error">
+ Brak błędów lub ostrzeżeń
+ </string>
<string name="Marketplace Error None">
Brak błędów
</string>
+ <string name="Marketplace Error Prefix">
+ Błąd:
+ </string>
<string name="Marketplace Error Not Merchant">
- Błąd: Przed wysłaniem przedmiotów na Marketplace musisz zostać kupcem (darmowe).
+ Przed wysłaniem przedmiotów na Marketplace musisz zostać kupcem (darmowe).
</string>
- <string name="Marketplace Error Empty Folder">
- Błąd: Ten folder nie ma zawartości.
+ <string name="Marketplace Error Not Accepted">
+ Nie można przenieść tego przedmiotu.
</string>
- <string name="Marketplace Error Unassociated Products">
- Błąd: Ta pozycja nie może zostać załadowana, ponieważ Twoje konto kupca ma zbyt wiele nieprzypisanych przedmiotów. Aby naprawić ten błąd zaloguj się na stronę Marketplace i zmniejsz ilość nieprzypisanych (unassociated) przedmiotów.
+ <string name="Marketplace Error Unsellable Item">
+ Ta pozycja nie może być sprzedana na Marketplace.
</string>
- <string name="Marketplace Error Object Limit">
- Błąd: Ta pozycja zawiera zbyt wiele elementów. Umieść przedmioty razem w pudełkach, aby zmniejszyć ich całkowitą liczbę do mniej niż 200.
+ <string name="MarketplaceNoID">
+ Brak Mkt ID
</string>
- <string name="Marketplace Error Folder Depth">
- Błąd: Ta pozycja zawiera zbyt wiele zagnieżdżonych folderów. Zreorganizuj wszystko tak, aby były obecne maksymalnie 3 poziomy zagnieżdżonych folderów.
+ <string name="MarketplaceLive">
+ na liście
</string>
- <string name="Marketplace Error Unsellable Item">
- Błąd: Ta pozycja nie może być sprzedana na Marketplace.
+ <string name="MarketplaceActive">
+ aktywne
+ </string>
+ <string name="MarketplaceMax">
+ maks
+ </string>
+ <string name="MarketplaceStock">
+ magazyn
</string>
- <string name="Marketplace Error Internal Import">
- Błąd: Wystąpił problem z tą pozycją. Spróbuj ponownie później.
+ <string name="MarketplaceNoStock">
+ brak w Magazynie
+ </string>
+ <string name="MarketplaceUpdating">
+ aktualizacja...
+ </string>
+ <string name="UploadFeeInfo">
+ Opłata zależy od Twojego poziomu członkostwa. Wyższe poziomy to niższe opłaty. [https://secondlife.com/my/account/membership.php? Więcej]
</string>
<string name="Open landmarks">
Otwórz landmarki
@@ -1445,6 +1623,7 @@ Spróbuj zalogować się ponownie za minutę.
<string name="Scripts" value=" Skrypty,"/>
<string name="Sounds" value=" Dźwięki,"/>
<string name="Textures" value=" Tekstury,"/>
+ <string name="Settings" value=" Otoczenia," />
<string name="Snapshots" value=" Zdjęcia,"/>
<string name="No Filters" value="Nie "/>
<string name="Since Logoff" value=" - od wylogowania"/>
@@ -1614,7 +1793,7 @@ Spróbuj zalogować się ponownie za minutę.
Usta
</string>
<string name="Chin">
- Szczęka
+ Podbródek
</string>
<string name="Left Ear">
Lewe ucho
@@ -1676,6 +1855,51 @@ Spróbuj zalogować się ponownie za minutę.
<string name="Avatar Center">
Środek awatara
</string>
+ <string name="Left Ring Finger">
+ Lewy palec serdeczny
+ </string>
+ <string name="Right Ring Finger">
+ Prawy palec serdeczny
+ </string>
+ <string name="Tail Base">
+ Podstawa ogona
+ </string>
+ <string name="Tail Tip">
+ Koniec ogona
+ </string>
+ <string name="Left Wing">
+ Lewe skrzydło
+ </string>
+ <string name="Right Wing">
+ Prawe skrzydło
+ </string>
+ <string name="Jaw">
+ Szczęka
+ </string>
+ <string name="Alt Left Ear">
+ Lewe ucho 2
+ </string>
+ <string name="Alt Right Ear">
+ Prawe ucho 2
+ </string>
+ <string name="Alt Left Eye">
+ Lewe oko 2
+ </string>
+ <string name="Alt Right Eye">
+ Prawe oko 2
+ </string>
+ <string name="Tongue">
+ Język
+ </string>
+ <string name="Groin">
+ Krocze
+ </string>
+ <string name="Left Hind Foot">
+ Lewa tylna stopa
+ </string>
+ <string name="Right Hind Foot">
+ Prawa tylna stopa
+ </string>
<string name="Invalid Attachment">
Nieprawidłowy punkt dodatku
</string>
@@ -1706,6 +1930,42 @@ Spróbuj zalogować się ponownie za minutę.
<string name="TodayOld">
Dołączył dzisiaj
</string>
+ <string name="av_render_everyone_now">
+ Wszyscy mogą Cię obecnie widzieć.
+ </string>
+ <string name="av_render_not_everyone">
+ Możesz nie być widziany/a przez niektóre osoby wokół Ciebie.
+ </string>
+ <string name="av_render_over_half">
+ Możesz nie być widziany/a przez ponad połowę osób wokół Ciebie.
+ </string>
+ <string name="av_render_most_of">
+ Możesz nie być widziany/a przez większość osób wokół Ciebie.
+ </string>
+ <string name="av_render_anyone">
+ Wszystkie osoby znajdujące się wokół Ciebie nie mogą Cię widzieć.
+ </string>
+ <string name="hud_description_total">
+ Twój HUD
+ </string>
+ <string name="hud_name_with_joint">
+ [OBJ_NAME] (założone na [JNT_NAME])
+ </string>
+ <string name="hud_render_memory_warning">
+ [HUD_DETAILS] używa dużo pamięci tekstur
+ </string>
+ <string name="hud_render_cost_warning">
+ [HUD_DETAILS] zawiera dużo obiektów i tekstur, jakie są ciężkie w renderowaniu
+ </string>
+ <string name="hud_render_heavy_textures_warning">
+ [HUD_DETAILS] zawiera dużo tekstur w wielkich rozmiarach
+ </string>
+ <string name="hud_render_cramped_warning">
+ [HUD_DETAILS] zawiera zbyt dużo obiektów
+ </string>
+ <string name="hud_render_textures_warning">
+ [HUD_DETAILS] zawiera zbyt dużo tekstur
+ </string>
<string name="AgeYearsA">
[COUNT] rok
</string>
@@ -1764,10 +2024,10 @@ Spróbuj zalogować się ponownie za minutę.
Pracownik Linden Lab
</string>
<string name="PaymentInfoUsed">
- Płatności: Dane użyte
+ Płatności: Dane w użyciu
</string>
<string name="PaymentInfoOnFile">
- Płatności: Dane znane
+ Płatności: Dane przypisane
</string>
<string name="NoPaymentInfoOnFile">
Płatności: Dane nieznane
@@ -1823,6 +2083,9 @@ Spróbuj zalogować się ponownie za minutę.
<string name="CompileQueueUnknownFailure">
Nieznany błąd podczas pobierania
</string>
+ <string name="CompileNoExperiencePerm">
+ Pomijanie skryptu [SCRIPT] z Przygodą [EXPERIENCE].
+ </string>
<string name="CompileQueueTitle">
Postęp rekompilacji
</string>
@@ -1857,11 +2120,14 @@ Spróbuj zalogować się ponownie za minutę.
Zapisywanie zakończone.
</string>
<string name="UploadFailed">
- Ładowanie nieudane:
+ Przesyłanie nieudane:
</string>
<string name="ObjectOutOfRange">
Skrypt (obiekt poza zasięgiem)
</string>
+ <string name="ScriptWasDeleted">
+ Skrypt (usunięty z zawartości obiektu)
+ </string>
<string name="GodToolsObjectOwnedBy">
Obiekt [OBJECT] należący do [OWNER]
</string>
@@ -1894,6 +2160,9 @@ Spróbuj zalogować się ponownie za minutę.
<string name="NoGroupDataFound">
Brak informacji na temat grupy
</string>
+ <string name="AlreadyInGroup">
+ Jesteś już w tej grupie
+ </string>
<string name="IMParentEstate">
majątek rodziców
</string>
@@ -1916,22 +2185,34 @@ Spróbuj zalogować się ponownie za minutę.
wszystkie majątki, które nadzorujesz dla [OWNER]
</string>
<string name="RegionInfoAllowedResidents">
- Dozwoleni Rezydenci: ([ALLOWEDAGENTS], maks. [MAXACCESS])
+ Zawsze dozwoleni: ([ALLOWEDAGENTS], maks. [MAXACCESS])
</string>
<string name="RegionInfoAllowedGroups">
- Dozwolone Grupy: ([ALLOWEDGROUPS], maks. [MAXACCESS])
+ Zawsze dozwolone grupy: ([ALLOWEDGROUPS], maks. [MAXACCESS])
</string>
<string name="RegionInfoEstateManagers">
Zarządcy Majątku: ([ESTATEMANAGERS], maks. [MAXMANAGERS])
</string>
<string name="RegionInfoBannedResidents">
- Zbanowani Rezydenci: ([BANNEDAGENTS], maks. [MAXBANNED])
+ Zawsze zbanowani: ([BANNEDAGENTS], maks. [MAXBANNED])
</string>
<string name="RegionInfoListTypeAllowedAgents">
- Dozwoleni Rezydenci
+ zawsze dozwoleni rezydenci
</string>
<string name="RegionInfoListTypeBannedAgents">
- Zbanowani Rezydenci
+ zawsze zbanowani rezydenci
+ </string>
+ <string name="RegionInfoAllEstates">
+ wszystkie majątki
+ </string>
+ <string name="RegionInfoManagedEstates">
+ zarządzane majątki
+ </string>
+ <string name="RegionInfoThisEstate">
+ ten majątek
+ </string>
+ <string name="AndNMore">
+ i [EXTRA_COUNT] więcej
</string>
<string name="ScriptLimitsParcelScriptMemory">
Pamięć skryptów działki
@@ -1976,7 +2257,7 @@ Spróbuj zalogować się ponownie za minutę.
Klatka piersiowa
</string>
<string name="ATTACH_HEAD">
- Głowa
+ Czaszka
</string>
<string name="ATTACH_LSHOULDER">
Lewe ramię
@@ -1997,7 +2278,7 @@ Spróbuj zalogować się ponownie za minutę.
Prawa stopa
</string>
<string name="ATTACH_BACK">
- Plecy
+ Kręgosłup
</string>
<string name="ATTACH_PELVIS">
Miednica
@@ -2027,13 +2308,13 @@ Spróbuj zalogować się ponownie za minutę.
Prawe górne ramię
</string>
<string name="ATTACH_RLARM">
- Prawe dolne ramię
+ Prawe przedramię
</string>
<string name="ATTACH_LUARM">
Lewe górne ramię
</string>
<string name="ATTACH_LLARM">
- Lewe dolne ramię
+ Lewe przedramię
</string>
<string name="ATTACH_RHIP">
Biodro prawe
@@ -2056,12 +2337,12 @@ Spróbuj zalogować się ponownie za minutę.
<string name="ATTACH_BELLY">
Brzuch
</string>
- <string name="ATTACH_RPEC">
- Prawa pierś
- </string>
- <string name="ATTACH_LPEC">
+ <string name="ATTACH_LEFT_PEC">
Lewa pierś
</string>
+ <string name="ATTACH_RIGHT_PEC">
+ Prawa pierś
+ </string>
<string name="ATTACH_HUD_CENTER_2">
HUD środek 2
</string>
@@ -2092,6 +2373,51 @@ Spróbuj zalogować się ponownie za minutę.
<string name="ATTACH_AVATAR_CENTER">
Środek awatara
</string>
+ <string name="ATTACH_LHAND_RING1">
+ Lewy palec serdeczny
+ </string>
+ <string name="ATTACH_RHAND_RING1">
+ Prawy palec serdeczny
+ </string>
+ <string name="ATTACH_TAIL_BASE">
+ Podstawa ogona
+ </string>
+ <string name="ATTACH_TAIL_TIP">
+ Koniec ogona
+ </string>
+ <string name="ATTACH_LWING">
+ Lewe skrzydło
+ </string>
+ <string name="ATTACH_RWING">
+ Prawe skrzydło
+ </string>
+ <string name="ATTACH_FACE_JAW">
+ Szczęka
+ </string>
+ <string name="ATTACH_FACE_LEAR">
+ Lewe ucho 2
+ </string>
+ <string name="ATTACH_FACE_REAR">
+ Prawe ucho 2
+ </string>
+ <string name="ATTACH_FACE_LEYE">
+ Lewe oko 2
+ </string>
+ <string name="ATTACH_FACE_REYE">
+ Prawe oko 2
+ </string>
+ <string name="ATTACH_FACE_TONGUE">
+ Język
+ </string>
+ <string name="ATTACH_GROIN">
+ Krocze
+ </string>
+ <string name="ATTACH_HIND_LFOOT">
+ Lewa tylna stopa
+ </string>
+ <string name="ATTACH_HIND_RFOOT">
+ Prawa tylna stopa
+ </string>
<string name="CursorPos">
Linia [LINE], Kolumna [COLUMN]
</string>
@@ -2129,7 +2455,7 @@ Spróbuj zalogować się ponownie za minutę.
Brak umowy dla tego majątku.
</string>
<string name="RegionNoCovenantOtherOwner">
- Brak umowy dla tego majątku. Działka w tym majątku została sprzedana przez właściciela majątku, a nie przez Linden Lab. Skontaktuj się z właścicielem majątku w celu uzyskania szczegółów sprzedaży.
+ Brak umowy dla tego majątku. Działka w tym majątku została sprzedana przez właściciela majątku. Skontaktuj się z właścicielem majątku w celu uzyskania szczegółów sprzedaży.
</string>
<string name="covenant_last_modified" value="Ostatnia modyfikacja: "/>
<string name="none_text" value=" (brak) "/>
@@ -2146,6 +2472,27 @@ Spróbuj zalogować się ponownie za minutę.
<string name="RegionSettings">
Ustawienia regionu
</string>
+ <string name="NoEnvironmentSettings">
+ Ten region nie obsługuje ustawień otoczenia.
+ </string>
+ <string name="EnvironmentSun">
+ Słońce
+ </string>
+ <string name="EnvironmentMoon">
+ Księżyc
+ </string>
+ <string name="EnvironmentBloom">
+ Blask
+ </string>
+ <string name="EnvironmentCloudNoise">
+ Szum chmur
+ </string>
+ <string name="EnvironmentNormalMap">
+ Mapa normalnych
+ </string>
+ <string name="EnvironmentTransparent">
+ Przezroczyste
+ </string>
<string name="ClassifiedClicksTxt">
Kliknij: [TELEPORT] teleportuj, [MAP] mapa, [PROFILE] profil
</string>
@@ -2153,11 +2500,23 @@ Spróbuj zalogować się ponownie za minutę.
(zostanie zaktualizowane po publikacji)
</string>
<string name="NoPicksClassifiedsText">
- Nie dodałeś/aś nic do Ulubionych i Reklam. Kliknij na przycisk + poniżej, aby dodać miejsce do Ulubionych lub Reklam.
+ Nie dodano nic do Miejsc i Reklam. Kliknij na przycisk Nowe, aby utworzyć Miejsce lub Reklamę.
+ </string>
+ <string name="NoPicksText">
+ Nie dodano żadnych Miejsc. Kliknij na przycisk Nowe, aby utworzyć Miejsce.
+ </string>
+ <string name="NoClassifiedsText">
+ Nie dodano żadnych reklam. Kliknij na przycisk Nowa, aby utworzyć reklamę.
</string>
<string name="NoAvatarPicksClassifiedsText">
Brak ulubionych miejsc/reklam
</string>
+ <string name="NoAvatarPicksText">
+ Brak ulubionych miejsc
+ </string>
+ <string name="NoAvatarClassifiedsText">
+ Brak reklam
+ </string>
<string name="PicksClassifiedsLoadingText">
Ładowanie...
</string>
@@ -2228,14 +2587,11 @@ Spróbuj zalogować się ponownie za minutę.
Anuluj
</string>
<string name="UploadingCosts">
- Załadowanie [NAME] kosztuje [AMOUNT]L$
- </string>
- <string name="BuyingCosts">
- Cena zakupu tego wynosi [AMOUNT]L$
+ Przesyłanie [NAME] kosztuje [AMOUNT]L$
</string>
<string name="UnknownFileExtension">
Nieznane rozszerzenie pliku .%s
-Oczekiwane .wav, .tga, .bmp, .jpg, .jpeg, lub .bvh
+Oczekiwane .wav, .tga, .bmp, .jpg, .jpeg, lub .anim
</string>
<string name="MuteObject2">
Zablokuj
@@ -2327,6 +2683,9 @@ Oczekiwane .wav, .tga, .bmp, .jpg, .jpeg, lub .bvh
<string name="Linden Location">
Lokalizacja Lindenów
</string>
+ <string name="Adult">
+ Dla dorosłych
+ </string>
<string name="Arts&amp;Culture">
Sztuka i Kultura
</string>
@@ -2383,7 +2742,7 @@ Błąd:
<string name="MBUnableToAccessFile">
Aplikacja [APP_NAME] nie odnalazła poszukiwanego pliku.
-Może być to spowodowane aktywnością kilku kopii oprogramowania w tej samej chwili lub Twój system błędnie odczytuje proces zakończenia dla uruchomionych aplikacji.
+Może być to spowodowane aktywnością kilku kopii oprogramowania w tej samej chwili lub Twój system błędnie uważa, że plik jest otwarty / zablokowany.
Jeżeli nadal otrzymujesz ten komunikat, uruchom swój komputer ponownie.
Jeżeli problem nadal występuje, proponujemy całkowite odinstalowanie aplikacji [APP_NAME] oraz ponowną jej instalację.
</string>
@@ -2448,7 +2807,7 @@ Uruchomione w oknie.
Ustaw tryb koloru swojego wyświetlacza na 32-bity.
</string>
<string name="MBAlpha">
- Aplikacja [APP_NAME] nie może zostać uruchomiona, ponieważ nie jest możliwe dostanie się na kanał 8 bitowy alpha. Najczęściej jest to spowodowane błędami sterowników karty video.
+ Aplikacja [APP_NAME] nie może zostać uruchomiona, ponieważ nie może uzyskać dostępu do 8 bitowego kanału alpha. Najczęściej jest to spowodowane błędami sterowników karty video.
Upewnij się, że posiadasz najnowsze aktualizacje sterowników karty video.
Dodatkowo, sprawdź czy Twój monitor posiada poprawną konfigurację koloru (32-bity) w Panel Sterowania &gt; Ekran &gt; Ustawienia.
Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
@@ -2467,7 +2826,7 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
</string>
- <string name="5 O&apos;Clock Shadow">
+ <string name="5 O'Clock Shadow">
Cień na godzinie 5
</string>
<string name="All White">
@@ -3997,9 +4356,6 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="IM_to_label">
Do
</string>
- <string name="IM_moderator_label">
- (Moderator)
- </string>
<string name="Saved_message">
(Zapisano [LONG_TIMESTAMP])
</string>
@@ -4012,6 +4368,12 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
<string name="OfflineStatus">
niedostępny/a
</string>
+ <string name="not_online_msg">
+ Ta osoba jest niedostępna - wiadomość zostanie zapisana i dostarczona później.
+ </string>
+ <string name="not_online_inventory">
+ Ta osoba jest niedostępna - przedmiot został zapisany.
+ </string>
<string name="answered_call">
Twoja rozmowa głosowa została odebrana
</string>
@@ -4046,20 +4408,14 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Konferencja z [AGENT_NAME]
</string>
<string name="inventory_item_offered-im">
- Zaoferowano przedmiot
+ Zaoferowano przedmiot: '[ITEM_NAME]'
+ </string>
+ <string name="inventory_folder_offered-im">
+ Zaoferowano folder: '[ITEM_NAME]'
</string>
<string name="share_alert">
Przeciągaj tutaj rzeczy z Szafy
</string>
- <string name="facebook_post_success">
- Wysłałeś/aś post na Facebooka.
- </string>
- <string name="flickr_post_success">
- Wysłałeś/aś post na Flickr.
- </string>
- <string name="twitter_post_success">
- Wysłałeś/aś post na Twittera.
- </string>
<string name="no_session_message">
(Sesja IM wygasła)
</string>
@@ -4076,10 +4432,10 @@ Jeżeli nadal otrzymujesz ten komunikat, skontaktuj się z [SUPPORT_SITE].
Zablokowałeś/aś tego Rezydenta. Wysłanie wiadomości odblokuje go automatycznie.
</string>
<string name="generic">
- Błąd zapytania, proszę spróbować później
+ Zamknij i ponownie otwórz rozmowę - lub przeloguj się i spróbuj ponownie.
</string>
<string name="generic_request_error">
- Błąd. Spróbuj ponownie za kilka minut.
+ Zamknij i ponownie otwórz rozmowę - lub przeloguj się i spróbuj ponownie.
</string>
<string name="insufficient_perms_error">
Nie masz wystarczających uprawnień.
@@ -4131,6 +4487,9 @@ Jeśli nie pojawi się w ciągu kilku minut może to oznaczać, że została pom
<string name="unread_chat_multiple">
[SOURCES] powiedział/a coś nowego
</string>
+ <string name="teleport_preamble_compact_chat">
+ Jesteś teraz w
+ </string>
<string name="session_initialization_timed_out_error">
Inicjalizacja sesji wygasła
</string>
@@ -4140,12 +4499,18 @@ Jeśli nie pojawi się w ciągu kilku minut może to oznaczać, że została pom
<string name="paid_you_ldollars">
[NAME] zapłacił/a Tobie [AMOUNT]L$ [REASON].
</string>
+ <string name="paid_you_ldollars_gift">
+ [NAME] zapłacił/a Tobie [AMOUNT]L$: [REASON]
+ </string>
<string name="paid_you_ldollars_no_reason">
[NAME] zapłacił/a Tobie [AMOUNT]L$.
</string>
<string name="you_paid_ldollars">
Zapłacono [NAME] [AMOUNT]L$ [REASON].
</string>
+ <string name="you_paid_ldollars_gift">
+ Zapłacono [NAME] [AMOUNT]L$: [REASON]
+ </string>
<string name="you_paid_ldollars_no_info">
Zapłacono [AMOUNT]L$.
</string>
@@ -4158,6 +4523,9 @@ Jeśli nie pojawi się w ciągu kilku minut może to oznaczać, że została pom
<string name="you_paid_failure_ldollars">
Nie udało się zapłacić [NAME] [AMOUNT]L$ [REASON].
</string>
+ <string name="you_paid_failure_ldollars_gift">
+ Nie udało się zapłacić [NAME] [AMOUNT]L$: [REASON]
+ </string>
<string name="you_paid_failure_ldollars_no_info">
Nie udało się zapłacić [AMOUNT]L$.
</string>
@@ -4186,25 +4554,25 @@ Jeśli nie pojawi się w ciągu kilku minut może to oznaczać, że została pom
aby dołączyć do grupy
</string>
<string name="to upload">
- aby załadować
+ aby przesłać
</string>
<string name="to publish a classified ad">
publikacja reklamy
</string>
- <string name="giving">
- Dajesz [AMOUNT]L$
- </string>
<string name="uploading_costs">
- Ładowanie kosztuje [AMOUNT]L$
+ Przesyłanie kosztuje [AMOUNT]L$
</string>
<string name="this_costs">
To kosztuje [AMOUNT]L$
</string>
<string name="buying_selected_land">
- Kupno wybranej działki za [AMOUNT]L$
+ Działka kosztuje
</string>
<string name="this_object_costs">
- Ten obiekt kosztuje [AMOUNT]L$
+ Obiekt kosztuje
+ </string>
+ <string name="giving">
+ Chcesz dać
</string>
<string name="group_role_everyone">
Każdy
@@ -4219,7 +4587,7 @@ Jeśli nie pojawi się w ciągu kilku minut może to oznaczać, że została pom
Obecnie w SL
</string>
<string name="uploading_abuse_report">
- Ładowanie...
+ Przesyłanie...
Raport o Nadużyciu
</string>
@@ -4268,6 +4636,9 @@ Raport o Nadużyciu
<string name="New Tattoo">
Nowy tatuaż
</string>
+ <string name="New Universal">
+ Nowa warstwa uniwersalna
+ </string>
<string name="New Physics">
Nowa fizyka
</string>
@@ -4394,6 +4765,15 @@ Raport o Nadużyciu
<string name="Female - Wow">
Kobieta - Wow
</string>
+ <string name="New Day">
+ Nowy cykl dnia
+ </string>
+ <string name="New Water">
+ Nowa woda
+ </string>
+ <string name="New Sky">
+ Nowe niebo
+ </string>
<string name="AvatarBirthDateFormat">
[day,datetime,slt].[mthnum,datetime,slt].[year,datetime,slt]
</string>
@@ -4403,10 +4783,19 @@ Raport o Nadużyciu
<string name="texture_load_dimensions_error">
Nie można załadować obrazów większych niż [WIDTH]*[HEIGHT]
</string>
+ <string name="outfit_photo_load_dimensions_error">
+ Maks. rozmiar zdjęcia stroju to [WIDTH]*[HEIGHT]. Przeskaluj lub użyj innego.
+ </string>
+ <string name="outfit_photo_select_dimensions_error">
+ Maks. rozmiar zdjęcia stroju to [WIDTH]*[HEIGHT]. Użyj innej tekstury.
+ </string>
+ <string name="outfit_photo_verify_dimensions_error">
+ Nie można sprawdzić wymiarów zdjęcia. Poczekaj, aż pojawi się na podglądzie.
+ </string>
<string name="server_is_down">
Pomimo naszych najlepszych starań wystąpił niespodziewany problem.
-Proszę sprawdzić czy na stronie status.secondlifegrid.net nie zostały umieszczone informacje o rozpoznanych problemach serwera.
+Proszę sprawdzić czy na https://status.secondlifegrid.net nie zostały umieszczone informacje o rozpoznanych problemach serwera.
Jeśli problemy będą występowały nadal, proszę sprawdź sieć i ustawienia firewall.
</string>
<string name="dateTimeWeekdaysNames">
@@ -4466,6 +4855,18 @@ Jeśli problemy będą występowały nadal, proszę sprawdź sieć i ustawienia
<string name="Chat">
Czat
</string>
+ <string name="BaseMembership">
+ Podstawowe
+ </string>
+ <string name="InternalMembership">
+ Wewnętrzne
+ </string>
+ <string name="MembershipUpgradeText">
+ Zmień plan członkostwa
+ </string>
+ <string name="MembershipPremiumText">
+ Moje członkostwo Premium
+ </string>
<string name="DeleteItems">
Usunąć zaznaczone obiekty?
</string>
@@ -4476,7 +4877,7 @@ Jeśli problemy będą występowały nadal, proszę sprawdź sieć i ustawienia
W tym stroju nie ma elementów
</string>
<string name="ExternalEditorNotSet">
- Wybierz edytor używając ustawień ExternalEditor.
+ Wybierz edytor poprzez ustawienie zmiennej środowiska LL_SCRIPT_EDITOR lub ustawienie ExternalEditor.
</string>
<string name="ExternalEditorNotFound">
Nie odnaleziono zewnętrznego edytora wskazanego przez Ciebie.
@@ -4507,6 +4908,24 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
<string name="Divide">
Podziel
</string>
+ <string name="LMB">
+ LPM
+ </string>
+ <string name="MMB">
+ ŚPM
+ </string>
+ <string name="RMB">
+ PPM
+ </string>
+ <string name="MB4">
+ Mysz4
+ </string>
+ <string name="MB5">
+ Mysz5
+ </string>
+ <string name="Double LMB">
+ Podwójny LPM
+ </string>
<string name="BeaconParticle">
Emitery cząsteczek (niebieski)
</string>
@@ -4525,9 +4944,18 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
<string name="BeaconMedia">
Emitery mediów (biały)
</string>
+ <string name="BeaconSun">
+ Emiter kierunku Słońca (pomarańczowy)
+ </string>
+ <string name="BeaconMoon">
+ Emiter kierunku Księżyca (purpurowy)
+ </string>
<string name="ParticleHiding">
Ukryj cząsteczki
</string>
+ <string name="Command_360_Capture_Label">
+ Zdjęcie 360°
+ </string>
<string name="Command_AboutLand_Label">
O działce
</string>
@@ -4535,7 +4963,7 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
Wygląd
</string>
<string name="Command_Avatar_Label">
- Awatar
+ Biblioteka awatarów
</string>
<string name="Command_Build_Label">
Buduj
@@ -4552,9 +4980,15 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
<string name="Command_Destinations_Label">
Cele podróży
</string>
+ <string name="Command_Environments_Label">
+ Otoczenia
+ </string>
<string name="Command_Gestures_Label">
Gesty
</string>
+ <string name="Command_Grid_Status_Label">
+ Status świata
+ </string>
<string name="Command_HowTo_Label">
Samouczek
</string>
@@ -4564,18 +4998,12 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
<string name="Command_Map_Label">
Mapa
</string>
- <string name="Command_Marketplace_Label">
- Marketplace
- </string>
<string name="Command_MiniMap_Label">
Minimapa
</string>
<string name="Command_Move_Label">
Ruch
</string>
- <string name="Command_Outbox_Label">
- Skrzynka nadawcza kupca
- </string>
<string name="Command_People_Label">
Ludzie
</string>
@@ -4591,6 +5019,9 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
<string name="Command_Profile_Label">
Profil
</string>
+ <string name="Command_Report_Abuse_Label">
+ Zgłoś nadużycie
+ </string>
<string name="Command_Search_Label">
Szukaj
</string>
@@ -4606,6 +5037,9 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
<string name="Command_Voice_Label">
Pobliski głos
</string>
+ <string name="Command_360_Capture_Tooltip">
+ Uchwyć równoprostokątny obraz 360°
+ </string>
<string name="Command_AboutLand_Tooltip">
Informacje o miejscu, które odwiedzasz
</string>
@@ -4630,15 +5064,15 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
<string name="Command_Destinations_Tooltip">
Punkty, jakie mogą być interesujące
</string>
- <string name="Command_Facebook_Tooltip">
- Wyślij na Facebooka
- </string>
- <string name="Command_Flickr_Tooltip">
- Wyślij na Flickr
+ <string name="Command_Environments_Tooltip">
+ Otoczenia
</string>
<string name="Command_Gestures_Tooltip">
Gesty Twojego awatara
</string>
+ <string name="Command_Grid_Status_Tooltip">
+ Pokaż obecny status świata
+ </string>
<string name="Command_HowTo_Tooltip">
Jak wykonywać zwyczajne rzeczy
</string>
@@ -4651,15 +5085,15 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
<string name="Command_Marketplace_Tooltip">
Idź na zakupy
</string>
+ <string name="Command_MarketplaceListings_Tooltip">
+ Sprzedawaj owoce swojej kreatywności
+ </string>
<string name="Command_MiniMap_Tooltip">
Pokaż ludzi w pobliżu
</string>
<string name="Command_Move_Tooltip">
Poruszanie Twoim awatarem
</string>
- <string name="Command_Outbox_Tooltip">
- Przenieś przedmioty na Marketplace, aby je sprzedać
- </string>
<string name="Command_People_Tooltip">
Znajomi, grupy i ludzie w pobliżu
</string>
@@ -4675,6 +5109,9 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
<string name="Command_Profile_Tooltip">
Edytuj lub zobacz swój profil
</string>
+ <string name="Command_Report_Abuse_Tooltip">
+ Zgłoś nadużycie
+ </string>
<string name="Command_Search_Tooltip">
Znajdź miejsca, wydarzenia i ludzi
</string>
@@ -4756,6 +5193,99 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
<string name="UserDictionary">
[Użytkownika]
</string>
+ <string name="experience_tools_experience">
+ Przygoda
+ </string>
+ <string name="ExperienceNameNull">
+ (bez przygody)
+ </string>
+ <string name="ExperienceNameUntitled">
+ (przygoda bez nazwy)
+ </string>
+ <string name="Land-Scope">
+ Zakres: Ziemia
+ </string>
+ <string name="Grid-Scope">
+ Zakres: Cały świat
+ </string>
+ <string name="Allowed_Experiences_Tab">
+ ZEZWALAM
+ </string>
+ <string name="Blocked_Experiences_Tab">
+ BLOKUJĘ
+ </string>
+ <string name="Contrib_Experiences_Tab">
+ TWORZĘ
+ </string>
+ <string name="Admin_Experiences_Tab">
+ ZARZĄDZAM
+ </string>
+ <string name="Recent_Experiences_Tab">
+ OSTATNIE
+ </string>
+ <string name="Owned_Experiences_Tab">
+ MOJE
+ </string>
+ <string name="ExperiencesCounter">
+ ([EXPERIENCES], maks. [MAXEXPERIENCES])
+ </string>
+ <string name="ExperiencePermission1">
+ kontrolować klawisze
+ </string>
+ <string name="ExperiencePermission3">
+ animować Twojego awatara
+ </string>
+ <string name="ExperiencePermission4">
+ dołączać do Twojego awatara
+ </string>
+ <string name="ExperiencePermission9">
+ śledzić Twoją kamerę
+ </string>
+ <string name="ExperiencePermission10">
+ kontrolować Twoją kamerę
+ </string>
+ <string name="ExperiencePermission11">
+ teleportować Cię
+ </string>
+ <string name="ExperiencePermission12">
+ automatycznie akceptować uprawnienia przygody
+ </string>
+ <string name="ExperiencePermission16">
+ zmuszać Twojego awatara do siadania
+ </string>
+ <string name="ExperiencePermission17">
+ zmieniać Twoje ustawienia otoczenia
+ </string>
+ <string name="ExperiencePermissionShortUnknown">
+ wykonać nieznaną operację: [Permission]
+ </string>
+ <string name="ExperiencePermissionShort1">
+ Kontrola klawiszy
+ </string>
+ <string name="ExperiencePermissionShort3">
+ Rozpoczynanie animacji
+ </string>
+ <string name="ExperiencePermissionShort4">
+ Dołączanie
+ </string>
+ <string name="ExperiencePermissionShort9">
+ Śledzenie kamery
+ </string>
+ <string name="ExperiencePermissionShort10">
+ Kontrola kamery
+ </string>
+ <string name="ExperiencePermissionShort11">
+ Teleportacja
+ </string>
+ <string name="ExperiencePermissionShort12">
+ Uprawnienia
+ </string>
+ <string name="ExperiencePermissionShort16">
+ Siadanie
+ </string>
+ <string name="ExperiencePermissionShort17">
+ Otoczenie
+ </string>
<string name="logging_calls_disabled_log_empty">
Rozmowy nie są zapisywane do dziennika. Jeśli chcesz zacząć je logować wybierz "Zapisywanie: tylko dziennik" lub "Zapisywanie: dziennik i logi rozmów" w Preferencje > Czat.
</string>
@@ -4768,4 +5298,52 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
<string name="loading_chat_logs">
Wczytywanie...
</string>
+ <string name="na">
+ n/d
+ </string>
+ <string name="preset_combo_label">
+ -Lista jest pusta-
+ </string>
+ <string name="Default">
+ Domyślne
+ </string>
+ <string name="none_paren_cap">
+ (Brak)
+ </string>
+ <string name="no_limit">
+ Bez limitu
+ </string>
+ <string name="Mav_Details_MAV_FOUND_DEGENERATE_TRIANGLES">
+ Kształt fizyczny zawiera trójkąty, które są zbyt małe. Spróbuj uprościć model fizyczny.
+ </string>
+ <string name="Mav_Details_MAV_CONFIRMATION_DATA_MISMATCH">
+ Kształt fizyczny zawiera uszkodzone dane. Spróbuj poprawić model fizyczny.
+ </string>
+ <string name="Mav_Details_MAV_BLOCK_MISSING">
+ Brakujące dane. Upewnij się, że wysoki LOD jest obecny i prawidłowy. Ustaw model fizyczny, jeśli nie jest obecny.
+ </string>
+ <string name="Mav_Details_MAV_UNKNOWN_VERSION">
+ Kształt fizyczny zawiera niepoprawną wersję. Ustaw poprawną wersję dla modelu fizycznego.
+ </string>
+ <string name="couldnt_resolve_host">
+ DNS nie mógł znaleźć nazwy hosta ([HOSTNAME]).
+Sprawdź, czy możesz połączyć się z www.secondlife.com
+Jeśli możesz, ale nadal otrzymujesz ten błąd, to przejdź
+do sekcji pomocy technicznej i zgłoś ten problem.
+ </string>
+ <string name="ssl_peer_certificate">
+ Serwer logowania nie mógł zweryfikować się poprzez SSL.
+Jeśli nadal będziesz otrzymywać ten błąd, to przejdź
+do sekcji wsparcia witryny SecondLife.com i zgłoś problem.
+ </string>
+ <string name="ssl_connect_error">
+ Często oznacza to, że zegar komputera jest ustawiony nieprawidłowo.
+Przejdź do Panelu Sterowania i upewnij się, że godzina i data
+są ustawione prawidłowo.
+Sprawdź również, czy twoja sieć i zapora są poprawnie skonfigurowane.
+Jeśli nadal będziesz otrzymywać ten błąd, to przejdź
+do sekcji wsparcia witryny SecondLife.com i zgłoś problem.
+
+[https://community.secondlife.com/knowledgebase/english/error-messages-r520/#Section__3 Knowledge Base]
+ </string>
</strings>
diff --git a/indra/newview/skins/default/xui/pt/floater_chat_bar.xml b/indra/newview/skins/default/xui/pt/floater_chat_bar.xml
deleted file mode 100644
index 2eb2c94940..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_chat_bar.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="BATE-PAPO LOCAL">
- <panel name="bottom_panel">
- <line_editor label="Clique aqui para bater papo." name="chat_box" tool_tip="Tecle Enter para falar, Ctrl+Enter para gritar"/>
- <button name="show_nearby_chat" tool_tip="Mostra/oculta o histórico do bate-papo local"/>
- </panel>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml
deleted file mode 100644
index 33a0d6a456..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="PERMISSÕES PADRÃO DE UPLOAD">
- <panel label="Permissões" name="permissions">
- <button label="?" label_selected="?" name="help"/>
- <check_box label="Compartilhar com o grupo" name="share_with_group"/>
- <check_box label="Permitir que qualquer um copie" name="everyone_copy"/>
- <text name="NextOwnerLabel">
- O próximo dono pode:
- </text>
- <check_box label="Modificar" name="next_owner_modify"/>
- <check_box label="Copiar" name="next_owner_copy"/>
- <check_box label="Revender/Dar" name="next_owner_transfer"/>
- </panel>
- <button label="OK" label_selected="OK" name="ok"/>
- <button label="Cancelar" label_selected="Cancelar" name="cancel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
deleted file mode 100644
index 745a7d0e00..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_voice_controls" title="CONTROLES DE VOZ">
- <string name="title_nearby">
- CONFIGURAÇÕES DE VOZ
- </string>
- <string name="title_group">
- LIGAÇÃO DE GRUPO COM [GROUP]
- </string>
- <string name="title_adhoc">
- TELECONFERÊNCIA
- </string>
- <string name="title_peer_2_peer">
- LIGAÇÃO PARA [NAME]
- </string>
- <string name="no_one_near">
- Ninguém por perto ativou a voz
- </string>
- <layout_stack name="my_call_stack">
- <layout_panel name="my_panel">
- <text name="user_text" value="Meu avatar:"/>
- </layout_panel>
- <layout_panel name="leave_call_panel">
- <layout_stack name="voice_effect_and_leave_call_stack">
- <layout_panel name="leave_call_btn_panel">
- <button label="Desligar" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </layout_panel>
- </layout_stack>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml
deleted file mode 100644
index 2b5aa7508b..0000000000
--- a/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="Ver perfil" name="view_profile"/>
- <menu_item_call label="Adicionar amigo..." name="add_friend"/>
- <menu_item_call label="MI" name="im"/>
- <menu_item_call label="Ligar" name="call"/>
- <menu_item_call label="Teletransportar" name="teleport"/>
- <menu_item_call label="Convidar para entrar no grupo" name="invite_to_group"/>
- <menu_item_call label="Bloquear" name="block"/>
- <menu_item_call label="Desbloquear" name="unblock"/>
- <menu_item_call label="Denunciar" name="report"/>
- <menu_item_call label="Congelar" name="freeze"/>
- <menu_item_call label="Ejetar" name="eject"/>
- <menu_item_call label="Chutar" name="kick"/>
- <menu_item_call label="CSR" name="csr"/>
- <menu_item_call label="Depurar texturas" name="debug"/>
- <menu_item_call label="Localizar no mapa" name="find_on_map"/>
- <menu_item_call label="Mais zoom" name="zoom_in"/>
- <menu_item_call label="Pagar" name="pay"/>
- <menu_item_call label="Compartilhar" name="share"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml
deleted file mode 100644
index e8fafa58a9..0000000000
--- a/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="Sentar" name="Sit Down Here"/>
- <menu_item_call label="Ficar de pé" name="Stand Up"/>
- <context_menu label="Tirar" name="Take Off &gt;">
- <context_menu label="Roupa" name="Clothes &gt;">
- <menu_item_call label="Camisa" name="Shirt"/>
- <menu_item_call label="Calças" name="Pants"/>
- <menu_item_call label="Saia" name="Skirt"/>
- <menu_item_call label="Sapatos" name="Shoes"/>
- <menu_item_call label="Meias" name="Socks"/>
- <menu_item_call label="Jaqueta" name="Jacket"/>
- <menu_item_call label="Luvas" name="Gloves"/>
- <menu_item_call label="Camiseta" name="Self Undershirt"/>
- <menu_item_call label="Roupa de baixo" name="Self Underpants"/>
- <menu_item_call label="Tatuagem" name="Self Tattoo"/>
- <menu_item_call label="Alpha" name="Self Alpha"/>
- <menu_item_call label="Todas as roupas" name="All Clothes"/>
- </context_menu>
- <context_menu label="HUD" name="Object Detach HUD"/>
- <context_menu label="Separar" name="Object Detach"/>
- <menu_item_call label="Separar tudo" name="Detach All"/>
- </context_menu>
- <menu_item_call label="Trocar de look" name="Chenge Outfit"/>
- <menu_item_call label="Editar meu look" name="Edit Outfit"/>
- <menu_item_call label="Editar meu corpo" name="Edit My Shape"/>
- <menu_item_call label="Meus amigos" name="Friends..."/>
- <menu_item_call label="Meus grupos" name="Groups..."/>
- <menu_item_call label="Meu perfil" name="Profile..."/>
- <menu_item_call label="Depurar texturas" name="Debug..."/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_name_field.xml b/indra/newview/skins/default/xui/pt/menu_name_field.xml
deleted file mode 100644
index 2157de9813..0000000000
--- a/indra/newview/skins/default/xui/pt/menu_name_field.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="CopyMenu">
- <menu_item_call label="Exibir Cópia do Nome" name="copy_display"/>
- <menu_item_call label="Copiar Nome do Agente" name="copy_name"/>
- <menu_item_call label="Copiar Id do Agente" name="copy_id"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml
deleted file mode 100644
index e7c325010f..0000000000
--- a/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Ordenar por nome" name="sort_name"/>
- <menu_item_check label="Ordenar por status" name="sort_status"/>
- <menu_item_check label="Ver ícones de pessoas" name="view_icons"/>
- <menu_item_check label="Autorizações de visualização dadas" name="view_permissions"/>
- <menu_item_call label="Ver residentes e objetos bloqueados" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_groups_view_sort.xml
deleted file mode 100644
index 86a9d2263f..0000000000
--- a/indra/newview/skins/default/xui/pt/menu_people_groups_view_sort.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Mostrar ícones de grupos" name="Display Group Icons"/>
- <menu_item_call label="Sair do grupo selecionado" name="Leave Selected Group"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml
deleted file mode 100644
index 0d32d58de4..0000000000
--- a/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Ordenar por conversas mais recentes" name="sort_by_recent_speakers"/>
- <menu_item_check label="Ordenar por nome" name="sort_name"/>
- <menu_item_check label="Ordenar por distância" name="sort_distance"/>
- <menu_item_check label="Ver ícones de pessoas" name="view_icons"/>
- <menu_item_check label="Ver Mapa" name="view_map"/>
- <menu_item_call label="Ver residentes e objetos bloqueados" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_recent_view_sort.xml
deleted file mode 100644
index f3b89e01cd..0000000000
--- a/indra/newview/skins/default/xui/pt/menu_people_recent_view_sort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
- <menu_item_check label="Ordenar por mais recente" name="sort_most"/>
- <menu_item_check label="Ordenar por nome" name="sort_name"/>
- <menu_item_check label="Ver ícones de pessoas" name="view_icons"/>
- <menu_item_call label="Ver residentes e objetos bloqueados" name="show_blocked_list"/>
-</menu>
diff --git a/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml
deleted file mode 100644
index bd50d4953d..0000000000
--- a/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="call_btn_panel">
- <button label="Ligar" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Desligar" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Controles de voz" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_facebook_account.xml b/indra/newview/skins/default/xui/pt/panel_facebook_account.xml
deleted file mode 100644
index b449e7959d..0000000000
--- a/indra/newview/skins/default/xui/pt/panel_facebook_account.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<panel name="panel_facebook_account">
- <string name="facebook_connected" value="Você está conectado ao Facebook como:"/>
- <string name="facebook_disconnected" value="Não conectado ao Facebook"/>
- <text name="account_caption_label">
- Não conectado ao Facebook.
- </text>
- <panel name="panel_buttons">
- <button label="Conectar..." name="connect_btn"/>
- <button label="Desconectar" name="disconnect_btn"/>
- <text name="account_learn_more_label">
- [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Aprenda a publicar no Facebook]
- </text>
- </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml
deleted file mode 100644
index 502dae8d67..0000000000
--- a/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="group_info_btn_panel">
- <button label="Perfil do grupo" name="group_info_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Ligar para o grupo" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Desligar" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Abrir controles de voz" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml
deleted file mode 100644
index 91b7d1b7cd..0000000000
--- a/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="button_stack">
- <layout_panel name="view_profile_btn_panel">
- <button label="Perfil" name="view_profile_btn"/>
- </layout_panel>
- <layout_panel name="add_friend_btn_panel">
- <button label="Adicionar amigo" name="add_friend_btn"/>
- </layout_panel>
- <layout_panel name="teleport_btn_panel">
- <button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/>
- </layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Compartilhar" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Pagar" name="pay_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Ligar" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Encerrar ligação" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Controles de voz" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_profile_interests.xml b/indra/newview/skins/default/xui/pt/panel_profile_interests.xml
deleted file mode 100644
index edf74115f2..0000000000
--- a/indra/newview/skins/default/xui/pt/panel_profile_interests.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Interesses" name="panel_profile_interests">
- <text name="I Want To:">
- Quero:
- </text>
- <check_box label="Crie" name="chk0"/>
- <check_box label="Explore" name="chk1"/>
- <check_box label="Encontrar" name="chk2"/>
- <check_box label="Seja contratado" name="chk6"/>
- <check_box label="Grupo" name="chk3"/>
- <check_box label="Comprar" name="chk4"/>
- <check_box label="Venda" name="chk5"/>
- <check_box label="Contratar" name="chk7"/>
- <line_editor name="want_to_edit">
- (carregando...)
- </line_editor>
- <text name="Skills:">
- Habilidades:
- </text>
- <check_box label="Texturas" name="schk0"/>
- <check_box label="Arquitetura" name="schk1"/>
- <check_box label="Modelo" name="schk3"/>
- <check_box label="Planejamento de evento" name="schk2"/>
- <check_box label="Scripts" name="schk4"/>
- <check_box label="Personagens personalizados" name="schk5"/>
- <line_editor name="skills_edit">
- (carregando...)
- </line_editor>
- <text name="Languages:">
- Idiomas:
- </text>
- <line_editor name="languages_edit">
- (carregando...)
- </line_editor>
-</panel>
diff --git a/indra/newview/skins/default/xui/ru/floater_chat_bar.xml b/indra/newview/skins/default/xui/ru/floater_chat_bar.xml
deleted file mode 100644
index f6b2fc81e1..0000000000
--- a/indra/newview/skins/default/xui/ru/floater_chat_bar.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="ЛОКАЛЬНЫЙ ЧАТ">
- <panel name="bottom_panel">
- <line_editor label="Щелкните здесь для общения." name="chat_box" tool_tip="Нажмите Enter, чтобы сказать, Ctrl+Enter, чтобы прокричать"/>
- <button name="show_nearby_chat" tool_tip="Показать/скрыть лог локального чата"/>
- </panel>
-</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_perm_prefs.xml b/indra/newview/skins/default/xui/ru/floater_perm_prefs.xml
deleted file mode 100644
index 626f3c9321..0000000000
--- a/indra/newview/skins/default/xui/ru/floater_perm_prefs.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="СТАНДАРТНЫЕ РАЗРЕШЕНИЯ НА ПЕРЕДАЧУ">
- <panel label="Разрешения" name="permissions">
- <check_box label="Поделиться с группой" name="share_with_group"/>
- <check_box label="Разрешить всем копировать" name="everyone_copy"/>
- <text name="NextOwnerLabel">
- Следующий владелец может:
- </text>
- <check_box label="изменять" name="next_owner_modify"/>
- <check_box label="копировать" name="next_owner_copy"/>
- <check_box initial_value="true" label="перепродавать/отдавать" name="next_owner_transfer"/>
- </panel>
- <button label="ОК" label_selected="ОК" name="ok"/>
- <button label="Отмена" label_selected="Отмена" name="cancel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_voice_controls.xml b/indra/newview/skins/default/xui/ru/floater_voice_controls.xml
deleted file mode 100644
index 2b23086062..0000000000
--- a/indra/newview/skins/default/xui/ru/floater_voice_controls.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_voice_controls" title="УПРАВЛЕНИЕ ГОЛОСОМ">
- <string name="title_nearby">
- НАСТРОЙКИ ГОЛОСА
- </string>
- <string name="title_group">
- ЗВОНОК ГРУППЕ [GROUP]
- </string>
- <string name="title_adhoc">
- КОНФЕРЕНЦИЯ
- </string>
- <string name="title_peer_2_peer">
- ЗВОНОК ПОЛЬЗОВАТЕЛЮ [NAME]
- </string>
- <string name="no_one_near">
- Нет никого с включенным голосом
- </string>
- <layout_stack name="my_call_stack">
- <layout_panel name="my_panel">
- <text name="user_text" value="Мой аватар:"/>
- </layout_panel>
- <layout_panel name="leave_call_panel">
- <layout_stack name="voice_effect_and_leave_call_stack">
- <layout_panel name="leave_call_btn_panel">
- <button label="Прервать звонок" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </layout_panel>
- </layout_stack>
-</floater>
diff --git a/indra/newview/skins/default/xui/ru/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/ru/menu_inspect_avatar_gear.xml
deleted file mode 100644
index 957609a7a3..0000000000
--- a/indra/newview/skins/default/xui/ru/menu_inspect_avatar_gear.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="Смотреть профиль" name="view_profile"/>
- <menu_item_call label="В друзья" name="add_friend"/>
- <menu_item_call label="IM" name="im"/>
- <menu_item_call label="Звонок" name="call"/>
- <menu_item_call label="Телепорт" name="teleport"/>
- <menu_item_call label="Пригласить в группу" name="invite_to_group"/>
- <menu_item_call label="Заблокировать" name="block"/>
- <menu_item_call label="Разблокировать" name="unblock"/>
- <menu_item_call label="Пожаловаться" name="report"/>
- <menu_item_call label="Заморозить" name="freeze"/>
- <menu_item_call label="Выкинуть" name="eject"/>
- <menu_item_call label="Выкинуть" name="kick"/>
- <menu_item_call label="Поддержка" name="csr"/>
- <menu_item_call label="Отладка текстур" name="debug"/>
- <menu_item_call label="Найти на карте" name="find_on_map"/>
- <menu_item_call label="Приблизить" name="zoom_in"/>
- <menu_item_call label="Заплатить" name="pay"/>
- <menu_item_call label="Поделиться" name="share"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/ru/menu_inspect_self_gear.xml
deleted file mode 100644
index 901bb615e0..0000000000
--- a/indra/newview/skins/default/xui/ru/menu_inspect_self_gear.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="Self Pie">
- <menu_item_call label="Сесть" name="Sit Down Here"/>
- <menu_item_call label="Встать" name="Stand Up"/>
- <context_menu label="Снять" name="Take Off &gt;">
- <context_menu label="одежду" name="Clothes &gt;">
- <menu_item_call label="рубашку" name="Shirt"/>
- <menu_item_call label="брюки" name="Pants"/>
- <menu_item_call label="юбку" name="Skirt"/>
- <menu_item_call label="обувь" name="Shoes"/>
- <menu_item_call label="носки" name="Socks"/>
- <menu_item_call label="пиджак" name="Jacket"/>
- <menu_item_call label="перчатки" name="Gloves"/>
- <menu_item_call label="майку" name="Self Undershirt"/>
- <menu_item_call label="трусы" name="Self Underpants"/>
- <menu_item_call label="тату" name="Self Tattoo"/>
- <menu_item_call label="альфа-маску" name="Self Alpha"/>
- <menu_item_call label="всю одежду" name="All Clothes"/>
- </context_menu>
- <context_menu label="данные в игре" name="Object Detach HUD"/>
- <context_menu label="Отсоединить" name="Object Detach"/>
- <menu_item_call label="Отсоединить все" name="Detach All"/>
- </context_menu>
- <menu_item_call label="Сменить костюм" name="Chenge Outfit"/>
- <menu_item_call label="Изменить костюм" name="Edit Outfit"/>
- <menu_item_call label="Изменить фигуру" name="Edit My Shape"/>
- <menu_item_call label="Мои друзья" name="Friends..."/>
- <menu_item_call label="Мои группы" name="Groups..."/>
- <menu_item_call label="Мой профиль" name="Profile..."/>
- <menu_item_call label="Отладка текстур" name="Debug..."/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_name_field.xml b/indra/newview/skins/default/xui/ru/menu_name_field.xml
deleted file mode 100644
index 889f3c37ab..0000000000
--- a/indra/newview/skins/default/xui/ru/menu_name_field.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="CopyMenu">
- <menu_item_call label="Копировать отображаемое имя" name="copy_display"/>
- <menu_item_call label="Копировать имя агента" name="copy_name"/>
- <menu_item_call label="Копировать Id агента" name="copy_id"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/ru/menu_people_friends_view_sort.xml
deleted file mode 100644
index 0fa252aa99..0000000000
--- a/indra/newview/skins/default/xui/ru/menu_people_friends_view_sort.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Сортировать по имени" name="sort_name"/>
- <menu_item_check label="Сортировать по статусу" name="sort_status"/>
- <menu_item_check label="Показывать значки" name="view_icons"/>
- <menu_item_check label="Показывать разрешенные действия" name="view_permissions"/>
- <menu_item_call label="Показать черный список" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/ru/menu_people_groups_view_sort.xml
deleted file mode 100644
index 0358068db9..0000000000
--- a/indra/newview/skins/default/xui/ru/menu_people_groups_view_sort.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Показывать значки группы" name="Display Group Icons"/>
- <menu_item_call label="Покинуть выбранную группу" name="Leave Selected Group"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/ru/menu_people_nearby_view_sort.xml
deleted file mode 100644
index 4589815f6b..0000000000
--- a/indra/newview/skins/default/xui/ru/menu_people_nearby_view_sort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Сортировать по недавно говорившим" name="sort_by_recent_speakers"/>
- <menu_item_check label="Сортировать по имени" name="sort_name"/>
- <menu_item_check label="Сортировать по расстоянию" name="sort_distance"/>
- <menu_item_check label="Показывать значки участников" name="view_icons"/>
- <menu_item_check label="Смотреть карту" name="view_map"/>
- <menu_item_call label="Показать черный список жителей и объектов" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/ru/menu_people_recent_view_sort.xml
deleted file mode 100644
index 2ac83ffe52..0000000000
--- a/indra/newview/skins/default/xui/ru/menu_people_recent_view_sort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Сортировать по времени" name="sort_most"/>
- <menu_item_check label="Сортировать по имени" name="sort_name"/>
- <menu_item_check label="Показывать значки людей" name="view_icons"/>
- <menu_item_call label="Показать черный список" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/ru/panel_adhoc_control_panel.xml
deleted file mode 100644
index ae2240593d..0000000000
--- a/indra/newview/skins/default/xui/ru/panel_adhoc_control_panel.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="call_btn_panel">
- <button label="Звонок" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Прервать звонок" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Управление голосом" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_facebook_account.xml b/indra/newview/skins/default/xui/ru/panel_facebook_account.xml
deleted file mode 100644
index 22b4e46897..0000000000
--- a/indra/newview/skins/default/xui/ru/panel_facebook_account.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<panel name="panel_facebook_account">
- <string name="facebook_connected" value="Вы подключились к Facebook как:"/>
- <string name="facebook_disconnected" value="Не подключено к Facebook"/>
- <text name="account_caption_label">
- Не подключено к Facebook.
- </text>
- <panel name="panel_buttons">
- <button label="Подключение..." name="connect_btn"/>
- <button label="Отключить" name="disconnect_btn"/>
- <text name="account_learn_more_label">
- [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 О публикации в Facebook]
- </text>
- </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_group_control_panel.xml b/indra/newview/skins/default/xui/ru/panel_group_control_panel.xml
deleted file mode 100644
index 2e6f3502b6..0000000000
--- a/indra/newview/skins/default/xui/ru/panel_group_control_panel.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="group_info_btn_panel">
- <button label="Профиль группы" name="group_info_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Звонок группе" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Прервать звонок" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Открыть голосовое управление" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_im_control_panel.xml b/indra/newview/skins/default/xui/ru/panel_im_control_panel.xml
deleted file mode 100644
index 2a23cdb800..0000000000
--- a/indra/newview/skins/default/xui/ru/panel_im_control_panel.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="button_stack">
- <layout_panel name="view_profile_btn_panel">
- <button label="Профиль" name="view_profile_btn"/>
- </layout_panel>
- <layout_panel name="add_friend_btn_panel">
- <button label="Добавить в друзья" name="add_friend_btn"/>
- </layout_panel>
- <layout_panel name="teleport_btn_panel">
- <button label="Телепортация" name="teleport_btn" tool_tip="Предложить телепортацию этому жителю"/>
- </layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Поделиться" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Заплатить" name="pay_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Звонок" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Завершить звонок" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Управление голосом" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_profile_interests.xml b/indra/newview/skins/default/xui/ru/panel_profile_interests.xml
deleted file mode 100644
index ba1c3d0357..0000000000
--- a/indra/newview/skins/default/xui/ru/panel_profile_interests.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="Круг интересов" name="panel_profile_interests">
- <text name="I Want To:">
- Я собираюсь:
- </text>
- <check_box label="Построить" name="chk0"/>
- <check_box label="Просмотреть" name="chk1"/>
- <check_box label="Встретить" name="chk2"/>
- <check_box label="Получить работу" name="chk6"/>
- <check_box label="Группа" name="chk3"/>
- <check_box label="Купить" name="chk4"/>
- <check_box label="Продать" name="chk5"/>
- <check_box label="Нанять" name="chk7"/>
- <line_editor name="want_to_edit">
- (загрузка…)
- </line_editor>
- <text name="Skills:">
- Навыки:
- </text>
- <check_box label="Текстуры" name="schk0"/>
- <check_box label="Архитектура" name="schk1"/>
- <check_box label="Моделирование" name="schk3"/>
- <check_box label="Планирование мероприятия" name="schk2"/>
- <check_box label="Создавать сценарии" name="schk4"/>
- <check_box label="Пользовательские символы" name="schk5"/>
- <line_editor name="skills_edit">
- (загрузка…)
- </line_editor>
- <text name="Languages:">
- Языки:
- </text>
- <line_editor name="languages_edit">
- (загрузка…)
- </line_editor>
-</panel>
diff --git a/indra/newview/skins/default/xui/tr/floater_chat_bar.xml b/indra/newview/skins/default/xui/tr/floater_chat_bar.xml
deleted file mode 100644
index cd999b4b7a..0000000000
--- a/indra/newview/skins/default/xui/tr/floater_chat_bar.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="nearby_chat" title="YAKINDAKİ SOHBET">
- <panel name="bottom_panel">
- <line_editor label="Sohbet etmek için buraya tıklayın." name="chat_box" tool_tip="Söylemek için Enter, bağırmak için Ctrl+Enter yapın"/>
- <button name="show_nearby_chat" tool_tip="Yakın sohbet günlüğünü gösterir/gizler"/>
- </panel>
-</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_perm_prefs.xml b/indra/newview/skins/default/xui/tr/floater_perm_prefs.xml
deleted file mode 100644
index 669b833c26..0000000000
--- a/indra/newview/skins/default/xui/tr/floater_perm_prefs.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="VARSAYILAN KARŞIYA YÜKLEME İZİNLERİ">
- <panel label="İzinler" name="permissions">
- <check_box label="Grupla paylaş" name="share_with_group"/>
- <check_box label="Herkese kopyalama izni ver" name="everyone_copy"/>
- <text name="NextOwnerLabel">
- Sonraki sahip şunu yapabilir:
- </text>
- <check_box label="Değiştir" name="next_owner_modify"/>
- <check_box label="Kopyala" name="next_owner_copy"/>
- <check_box initial_value="true" label="Tekrar sat/Ver" name="next_owner_transfer"/>
- </panel>
- <button label="Tamam" label_selected="Tamam" name="ok"/>
- <button label="İptal" label_selected="İptal" name="cancel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_voice_controls.xml b/indra/newview/skins/default/xui/tr/floater_voice_controls.xml
deleted file mode 100644
index 5ff0804f17..0000000000
--- a/indra/newview/skins/default/xui/tr/floater_voice_controls.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_voice_controls" title="SES DENETİMLERİ">
- <string name="title_nearby">
- SES AYARLARI
- </string>
- <string name="title_group">
- [GROUP] İLE GRUP ARAMASI
- </string>
- <string name="title_adhoc">
- KONFERANS ARAMASI
- </string>
- <string name="title_peer_2_peer">
- [NAME] İLE ARAMA
- </string>
- <string name="no_one_near">
- Yakındaki kimsede ses etkin değil
- </string>
- <layout_stack name="my_call_stack">
- <layout_panel name="my_panel">
- <text name="user_text" value="Avatarım:"/>
- </layout_panel>
- <layout_panel name="leave_call_panel">
- <layout_stack name="voice_effect_and_leave_call_stack">
- <layout_panel name="leave_call_btn_panel">
- <button label="Aramadan Ayrıl" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </layout_panel>
- </layout_stack>
-</floater>
diff --git a/indra/newview/skins/default/xui/tr/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/tr/menu_inspect_avatar_gear.xml
deleted file mode 100644
index 69432e967b..0000000000
--- a/indra/newview/skins/default/xui/tr/menu_inspect_avatar_gear.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="Profili Göster" name="view_profile"/>
- <menu_item_call label="Arkadaş Ekle" name="add_friend"/>
- <menu_item_call label="Aİ" name="im"/>
- <menu_item_call label="Ara" name="call"/>
- <menu_item_call label="Işınla" name="teleport"/>
- <menu_item_call label="Gruba Davet Et" name="invite_to_group"/>
- <menu_item_call label="Engelle" name="block"/>
- <menu_item_call label="Engellemeyi Kaldır" name="unblock"/>
- <menu_item_call label="Raporla" name="report"/>
- <menu_item_call label="Dondur" name="freeze"/>
- <menu_item_call label="Çıkar" name="eject"/>
- <menu_item_call label="Çıkar" name="kick"/>
- <menu_item_call label="CSR" name="csr"/>
- <menu_item_call label="Dokularda Hata Ayıkla" name="debug"/>
- <menu_item_call label="Haritada Bul" name="find_on_map"/>
- <menu_item_call label="Yakınlaştır" name="zoom_in"/>
- <menu_item_call label="Öde" name="pay"/>
- <menu_item_call label="Paylaş" name="share"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/tr/menu_inspect_self_gear.xml
deleted file mode 100644
index 0655db8196..0000000000
--- a/indra/newview/skins/default/xui/tr/menu_inspect_self_gear.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="Self Pie">
- <menu_item_call label="Otur" name="Sit Down Here"/>
- <menu_item_call label="Kalk" name="Stand Up"/>
- <context_menu label="Çıkar" name="Take Off &gt;">
- <context_menu label="Giysiler" name="Clothes &gt;">
- <menu_item_call label="Gömlek" name="Shirt"/>
- <menu_item_call label="Pantolon" name="Pants"/>
- <menu_item_call label="Etek" name="Skirt"/>
- <menu_item_call label="Ayakkabılar" name="Shoes"/>
- <menu_item_call label="Çoraplar" name="Socks"/>
- <menu_item_call label="Ceket" name="Jacket"/>
- <menu_item_call label="Eldivenler" name="Gloves"/>
- <menu_item_call label="Fanila" name="Self Undershirt"/>
- <menu_item_call label="Külot" name="Self Underpants"/>
- <menu_item_call label="Dövme" name="Self Tattoo"/>
- <menu_item_call label="Alfa" name="Self Alpha"/>
- <menu_item_call label="Tüm Giysiler" name="All Clothes"/>
- </context_menu>
- <context_menu label="BÜG" name="Object Detach HUD"/>
- <context_menu label="Ayır" name="Object Detach"/>
- <menu_item_call label="Tümünü Ayır" name="Detach All"/>
- </context_menu>
- <menu_item_call label="Dış Görünümü Değiştir" name="Chenge Outfit"/>
- <menu_item_call label="Dış Görünümümü Düzenle" name="Edit Outfit"/>
- <menu_item_call label="Şeklimi Düzenle" name="Edit My Shape"/>
- <menu_item_call label="Arkadaşlarım" name="Friends..."/>
- <menu_item_call label="Gruplarım" name="Groups..."/>
- <menu_item_call label="Profilim" name="Profile..."/>
- <menu_item_call label="Dokularda Hata Ayıkla" name="Debug..."/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_name_field.xml b/indra/newview/skins/default/xui/tr/menu_name_field.xml
deleted file mode 100644
index b1afd737c3..0000000000
--- a/indra/newview/skins/default/xui/tr/menu_name_field.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="CopyMenu">
- <menu_item_call label="Görünen Adı Kopyala" name="copy_display"/>
- <menu_item_call label="Aracı Adını Kopyala" name="copy_name"/>
- <menu_item_call label="Aracı Kimliğini Kopyala" name="copy_id"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/tr/menu_people_friends_view_sort.xml
deleted file mode 100644
index 404fab17e6..0000000000
--- a/indra/newview/skins/default/xui/tr/menu_people_friends_view_sort.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Ada Göre Sırala" name="sort_name"/>
- <menu_item_check label="Duruma Göre Sırala" name="sort_status"/>
- <menu_item_check label="Kişi Simgelerini Göster" name="view_icons"/>
- <menu_item_check label="Verilen İzinleri Göster" name="view_permissions"/>
- <menu_item_call label="Engellenmiş Sakinleri ve Nesneleri Göster" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/tr/menu_people_groups_view_sort.xml
deleted file mode 100644
index a1e5ad9a50..0000000000
--- a/indra/newview/skins/default/xui/tr/menu_people_groups_view_sort.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Grup Simgelerini Göster" name="Display Group Icons"/>
- <menu_item_call label="Seçilen Gruptan Ayrıl" name="Leave Selected Group"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/tr/menu_people_nearby_view_sort.xml
deleted file mode 100644
index 0ff2111e9e..0000000000
--- a/indra/newview/skins/default/xui/tr/menu_people_nearby_view_sort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Son Konuşanlara Göre Sırala" name="sort_by_recent_speakers"/>
- <menu_item_check label="Ada Göre Sırala" name="sort_name"/>
- <menu_item_check label="Mesafeye Göre Sırala" name="sort_distance"/>
- <menu_item_check label="Kişi Simgelerini Göster" name="view_icons"/>
- <menu_item_check label="Haritayı Göster" name="view_map"/>
- <menu_item_call label="Engellenmiş Sakinleri ve Nesneleri Göster" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/tr/menu_people_recent_view_sort.xml
deleted file mode 100644
index adfba50138..0000000000
--- a/indra/newview/skins/default/xui/tr/menu_people_recent_view_sort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="En Sonunculara Göre Sırala" name="sort_most"/>
- <menu_item_check label="Ada Göre Sırala" name="sort_name"/>
- <menu_item_check label="Kişi Simgelerini Göster" name="view_icons"/>
- <menu_item_call label="Engellenmiş Sakinleri ve Nesneleri Göster" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/tr/panel_adhoc_control_panel.xml
deleted file mode 100644
index 602818de94..0000000000
--- a/indra/newview/skins/default/xui/tr/panel_adhoc_control_panel.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="call_btn_panel">
- <button label="Ara" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Aramadan Ayrıl" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Ses Denetimleri" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_facebook_account.xml b/indra/newview/skins/default/xui/tr/panel_facebook_account.xml
deleted file mode 100644
index e2d2b193a6..0000000000
--- a/indra/newview/skins/default/xui/tr/panel_facebook_account.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<panel name="panel_facebook_account">
- <string name="facebook_connected" value="Facebook&apos;a şu kimlikle bağlandınız:"/>
- <string name="facebook_disconnected" value="Facebook&apos;a bağlanılmadı"/>
- <text name="account_caption_label">
- Facebook&apos;a bağlanılmadı.
- </text>
- <panel name="panel_buttons">
- <button label="Bağlan..." name="connect_btn"/>
- <button label="Bağlantıyı kes" name="disconnect_btn"/>
- <text name="account_learn_more_label">
- [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Facebook&apos;ta içerik yayınlama hakkında bilgi edinin]
- </text>
- </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_group_control_panel.xml b/indra/newview/skins/default/xui/tr/panel_group_control_panel.xml
deleted file mode 100644
index 58bb68a5c3..0000000000
--- a/indra/newview/skins/default/xui/tr/panel_group_control_panel.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="group_info_btn_panel">
- <button label="Grup Profili" name="group_info_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Grubu Ara" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Aramadan Ayrıl" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Ses Denetimlerini Aç" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_im_control_panel.xml b/indra/newview/skins/default/xui/tr/panel_im_control_panel.xml
deleted file mode 100644
index aebdc6b48d..0000000000
--- a/indra/newview/skins/default/xui/tr/panel_im_control_panel.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="button_stack">
- <layout_panel name="view_profile_btn_panel">
- <button label="Profil" name="view_profile_btn"/>
- </layout_panel>
- <layout_panel name="add_friend_btn_panel">
- <button label="Arkadaş Ekle" name="add_friend_btn"/>
- </layout_panel>
- <layout_panel name="teleport_btn_panel">
- <button label="Işınla" name="teleport_btn" tool_tip="Bu kişiyi ışınlamayı teklif et"/>
- </layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Paylaş" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Öde" name="pay_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="Ara" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="Aramayı Bitir" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Ses Denetimleri" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_profile_interests.xml b/indra/newview/skins/default/xui/tr/panel_profile_interests.xml
deleted file mode 100644
index b068aa3dad..0000000000
--- a/indra/newview/skins/default/xui/tr/panel_profile_interests.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="İlgi alanları" name="panel_profile_interests">
- <text name="I Want To:">
- Şunu Yapmak İstiyorum:
- </text>
- <check_box label="İnşa Et" name="chk0"/>
- <check_box label="Keşfet" name="chk1"/>
- <check_box label="Tanış" name="chk2"/>
- <check_box label="İşe Gir" name="chk6"/>
- <check_box label="Gruplandır" name="chk3"/>
- <check_box label="Satın Al" name="chk4"/>
- <check_box label="Sat" name="chk5"/>
- <check_box label="İşe Al" name="chk7"/>
- <line_editor name="want_to_edit">
- (yükleniyor...)
- </line_editor>
- <text name="Skills:">
- Beceriler:
- </text>
- <check_box label="Dokular" name="schk0"/>
- <check_box label="Mimari" name="schk1"/>
- <check_box label="Modelleme" name="schk3"/>
- <check_box label="Etkinlik Planlama" name="schk2"/>
- <check_box label="Kodlama" name="schk4"/>
- <check_box label="Özel Karakterler" name="schk5"/>
- <line_editor name="skills_edit">
- (yükleniyor...)
- </line_editor>
- <text name="Languages:">
- Diller:
- </text>
- <line_editor name="languages_edit">
- (yükleniyor...)
- </line_editor>
-</panel>
diff --git a/indra/newview/skins/default/xui/zh/floater_chat_bar.xml b/indra/newview/skins/default/xui/zh/floater_chat_bar.xml
deleted file mode 100644
index f1a69a7688..0000000000
--- a/indra/newview/skins/default/xui/zh/floater_chat_bar.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="chat_bar" title="附近的聊天">
- <panel name="bottom_panel">
- <line_editor label="點按此處開始聊天。" name="chat_box" tool_tip="按下 Enter 鍵來說或按下 Ctrl+Enter 來喊叫"/>
- <button name="show_nearby_chat" tool_tip="顯示 / 隱藏 附近的聊天紀錄"/>
- </panel>
-</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml b/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml
deleted file mode 100644
index b38db59ff3..0000000000
--- a/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="perm prefs" title="預設上傳權限">
- <panel label="權限" name="permissions">
- <check_box label="與群組分享" name="share_with_group"/>
- <check_box label="允許任何人覆製" name="everyone_copy"/>
- <text name="NextOwnerLabel">
- 下一個所有人可以:
- </text>
- <check_box label="修改" name="next_owner_modify"/>
- <check_box label="恚庨" name="next_owner_copy"/>
- <check_box initial_value="true" label="轉售 / 送人" name="next_owner_transfer"/>
- </panel>
- <button label="確定" label_selected="確定" name="ok"/>
- <button label="取消" label_selected="取消" name="cancel"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_voice_controls.xml b/indra/newview/skins/default/xui/zh/floater_voice_controls.xml
deleted file mode 100644
index a3a7679957..0000000000
--- a/indra/newview/skins/default/xui/zh/floater_voice_controls.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_voice_controls" title="語音控制">
- <string name="title_nearby">
- 語音設定
- </string>
- <string name="title_group">
- 與 [GROUP] 進行群組通話
- </string>
- <string name="title_adhoc">
- 多方通話
- </string>
- <string name="title_peer_2_peer">
- 和 [NAME] 通話
- </string>
- <string name="no_one_near">
- 附近沒有一人開啟語音
- </string>
- <layout_stack name="my_call_stack">
- <layout_panel name="my_panel">
- <text name="user_text" value="我的化身:"/>
- </layout_panel>
- <layout_panel name="leave_call_panel">
- <layout_stack name="voice_effect_and_leave_call_stack">
- <layout_panel name="leave_call_btn_panel">
- <button label="離開通話" name="leave_call_btn"/>
- </layout_panel>
- </layout_stack>
- </layout_panel>
- </layout_stack>
-</floater>
diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml
deleted file mode 100644
index f4e886ff67..0000000000
--- a/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<toggleable_menu name="Gear Menu">
- <menu_item_call label="察看檔案" name="view_profile"/>
- <menu_item_call label="加為朋友" name="add_friend"/>
- <menu_item_call label="IM" name="im"/>
- <menu_item_call label="通話" name="call"/>
- <menu_item_call label="瞬間傳送" name="teleport"/>
- <menu_item_call label="邀請加入群組" name="invite_to_group"/>
- <menu_item_call label="封鎖" name="block"/>
- <menu_item_call label="解除封鎖" name="unblock"/>
- <menu_item_call label="回報" name="report"/>
- <menu_item_call label="凍結" name="freeze"/>
- <menu_item_call label="踢出" name="eject"/>
- <menu_item_call label="踢出" name="kick"/>
- <menu_item_call label="客服" name="csr"/>
- <menu_item_call label="材質除錯" name="debug"/>
- <menu_item_call label="在地圖上尋找" name="find_on_map"/>
- <menu_item_call label="放大" name="zoom_in"/>
- <menu_item_call label="支付" name="pay"/>
- <menu_item_call label="分享" name="share"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml
deleted file mode 100644
index c48ee0c9be..0000000000
--- a/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="Self Pie">
- <menu_item_call label="坐下" name="Sit Down Here"/>
- <menu_item_call label="起立" name="Stand Up"/>
- <context_menu label="脫下" name="Take Off &gt;">
- <context_menu label="衣服" name="Clothes &gt;">
- <menu_item_call label="襯衫" name="Shirt"/>
- <menu_item_call label="褲子" name="Pants"/>
- <menu_item_call label="裙子" name="Skirt"/>
- <menu_item_call label="鞋子" name="Shoes"/>
- <menu_item_call label="襪子" name="Socks"/>
- <menu_item_call label="夾克" name="Jacket"/>
- <menu_item_call label="手套" name="Gloves"/>
- <menu_item_call label="內衣" name="Self Undershirt"/>
- <menu_item_call label="內褲" name="Self Underpants"/>
- <menu_item_call label="刺青" name="Self Tattoo"/>
- <menu_item_call label="半透明" name="Self Alpha"/>
- <menu_item_call label="全部衣服" name="All Clothes"/>
- </context_menu>
- <context_menu label="擡頭顯示" name="Object Detach HUD"/>
- <context_menu label="卸下" name="Object Detach"/>
- <menu_item_call label="全部卸下" name="Detach All"/>
- </context_menu>
- <menu_item_call label="變更裝扮" name="Chenge Outfit"/>
- <menu_item_call label="編輯我的裝扮" name="Edit Outfit"/>
- <menu_item_call label="編輯我的體形" name="Edit My Shape"/>
- <menu_item_call label="我的朋友" name="Friends..."/>
- <menu_item_call label="我的群組" name="Groups..."/>
- <menu_item_call label="我的個人檔案" name="Profile..."/>
- <menu_item_call label="材質除錯" name="Debug..."/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_name_field.xml b/indra/newview/skins/default/xui/zh/menu_name_field.xml
deleted file mode 100644
index 5eaf3461cd..0000000000
--- a/indra/newview/skins/default/xui/zh/menu_name_field.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="CopyMenu">
- <menu_item_call label="複製顯示名稱" name="copy_display"/>
- <menu_item_call label="複製代理名稱" name="copy_name"/>
- <menu_item_call label="複製代理ID" name="copy_id"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml
deleted file mode 100644
index 59854faeec..0000000000
--- a/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="依名稱排序" name="sort_name"/>
- <menu_item_check label="依狀態排序" name="sort_status"/>
- <menu_item_check label="察看人群圖示" name="view_icons"/>
- <menu_item_check label="察看許可權限" name="view_permissions"/>
- <menu_item_call label="顯示被封鎖的居民與物件" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml
deleted file mode 100644
index 1be5c69b94..0000000000
--- a/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="顯示群組圖示" name="Display Group Icons"/>
- <menu_item_call label="脫離所選擇的群組" name="Leave Selected Group"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml
deleted file mode 100644
index 6cb0ac3c89..0000000000
--- a/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="依最近說話者排序" name="sort_by_recent_speakers"/>
- <menu_item_check label="依名稱排序" name="sort_name"/>
- <menu_item_check label="依距離排序" name="sort_distance"/>
- <menu_item_check label="察看人群圖示" name="view_icons"/>
- <menu_item_check label="察看地圖" name="view_map"/>
- <menu_item_call label="顯示被封鎖的居民與物件" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_recent_view_sort.xml
deleted file mode 100644
index 5b6e7335d6..0000000000
--- a/indra/newview/skins/default/xui/zh/menu_people_recent_view_sort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<toggleable_menu name="menu_group_plus">
- <menu_item_check label="依最近排序" name="sort_most"/>
- <menu_item_check label="依名稱排序" name="sort_name"/>
- <menu_item_check label="察看人群圖示" name="view_icons"/>
- <menu_item_call label="顯示被封鎖的居民與物件" name="show_blocked_list"/>
-</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_adhoc_control_panel.xml
deleted file mode 100644
index 7d16ac4129..0000000000
--- a/indra/newview/skins/default/xui/zh/panel_adhoc_control_panel.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="call_btn_panel">
- <button label="通話" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="離開通話" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="語音控制" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_facebook_account.xml b/indra/newview/skins/default/xui/zh/panel_facebook_account.xml
deleted file mode 100644
index e8c31c69c5..0000000000
--- a/indra/newview/skins/default/xui/zh/panel_facebook_account.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<panel name="panel_facebook_account">
- <string name="facebook_connected" value="已成功連通臉書,身分為:"/>
- <string name="facebook_disconnected" value="未連通臉書"/>
- <text name="account_caption_label">
- 未連通臉書。
- </text>
- <panel name="panel_buttons">
- <button label="連通…" name="connect_btn"/>
- <button label="中斷" name="disconnect_btn"/>
- <text name="account_learn_more_label">
- [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 如何發佈到臉書]
- </text>
- </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml
deleted file mode 100644
index f468aba514..0000000000
--- a/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="vertical_stack">
- <layout_panel name="group_info_btn_panel">
- <button label="群組檔案" name="group_info_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="群組通話" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="離開通話" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="開啟語音控制" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_im_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_im_control_panel.xml
deleted file mode 100644
index e937368a2b..0000000000
--- a/indra/newview/skins/default/xui/zh/panel_im_control_panel.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_im_control_panel">
- <layout_stack name="button_stack">
- <layout_panel name="view_profile_btn_panel">
- <button label="檔案" name="view_profile_btn"/>
- </layout_panel>
- <layout_panel name="add_friend_btn_panel">
- <button label="加為朋友" name="add_friend_btn"/>
- </layout_panel>
- <layout_panel name="teleport_btn_panel">
- <button label="瞬間傳送" name="teleport_btn" tool_tip="發出瞬間傳送邀請給此人"/>
- </layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="分享" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="支付" name="pay_btn"/>
- </layout_panel>
- <layout_panel name="call_btn_panel">
- <button label="通話" name="call_btn"/>
- </layout_panel>
- <layout_panel name="end_call_btn_panel">
- <button label="結束通話" name="end_call_btn"/>
- </layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="語音控制" name="voice_ctrls_btn"/>
- </layout_panel>
- </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_navmesh_rebake.xml b/indra/newview/skins/default/xui/zh/panel_navmesh_rebake.xml
deleted file mode 100644
index bb52c13a11..0000000000
--- a/indra/newview/skins/default/xui/zh/panel_navmesh_rebake.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel name="panel_navmesh_rebake">
- <button label="重新產出地區" name="navmesh_btn" tool_tip="點按即可重新產出該地區的導航網面。"/>
- <button label="正在請求重新產出" name="navmesh_btn_sending" tool_tip="正向伺服器發送重新產出請求。"/>
- <button label="地區正在重新產出" name="navmesh_btn_baking" tool_tip="地區正在重新產出。 完成後,這個按鈕將會消失。"/>
-</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_profile_interests.xml b/indra/newview/skins/default/xui/zh/panel_profile_interests.xml
deleted file mode 100644
index 150f3cca4f..0000000000
--- a/indra/newview/skins/default/xui/zh/panel_profile_interests.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="興趣" name="panel_profile_interests">
- <text name="I Want To:">
- 我想要:
- </text>
- <check_box label="建造" name="chk0"/>
- <check_box label="探索" name="chk1"/>
- <check_box label="見面" name="chk2"/>
- <check_box label="受雇" name="chk6"/>
- <check_box label="群組" name="chk3"/>
- <check_box label="購買" name="chk4"/>
- <check_box label="出售" name="chk5"/>
- <check_box label="招人" name="chk7"/>
- <line_editor name="want_to_edit">
- (載入中...)
- </line_editor>
- <text name="Skills:">
- 技能:
- </text>
- <check_box label="材質" name="schk0"/>
- <check_box label="架構" name="schk1"/>
- <check_box label="建模" name="schk3"/>
- <check_box label="計畫活動" name="schk2"/>
- <check_box label="建腳本" name="schk4"/>
- <check_box label="定製角色" name="schk5"/>
- <line_editor name="skills_edit">
- (載入中...)
- </line_editor>
- <text name="Languages:">
- 語言:
- </text>
- <line_editor name="languages_edit">
- (載入中...)
- </line_editor>
-</panel>
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 89481add29..3a7c7d7f46 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -49,7 +49,7 @@ viewer_dir = os.path.dirname(__file__)
# indra.util.llmanifest under their system Python!
sys.path.insert(0, os.path.join(viewer_dir, os.pardir, "lib", "python"))
from indra.util.llmanifest import LLManifest, main, path_ancestors, CHANNEL_VENDOR_BASE, RELEASE_CHANNEL, ManifestError, MissingError
-from llbase import llsd
+import llsd
class ViewerManifest(LLManifest):
def is_packaging_viewer(self):
@@ -790,27 +790,15 @@ class WindowsManifest(ViewerManifest):
# Check two paths, one for Program Files, and one for Program Files (x86).
# Yay 64bit windows.
- for ProgramFiles in 'ProgramFiles', 'ProgramFiles(x86)':
- NSIS_path = os.path.expandvars(r'${%s}\NSIS\makensis.exe' % ProgramFiles)
- if os.path.exists(NSIS_path):
- break
- installer_created=False
- nsis_attempts=3
- nsis_retry_wait=15
- for attempt in range(nsis_attempts):
- try:
- self.run_command([NSIS_path, '/V2', self.dst_path_of(tempfile)])
- except ManifestError as err:
- if attempt+1 < nsis_attempts:
- print("nsis failed, waiting %d seconds before retrying" % nsis_retry_wait, file=sys.stderr)
- time.sleep(nsis_retry_wait)
- nsis_retry_wait*=2
- else:
- # NSIS worked! Done!
- break
- else:
- print("Maximum nsis attempts exceeded; giving up", file=sys.stderr)
- raise
+ nsis_path = "makensis.exe"
+ for program_files in '${programfiles}', '${programfiles(x86)}':
+ for nesis_path in 'NSIS', 'NSIS\\Unicode':
+ possible_path = os.path.expandvars(f"{program_files}\\{nesis_path}\\makensis.exe")
+ if os.path.exists(possible_path):
+ nsis_path = possible_path
+ break
+
+ self.run_command([possible_path, '/V2', self.dst_path_of(tempfile)])
self.sign(installer_file)
self.created_path(self.dst_path_of(installer_file))
diff --git a/scripts/metrics/slp_conv.py b/scripts/metrics/slp_conv.py
index 27f922b74a..25f9a8c060 100644
--- a/scripts/metrics/slp_conv.py
+++ b/scripts/metrics/slp_conv.py
@@ -29,7 +29,7 @@ Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
$/LicenseInfo$
"""
-from llbase import llsd
+import llsd
import argparse
parser = argparse.ArgumentParser(
diff --git a/scripts/metrics/viewer_asset_logs.py b/scripts/metrics/viewer_asset_logs.py
index 0365936188..bd996dff79 100644
--- a/scripts/metrics/viewer_asset_logs.py
+++ b/scripts/metrics/viewer_asset_logs.py
@@ -28,7 +28,7 @@ $/LicenseInfo$
import argparse
from lxml import etree
-from llbase import llsd
+import llsd
def get_metrics_record(infiles):
for filename in args.infiles:
diff --git a/scripts/metrics/viewerstats.py b/scripts/metrics/viewerstats.py
index 7e19539e15..e64343329c 100755
--- a/scripts/metrics/viewerstats.py
+++ b/scripts/metrics/viewerstats.py
@@ -31,7 +31,7 @@ import numpy as np
import pandas as pd
import json
from collections import Counter, defaultdict
-from llbase import llsd
+import llsd
import io
import re
import os