mirror of
https://github.com/opensim/opensim.git
synced 2026-06-30 19:37:01 +08:00
mantis 8793: break link even if it is the script prim; adicialy standup all avatars as spec. Don't like this standup it is fundamentaly silly done on all cases, may review this later
This commit is contained in:
@@ -4586,56 +4586,50 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if (linknum < ScriptBaseClass.LINK_THIS)
|
||||
return;
|
||||
|
||||
SceneObjectGroup parentPrim = m_host.ParentGroup;
|
||||
SceneObjectGroup parentSOG = m_host.ParentGroup;
|
||||
|
||||
if (parentPrim.AttachmentPoint != 0)
|
||||
if (parentSOG.AttachmentPoint != 0)
|
||||
return; // Fail silently if attached
|
||||
SceneObjectPart childPrim = null;
|
||||
|
||||
switch (linknum)
|
||||
{
|
||||
case ScriptBaseClass.LINK_ROOT:
|
||||
break;
|
||||
case ScriptBaseClass.LINK_SET:
|
||||
case ScriptBaseClass.LINK_ALL_OTHERS:
|
||||
case ScriptBaseClass.LINK_ALL_CHILDREN:
|
||||
case ScriptBaseClass.LINK_THIS:
|
||||
foreach (SceneObjectPart part in parentPrim.Parts)
|
||||
{
|
||||
if (part.UUID != m_host.UUID)
|
||||
{
|
||||
childPrim = part;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ScriptBaseClass.LINK_THIS: // not as spec
|
||||
childPrim = m_host;
|
||||
break;
|
||||
default:
|
||||
childPrim = parentPrim.GetLinkNumPart(linknum);
|
||||
if (childPrim.UUID == m_host.UUID)
|
||||
childPrim = null;
|
||||
childPrim = parentSOG.GetLinkNumPart(linknum);
|
||||
break;
|
||||
}
|
||||
|
||||
if (linknum == ScriptBaseClass.LINK_ROOT)
|
||||
{
|
||||
// Restructuring Multiple Prims.
|
||||
List<SceneObjectPart> parts = new List<SceneObjectPart>(parentPrim.Parts);
|
||||
parts.Remove(parentPrim.RootPart);
|
||||
List<ScenePresence> avs = parentSOG.GetSittingAvatars();
|
||||
foreach (ScenePresence av in avs)
|
||||
av.StandUp();
|
||||
|
||||
List<SceneObjectPart> parts = new List<SceneObjectPart>(parentSOG.Parts);
|
||||
parts.Remove(parentSOG.RootPart);
|
||||
if (parts.Count > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (SceneObjectPart part in parts)
|
||||
{
|
||||
parentPrim.DelinkFromGroup(part.LocalId, true);
|
||||
parentSOG.DelinkFromGroup(part.LocalId, true);
|
||||
}
|
||||
}
|
||||
finally { }
|
||||
}
|
||||
|
||||
parentPrim.HasGroupChanged = true;
|
||||
parentPrim.ScheduleGroupForFullUpdate();
|
||||
parentPrim.TriggerScriptChangedEvent(Changed.LINK);
|
||||
parentSOG.HasGroupChanged = true;
|
||||
parentSOG.ScheduleGroupForFullUpdate();
|
||||
parentSOG.TriggerScriptChangedEvent(Changed.LINK);
|
||||
|
||||
if (parts.Count > 0)
|
||||
{
|
||||
@@ -4661,10 +4655,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if (childPrim == null)
|
||||
return;
|
||||
|
||||
parentPrim.DelinkFromGroup(childPrim.LocalId, true);
|
||||
parentPrim.HasGroupChanged = true;
|
||||
parentPrim.ScheduleGroupForFullUpdate();
|
||||
parentPrim.TriggerScriptChangedEvent(Changed.LINK);
|
||||
List<ScenePresence> avs = parentSOG.GetSittingAvatars();
|
||||
foreach (ScenePresence av in avs)
|
||||
av.StandUp();
|
||||
|
||||
parentSOG.DelinkFromGroup(childPrim.LocalId, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4724,9 +4719,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
{
|
||||
linknum -= (m_host.ParentGroup.PrimCount) + 1;
|
||||
|
||||
if (linknum < 0)
|
||||
return ScriptBaseClass.NULL_KEY;
|
||||
|
||||
List<ScenePresence> avatars = GetLinkAvatars(ScriptBaseClass.LINK_SET);
|
||||
if (avatars.Count > linknum)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user