public void llBreakAllLinks() { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL", m_itemID)) { return; } ISceneEntity parentPrim = m_host.ParentEntity; if (parentPrim.RootChild.AttachmentPoint != 0) { return; // Fail silently if attached } List <ISceneChildEntity> parts = new List <ISceneChildEntity>(parentPrim.ChildrenEntities()); parts.Remove(parentPrim.RootChild); foreach (ISceneChildEntity part in parts) { parentPrim.DelinkFromGroup(part, true); parentPrim.TriggerScriptChangedEvent(Changed.LINK); part.ParentEntity.ScheduleGroupUpdate(PrimUpdateFlags.ForcedFullUpdate); } parentPrim.ScheduleGroupUpdate(PrimUpdateFlags.ForcedFullUpdate); }
public void llBreakLink(int linknum) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL", m_itemID)) { return; } UUID invItemID = InventorySelf(); lock (m_host.TaskInventory) { if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 && !m_automaticLinkPermission) { Error("llBreakLink", "PERMISSION_CHANGE_LINKS permission not set"); return; } } if (linknum < ScriptBaseClass.LINK_THIS) { return; } ISceneEntity parentPrim = m_host.ParentEntity; if (parentPrim.RootChild.AttachmentPoint != 0) { return; // Fail silently if attached } ISceneChildEntity childPrim = null; if (linknum == ScriptBaseClass.LINK_ROOT) { } else if (linknum == ScriptBaseClass.LINK_SET || ScriptBaseClass.LINK_ALL_OTHERS || ScriptBaseClass.LINK_ALL_CHILDREN || ScriptBaseClass.LINK_THIS) { foreach (ISceneChildEntity part in parentPrim.ChildrenEntities()) { if (part.UUID != m_host.UUID) { childPrim = part; break; } } } else { IEntity target = m_host.ParentEntity.GetLinkNumPart(linknum); if (target is ISceneChildEntity) { childPrim = target as ISceneChildEntity; } else { return; } if (childPrim.UUID == m_host.UUID) { childPrim = null; } } if (linknum == ScriptBaseClass.LINK_ROOT) { // Restructuring Multiple Prims. List <ISceneChildEntity> parts = new List <ISceneChildEntity>(parentPrim.ChildrenEntities()); parts.Remove(parentPrim.RootChild); foreach (ISceneChildEntity part in parts) { parentPrim.DelinkFromGroup(part, true); } parentPrim.ScheduleGroupUpdate(PrimUpdateFlags.ForcedFullUpdate); parentPrim.TriggerScriptChangedEvent(Changed.LINK); if (parts.Count > 0) { ISceneChildEntity newRoot = parts[0]; parts.Remove(newRoot); foreach (ISceneChildEntity part in parts) { newRoot.ParentEntity.LinkToGroup(part.ParentEntity); } newRoot.ParentEntity.ScheduleGroupUpdate(PrimUpdateFlags.ForcedFullUpdate); } } else { if (childPrim == null) { return; } parentPrim.DelinkFromGroup(childPrim, true); childPrim.ParentEntity.ScheduleGroupUpdate(PrimUpdateFlags.ForcedFullUpdate); parentPrim.ScheduleGroupUpdate(PrimUpdateFlags.ForcedFullUpdate); parentPrim.TriggerScriptChangedEvent(Changed.LINK); } }