/** * @brief The script called llResetScript() while it was running and * has suspended. We want to reset the script to a never-has- * ever-run-before state. * * Caller must have m_RunLock locked so we know script isn't * running. */ private void ResetLocked(string from) { m_RunOnePhase = "ResetLocked: releasing controls"; ReleaseControlsOrPermissions(true); m_Part.CollisionSound = UUID.Zero; if (m_XMRLSLApi != null) { m_XMRLSLApi.llResetTime(); } m_RunOnePhase = "ResetLocked: removing script"; IUrlModule urlModule = m_Engine.World.RequestModuleInterface <IUrlModule>(); if (urlModule != null) { urlModule.ScriptRemoved(m_ItemID); } AsyncCommandManager.RemoveScript(m_Engine, m_LocalID, m_ItemID); m_RunOnePhase = "ResetLocked: clearing current event"; this.eventCode = ScriptEventCode.None; // not processing an event m_DetectParams = null; // not processing an event m_SleepUntil = DateTime.MinValue; // not doing llSleep() m_ResetCount++; // has been reset once more m_localsHeapUsed = 0; m_arraysHeapUsed = 0; glblVars.Clear(); // Tell next call to 'default state_entry()' to reset all global // vars to their initial values. doGblInit = true; // Throw away all its stack frames. // If the script is resetting itself, there shouldn't be any stack frames. // If the script is being reset by something else, we throw them away cuz we want to start from the beginning of an event handler. stackFrames = null; // Set script to 'default' state and queue call to its // 'state_entry()' event handler. m_RunOnePhase = "ResetLocked: posting default:state_entry() event"; stateCode = 0; m_Part.RemoveScriptTargets(m_ItemID); m_Part.SetScriptEvents(m_ItemID, GetStateEventFlags(0)); PostEvent(new EventParams("state_entry", zeroObjectArray, zeroDetectParams)); // Tell CheckRun() to let script run. suspendOnCheckRunHold = false; suspendOnCheckRunTemp = false; m_RunOnePhase = "ResetLocked: reset complete"; }
/** * @brief The script called llResetScript() while it was running and * has suspended. We want to reset the script to a never-has- * ever-run-before state. * * Caller must have m_RunLock locked so we know script isn't * running. */ private void ResetLocked(string from) { m_RunOnePhase = "ResetLocked: releasing controls"; ReleaseControls(); m_RunOnePhase = "ResetLocked: removing script"; m_Part.Inventory.GetInventoryItem(m_ItemID).PermsMask = 0; m_Part.Inventory.GetInventoryItem(m_ItemID).PermsGranter = UUID.Zero; IUrlModule urlModule = m_Engine.World.RequestModuleInterface <IUrlModule>(); if (urlModule != null) { urlModule.ScriptRemoved(m_ItemID); } AsyncCommandManager.RemoveScript(m_Engine, m_LocalID, m_ItemID); m_RunOnePhase = "ResetLocked: clearing current event"; this.eventCode = ScriptEventCode.None; // not processing an event m_DetectParams = null; // not processing an event m_SleepUntil = DateTime.MinValue; // not doing llSleep() m_ResetCount++; // has been reset once more /* * Tell next call to 'default state_entry()' to reset all global * vars to their initial values. */ doGblInit = true; /* * Throw away all its stack frames. * If the script is resetting itself, there shouldn't be any stack frames. * If the script is being reset by something else, we throw them away cuz we want to start from the beginning of an event handler. */ stackFrames = null; /* * Set script to 'default' state and queue call to its * 'state_entry()' event handler. */ m_RunOnePhase = "ResetLocked: posting default:state_entry() event"; stateCode = 0; m_Part.SetScriptEvents(m_ItemID, GetStateEventFlags(0)); PostEvent(new EventParams("state_entry", zeroObjectArray, zeroDetectParams)); /* * Tell CheckRun() to let script run. */ suspendOnCheckRunHold = false; suspendOnCheckRunTemp = false; m_RunOnePhase = "ResetLocked: reset complete"; }