Aurora.ScriptEngine.AuroraDotNetEngine.APIs.LSL_Api.llBreakLink C# (CSharp) Метод

llBreakLink() публичный Метод

public llBreakLink ( int linknum ) : void
linknum int
Результат void
        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)
                {
                    ShoutError("Script trying to link but 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);
            }
        }
LSL_Api