diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index d35bfa8..08f9545 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | |||
@@ -73,6 +73,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
73 | private string m_CurrentEvent = String.Empty; | 73 | private string m_CurrentEvent = String.Empty; |
74 | private bool m_InSelfDelete = false; | 74 | private bool m_InSelfDelete = false; |
75 | private int m_MaxScriptQueue; | 75 | private int m_MaxScriptQueue; |
76 | private bool m_SaveState = true; | ||
76 | 77 | ||
77 | private Dictionary<string,IScriptApi> m_Apis = new Dictionary<string,IScriptApi>(); | 78 | private Dictionary<string,IScriptApi> m_Apis = new Dictionary<string,IScriptApi>(); |
78 | 79 | ||
@@ -213,6 +214,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
213 | return; | 214 | return; |
214 | } | 215 | } |
215 | 216 | ||
217 | m_SaveState = true; | ||
218 | |||
216 | string savedState = Path.Combine(Path.GetDirectoryName(assembly), | 219 | string savedState = Path.Combine(Path.GetDirectoryName(assembly), |
217 | m_ItemID.ToString() + ".state"); | 220 | m_ItemID.ToString() + ".state"); |
218 | if (File.Exists(savedState)) | 221 | if (File.Exists(savedState)) |
@@ -257,6 +260,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
257 | // we get new rez events on sim restart, too | 260 | // we get new rez events on sim restart, too |
258 | // but if there is state, then we fire the change | 261 | // but if there is state, then we fire the change |
259 | // event | 262 | // event |
263 | |||
264 | // We loaded state, don't force a re-save | ||
265 | m_SaveState = false; | ||
266 | |||
260 | if (stateSource == StateSource.NewRez) | 267 | if (stateSource == StateSource.NewRez) |
261 | { | 268 | { |
262 | // m_Engine.Log.Debug("[Script] Posted changed(CHANGED_REGION_RESTART) to script"); | 269 | // m_Engine.Log.Debug("[Script] Posted changed(CHANGED_REGION_RESTART) to script"); |
@@ -487,6 +494,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
487 | 494 | ||
488 | m_InEvent = false; | 495 | m_InEvent = false; |
489 | m_CurrentEvent = String.Empty; | 496 | m_CurrentEvent = String.Empty; |
497 | |||
498 | if (m_SaveState) | ||
499 | { | ||
500 | // This will be the very first event we deliver | ||
501 | // (state_entry) in defualt state | ||
502 | // | ||
503 | |||
504 | SaveState(m_Assembly); | ||
505 | |||
506 | m_SaveState = false; | ||
507 | } | ||
490 | } | 508 | } |
491 | catch (Exception e) | 509 | catch (Exception e) |
492 | { | 510 | { |
@@ -589,6 +607,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
589 | m_State = "default"; | 607 | m_State = "default"; |
590 | if (running) | 608 | if (running) |
591 | Start(); | 609 | Start(); |
610 | m_SaveState = true; | ||
592 | PostEvent(new EventParams("state_entry", | 611 | PostEvent(new EventParams("state_entry", |
593 | new Object[0], new DetectParams[0])); | 612 | new Object[0], new DetectParams[0])); |
594 | } | 613 | } |
@@ -607,6 +626,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
607 | async.RemoveScript(m_LocalID, m_ItemID); | 626 | async.RemoveScript(m_LocalID, m_ItemID); |
608 | if (m_CurrentEvent != "state_entry") | 627 | if (m_CurrentEvent != "state_entry") |
609 | { | 628 | { |
629 | m_SaveState = true; | ||
610 | PostEvent(new EventParams("state_entry", | 630 | PostEvent(new EventParams("state_entry", |
611 | new Object[0], new DetectParams[0])); | 631 | new Object[0], new DetectParams[0])); |
612 | } | 632 | } |
@@ -640,6 +660,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
640 | 660 | ||
641 | public void SaveState(string assembly) | 661 | public void SaveState(string assembly) |
642 | { | 662 | { |
663 | // If we're currently in an event, just tell it to save upon return | ||
664 | // | ||
665 | if(m_InEvent) | ||
666 | { | ||
667 | m_SaveState = true; | ||
668 | return; | ||
669 | } | ||
670 | |||
643 | AsyncCommandManager async = (AsyncCommandManager)m_Engine.AsyncCommands; | 671 | AsyncCommandManager async = (AsyncCommandManager)m_Engine.AsyncCommands; |
644 | PluginData = async.GetSerializationData(m_ItemID); | 672 | PluginData = async.GetSerializationData(m_ItemID); |
645 | 673 | ||