diff options
| -rw-r--r-- | .hgtags | 8 | ||||
| -rw-r--r-- | doc/contributions.txt | 1 | ||||
| -rw-r--r-- | indra/media_plugins/webkit/windows_volume_catcher.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | indra/newview/lldrawable.cpp | 10 | ||||
| -rwxr-xr-x | indra/newview/llmeshrepository.cpp | 33 | ||||
| -rw-r--r-- | indra/newview/llpaneloutfitedit.cpp | 14 | ||||
| -rw-r--r-- | indra/newview/llviewerparcelmgr.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/notifications.xml | 1738 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml | 8 | ||||
| -rw-r--r-- | indra/newview/viewer_manifest.py | 14 | ||||
| -rw-r--r-- | indra/viewer_components/updater/scripts/linux/update_install | 219 | 
12 files changed, 270 insertions, 1789 deletions
| @@ -408,3 +408,11 @@ c296133849d1f103c0e2abc41e6599daed00b67b DRTVWR-280  ccf991e02dc2f63fb646324230d54832683f4a9b DRTVWR-286  2d849850558a5a0324b398d1c102d30bcbdfb88f DRTVWR-287  e06898df8644fe567bee94f817d03abc1c380993 3.4.5-beta3 +a676b4d6c037b39fe5b8e42cf8839a9303936089 DRTVWR-289 +28fa8b944a0c1869636ab00cc400f5aa71f6fa3c DRTVWR-290 +7f09bbc28c297f14b67961be7b6575445fa160e8 DRTVWR-291 +b23419a2748483c98f3b84b630468a21c88feba5 DRTVWR-292 +1567de5700c273b583dac41b64275c223287306e 3.4.5-beta4 +1cce8447f8f574673e3f47d6fe584262e6964fe2 DRTVWR-296 +0a5d409161ef2a89b28c9a741051dd2dedc707d6 DRTVWR-297 +852b69ef0b5fe6b13b69cc2217282cc64de6afab 3.4.5-beta5 diff --git a/doc/contributions.txt b/doc/contributions.txt index 10d6818bd3..e86ef11a72 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -1251,6 +1251,7 @@ Whimsy Winx  Whirly Fizzle  	STORM-1895  	MAINT-873 +	STORM-1930  Whoops Babii  	VWR-631  	VWR-1640 diff --git a/indra/media_plugins/webkit/windows_volume_catcher.cpp b/indra/media_plugins/webkit/windows_volume_catcher.cpp index 957704da47..0cfb810906 100644 --- a/indra/media_plugins/webkit/windows_volume_catcher.cpp +++ b/indra/media_plugins/webkit/windows_volume_catcher.cpp @@ -71,7 +71,7 @@ VolumeCatcherImpl::VolumeCatcherImpl()  {  	mSystemIsVistaOrHigher = isWindowsVistaOrHigher(); -	if ( mSystemIsVistaOrHigher ) +	if ( ! mSystemIsVistaOrHigher )  	{  		HMODULE handle = ::LoadLibrary(L"winmm.dll");  		if(handle) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 7282b8978f..baedac1f2d 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1854,7 +1854,6 @@ if (LINUX)    set(COPY_INPUT_DEPENDENCIES      ${VIEWER_BINARY_NAME}      linux-crash-logger -    linux-updater      SLPlugin      media_plugin_webkit      media_plugin_gstreamer010 diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index d8b1887a90..24413caf6a 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -523,6 +523,7 @@ F32 LLDrawable::updateXform(BOOL undamped)  		dist_squared = dist_vec_squared(new_pos, target_pos);  		LLQuaternion new_rot = nlerp(lerp_amt, old_rot, target_rot); +		// FIXME: This can be negative! It is be possible for some rots to 'cancel out' pos or size changes.  		dist_squared += (1.f - dot(new_rot, target_rot)) * 10.f;  		LLVector3 new_scale = lerp(old_scale, target_scale, lerp_amt); @@ -548,9 +549,12 @@ F32 LLDrawable::updateXform(BOOL undamped)  	}  	else  	{ -		dist_squared = dist_vec_squared(old_pos, target_pos); -		dist_squared += (1.f - dot(old_rot, target_rot)) * 10.f; -		dist_squared += dist_vec_squared(old_scale, target_scale); +		// The following fixes MAINT-1742 but breaks vehicles similar to MAINT-2275 +		// dist_squared = dist_vec_squared(old_pos, target_pos); + +		// The following fixes MAINT-2247 but causes MAINT-2275 +		//dist_squared += (1.f - dot(old_rot, target_rot)) * 10.f; +		//dist_squared += dist_vec_squared(old_scale, target_scale);  	}  	LLVector3 vec = mCurrentScale-target_scale; diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 39a429e9c6..17311dd75e 100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -215,17 +215,19 @@ public:  	~LLMeshHeaderResponder()  	{ -		if (!mProcessed && !LLApp::isQuitting()) -		{ //something went wrong, retry -			llwarns << "Timeout or service unavailable, retrying." << llendl; -			LLMeshRepository::sHTTPRetryCount++; -			LLMeshRepoThread::HeaderRequest req(mMeshParams); -			LLMutexLock lock(gMeshRepo.mThread->mMutex); -			gMeshRepo.mThread->mHeaderReqQ.push(req); +		if (!LLApp::isQuitting()) +		{ +			if (!mProcessed) +			{ //something went wrong, retry +				llwarns << "Timeout or service unavailable, retrying." << llendl; +				LLMeshRepository::sHTTPRetryCount++; +				LLMeshRepoThread::HeaderRequest req(mMeshParams); +				LLMutexLock lock(gMeshRepo.mThread->mMutex); +				gMeshRepo.mThread->mHeaderReqQ.push(req); +			} +			LLMeshRepoThread::decActiveHeaderRequests();  		} - -		LLMeshRepoThread::decActiveHeaderRequests();  	}  	virtual void completedRaw(U32 status, const std::string& reason, @@ -252,13 +254,16 @@ public:  	~LLMeshLODResponder()  	{ -		if (!mProcessed && !LLApp::isQuitting()) +		if (!LLApp::isQuitting())  		{ -			llwarns << "Killed without being processed, retrying." << llendl; -			LLMeshRepository::sHTTPRetryCount++; -			gMeshRepo.mThread->lockAndLoadMeshLOD(mMeshParams, mLOD); +			if (!mProcessed) +			{ +				llwarns << "Killed without being processed, retrying." << llendl; +				LLMeshRepository::sHTTPRetryCount++; +				gMeshRepo.mThread->lockAndLoadMeshLOD(mMeshParams, mLOD); +			} +			LLMeshRepoThread::decActiveLODRequests();  		} -		LLMeshRepoThread::decActiveLODRequests();  	}  	virtual void completedRaw(U32 status, const std::string& reason, diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 35e2e96bab..36234b9536 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -186,8 +186,11 @@ private:  	// Populate the menu with items like "New Skin", "New Pants", etc.  	static void populateCreateWearableSubmenus(LLMenuGL* menu)  	{ -		LLView* menu_clothes	= gMenuHolder->getChildView("COF.Gear.New_Clothes", FALSE); -		LLView* menu_bp			= gMenuHolder->getChildView("COF.Geear.New_Body_Parts", FALSE); +        // MAINT-2276...these menus are created as dummies because they are not available +        // when this function is called. This prevents their parent from popping up later. +        // +		//LLView* menu_clothes	= gMenuHolder->getChildView("COF.Gear.New_Clothes", FALSE); +		//LLView* menu_bp			= gMenuHolder->getChildView("COF.Geear.New_Body_Parts", FALSE);  		for (U8 i = LLWearableType::WT_SHAPE; i != (U8) LLWearableType::WT_COUNT; ++i)  		{ @@ -200,8 +203,11 @@ private:  			p.on_click.function_name = "Wearable.Create";  			p.on_click.parameter = LLSD(type_name); -			LLView* parent = LLWearableType::getAssetType(type) == LLAssetType::AT_CLOTHING ? -				menu_clothes : menu_bp; +            //LLView* parent = LLWearableType::getAssetType(type) == LLAssetType::AT_CLOTHING ? menu_clothes : menu_bp; +            // This is a work-around for MAINT-2276 wherein the parent toggleable menu does not appear +            // It puts everything under one menu, but that menu appears, which is better than not. +            //  +			LLView* parent =  menu;  			LLUICtrlFactory::create<LLMenuItemCallGL>(p, parent);  		}  	} diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 5da1561afe..4cdb568d17 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -1540,17 +1540,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use  	// Actually extract the data.  	if (parcel)  	{ -		if (sequence_id == SELECTED_PARCEL_SEQ_ID -			&& parcel->getLocalID() != INVALID_PARCEL_ID -			&& parcel->getLocalID() != local_id) -		{ -			// The parcel has a valid parcel ID but it doesn't match the parcel -			// for the data received. -			llinfos << "Expecting data for parcel " << parcel->getLocalID() \ -					<< " but got data for parcel " << local_id << llendl; -			return; -		} -  		parcel->init(owner_id,  			FALSE, FALSE, FALSE,  			claim_date, claim_price_per_meter, rent_price_per_meter, diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 44c18c2cce..c8f5cbb2b0 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -8874,14 +8874,6 @@ Cannot save to object contents: This would modify the attachment permissions.    <notification     icon="alertmodal.tga" -   name="NoPermToEdit" -   type="notify"> -   <tag>fail</tag> -Not permitted to edit this! -  </notification> - -  <notification -   icon="alertmodal.tga"     name="TooManyScripts"     type="notify">     <tag>fail</tag> @@ -8922,47 +8914,6 @@ You cannot modify the navmesh across region boundaries.    <notification     icon="alertmodal.tga" -   name="NoPermModifyObject" -   type="notify"> -   <tag>fail</tag> -You don't have permission to modify that object. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantEnablePhysObjContributesToNav" -   type="notify"> -   <tag>fail</tag> -Can't enable physics for an object that contributes to the navmesh. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantEnablePhysKeyframedObj" -   type="notify"> -   <tag>fail</tag> -Can't enable physics for keyframed objects. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantEnablePhysNotEnoughLandResources" -   type="notify"> -   <tag>fail</tag> -Can't enable physics for object -- insufficient land resources. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantEnablePhysCostTooGreat" -   persist="true" -   type="notify"> -   <tag>fail</tag> -Can't enable physics for object with physics resource cost greater than [MAX_OBJECTS] -  </notification> - -  <notification -   icon="alertmodal.tga"     name="NoSetPhysicsPropertiesOnObjectType"     type="notify">     <tag>fail</tag> @@ -9987,1693 +9938,4 @@ An internal error prevented us from properly updating your viewer.  The L$ balan  Cannot create large prims that intersect other players.  Please re-try when other players have moved.    </notification> - -  <notification -   icon="alertmodal.tga" -   name="AvatarFrozen" -   type="notify"> -   <tag>fail</tag> -[AV_FREEZER] has frozen you. You cannot move or interact with the world. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="AvatarFrozenDuration" -   type="notify"> -   <tag>fail</tag> -[AV_FREEZER] has frozen you for [AV_FREEZE_TIME] seconds. You cannot move or interact with the world. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="YouFrozeAvatar" -   type="notify"> -   <tag>fail</tag> -Avatar frozen. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="AvatarHasUnFrozenYou" -   type="notify"> -   <tag>fail</tag> -[AV_FREEZER] has unfrozen you. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="AvatarUnFrozen" -   type="notify"> -   <tag>fail</tag> -Avatar unfrozen. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="AvatarFreezeFailure" -   type="notify"> -   <tag>fail</tag> -Freeze failed because you don't have admin permission for that parcel. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="AvatarFreezeThaw" -   type="notify"> -   <tag>fail</tag> -Your freeze expired, go about your business. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="AvatarCantFreeze" -   type="notify"> -   <tag>fail</tag> -Sorry, can't freeze that user. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NowOwnObject" -   type="notify"> -   <tag>fail</tag> -You are now the owner of object [OBJECT_NAME] -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantRezOnLand" -   type="notify"> -   <tag>fail</tag> -Can't rez object at [OBJECT_POS] because the owner of this land does not allow it.  Use the land tool to see land ownership. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="RezFailTooManyRequests" -   type="notify"> -   <tag>fail</tag> -Object can not be rezzed because there are too many requests. -  </notification> -  -  <notification -   icon="alertmodal.tga" -   name="SitFailCantMove" -   type="notify"> -   <tag>fail</tag> -You cannot sit because you cannot move at this time. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="SitFailNotAllowedOnLand" -   type="notify"> -   <tag>fail</tag> -You cannot sit because you are not allowed on that land. -  </notification> -  -  <notification -   icon="alertmodal.tga" -   name="SitFailNotSameRegion" -   type="notify"> -   <tag>fail</tag> -Try moving closer.  Can't sit on object because -it is not in the same region as you. -  </notification> -   -  <notification -   icon="alertmodal.tga" -   name="NoNewObjectRegionFull" -   type="notify"> -   <tag>fail</tag> -Unable to create new object. The region is full. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="FailedToPlaceObject" -   type="notify"> -   <tag>fail</tag> -Failed to place object at specified location.  Please try again. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoOwnNoGardening" -   type="notify"> -   <tag>fail</tag> -You Can't create trees and grass on land you don't own. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoCopyPermsNoObject" -   type="notify"> -   <tag>fail</tag> -Copy failed because you lack permission to copy the object '[OBJ_NAME]'. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoTransPermsNoObject" -   type="notify"> -   <tag>fail</tag> -Copy failed because the object '[OBJ_NAME]' cannot be transferred to you. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="AddToNavMeshNoCopy" -   type="notify"> -   <tag>fail</tag> -Copy failed because the object '[OBJ_NAME]' contributes to navmesh. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="DupeWithNoRootsSelected" -   type="notify"> -   <tag>fail</tag> -Duplicate with no root objects selected. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDupeCuzRegionIsFull" -   type="notify"> -   <tag>fail</tag> -Can't duplicate objects because the region is full. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDupeCuzParcelNotFound" -   type="notify"> -   <tag>fail</tag> -Can't duplicate objects - Can't find the parcel they are on. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantCreateCuzParcelFull" -   type="notify"> -   <tag>fail</tag> -Can't create object because  -the parcel is full. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="RezAttemptFailed" -   type="notify"> -   <tag>fail</tag> -Attempt to rez an object failed. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="ToxicInvRezAttemptFailed" -   type="notify"> -   <tag>fail</tag> -Unable to create item that has caused problems on this region. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="InvItemIsBlacklisted" -   type="notify"> -   <tag>fail</tag> -That inventory item has been blacklisted. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoCanRezObjects" -   type="notify"> -   <tag>fail</tag> -You are not currently allowed to create objects. -  </notification> -  -  <notification -   icon="alertmodal.tga" -   name="LandSearchBlocked" -   type="notify"> -   <tag>fail</tag> -Land Search Blocked. -You have performed too many land searches too quickly. -Please try again in a minute. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NotEnoughResourcesToAttach" -   type="notify"> -   <tag>fail</tag> -Not enough script resources available to attach object! -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="YouDiedAndGotTPHome" -   type="notify"> -   <tag>fail</tag> -You died and have been teleported to your home location -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="EjectComingSoon" -   type="notify"> -   <tag>fail</tag> -You are no longer allowed here and have [EJECT_TIME] seconds to leave. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoEnterServerFull" -   type="notify"> -   <tag>fail</tag> -You can't enter this region because  -the server is full. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="SaveBackToInvDisabled" -   type="notify"> -   <tag>fail</tag> -Save Back To Inventory has been disabled. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoExistNoSaveToContents" -   type="notify"> -   <tag>fail</tag> -Cannot save '[OBJ_NAME]' to object contents because the object it was rezzed from no longer exists. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoModNoSaveToContents" -   type="notify"> -   <tag>fail</tag> -Cannot save '[OBJ_NAME]' to object contents because you do not have permission to modify the object '[DEST_NAME]'. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoSaveBackToInvDisabled" -   type="notify"> -   <tag>fail</tag> -Cannot save '[OBJ_NAME]' back to inventory -- this operation has been disabled. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoCopyNoSelCopy" -   type="notify"> -   <tag>fail</tag> -You cannot copy your selection because you do not have permission to copy the object '[OBJ_NAME]'. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoTransNoSelCopy" -   type="notify"> -   <tag>fail</tag> -You cannot copy your selection because the object '[OBJ_NAME]' is not transferrable. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoTransNoCopy" -   type="notify"> -   <tag>fail</tag> -You cannot copy your selection because the object '[OBJ_NAME]' is not transferrable. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoPermsNoRemoval" -   type="notify"> -   <tag>fail</tag> -Removal of the object '[OBJ_NAME]' from the simulator is disallowed by the permissions system. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoModNoSaveSelection" -   type="notify"> -   <tag>fail</tag> -Cannot save your selection because you do not have permission to modify the object '[OBJ_NAME]'. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoCopyNoSaveSelection" -   type="notify"> -   <tag>fail</tag> -Cannot save your selection because the object '[OBJ_NAME]' is not copyable. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoModNoTaking" -   type="notify"> -   <tag>fail</tag> -You cannot take your selection because you do not have permission to modify the object '[OBJ_NAME]'. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="RezDestInternalError" -   type="notify"> -   <tag>fail</tag> -Internal Error: Unknown destination type. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="DeleteFailObjNotFound" -   type="notify"> -   <tag>fail</tag> -Delete failed because object not found -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="SorryCantEjectUser" -   type="notify"> -   <tag>fail</tag> -Sorry, can't eject that user. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="RegionSezNotAHome" -   type="notify"> -   <tag>fail</tag> -This region does not allow you to set your home location here. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="HomeLocationLimits" -   type="notify"> -   <tag>fail</tag> -You can only set your 'Home Location' on your land or at a mainland Infohub. -   </notification> - -  <notification -   icon="alertmodal.tga" -   name="HomePositionSet" -   type="notify"> -   <tag>fail</tag> -Home position set. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="AvatarEjected" -   type="notify"> -   <tag>fail</tag> -Avatar ejected. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="AvatarEjectFailed" -   type="notify"> -   <tag>fail</tag> -Eject failed because you don't have admin permission for that parcel. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantMoveObjectParcelFull" -   type="notify"> -   <tag>fail</tag> -Can't move object '[OBJECT_NAME]' to -[OBJ_POSITION] in region [REGION_NAME] because the parcel is full. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantMoveObjectParcelPerms" -   type="notify"> -   <tag>fail</tag> -Can't move object '[OBJECT_NAME]' to -[OBJ_POSITION] in region [REGION_NAME] because your objects are not allowed on this parcel. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantMoveObjectParcelResources" -   type="notify"> -   <tag>fail</tag> -Can't move object '[OBJECT_NAME]' to -[OBJ_POSITION] in region [REGION_NAME] because there are not enough resources for this object on this parcel. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantMoveObjectRegionVersion" -   type="notify"> -   <tag>fail</tag> -Can't move object '[OBJECT_NAME]' to -[OBJ_POSITION] in region [REGION_NAME] because the other region is running an older version which does not support receiving this object via region crossing. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantMoveObjectNavMesh" -   type="notify"> -   <tag>fail</tag> -Can't move object '[OBJECT_NAME]' to -[OBJ_POSITION] in region [REGION_NAME] because you cannot modify the navmesh across region boundaries. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantMoveObjectWTF" -   type="notify"> -   <tag>fail</tag> -Can't move object '[OBJECT_NAME]' to -[OBJ_POSITION] in region [REGION_NAME] because of an unknown reason. ([FAILURE_TYPE]) -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoPermModifyObject" -   type="notify"> -   <tag>fail</tag> -You don't have permission to modify that object -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantEnablePhysObjContributesToNav" -   type="notify"> -   <tag>fail</tag> -Can't enable physics for an object that contributes to the navmesh. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantEnablePhysKeyframedObj" -   type="notify"> -   <tag>fail</tag> -Can't enable physics for keyframed objects. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantEnablePhysNotEnoughLandResources" -   type="notify"> -   <tag>fail</tag> -Can't enable physics for object -- insufficient land resources. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantEnablePhysCostTooGreat" -   persist="true" -   type="notify"> -   <tag>fail</tag> -Can't enable physics for object with physics resource cost greater than [MAX_OBJECTS] -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="PhantomWithConcavePiece" -   type="notify"> -   <tag>fail</tag> -This object cannot have a concave piece because it is phantom and contributes to the navmesh. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="UnableAddItem" -   type="notify"> -   <tag>fail</tag> -Unable to add item! -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="UnableEditItem" -   type="notify"> -   <tag>fail</tag> -Unable to edit this! -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoPermToEdit" -   type="notify"> -   <tag>fail</tag> -Not permitted to edit this. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoPermToCopyInventory" -   type="notify"> -   <tag>fail</tag> -Not permitted to copy that inventory. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantSaveItemDoesntExist" -   type="notify"> -   <tag>fail</tag> -Cannot save to object contents: Item no longer exists. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantSaveItemAlreadyExists" -   type="notify"> -   <tag>fail</tag> -Cannot save to object contents: Item with that name already exists in inventory -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantSaveModifyAttachment" -   type="notify"> -   <tag>fail</tag> -Cannot save to object contents: This would modify the attachment permissions. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoPermToEdit" -   type="notify"> -   <tag>fail</tag> -Not permitted to edit this! -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="TooManyScripts" -   type="notify"> -   <tag>fail</tag> -Too many scripts. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="UnableAddScript" -   type="notify"> -   <tag>fail</tag> -Unable to add script! -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="AssetServerTimeoutObjReturn" -   type="notify"> -   <tag>fail</tag> -Asset server didn't respond in a timely fashion.  Object returned to sim. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="RegionDisablePhysicsShapes" -   type="notify"> -   <tag>fail</tag> -This region does not have physics shapes enabled. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoModNavmeshAcrossRegions" -   type="notify"> -   <tag>fail</tag> -You cannot modify the navmesh across region boundaries. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoPermModifyObject" -   type="notify"> -   <tag>fail</tag> -You don't have permission to modify that object. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantEnablePhysObjContributesToNav" -   type="notify"> -   <tag>fail</tag> -Can't enable physics for an object that contributes to the navmesh. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantEnablePhysKeyframedObj" -   type="notify"> -   <tag>fail</tag> -Can't enable physics for keyframed objects. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantEnablePhysNotEnoughLandResources" -   type="notify"> -   <tag>fail</tag> -Can't enable physics for object -- insufficient land resources. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantEnablePhysCostTooGreat" -   persist="true" -   type="notify"> -   <tag>fail</tag> -Can't enable physics for object with physics resource cost greater than [MAX_OBJECTS] -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoSetPhysicsPropertiesOnObjectType" -   type="notify"> -   <tag>fail</tag> -Cannot set physics properties on that object type. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoSetRootPrimWithNoShape" -   type="notify"> -   <tag>fail</tag> -Cannot set root prim to have no shape. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoRegionSupportPhysMats" -   type="notify"> -   <tag>fail</tag> -This region does not have physics materials enabled. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="OnlyRootPrimPhysMats" -   type="notify"> -   <tag>fail</tag> -Only root prims may have their physics materials adjusted. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoSupportCharacterPhysMats" -   type="notify"> -   <tag>fail</tag> -Setting physics materials on characters is not yet supported. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="InvalidPhysMatProperty" -   type="notify"> -   <tag>fail</tag> -One or more of the specified physics material properties was invalid. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoPermsAlterStitchingMeshObj" -   type="notify"> -   <tag>fail</tag> -You may not alter the stitching type of a mesh object. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoPermsAlterShapeMeshObj" -   type="notify"> -   <tag>fail</tag> -You may not alter the shape of a mesh object -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="FullRegionCantEnter" -   type="notify"> -   <tag>fail</tag> -You can't enter this region because \nthe region is full. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="LinkFailedOwnersDiffer" -   type="notify"> -   <tag>fail</tag> -Link failed -- owners differ -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="LinkFailedNoModNavmeshAcrossRegions" -   type="notify"> -   <tag>fail</tag> -Link failed -- cannot modify the navmesh across region boundaries. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="LinkFailedNoPermToEdit" -   type="notify"> -   <tag>fail</tag> -Link failed because you do not have edit permission. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="LinkFailedTooManyPrims" -   type="notify"> -   <tag>fail</tag> -Link failed -- too many primitives -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="LinkFailedCantLinkNoCopyNoTrans" -   type="notify"> -   <tag>fail</tag> -Link failed -- cannot link no-copy with no-transfer -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="LinkFailedNothingLinkable" -   type="notify"> -   <tag>fail</tag> -Link failed -- nothing linkable. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="LinkFailedTooManyPathfindingChars" -   type="notify"> -   <tag>fail</tag> -Link failed -- too many pathfinding characters -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="LinkFailedInsufficientLand" -   type="notify"> -   <tag>fail</tag> -Link failed -- insufficient land resources -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="LinkFailedTooMuchPhysics" -   type="notify"> -   <tag>fail</tag> -Object uses too many physics resources -- its dynamics have been disabled. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="TeleportedHomeByObjectOnParcel" -   persist="true" -   type="notify"> -   <tag>fail</tag> -You have been teleported home by the object '[OBJECT_NAME]' on the parcel '[PARCEL_NAME]' -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="TeleportedHomeByObject" -   persist="true" -   type="notify"> -   <tag>fail</tag> -You have been teleported home by the object '[OBJECT_NAME]' -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="TeleportedByAttachment" -   type="notify"> -   <tag>fail</tag> -You have been teleported by an attachment on [ITEM_ID] -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="TeleportedByObjectOnParcel" -   type="notify"> -   <tag>fail</tag> -You have been teleported by the object '[OBJECT_NAME]' on the parcel '[PARCEL_NAME]' -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="TeleportedByObjectOwnedBy" -   type="notify"> -   <tag>fail</tag> -You have been teleported by the object '[OBJECT_NAME]' owned by [OWNER_ID] -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="TeleportedByObjectUnknownUser" -   type="notify"> -   <tag>fail</tag> -You have been teleported by the object '[OBJECT_NAME]' owned by an unknown user. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantCreateObjectRegionFull" -   type="notify"> -   <tag>fail</tag> -Unable to create requested object. The region is full. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantAttackMultipleObjOneSpot" -   type="notify"> -   <tag>fail</tag> -You can't attach multiple objects to one spot. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantCreateMultipleObjAtLoc" -   type="notify"> -   <tag>fail</tag> -You can't create multiple objects here. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="UnableToCreateObjTimeOut" -   type="notify"> -   <tag>fail</tag> -Unable to create requested object. Object is missing from database. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="UnableToCreateObjUnknown" -   type="notify"> -   <tag>fail</tag> -Unable to create requested object. The request timed out. Please try again. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="UnableToCreateObjMissingFromDB" -   type="notify"> -   <tag>fail</tag> -Unable to create requested object. Please try again. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="RezFailureTookTooLong" -   type="notify"> -   <tag>fail</tag> -Rez failed, requested object took too long to load. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="FailedToPlaceObjAtLoc" -   type="notify"> -   <tag>fail</tag> -Failed to place object at specified location.  Please try again. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantCreatePlantsOnLand" -   type="notify"> -   <tag>fail</tag> -You cannot create plants on this land. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantRestoreObjectNoWorldPos" -   type="notify"> -   <tag>fail</tag> -Cannot restore object. No world position found. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantRezObjectInvalidMeshData" -   type="notify"> -   <tag>fail</tag> -Unable to rez object because its mesh data is invalid. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantRezObjectTooManyScripts" -   type="notify"> -   <tag>fail</tag> -Unable to rez object because there are already too many scripts in this region. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantCreateObjectNoAccess" -   type="notify"> -   <tag>fail</tag> -Your access privileges don't allow you to create objects there. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantCreateObject" -   type="notify"> -   <tag>fail</tag> -You are not currently allowed to create objects. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="InvalidObjectParams" -   type="notify"> -   <tag>fail</tag> -Invalid object parameters -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDuplicateObjectNoAcess" -   type="notify"> -   <tag>fail</tag> -Your access privileges don't allow you to duplicate objects here. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantChangeShape" -   type="notify"> -   <tag>fail</tag> -You are not allowed to change this shape. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoAccessToClaimObjects" -   type="notify"> -   <tag>fail</tag> -Your access privileges don't allow you to claim objects here. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="DeedFailedNoPermToDeedForGroup" -   type="notify"> -   <tag>fail</tag> -Deed failed because you do not have permission to deed objects for your group. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="NoPrivsToBuyObject" -   type="notify"> -   <tag>fail</tag> -Your access privileges don't allow you to buy objects here. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantAttachObjectAvatarSittingOnIt" -   type="notify"> -   <tag>fail</tag> -Cannot attach object because an avatar is sitting on it. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="WhyAreYouTryingToWearShrubbery" -   type="notify"> -   <tag>fail</tag> -Trees and grasses cannot be worn as attachments. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantAttachGroupOwnedObjs" -   type="notify"> -   <tag>fail</tag> -Cannot attach group-owned objects. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantAttachObjectsNotOwned" -   type="notify"> -   <tag>fail</tag> -Cannot attach objects that you don't own. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantAttachNavmeshObjects" -   type="notify"> -   <tag>fail</tag> -Cannot attach objects that contribute to navmesh. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantAttachObjectNoMovePermissions" -   type="notify"> -   <tag>fail</tag> -Cannot attach object because you do not have permission to move it. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantAttachNotEnoughScriptResources" -   type="notify"> -   <tag>fail</tag> -Not enough script resources available to attach object! -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDropItemTrialUser" -   type="notify"> -   <tag>fail</tag> -You can't drop objects here; try the Free Trial area. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDropMeshAttachment" -   type="notify"> -   <tag>fail</tag> -You can't drop mesh attachments. Detach to inventory and then rez in world. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDropAttachmentNoPermission" -   type="notify"> -   <tag>fail</tag> -Failed to drop attachment: you don't have permission to drop there. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDropAttachmentInsufficientLandResources" -   type="notify"> -   <tag>fail</tag> -Failed to drop attachment: insufficient available land resource. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDropAttachmentInsufficientResources" -   type="notify"> -   <tag>fail</tag> -Failed to drop attachments: insufficient available resources. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDropObjectFullParcel" -   type="notify"> -   <tag>fail</tag> -Cannot drop object here.  Parcel is full. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantTouchObjectBannedFromParcel" -   type="notify"> -   <tag>fail</tag> -Can't touch/grab this object because you are banned from the land parcel. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="PlzNarrowDeleteParams" -   type="notify"> -   <tag>fail</tag> -Please narrow your delete parameters. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="UnableToUploadAsset" -   type="notify"> -   <tag>fail</tag> -Unable to upload asset. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantTeleportCouldNotFindUser" -   type="notify"> -   <tag>fail</tag> -Could not find user to teleport home -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="GodlikeRequestFailed" -   type="notify"> -   <tag>fail</tag> -godlike request failed -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="GenericRequestFailed" -   type="notify"> -   <tag>fail</tag> -generic request failed -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantUploadPostcard" -   type="notify"> -   <tag>fail</tag> -Unable to upload postcard.  Try again later. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantFetchInventoryForGroupNotice" -   type="notify"> -   <tag>fail</tag> -Unable to fetch inventory details for the group notice. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantSendGroupNoticeNotPermitted" -   type="notify"> -   <tag>fail</tag> -Unable to send group notice -- not permitted. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantSendGroupNoticeCantConstructInventory" -   type="notify"> -   <tag>fail</tag> -Unable to send group notice -- could not construct inventory. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantParceInventoryInNotice" -   type="notify"> -   <tag>fail</tag> -Unable to parse inventory in notice. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="TerrainUploadFailed" -   type="notify"> -   <tag>fail</tag> -Terrain upload failed. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="TerrainFileWritten" -   type="notify"> -   <tag>fail</tag> -Terrain file written. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="TerrainFileWrittenStartingDownload" -   type="notify"> -   <tag>fail</tag> -Terrain file written, starting download... -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="TerrainBaked" -   type="notify"> -   <tag>fail</tag> -Terrain baked. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="TenObjectsDisabledPlzRefresh" -   type="notify"> -   <tag>fail</tag> -Only the first 10 selected objects have been disabled. Refresh and make additional selections if required. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="UpdateViewerBuyParcel" -   type="notify"> -   <tag>fail</tag> -You need to update your viewer to buy this parcel. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="LandBuyAccessBlocked" -   type="notify"> -   <tag>fail</tag> -You can't buy this land due to your maturity Rating. You may need to validate your age and/or install the latest Viewer. Please go to the Knowledge Base for details on accessing areas with this maturity Rating. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantBuyParcelNotForSale" -   type="notify"> -   <tag>fail</tag> -Unable to buy, this parcel is not for sale. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantBuySalePriceOrLandAreaChanged" -   type="notify"> -   <tag>fail</tag> -Unable to buy, the sale price or land area has changed. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantBuyParcelNotAuthorized" -   type="notify"> -   <tag>fail</tag> -You are not the authorized buyer for this parcel. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantBuyParcelAwaitingPurchaseAuth" -   type="notify"> -   <tag>fail</tag> -You cannot purchase this parcel because it is already awaiting purchase aut -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantBuildOverflowParcel" -   type="notify"> -   <tag>fail</tag> -You cannot build objects here because doing so would overflow the parcel. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="SelectedMultipleOwnedLand" -   type="notify"> -   <tag>fail</tag> -You selected land with different owners. Please select a smaller area and try again. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantJoinTooFewLeasedParcels" -   type="notify"> -   <tag>fail</tag> -Not enough leased parcels in selection to join. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDivideLandMultipleParcelsSelected" -   type="notify"> -   <tag>fail</tag> -Can't divide land.\nThere is more than one parcel selected.\nTry selecting a smaller piece of land. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDivideLandCantFindParcel" -   type="notify"> -   <tag>fail</tag> -Can't divide land.\nCan't find the parcel.\nPlease report with Help -> Reprt Bug... -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDivideLandWholeParcelSelected" -   type="notify"> -   <tag>fail</tag> -Can't divide land. Whole parcel is selected.\nTry selecting a smaller piece of land. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="LandHasBeenDivided" -   type="notify"> -   <tag>fail</tag> -Land has been divided. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="PassPurchased" -   type="notify"> -   <tag>fail</tag> -You purchased a pass. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="RegionDisallowsClassifieds" -   type="notify"> -   <tag>fail</tag> -Region does not allow classified advertisements. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="LandPassExpireSoon" -   type="notify"> -   <tag>fail</tag> -Your pass to this land is about to expire. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantSitNoSuitableSurface" -   type="notify"> -   <tag>fail</tag> -There is no suitable surface to sit on, try another spot. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantSitNoRoom" -   type="notify"> -   <tag>fail</tag> -No room to sit here, try another spot. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="AutopilotCanceled" -   type="notify"> -   <tag>fail</tag> -Autopilot canceled -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="ClaimObjectFailedNoPermission" -   type="notify"> -   <tag>fail</tag> -Claim object failed because you don't have permission -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="ClaimObjectFailedNoMoney" -   type="notify"> -   <tag>fail</tag> -Claim object failed because you don't have enough L$. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDeedGroupLand" -   type="notify"> -   <tag>fail</tag> -Cannot deed group-owned land. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="BuyObjectFailedNoMoney" -   type="notify"> -   <tag>fail</tag> -Buy object failed because you don't have enough L$. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="BuyInventoryFailedNoMoney" -   type="notify"> -   <tag>fail</tag> -Buy inventory failed because you do not have enough L$ -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="BuyPassFailedNoMoney" -   type="notify"> -   <tag>fail</tag> -You don't have enough L$ to buy a pass to this land. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantBuyPassTryAgain" -   type="notify"> -   <tag>fail</tag> -Unable to buy pass right now.  Try again later. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantCreateObjectParcelFull" -   type="notify"> -   <tag>fail</tag> -Can't create object because \nthe parcel is full. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="FailedPlacingObject" -   type="notify"> -   <tag>fail</tag> -Failed to place object at specified location.  Please try again. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantCreateLandmarkForEvent" -   type="notify"> -   <tag>fail</tag> -Unable to create landmark for event. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="GodBeatsFreeze" -   type="notify"> -   <tag>fail</tag> -Your godlike powers break the freeze! -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="SpecialPowersRequestFailedLogged" -   type="notify"> -   <tag>fail</tag> -Request for special powers failed. This request has been logged. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="ExpireExplanation" -   type="notify"> -   <tag>fail</tag> -The system is currently unable to process your request. The request timed out. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="DieExplanation" -   type="notify"> -   <tag>fail</tag> -The system is unable to process your request. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="AddPrimitiveFailure" -   type="notify"> -   <tag>fail</tag> -Insufficient funds to create primitve. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="RezObjectFailure" -   type="notify"> -   <tag>fail</tag> -Insufficient funds to create object. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="ResetHomePositionNotLegal" -   type="notify"> -   <tag>fail</tag> -Reset Home position since Home wasn't legal. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantInviteRegionFull" -   type="notify"> -   <tag>fail</tag> -You cannot currently invite anyone to your location because the region is full. Try again later. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantSetHomeAtRegion" -   type="notify"> -   <tag>fail</tag> -This region does not allow you to set your home location here. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="ListValidHomeLocations" -   type="notify"> -   <tag>fail</tag> -You can only set your 'Home Location' on your land or at a mainland Infohub. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="SetHomePosition" -   type="notify"> -   <tag>fail</tag> -Home position set. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDerezInventoryError" -   type="notify"> -   <tag>fail</tag> -Cannot derez object due to inventory fault. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantCreateRequestedInv" -   type="notify"> -   <tag>fail</tag> -Cannot create requested inventory. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantCreateRequestedInvFolder" -   type="notify"> -   <tag>fail</tag> -Cannot create requested inventory folder. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantCreateInventory" -   type="notify"> -   <tag>fail</tag> -Cannot create that inventory. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantCreateLandmark" -   type="notify"> -   <tag>fail</tag> -Cannot create landmark. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantCreateOutfit" -   type="notify"> -   <tag>fail</tag> -Cannot create outfit right now. Try again in a minute. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="InventoryNotForSale" -   type="notify"> -   <tag>fail</tag> -Inventory is not for sale. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantFindInvItem" -   type="notify"> -   <tag>fail</tag> -Unable to find inventory item. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantFindObject" -   type="notify"> -   <tag>fail</tag> -Unable to find object. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantTransfterMoneyRegionDisabled" -   type="notify"> -   <tag>fail</tag> -Money transfers to objects are currently disabled in this region. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantPayNoAgent" -   type="notify"> -   <tag>fail</tag> -Could not figure out who to pay. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="CantDonateToPublicObjects" -   type="notify"> -   <tag>fail</tag> -You cannot give L$ to public objects. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="InventoryCreationInWorldObjectFailed" -   type="notify"> -   <tag>fail</tag> -Inventory creation on in-world object failed. -  </notification> - -  <notification -   icon="alertmodal.tga" -   name="UserBalanceOrLandUsageError" -   type="notify"> -   <tag>fail</tag> -An internal error prevented us from properly updating your viewer.  The L$ balance or parcel holdings displayed in your viewer may not reflect your actual balance on the servers. -  </notification> - -  </notifications> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index 849f3ef73d..cd243d40a4 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -147,12 +147,12 @@       height="12"       layout="topleft"       left_delta="87" -     name="ShadersPrefText3" +     name="ShadersPrefText2"       top_delta="0"       width="80">          Mid      </text> -  <text +    <text       type="string"       length="1"       follows="left|top" @@ -163,8 +163,8 @@       name="ShadersPrefText3"       top_delta="0"       width="80"> -      High -  </text> +        High +    </text>      <text       type="string"       length="1" diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 7a41520429..69248e26bc 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -968,7 +968,6 @@ class LinuxManifest(ViewerManifest):          if self.prefix(src="", dst="bin"):              self.path("secondlife-bin","do-not-directly-run-secondlife-bin")              self.path("../linux_crash_logger/linux-crash-logger","linux-crash-logger.bin") -            self.path("../linux_updater/linux-updater", "linux-updater.bin")              self.path2basename("../llplugin/slplugin", "SLPlugin")              self.path2basename("../viewer_components/updater/scripts/linux", "update_install")              self.end_prefix("bin") @@ -1017,9 +1016,7 @@ class LinuxManifest(ViewerManifest):              else:                  installer_name += '_' + self.channel_oneword().upper() -        if self.args['buildtype'].lower() == 'release' and self.is_packaging_viewer(): -            print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build" -            self.run_command("find %(d)r/bin %(d)r/lib -type f \\! -name update_install | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure +        self.strip_binaries()          # Fix access permissions          self.run_command(""" @@ -1054,6 +1051,11 @@ class LinuxManifest(ViewerManifest):                  'dst': self.get_dst_prefix(),                  'inst': self.build_path_of(installer_name)}) +    def strip_binaries(self): +        if self.args['buildtype'].lower() == 'release' and self.is_packaging_viewer(): +            print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build" +            self.run_command(r"find %(d)r/bin %(d)r/lib -type f \! -name update_install | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure +  class Linux_i686Manifest(LinuxManifest):      def construct(self):          super(Linux_i686Manifest, self).construct() @@ -1139,9 +1141,7 @@ class Linux_i686Manifest(LinuxManifest):                      self.path("libvivoxplatform.so")                      self.end_prefix("lib") -            if self.args['buildtype'].lower() == 'release' and self.is_packaging_viewer(): -                    print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build" -                    self.run_command("find %(d)r/bin %(d)r/lib -type f \\! -name update_install | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure +            self.strip_binaries()  class Linux_x86_64Manifest(LinuxManifest): diff --git a/indra/viewer_components/updater/scripts/linux/update_install b/indra/viewer_components/updater/scripts/linux/update_install index e0505a9f72..a9df9042fd 100644 --- a/indra/viewer_components/updater/scripts/linux/update_install +++ b/indra/viewer_components/updater/scripts/linux/update_install @@ -1,10 +1,217 @@  #! /bin/bash -INSTALL_DIR=$(cd "$(dirname "$0")/.." ; pwd) -export LD_LIBRARY_PATH="$INSTALL_DIR/lib" -bin/linux-updater.bin --file "$1" --dest "$INSTALL_DIR" --name "Second Life Viewer" --stringsdir "$INSTALL_DIR/skins/default/xui/en" --stringsfile "strings.xml" -if [ $? -ne 0 ] -   then echo $3 >> "$2" +# @file   update_install +# @author Nat Goodspeed +# @date   2013-01-09 +# @brief  Update the containing Second Life application bundle to the version in +#         the specified tarball. +#  +#         This bash implementation is derived from the previous linux-updater.bin +#         application. +#  +# $LicenseInfo:firstyear=2013&license=viewerlgpl$ +# Copyright (c) 2013, Linden Research, Inc. +# $/LicenseInfo$ + +# **************************************************************************** +#   script parameters +# **************************************************************************** +tarball="$1"                        # the file to install +markerfile="$2"                     # create this file on failure +mandatory="$3"                      # what to write to markerfile on failure + +# **************************************************************************** +#   helper functions +# **************************************************************************** +# empty array +cleanups=() + +# add a cleanup action to execute on exit +function cleanup { +    # wacky bash syntax for appending to array +    cleanups[${#cleanups[*]}]="$*" +} + +# called implicitly on exit +function onexit { +    for action in "${cleanups[@]}" +    do # don't quote, support actions consisting of multiple words +       $action +    done +} +trap 'onexit' EXIT + +# write to log file +function log { +    # our log file will be open as stderr -- but until we set up that +    # redirection, logging to stderr is better than nothing +    echo "$*" 1>&2 +} + +# We display status by leaving one background xmessage process running. This +# is the pid of that process. +statuspid="" + +function clear_message { +    [ -n "$statuspid" ] && kill $statuspid +    statuspid="" +} + +# make sure we remove any message box we might have put up +cleanup clear_message + +# can we use zenity, or must we fall back to xmessage? +zenpath="$(which zenity)" +if [ -n "$zenpath" ] +then # zenity on PATH and is executable +     # display a message box and continue +     function status { +         # clear any previous message +         clear_message +         # put up a new zenity box and capture its pid +         "$zenpath" --info --title "Second Life Viewer Updater" \ +                    --width=320 --height=120 --text="$*" & +         statuspid=$! +     } + +     # display an error box and wait for user +     function errorbox { +         "$zenpath" --error --title "Second Life Viewer Updater" \ +                    --width=320 --height=120 --text="$*" +     } + +else # no zenity, use xmessage instead +     # display a message box and continue +     function status { +         # clear any previous message +         clear_message +         # put up a new xmessage and capture its pid +         xmessage -buttons OK:2 -center "$*" & +         statuspid=$! +     } + +     # display an error box and wait for user +     function errorbox { +         xmessage -buttons OK:2 -center "$*" +     } +fi + +# display an error box and terminate +function fail { +    # Log the message +    log "$@" +    # tell subsequent viewer things went south +    echo "$mandatory" > "$markerfile" +    # add boilerplate +    errorbox "An error occurred while updating Second Life: +$* +Please download the latest viewer from www.secondlife.com." +    exit 1 +} + +# Find a graphical sudo program and define mysudo function. On error, $? is +# nonzero; output is in $err instead of being written to stdout/stderr. +gksudo="$(which gksudo)" +kdesu="$(which kdesu)" +if [ -n "$gksudo" ] +then function mysudo { +         # gksudo allows you to specify description +         err="$("$gksudo" --description "Second Life Viewer Updater" "$@" 2>&1)" +     } +elif [ -n "$kdesu" ] +then function mysudo { +         err="$("$kdesu" "$@" 2>&1)" +     } +else # couldn't find either one, just try it anyway +     function mysudo { +         err="$("$@" 2>&1)" +     }  fi -rm -f "$1" +# Move directories, using mysudo if we think it necessary. On error, $? is +# nonzero; output is in $err instead of being written to stdout/stderr. +function sudo_mv { +    # If we have write permission to both parent directories, shouldn't need +    # sudo. +    if [ -w "$(dirname "$1")" -a -w "$(dirname "$2")" ] +    then err="$(mv "$@" 2>&1)" +    else # use available sudo program; mysudo sets $? and $err +         mysudo mv "$@" +    fi +} + +# **************************************************************************** +#   main script logic +# **************************************************************************** +mydir="$(dirname "$0")" +# We happen to know that the viewer specifies a marker-file pathname within +# the logs directory. +logsdir="$(dirname "$markerfile")" +logname="$logsdir/updater.log" + +# move aside old updater.log; we're about to create a new one +[ -f "$logname" ] && mv "$logname" "$logname.old" + +# Set up redirections for this script such that stderr is logged. (But first +# move the previous stderr to file descriptor 3.) +exec 3>&2- 2> "$logname" + +# Rather than setting up a special pipeline to timestamp every line of stderr, +# produce header lines into log file indicating timestamp and the arguments +# with which we were invoked. +date 1>&2 +log "$0 $*" + +# Log every command we execute, along with any stderr it might produce +set -x + +status 'Installing Second Life...' + +# Creating tempdir under /tmp means it's possible that tempdir is on a +# different filesystem than INSTALL_DIR. One is tempted to create tempdir on a +# path derived from `dirname INSTALL_DIR` -- but it seems modern 'mv' can +# handle moving across filesystems?? +tempdir="$(mktemp -d)" +tempinstall="$tempdir/install" +# capture the actual error message, if any +err="$(mkdir -p "$tempinstall" 2>&1)" || fail "$err" +cleanup rm -rf "$tempdir" + +# If we already knew the name of the tarball's top-level directory, we could +# just move that when all was said and done. Since we don't, untarring to the +# 'install' subdir with --strip 1 effectively renames that top-level +# directory. +# untar failures tend to be voluminous -- don't even try to capture, just log +tar --strip 1 -xjf "$tarball" -C "$tempinstall" || fail "Untar command failed" + +INSTALL_DIR="$(cd "$mydir/.." ; pwd)" + +# Considering we're launched from a subdirectory of INSTALL_DIR, would be +# surprising if it did NOT already exist... +if [ -e "$INSTALL_DIR" ] +then backup="$INSTALL_DIR.backup" +     backupn=1 +     while [ -e "$backup" ] +     do backup="$INSTALL_DIR.backup.$backupn" +        ((backupn += 1)) +     done +     # on error, fail with actual error message from sudo_mv: permissions, +     # cross-filesystem mv, ...? +     sudo_mv "$INSTALL_DIR" "$backup" || fail "$err" +fi +# We unpacked the tarball into tempinstall. Move that. +if ! sudo_mv "$tempinstall" "$INSTALL_DIR" +then # If we failed to move the temp install to INSTALL_DIR, try to restore +     # INSTALL_DIR from backup. Save $err because next sudo_mv will trash it! +     realerr="$err" +     sudo_mv "$backup" "$INSTALL_DIR" +     fail "$realerr" +fi + +# Removing the tarball here, rather than with a 'cleanup' action, means we +# only remove it if we succeeded. +rm -f "$tarball" + +# Launch the updated viewer. Restore original stderr from file descriptor 3, +# though -- otherwise updater.log gets cluttered with the viewer log! +"$INSTALL_DIR/secondlife" 2>&3- & | 
