Port Avination link order to make OpenSim behave like SL. Make Primstar scripts work. Fixes Mantis #5990
parent
1afae01311
commit
88553bb884
|
@ -1969,6 +1969,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="objectGroup">The group of prims which should be linked to this group</param>
|
/// <param name="objectGroup">The group of prims which should be linked to this group</param>
|
||||||
public void LinkToGroup(SceneObjectGroup objectGroup)
|
public void LinkToGroup(SceneObjectGroup objectGroup)
|
||||||
{
|
{
|
||||||
|
LinkToGroup(objectGroup, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LinkToGroup(SceneObjectGroup objectGroup, bool insert)
|
||||||
|
{
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE OBJECT GROUP]: Linking group with root part {0}, {1} to group with root part {2}, {3}",
|
// "[SCENE OBJECT GROUP]: Linking group with root part {0}, {1} to group with root part {2}, {3}",
|
||||||
// objectGroup.RootPart.Name, objectGroup.RootPart.UUID, RootPart.Name, RootPart.UUID);
|
// objectGroup.RootPart.Name, objectGroup.RootPart.UUID, RootPart.Name, RootPart.UUID);
|
||||||
|
@ -1979,6 +1984,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
SceneObjectPart linkPart = objectGroup.m_rootPart;
|
SceneObjectPart linkPart = objectGroup.m_rootPart;
|
||||||
|
|
||||||
|
// physics flags from group to be applied to linked parts
|
||||||
|
bool grpusephys = UsesPhysics;
|
||||||
|
bool grptemporary = IsTemporary;
|
||||||
|
|
||||||
Vector3 oldGroupPosition = linkPart.GroupPosition;
|
Vector3 oldGroupPosition = linkPart.GroupPosition;
|
||||||
Quaternion oldRootRotation = linkPart.RotationOffset;
|
Quaternion oldRootRotation = linkPart.RotationOffset;
|
||||||
|
|
||||||
|
@ -2002,15 +2011,35 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
lock (m_parts.SyncRoot)
|
lock (m_parts.SyncRoot)
|
||||||
{
|
{
|
||||||
int linkNum = PrimCount + 1;
|
int linkNum;
|
||||||
|
if (insert)
|
||||||
|
{
|
||||||
|
linkNum = 2;
|
||||||
|
foreach (SceneObjectPart part in Parts)
|
||||||
|
{
|
||||||
|
if (part.LinkNum > 1)
|
||||||
|
part.LinkNum++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
linkNum = PrimCount + 1;
|
||||||
|
}
|
||||||
|
|
||||||
m_parts.Add(linkPart.UUID, linkPart);
|
m_parts.Add(linkPart.UUID, linkPart);
|
||||||
|
|
||||||
linkPart.SetParent(this);
|
linkPart.SetParent(this);
|
||||||
linkPart.CreateSelected = true;
|
linkPart.CreateSelected = true;
|
||||||
|
|
||||||
|
// let physics know preserve part volume dtc messy since UpdatePrimFlags doesn't look to parent changes for now
|
||||||
|
linkPart.UpdatePrimFlags(grpusephys, grptemporary, (IsPhantom || (linkPart.Flags & PrimFlags.Phantom) != 0), linkPart.VolumeDetectActive);
|
||||||
|
if (linkPart.PhysActor != null && m_rootPart.PhysActor != null && m_rootPart.PhysActor.IsPhysical)
|
||||||
|
{
|
||||||
|
linkPart.PhysActor.link(m_rootPart.PhysActor);
|
||||||
|
this.Scene.PhysicsScene.AddPhysicsActorTaint(linkPart.PhysActor);
|
||||||
|
}
|
||||||
|
|
||||||
linkPart.LinkNum = linkNum++;
|
linkPart.LinkNum = linkNum++;
|
||||||
linkPart.UpdatePrimFlags(UsesPhysics, IsTemporary, IsPhantom, IsVolumeDetect);
|
|
||||||
|
|
||||||
SceneObjectPart[] ogParts = objectGroup.Parts;
|
SceneObjectPart[] ogParts = objectGroup.Parts;
|
||||||
Array.Sort(ogParts, delegate(SceneObjectPart a, SceneObjectPart b)
|
Array.Sort(ogParts, delegate(SceneObjectPart a, SceneObjectPart b)
|
||||||
|
@ -2022,7 +2051,16 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
SceneObjectPart part = ogParts[i];
|
SceneObjectPart part = ogParts[i];
|
||||||
if (part.UUID != objectGroup.m_rootPart.UUID)
|
if (part.UUID != objectGroup.m_rootPart.UUID)
|
||||||
|
{
|
||||||
LinkNonRootPart(part, oldGroupPosition, oldRootRotation, linkNum++);
|
LinkNonRootPart(part, oldGroupPosition, oldRootRotation, linkNum++);
|
||||||
|
// let physics know
|
||||||
|
part.UpdatePrimFlags(grpusephys, grptemporary, (IsPhantom || (part.Flags & PrimFlags.Phantom) != 0), part.VolumeDetectActive);
|
||||||
|
if (part.PhysActor != null && m_rootPart.PhysActor != null && m_rootPart.PhysActor.IsPhysical)
|
||||||
|
{
|
||||||
|
part.PhysActor.link(m_rootPart.PhysActor);
|
||||||
|
this.Scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor);
|
||||||
|
}
|
||||||
|
}
|
||||||
part.ClearUndoState();
|
part.ClearUndoState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -832,8 +832,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
public void llRegionSayTo(string target, int channel, string msg)
|
public void llRegionSayTo(string target, int channel, string msg)
|
||||||
{
|
{
|
||||||
string error = String.Empty;
|
|
||||||
|
|
||||||
if (msg.Length > 1023)
|
if (msg.Length > 1023)
|
||||||
msg = msg.Substring(0, 1023);
|
msg = msg.Substring(0, 1023);
|
||||||
|
|
||||||
|
@ -3548,7 +3546,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void llCreateLink(string target, int parent)
|
public void llCreateLink(string target, int parent)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
UUID targetID;
|
UUID targetID;
|
||||||
|
|
||||||
if (!UUID.TryParse(target, out targetID))
|
if (!UUID.TryParse(target, out targetID))
|
||||||
|
@ -3572,11 +3569,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
if (targetPart.ParentGroup.AttachmentPoint != 0)
|
if (targetPart.ParentGroup.AttachmentPoint != 0)
|
||||||
return; // Fail silently if attached
|
return; // Fail silently if attached
|
||||||
|
|
||||||
|
if (targetPart.ParentGroup.RootPart.OwnerID != m_host.ParentGroup.RootPart.OwnerID)
|
||||||
|
return;
|
||||||
|
|
||||||
SceneObjectGroup parentPrim = null, childPrim = null;
|
SceneObjectGroup parentPrim = null, childPrim = null;
|
||||||
|
|
||||||
if (targetPart != null)
|
if (targetPart != null)
|
||||||
{
|
{
|
||||||
if (parent != 0) {
|
if (parent != 0)
|
||||||
|
{
|
||||||
parentPrim = m_host.ParentGroup;
|
parentPrim = m_host.ParentGroup;
|
||||||
childPrim = targetPart.ParentGroup;
|
childPrim = targetPart.ParentGroup;
|
||||||
}
|
}
|
||||||
|
@ -3588,7 +3590,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
// Required for linking
|
// Required for linking
|
||||||
childPrim.RootPart.ClearUpdateSchedule();
|
childPrim.RootPart.ClearUpdateSchedule();
|
||||||
parentPrim.LinkToGroup(childPrim);
|
parentPrim.LinkToGroup(childPrim, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
parentPrim.TriggerScriptChangedEvent(Changed.LINK);
|
parentPrim.TriggerScriptChangedEvent(Changed.LINK);
|
||||||
|
|
Loading…
Reference in New Issue