From 2f70baee528ae94a3456c09ebdb60e9a24d7f7d0 Mon Sep 17 00:00:00 2001 From: Charles Krinke Date: Sat, 28 Jun 2008 16:18:47 +0000 Subject: Mantis#1623. Thank you, Melanie for a patch that: Fully defines the equality operators on the lsl types and plubs in the script engine side of the work begun in 0001616 (aly, this one's for you) --- .../Common/BuiltIn_Commands_BaseClass.cs | 8 ++++++- OpenSim/Region/ScriptEngine/Common/IScript.cs | 1 + .../ScriptEngine/Common/LSL_BuiltIn_Commands.cs | 3 +-- OpenSim/Region/ScriptEngine/Common/LSL_Types.cs | 25 ++++++++++++++++++++++ .../Common/ScriptEngineBase/EventManager.cs | 2 +- .../Common/ScriptEngineBase/ScriptManager.cs | 17 ++++++++++----- .../ScriptEngine/DotNetEngine/ScriptManager.cs | 8 ++++++- 7 files changed, 54 insertions(+), 10 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs b/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs index 07e3b41..47588b6 100644 --- a/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs +++ b/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs @@ -95,6 +95,12 @@ namespace OpenSim.Region.ScriptEngine.Common set { _Source = value; } } + private int m_StartParam = 0; + public int StartParam + { + get { return m_StartParam; } + set { m_StartParam = value; } + } public BuiltIn_Commands_BaseClass() { @@ -860,7 +866,7 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.LSLInteger llGetStartParameter() { - return m_LSL_Functions.llGetStartParameter(); + return m_StartParam; } public void llGodLikeRezObject(string inventory, vector pos) diff --git a/OpenSim/Region/ScriptEngine/Common/IScript.cs b/OpenSim/Region/ScriptEngine/Common/IScript.cs index e3ceb47..cad3707 100644 --- a/OpenSim/Region/ScriptEngine/Common/IScript.cs +++ b/OpenSim/Region/ScriptEngine/Common/IScript.cs @@ -32,6 +32,7 @@ namespace OpenSim.Region.ScriptEngine.Common public interface IScript { string State { get; set; } + int StartParam { get; set; } ExecutorBase Exec { get; } string Source { get; set; } void Start(BuilIn_Commands BuiltIn_Commands); diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs index c240573..69235c4 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs @@ -2343,8 +2343,7 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.LSLInteger llGetStartParameter() { - m_host.AddScriptLPS(1); - NotImplemented("llGetStartParameter"); + // This is not handled here return 0; } diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs index ab3cba8..bfdc686 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs @@ -1293,6 +1293,18 @@ namespace OpenSim.Region.ScriptEngine.Common return ret; } + public override bool Equals(Object o) + { + if(!(o is LSLInteger)) + return false; + return value == ((LSLInteger)o).value; + } + + public override int GetHashCode() + { + return value; + } + static public LSLInteger operator &(LSLInteger i1, LSLInteger i2) { int ret = i1.value & i2.value; @@ -1438,6 +1450,19 @@ namespace OpenSim.Region.ScriptEngine.Common return String.Format("{0:0.000000}", this.value); } + public override bool Equals(Object o) + { + if(!(o is LSLFloat)) + return false; + return value == ((LSLFloat)o).value; + } + + public override int GetHashCode() + { + return Convert.ToInt32(value); + } + + #endregion } } diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs index 93b68d4..0e852d1 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventManager.cs @@ -190,7 +190,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase { Console.WriteLine("OnRezScript localID: " + localID + " LLUID: " + itemID.ToString() + " Size: " + script.Length); - myScriptEngine.m_ScriptManager.StartScript(localID, itemID, script); + myScriptEngine.m_ScriptManager.StartScript(localID, itemID, script, startParam, postOnRez); } public void OnRemoveScript(uint localID, LLUUID itemID) diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptManager.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptManager.cs index eed0b86..75ab2aa 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptManager.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptManager.cs @@ -72,6 +72,8 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase public LLUUID itemID; public string script; public LUType Action; + public int startParam; + public bool postOnRez; } private enum LUType @@ -223,7 +225,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase } else if (item.Action == LUType.Load) { - _StartScript(item.localID, item.itemID, item.script); + _StartScript(item.localID, item.itemID, item.script, item.startParam, item.postOnRez); } } } @@ -252,7 +254,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase /// /// /// - public void StartScript(uint localID, LLUUID itemID, string Script) + public void StartScript(uint localID, LLUUID itemID, string Script, int startParam, bool postOnRez) { lock (LUQueue) { @@ -267,6 +269,8 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase ls.itemID = itemID; ls.script = Script; ls.Action = LUType.Load; + ls.startParam = startParam; + ls.postOnRez = postOnRez; LUQueue.Enqueue(ls); } } @@ -282,6 +286,8 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase ls.localID = localID; ls.itemID = itemID; ls.Action = LUType.Unload; + ls.startParam = 0; + ls.postOnRez = false; lock (LUQueue) { LUQueue.Enqueue(ls); @@ -291,7 +297,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase // Create a new instance of the compiler (reuse) //private Compiler.LSL.Compiler LSLCompiler = new Compiler.LSL.Compiler(); - public abstract void _StartScript(uint localID, LLUUID itemID, string Script); + public abstract void _StartScript(uint localID, LLUUID itemID, string Script, int startParam, bool postOnRez); public abstract void _StopScript(uint localID, LLUUID itemID); @@ -423,9 +429,10 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase public void ResetScript(uint localID, LLUUID itemID) { - string script = GetScript(localID, itemID).Source; + IScript s = GetScript(localID, itemID); + string script = s.Source; StopScript(localID, itemID); - StartScript(localID, itemID, script); + StartScript(localID, itemID, script, s.StartParam, false); } diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs index 008abd0..2d2a06a 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs @@ -62,7 +62,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine // PROVIDE SCRIPT WITH ITS INTERFACE TO OpenSim - public override void _StartScript(uint localID, LLUUID itemID, string Script) + public override void _StartScript(uint localID, LLUUID itemID, string Script, int startParam, bool postOnRez) { m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: ScriptManager StartScript: localID: " + localID + ", itemID: " + itemID); @@ -114,6 +114,8 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine //#endif CompiledScript.Source = Script; + CompiledScript.StartParam = startParam; + // Add it to our script memstruct m_scriptEngine.m_ScriptManager.SetScript(localID, itemID, CompiledScript); @@ -130,6 +132,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine int eventFlags = m_scriptEngine.m_ScriptManager.GetStateEventFlags(localID, itemID); m_host.SetScriptEvents(itemID, eventFlags); m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "state_entry", EventQueueManager.llDetectNull, new object[] { }); + if(postOnRez) + { + m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "on_rez", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLInteger(startParam) }); + } } catch (Exception e) // LEGIT: User Scripting { -- cgit v1.1