예제 #1
0
        public void StopScript(UUID itemID)
        {
            IScriptInstance instance = GetInstance(itemID);

            if (instance != null)
            {
                instance.Stop(0);
            }
        }
예제 #2
0
        public void SetScriptState(UUID itemID, bool running)
        {
            IScriptInstance instance = GetInstance(itemID);

            if (instance != null)
            {
                if (running)
                {
                    instance.Start();
                }
                else
                {
                    instance.Stop(100);
                }
            }
        }
예제 #3
0
파일: XEngine.cs 프로젝트: p07r0457/opensim
        private void HandleStopScript(IScriptInstance instance)
        {
            if (instance.Running)
            {
                instance.Stop(0);

                SceneObjectPart sop = m_Scene.GetSceneObjectPart(instance.ObjectID);
                MainConsole.Instance.OutputFormat(
                    "Stopped {0}.{1}, item UUID {2}, prim UUID {3} @ {4}",
                    instance.PrimName, instance.ScriptName, instance.ItemID, instance.ObjectID, sop.AbsolutePosition);
            }
        }
예제 #4
0
        public void OnRemoveScript(uint localID, UUID itemID)
        {
            lock (m_Scripts)
            {
                // Do we even have it?
                if (!m_Scripts.ContainsKey(itemID))
                {
                    return;
                }

                IScriptInstance instance = m_Scripts[itemID];
                m_Scripts.Remove(itemID);

                instance.ClearQueue();
                instance.Stop(0);

                SceneObjectPart part =
                    m_Scene.GetSceneObjectPart(localID);

                if (part != null)
                {
                    part.RemoveScriptEvents(itemID);
                }

//                bool objectRemoved = false;

                lock (m_PrimObjects)
                {
                    // Remove the script from it's prim
                    if (m_PrimObjects.ContainsKey(localID))
                    {
                        // Remove inventory item record
                        if (m_PrimObjects[localID].Contains(itemID))
                        {
                            m_PrimObjects[localID].Remove(itemID);
                        }

                        // If there are no more scripts, remove prim
                        if (m_PrimObjects[localID].Count == 0)
                        {
                            m_PrimObjects.Remove(localID);
//                            objectRemoved = true;
                        }
                    }
                }

                m_DomainScripts[instance.AppDomain].Remove(instance.ItemID);
                if (m_DomainScripts[instance.AppDomain].Count == 0)
                {
                    m_DomainScripts.Remove(instance.AppDomain);
                    UnloadAppDomain(instance.AppDomain);
                }

                instance.RemoveState();
                instance.DestroyScriptInstance();

                instance = null;

                ObjectRemoved handlerObjectRemoved = OnObjectRemoved;
                if (handlerObjectRemoved != null)
                {
                    handlerObjectRemoved(part.UUID);
                }

                CleanAssemblies();
            }

            ScriptRemoved handlerScriptRemoved = OnScriptRemoved;

            if (handlerScriptRemoved != null)
            {
                handlerScriptRemoved(itemID);
            }
        }