Allow coalesced objects to be rezzed even if they extend past the sim bounds

avinationmerge
Melanie 2013-06-18 04:42:20 +02:00
parent 0be80e5813
commit c78cb96c62
1 changed files with 6 additions and 2 deletions

View File

@ -788,6 +788,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
XmlDocument doc = new XmlDocument(); XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlData); doc.LoadXml(xmlData);
XmlElement e = (XmlElement)doc.SelectSingleNode("/CoalescedObject"); XmlElement e = (XmlElement)doc.SelectSingleNode("/CoalescedObject");
Vector3 rez_pos;
if (e == null || attachment) // Single if (e == null || attachment) // Single
{ {
SceneObjectGroup g = SceneObjectSerializer.FromOriginalXmlFormat(xmlData); SceneObjectGroup g = SceneObjectSerializer.FromOriginalXmlFormat(xmlData);
@ -809,6 +810,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
RayStart, RayEnd, RayTargetID, Quaternion.Identity, RayStart, RayEnd, RayTargetID, Quaternion.Identity,
BypassRayCast, bRayEndIsIntersection, true, g.GetAxisAlignedBoundingBox(out offsetHeight), false); BypassRayCast, bRayEndIsIntersection, true, g.GetAxisAlignedBoundingBox(out offsetHeight), false);
pos.Z += offsetHeight; pos.Z += offsetHeight;
rez_pos = pos;
} }
else else
{ {
@ -823,6 +825,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
BypassRayCast, bRayEndIsIntersection, true, BypassRayCast, bRayEndIsIntersection, true,
bbox, false); bbox, false);
rez_pos = pos;
pos -= bbox / 2; pos -= bbox / 2;
XmlNodeList groups = e.SelectNodes("SceneObjectGroup"); XmlNodeList groups = e.SelectNodes("SceneObjectGroup");
@ -859,7 +863,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
primcount += g.PrimCount; primcount += g.PrimCount;
if (!m_Scene.Permissions.CanRezObject( if (!m_Scene.Permissions.CanRezObject(
primcount, remoteClient.AgentId, pos) primcount, remoteClient.AgentId, rez_pos)
&& !attachment) && !attachment)
{ {
// The client operates in no fail mode. It will // The client operates in no fail mode. It will
@ -876,7 +880,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
return null; return null;
} }
if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, pos, attachment)) if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, rez_pos, attachment))
return null; return null;
for (int i = 0; i < objlist.Count; i++) for (int i = 0; i < objlist.Count; i++)