Allow Linden trees to preserve their type when taken into inventory and rezzed again. Allow Linden trees to be sensed by LLSensor as PASSIVE objects.

avinationmerge
Melanie 2013-05-26 14:11:48 +02:00
parent 0086c3b5fb
commit a348c8e44a
3 changed files with 20 additions and 4 deletions

View File

@ -387,7 +387,12 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
inventoryStoredPosition = objectGroup.RootPart.AttachOffset; inventoryStoredPosition = objectGroup.RootPart.AttachOffset;
inventoryStoredRotation = objectGroup.RootPart.AttachRotation; inventoryStoredRotation = objectGroup.RootPart.AttachRotation;
} }
objectGroup.RootPart.Shape.State = objectGroup.RootPart.AttachPoint;
// Trees could be attached and it's been done, but it makes
// no sense. State must be preserved because it's the tree type
if (objectGroup.RootPart.Shape.PCode != (byte)PCode.Tree &&
objectGroup.RootPart.Shape.PCode != (byte)PCode.NewTree)
objectGroup.RootPart.Shape.State = objectGroup.RootPart.AttachPoint;
objectGroup.AbsolutePosition = inventoryStoredPosition; objectGroup.AbsolutePosition = inventoryStoredPosition;
objectGroup.RootPart.RotationOffset = inventoryStoredRotation; objectGroup.RootPart.RotationOffset = inventoryStoredRotation;
@ -791,7 +796,9 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
g.RootPart.AttachPoint = g.RootPart.Shape.State; g.RootPart.AttachPoint = g.RootPart.Shape.State;
g.RootPart.AttachOffset = g.AbsolutePosition; g.RootPart.AttachOffset = g.AbsolutePosition;
g.RootPart.AttachRotation = g.GroupRotation; g.RootPart.AttachRotation = g.GroupRotation;
g.RootPart.Shape.State = 0; if (g.RootPart.Shape.PCode != (byte)PCode.NewTree &&
g.RootPart.Shape.PCode != (byte)PCode.Tree)
g.RootPart.Shape.State = 0;
} }
objlist.Add(g); objlist.Add(g);
@ -825,7 +832,9 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
g.RootPart.AttachPoint = g.RootPart.Shape.State; g.RootPart.AttachPoint = g.RootPart.Shape.State;
g.RootPart.AttachOffset = g.AbsolutePosition; g.RootPart.AttachOffset = g.AbsolutePosition;
g.RootPart.AttachRotation = g.GroupRotation; g.RootPart.AttachRotation = g.GroupRotation;
g.RootPart.Shape.State = 0; if (g.RootPart.Shape.PCode != (byte)PCode.NewTree &&
g.RootPart.Shape.PCode != (byte)PCode.Tree)
g.RootPart.Shape.State = 0;
objlist.Add(g); objlist.Add(g);
XmlElement el = (XmlElement)n; XmlElement el = (XmlElement)n;

View File

@ -272,6 +272,11 @@ namespace OpenSim.Region.Framework.Scenes
{ {
AttachmentPoint = 0; AttachmentPoint = 0;
// Don't zap trees
if (RootPart.Shape.PCode == (byte)PCode.Tree ||
RootPart.Shape.PCode == (byte)PCode.NewTree)
return;
// Even though we don't use child part state parameters for attachments any more, we still need to set // Even though we don't use child part state parameters for attachments any more, we still need to set
// these to zero since having them non-zero in rezzed scene objects will crash some clients. Even if // these to zero since having them non-zero in rezzed scene objects will crash some clients. Even if
// we store them correctly, scene objects that we receive from elsewhere might not. // we store them correctly, scene objects that we receive from elsewhere might not.

View File

@ -398,7 +398,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
objtype = 0; objtype = 0;
part = ((SceneObjectGroup)ent).RootPart; part = ((SceneObjectGroup)ent).RootPart;
if (part.ParentGroup.AttachmentPoint != 0) // Attached so ignore if (part.ParentGroup.RootPart.Shape.PCode != (byte)PCode.Tree &&
part.ParentGroup.RootPart.Shape.PCode != (byte)PCode.NewTree &&
part.ParentGroup.AttachmentPoint != 0) // Attached so ignore
continue; continue;
if (part.Inventory.ContainsScripts()) if (part.Inventory.ContainsScripts())