* Applied patch from Melanie, mantis issue #1581 - "Refactor LSL language, api and compiler out of XEngine"
"First stage in a major Script Engine refactor, that will result in the LSL implementaions ebing reconverged. Not there yet, but one major part is done." Thank you, Melanie!0.6.0-stable
							parent
							
								
									c0a083ad38
								
							
						
					
					
						commit
						6b7930104b
					
				| 
						 | 
				
			
			@ -25,22 +25,15 @@
 | 
			
		|||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using OpenSim.Region.Environment.Interfaces;
 | 
			
		||||
using Nini.Config;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Interfaces
 | 
			
		||||
{
 | 
			
		||||
    public interface IScript
 | 
			
		||||
    public interface ICompiler
 | 
			
		||||
    {
 | 
			
		||||
        Type Start(ILSL_ScriptCommands lsl, IOSSL_ScriptCommands ossl);
 | 
			
		||||
 | 
			
		||||
        Dictionary<string, object> GetVars();
 | 
			
		||||
        void SetVars(Dictionary<string, object> vars);
 | 
			
		||||
        void ResetVars();
 | 
			
		||||
 | 
			
		||||
        string State { get; set; }
 | 
			
		||||
        void Configure(IConfig configSource);
 | 
			
		||||
        void Compile(string text, string outFile, List<IScriptApi> apiList);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
 | 
			
		||||
{
 | 
			
		||||
    public interface IScript
 | 
			
		||||
    {
 | 
			
		||||
        string[] GetApis();
 | 
			
		||||
        void InitApi(string name, IScriptApi data);
 | 
			
		||||
 | 
			
		||||
        Dictionary<string,Object> GetVars();
 | 
			
		||||
        void SetVars(Dictionary<string,Object> vars);
 | 
			
		||||
        void ResetVars();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) Contributors, http://opensimulator.org/
 | 
			
		||||
 * See CONTRIBUTORS.TXT for a full list of copyright holders.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the OpenSim Project nor the
 | 
			
		||||
 *       names of its contributors may be used to endorse or promote products
 | 
			
		||||
 *       derived from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
 | 
			
		||||
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 | 
			
		||||
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using libsecondlife;
 | 
			
		||||
using OpenSim.Region.Environment.Scenes;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Interfaces
 | 
			
		||||
{
 | 
			
		||||
    public interface IScriptApi
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
        // Each API has an identifier, which is used to load the
 | 
			
		||||
        // proper runtime assembly at load time.
 | 
			
		||||
        //
 | 
			
		||||
        void Initialize(IScriptEngine engine, SceneObjectPart part, uint localID, LLUUID item);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -25,51 +25,35 @@
 | 
			
		|||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using log4net;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using libsecondlife;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared;
 | 
			
		||||
using OpenSim.Region.Environment.Scenes;
 | 
			
		||||
using libsecondlife;
 | 
			
		||||
using Nini.Config;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Interfaces
 | 
			
		||||
{
 | 
			
		||||
    public class Eventstream
 | 
			
		||||
    public interface IScriptEngine
 | 
			
		||||
    {
 | 
			
		||||
        public AsyncCommandManager m_CmdManager;
 | 
			
		||||
        //
 | 
			
		||||
        // An interface for a script API module to communicate with
 | 
			
		||||
        // the engine it's running under
 | 
			
		||||
        //
 | 
			
		||||
 | 
			
		||||
        private class Event
 | 
			
		||||
        {
 | 
			
		||||
            public uint LocalID;
 | 
			
		||||
            public string EventName;
 | 
			
		||||
            public Dictionary<LLUUID, XDetectParams> DetectParams;
 | 
			
		||||
        }
 | 
			
		||||
        Scene World { get; }
 | 
			
		||||
        IConfig Config { get; }
 | 
			
		||||
        Object AsyncCommands { get; }
 | 
			
		||||
        ILog Log { get; }
 | 
			
		||||
 | 
			
		||||
        private Dictionary<uint, Dictionary<string, Event> > m_Events =
 | 
			
		||||
                new Dictionary<uint, Dictionary<string, Event> >();
 | 
			
		||||
        bool PostScriptEvent(LLUUID itemID, EventParams parms);
 | 
			
		||||
        bool PostObjectEvent(uint localID, EventParams parms);
 | 
			
		||||
        void ResetScript(LLUUID itemID);
 | 
			
		||||
        void SetScriptState(LLUUID itemID, bool state);
 | 
			
		||||
        bool GetScriptState(LLUUID itemID);
 | 
			
		||||
        void SetState(LLUUID itemID, string newState);
 | 
			
		||||
 | 
			
		||||
        public Eventstream(AsyncCommandManager CmdManager)
 | 
			
		||||
        {
 | 
			
		||||
            m_CmdManager = CmdManager;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void AddObjectEvent(uint localID, string eventName, XDetectParams det)
 | 
			
		||||
        {
 | 
			
		||||
            SceneObjectPart part = m_CmdManager.m_ScriptEngine.World.
 | 
			
		||||
                GetSceneObjectPart(localID);
 | 
			
		||||
 | 
			
		||||
            if (part == null) // Can't register events for non-prims
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            if (!part.ContainsScripts())
 | 
			
		||||
                return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RemoveObjectEvent(uint localID, string eventName, LLUUID id)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RemoveObjects(uint localID)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
        DetectParams GetDetectParams(LLUUID item, int number);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,79 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) Contributors, http://opensimulator.org/
 | 
			
		||||
 * See CONTRIBUTORS.TXT for a full list of copyright holders.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the OpenSim Project nor the
 | 
			
		||||
 *       names of its contributors may be used to endorse or promote products
 | 
			
		||||
 *       derived from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
 | 
			
		||||
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 | 
			
		||||
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		||||
{
 | 
			
		||||
    public class ApiManager
 | 
			
		||||
    {
 | 
			
		||||
        private Dictionary<string,Type> m_Apis = new Dictionary<string,Type>();
 | 
			
		||||
 | 
			
		||||
        public string[] GetApis()
 | 
			
		||||
        {
 | 
			
		||||
            if(m_Apis.Count > 0)
 | 
			
		||||
            {
 | 
			
		||||
                List<string> l = new List<string>(m_Apis.Keys);
 | 
			
		||||
                return l.ToArray();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Assembly a = Assembly.GetExecutingAssembly();
 | 
			
		||||
 | 
			
		||||
            Type[] types = a.GetExportedTypes();
 | 
			
		||||
 | 
			
		||||
            foreach (Type t in types)
 | 
			
		||||
            {
 | 
			
		||||
                string name = t.ToString();
 | 
			
		||||
                int idx = name.LastIndexOf('.');
 | 
			
		||||
                if(idx != -1)
 | 
			
		||||
                    name = name.Substring(idx+1);
 | 
			
		||||
 | 
			
		||||
                if(name.EndsWith("_Api"))
 | 
			
		||||
                {
 | 
			
		||||
                    name = name.Substring(0, name.Length - 4);
 | 
			
		||||
                    m_Apis[name] = t;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            List<string> ret = new List<string>(m_Apis.Keys);
 | 
			
		||||
            return ret.ToArray();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IScriptApi CreateApi(string api)
 | 
			
		||||
        {
 | 
			
		||||
            if(!m_Apis.ContainsKey(api))
 | 
			
		||||
                return null;
 | 
			
		||||
 | 
			
		||||
            IScriptApi ret = (IScriptApi)(Activator.CreateInstance(m_Apis[api]));
 | 
			
		||||
            return ret;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -32,11 +32,12 @@ using System.Threading;
 | 
			
		|||
using libsecondlife;
 | 
			
		||||
using OpenSim.Framework;
 | 
			
		||||
using OpenSim.Region.Environment.Interfaces;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins;
 | 
			
		||||
using Timer=OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins.Timer;
 | 
			
		||||
using Dataserver=OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins.Dataserver;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api.Plugins;
 | 
			
		||||
using Timer=OpenSim.Region.ScriptEngine.Shared.Api.Plugins.Timer;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Handles LSL commands that takes long time and returns an event, for example timers, HTTP requests, etc.
 | 
			
		||||
| 
						 | 
				
			
			@ -46,18 +47,57 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        private static Thread cmdHandlerThread;
 | 
			
		||||
        private static int cmdHandlerThreadCycleSleepms;
 | 
			
		||||
 | 
			
		||||
        public XEngine m_ScriptEngine;
 | 
			
		||||
        private static List<AsyncCommandManager> m_Managers = new List<AsyncCommandManager>();
 | 
			
		||||
        public IScriptEngine m_ScriptEngine;
 | 
			
		||||
 | 
			
		||||
        public Dataserver m_Dataserver;
 | 
			
		||||
        public Timer m_Timer;
 | 
			
		||||
        public HttpRequest m_HttpRequest;
 | 
			
		||||
        public Listener m_Listener;
 | 
			
		||||
        public SensorRepeat m_SensorRepeat;
 | 
			
		||||
        public XmlRequest m_XmlRequest;
 | 
			
		||||
        private Dataserver m_Dataserver;
 | 
			
		||||
        private Timer m_Timer;
 | 
			
		||||
        private HttpRequest m_HttpRequest;
 | 
			
		||||
        private Listener m_Listener;
 | 
			
		||||
        private SensorRepeat m_SensorRepeat;
 | 
			
		||||
        private XmlRequest m_XmlRequest;
 | 
			
		||||
 | 
			
		||||
        public AsyncCommandManager(XEngine _ScriptEngine)
 | 
			
		||||
        public Dataserver DataserverPlugin
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_Dataserver; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Timer TimerPlugin
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_Timer; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public HttpRequest HttpRequestPlugin
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_HttpRequest; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Listener ListenerPlugin
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_Listener; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public SensorRepeat SensorRepeatPlugin
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_SensorRepeat; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public XmlRequest XmlRequestPlugin
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_XmlRequest; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AsyncCommandManager[] Managers
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_Managers.ToArray(); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AsyncCommandManager(IScriptEngine _ScriptEngine)
 | 
			
		||||
        {
 | 
			
		||||
            m_ScriptEngine = _ScriptEngine;
 | 
			
		||||
            if(!m_Managers.Contains(this))
 | 
			
		||||
                m_Managers.Add(this);
 | 
			
		||||
 | 
			
		||||
            ReadConfig();
 | 
			
		||||
 | 
			
		||||
            // Create instances of all plugins
 | 
			
		||||
| 
						 | 
				
			
			@ -87,7 +127,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public void ReadConfig()
 | 
			
		||||
        {
 | 
			
		||||
            cmdHandlerThreadCycleSleepms = m_ScriptEngine.ScriptConfigSource.GetInt("AsyncLLCommandLoopms", 100);
 | 
			
		||||
            cmdHandlerThreadCycleSleepms = m_ScriptEngine.Config.GetInt("AsyncLLCommandLoopms", 100);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ~AsyncCommandManager()
 | 
			
		||||
| 
						 | 
				
			
			@ -119,9 +159,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                    {
 | 
			
		||||
                        Thread.Sleep(cmdHandlerThreadCycleSleepms);
 | 
			
		||||
 | 
			
		||||
                        foreach (XEngine xe in XEngine.ScriptEngines)
 | 
			
		||||
                        foreach (AsyncCommandManager m in m_Managers)
 | 
			
		||||
                        {
 | 
			
		||||
                            xe.m_ASYNCLSLCommandManager.DoOneCmdHandlerPass();
 | 
			
		||||
                            m.DoOneCmdHandlerPass();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -131,7 +171,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal void DoOneCmdHandlerPass()
 | 
			
		||||
        public void DoOneCmdHandlerPass()
 | 
			
		||||
        {
 | 
			
		||||
            // Check timers
 | 
			
		||||
            m_Timer.CheckTimerEvents();
 | 
			
		||||
| 
						 | 
				
			
			@ -41,65 +41,50 @@ using OpenSim.Region.Environment.Interfaces;
 | 
			
		|||
using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney;
 | 
			
		||||
using OpenSim.Region.Environment.Modules.World.Land;
 | 
			
		||||
using OpenSim.Region.Environment.Scenes;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.XEngine;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.XEngine.Script;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api.Plugins;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Contains all LSL ll-functions. This class will be in Default AppDomain.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class LSL_ScriptCommands : MarshalByRefObject, ILSL_ScriptCommands
 | 
			
		||||
    public class LSL_Api : MarshalByRefObject, ILSL_Api, IScriptApi
 | 
			
		||||
    {
 | 
			
		||||
        // private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        internal XEngine m_ScriptEngine;
 | 
			
		||||
        internal XScriptInstance m_Instance;
 | 
			
		||||
        internal IScriptEngine m_ScriptEngine;
 | 
			
		||||
        internal SceneObjectPart m_host;
 | 
			
		||||
        internal uint m_localID;
 | 
			
		||||
        internal LLUUID m_itemID;
 | 
			
		||||
        internal bool throwErrorOnNotImplemented = true;
 | 
			
		||||
        internal static AsyncCommandManager AsyncCommands = null;
 | 
			
		||||
 | 
			
		||||
        public LSL_ScriptCommands(XEngine ScriptEngine, XScriptInstance instance, SceneObjectPart host, uint localID, LLUUID itemID)
 | 
			
		||||
        public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, LLUUID itemID)
 | 
			
		||||
        {
 | 
			
		||||
            m_ScriptEngine = ScriptEngine;
 | 
			
		||||
            m_Instance = instance;
 | 
			
		||||
            m_host = host;
 | 
			
		||||
            m_localID = localID;
 | 
			
		||||
            m_itemID = itemID;
 | 
			
		||||
 | 
			
		||||
            //m_log.Info(ScriptEngineName, "LSL_BaseClass.Start() called. Hosted by [" + m_host.Name + ":" + m_host.UUID + "@" + m_host.AbsolutePosition + "]");
 | 
			
		||||
            AsyncCommands = (AsyncCommandManager)ScriptEngine.AsyncCommands;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private DateTime m_timer = DateTime.Now;
 | 
			
		||||
        private string m_state = "default";
 | 
			
		||||
        private bool m_waitingForScriptAnswer=false;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public string State
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_Instance.State; }
 | 
			
		||||
            set { m_Instance.State = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void state(string newState)
 | 
			
		||||
        {
 | 
			
		||||
            m_Instance.SetState(newState);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Object never expires
 | 
			
		||||
        public override Object InitializeLifetimeService()
 | 
			
		||||
        {
 | 
			
		||||
            //Console.WriteLine("LSL_BuiltIn_Commands: InitializeLifetimeService()");
 | 
			
		||||
            //            return null;
 | 
			
		||||
            ILease lease = (ILease)base.InitializeLifetimeService();
 | 
			
		||||
 | 
			
		||||
            if (lease.CurrentState == LeaseState.Initial)
 | 
			
		||||
            {
 | 
			
		||||
                lease.InitialLeaseTime = TimeSpan.Zero; // TimeSpan.FromMinutes(1);
 | 
			
		||||
                //                lease.SponsorshipTimeout = TimeSpan.FromMinutes(2);
 | 
			
		||||
                //                lease.RenewOnCallTime = TimeSpan.FromSeconds(2);
 | 
			
		||||
                lease.InitialLeaseTime = TimeSpan.Zero;
 | 
			
		||||
            }
 | 
			
		||||
            return lease;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -109,6 +94,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            get { return m_ScriptEngine.World; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void state(string newState)
 | 
			
		||||
        {
 | 
			
		||||
            m_ScriptEngine.SetState(m_itemID, newState);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void llSay(int channelID, string text)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
| 
						 | 
				
			
			@ -501,7 +491,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            LLUUID keyID = LLUUID.Zero;
 | 
			
		||||
            LLUUID.TryParse(id, out keyID);
 | 
			
		||||
 | 
			
		||||
            m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.SenseOnce(m_localID, m_itemID, name, keyID, type, range, arc, m_host);
 | 
			
		||||
            AsyncCommands.SensorRepeatPlugin.SenseOnce(m_localID, m_itemID, name, keyID, type, range, arc, m_host);
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
        public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate)
 | 
			
		||||
| 
						 | 
				
			
			@ -510,13 +500,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            LLUUID keyID = LLUUID.Zero;
 | 
			
		||||
            LLUUID.TryParse(id, out keyID);
 | 
			
		||||
 | 
			
		||||
            m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.SetSenseRepeatEvent(m_localID, m_itemID, name, keyID, type, range, arc, rate, m_host);
 | 
			
		||||
            AsyncCommands.SensorRepeatPlugin.SetSenseRepeatEvent(m_localID, m_itemID, name, keyID, type, range, arc, rate, m_host);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void llSensorRemove()
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.UnSetSenseRepeaterEvents(m_localID, m_itemID);
 | 
			
		||||
            AsyncCommands.SensorRepeatPlugin.UnSetSenseRepeaterEvents(m_localID, m_itemID);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string resolveName(LLUUID objecUUID)
 | 
			
		||||
| 
						 | 
				
			
			@ -550,7 +540,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public string llDetectedName(int number)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            if (d == null)
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
            return d.Name;
 | 
			
		||||
| 
						 | 
				
			
			@ -559,7 +549,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public string llDetectedKey(int number)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            if (d == null)
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
            return d.Key.ToString();
 | 
			
		||||
| 
						 | 
				
			
			@ -568,7 +558,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public string llDetectedOwner(int number)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            if (d == null)
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
            return d.Owner.ToString();
 | 
			
		||||
| 
						 | 
				
			
			@ -577,7 +567,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public LSL_Types.LSLInteger llDetectedType(int number)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            if (d == null)
 | 
			
		||||
                return 0;
 | 
			
		||||
            return new LSL_Types.LSLInteger(d.Type);
 | 
			
		||||
| 
						 | 
				
			
			@ -586,7 +576,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public LSL_Types.Vector3 llDetectedPos(int number)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            if (d == null)
 | 
			
		||||
                return new LSL_Types.Vector3();
 | 
			
		||||
            return d.Position;
 | 
			
		||||
| 
						 | 
				
			
			@ -595,7 +585,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public LSL_Types.Vector3 llDetectedVel(int number)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            if (d == null)
 | 
			
		||||
                return new LSL_Types.Vector3();
 | 
			
		||||
            return d.Velocity;
 | 
			
		||||
| 
						 | 
				
			
			@ -604,7 +594,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public LSL_Types.Vector3 llDetectedGrab(int number)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            XDetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            DetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            if (parms == null)
 | 
			
		||||
                return new LSL_Types.Vector3(0, 0, 0);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -614,7 +604,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public LSL_Types.Quaternion llDetectedRot(int number)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            if (d == null)
 | 
			
		||||
                return new LSL_Types.Quaternion();
 | 
			
		||||
            return d.Rotation;
 | 
			
		||||
| 
						 | 
				
			
			@ -623,7 +613,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public LSL_Types.LSLInteger llDetectedGroup(int number)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            if (d == null)
 | 
			
		||||
                return new LSL_Types.LSLInteger(0);
 | 
			
		||||
            if (m_host.GroupID == d.Group)
 | 
			
		||||
| 
						 | 
				
			
			@ -634,7 +624,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public LSL_Types.LSLInteger llDetectedLinkNumber(int number)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            XDetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            DetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number);
 | 
			
		||||
            if (parms == null)
 | 
			
		||||
                return new LSL_Types.LSLInteger(0);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -675,7 +665,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
            int statusrotationaxis = 0;
 | 
			
		||||
 | 
			
		||||
            if ((status & BuiltIn_Commands_BaseClass.STATUS_PHYSICS) == BuiltIn_Commands_BaseClass.STATUS_PHYSICS)
 | 
			
		||||
            if ((status & ScriptBaseClass.STATUS_PHYSICS) == ScriptBaseClass.STATUS_PHYSICS)
 | 
			
		||||
            {
 | 
			
		||||
                if (value == 1)
 | 
			
		||||
                    m_host.ScriptSetPhysicsStatus(true);
 | 
			
		||||
| 
						 | 
				
			
			@ -683,7 +673,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                    m_host.ScriptSetPhysicsStatus(false);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((status & BuiltIn_Commands_BaseClass.STATUS_PHANTOM) == BuiltIn_Commands_BaseClass.STATUS_PHANTOM)
 | 
			
		||||
            if ((status & ScriptBaseClass.STATUS_PHANTOM) == ScriptBaseClass.STATUS_PHANTOM)
 | 
			
		||||
            {
 | 
			
		||||
                if (value == 1)
 | 
			
		||||
                    m_host.ScriptSetPhantomStatus(true);
 | 
			
		||||
| 
						 | 
				
			
			@ -691,32 +681,32 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                    m_host.ScriptSetPhantomStatus(false);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((status & BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS) == BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS)
 | 
			
		||||
            if ((status & ScriptBaseClass.STATUS_CAST_SHADOWS) == ScriptBaseClass.STATUS_CAST_SHADOWS)
 | 
			
		||||
            {
 | 
			
		||||
                m_host.AddFlag(LLObject.ObjectFlags.CastShadows);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_X) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_X)
 | 
			
		||||
            if ((status & ScriptBaseClass.STATUS_ROTATE_X) == ScriptBaseClass.STATUS_ROTATE_X)
 | 
			
		||||
            {
 | 
			
		||||
                statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_X;
 | 
			
		||||
                statusrotationaxis |= ScriptBaseClass.STATUS_ROTATE_X;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y)
 | 
			
		||||
            if ((status & ScriptBaseClass.STATUS_ROTATE_Y) == ScriptBaseClass.STATUS_ROTATE_Y)
 | 
			
		||||
            {
 | 
			
		||||
                statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y;
 | 
			
		||||
                statusrotationaxis |= ScriptBaseClass.STATUS_ROTATE_Y;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z)
 | 
			
		||||
            if ((status & ScriptBaseClass.STATUS_ROTATE_Z) == ScriptBaseClass.STATUS_ROTATE_Z)
 | 
			
		||||
            {
 | 
			
		||||
                statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z;
 | 
			
		||||
                statusrotationaxis |= ScriptBaseClass.STATUS_ROTATE_Z;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((status & BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB) == BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB)
 | 
			
		||||
            if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB) == ScriptBaseClass.STATUS_BLOCK_GRAB)
 | 
			
		||||
            {
 | 
			
		||||
                NotImplemented("llSetStatus - STATUS_BLOCK_GRAB");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((status & BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE)
 | 
			
		||||
            if ((status & ScriptBaseClass.STATUS_DIE_AT_EDGE) == ScriptBaseClass.STATUS_DIE_AT_EDGE)
 | 
			
		||||
            {
 | 
			
		||||
                if (value == 1)
 | 
			
		||||
                    m_host.SetDieAtEdge(true);
 | 
			
		||||
| 
						 | 
				
			
			@ -724,12 +714,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                    m_host.SetDieAtEdge(false);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((status & BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE)
 | 
			
		||||
            if ((status & ScriptBaseClass.STATUS_RETURN_AT_EDGE) == ScriptBaseClass.STATUS_RETURN_AT_EDGE)
 | 
			
		||||
            {
 | 
			
		||||
                NotImplemented("llSetStatus - STATUS_RETURN_AT_EDGE");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((status & BuiltIn_Commands_BaseClass.STATUS_SANDBOX) == BuiltIn_Commands_BaseClass.STATUS_SANDBOX)
 | 
			
		||||
            if ((status & ScriptBaseClass.STATUS_SANDBOX) == ScriptBaseClass.STATUS_SANDBOX)
 | 
			
		||||
            {
 | 
			
		||||
                NotImplemented("llSetStatus - STATUS_SANDBOX");
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -746,54 +736,54 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            // Console.WriteLine(m_host.UUID.ToString() + " status is " + m_host.GetEffectiveObjectFlags().ToString());
 | 
			
		||||
            switch (status)
 | 
			
		||||
            {
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.STATUS_PHYSICS:
 | 
			
		||||
                case ScriptBaseClass.STATUS_PHYSICS:
 | 
			
		||||
                    if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == (uint)LLObject.ObjectFlags.Physics)
 | 
			
		||||
                    {
 | 
			
		||||
                        return 1;
 | 
			
		||||
                    }
 | 
			
		||||
                    return 0;
 | 
			
		||||
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.STATUS_PHANTOM:
 | 
			
		||||
                case ScriptBaseClass.STATUS_PHANTOM:
 | 
			
		||||
                    if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Phantom) == (uint)LLObject.ObjectFlags.Phantom)
 | 
			
		||||
                    {
 | 
			
		||||
                        return 1;
 | 
			
		||||
                    }
 | 
			
		||||
                    return 0;
 | 
			
		||||
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS:
 | 
			
		||||
                case ScriptBaseClass.STATUS_CAST_SHADOWS:
 | 
			
		||||
                    if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.CastShadows) == (uint)LLObject.ObjectFlags.CastShadows)
 | 
			
		||||
                    {
 | 
			
		||||
                        return 1;
 | 
			
		||||
                    }
 | 
			
		||||
                    return 0;
 | 
			
		||||
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB:
 | 
			
		||||
                case ScriptBaseClass.STATUS_BLOCK_GRAB:
 | 
			
		||||
                    NotImplemented("llGetStatus - STATUS_BLOCK_GRAB");
 | 
			
		||||
                    return 0;
 | 
			
		||||
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE:
 | 
			
		||||
                case ScriptBaseClass.STATUS_DIE_AT_EDGE:
 | 
			
		||||
                    if (m_host.GetDieAtEdge())
 | 
			
		||||
                        return 1;
 | 
			
		||||
                    else
 | 
			
		||||
                        return 0;
 | 
			
		||||
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE:
 | 
			
		||||
                case ScriptBaseClass.STATUS_RETURN_AT_EDGE:
 | 
			
		||||
                    NotImplemented("llGetStatus - STATUS_RETURN_AT_EDGE");
 | 
			
		||||
                    return 0;
 | 
			
		||||
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.STATUS_ROTATE_X:
 | 
			
		||||
                case ScriptBaseClass.STATUS_ROTATE_X:
 | 
			
		||||
                    NotImplemented("llGetStatus - STATUS_ROTATE_X");
 | 
			
		||||
                    return 0;
 | 
			
		||||
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y:
 | 
			
		||||
                case ScriptBaseClass.STATUS_ROTATE_Y:
 | 
			
		||||
                    NotImplemented("llGetStatus - STATUS_ROTATE_Y");
 | 
			
		||||
                    return 0;
 | 
			
		||||
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z:
 | 
			
		||||
                case ScriptBaseClass.STATUS_ROTATE_Z:
 | 
			
		||||
                    NotImplemented("llGetStatus - STATUS_ROTATE_Z");
 | 
			
		||||
                    return 0;
 | 
			
		||||
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.STATUS_SANDBOX:
 | 
			
		||||
                case ScriptBaseClass.STATUS_SANDBOX:
 | 
			
		||||
                    NotImplemented("llGetStatus - STATUS_SANDBOX");
 | 
			
		||||
                    return 0;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -1743,7 +1733,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero)
 | 
			
		||||
                return 0;
 | 
			
		||||
 | 
			
		||||
            if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_DEBIT) == 0)
 | 
			
		||||
            if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0)
 | 
			
		||||
            {
 | 
			
		||||
                LSLError("No permissions to give money");
 | 
			
		||||
                return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -1840,11 +1830,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                    // objects rezzed with this method are die_at_edge by default.
 | 
			
		||||
                    new_group.RootPart.SetDieAtEdge(true);
 | 
			
		||||
 | 
			
		||||
                    m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams(
 | 
			
		||||
                    m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
 | 
			
		||||
                            "object_rez", new Object[] {
 | 
			
		||||
                            new LSL_Types.LSLString(
 | 
			
		||||
                            new_group.RootPart.UUID.ToString()) },
 | 
			
		||||
                            new XDetectParams[0]));
 | 
			
		||||
                            new DetectParams[0]));
 | 
			
		||||
 | 
			
		||||
                    float groupmass = new_group.GetMass();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1876,7 +1866,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            // Setting timer repeat
 | 
			
		||||
            m_ScriptEngine.m_ASYNCLSLCommandManager.m_Timer.SetTimerEvent(m_localID, m_itemID, sec);
 | 
			
		||||
            AsyncCommands.TimerPlugin.SetTimerEvent(m_localID, m_itemID, sec);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void llSleep(double sec)
 | 
			
		||||
| 
						 | 
				
			
			@ -1910,7 +1900,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
                if (presence != null)
 | 
			
		||||
                {
 | 
			
		||||
                    if ((m_host.TaskInventory[InventorySelf()].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TAKE_CONTROLS) != 0)
 | 
			
		||||
                    if ((m_host.TaskInventory[InventorySelf()].PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        presence.RegisterControlEventsToScript(controls, accept, pass_on, m_localID, m_itemID);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1937,12 +1927,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
                if (presence != null)
 | 
			
		||||
                {
 | 
			
		||||
                    if ((m_host.TaskInventory[InventorySelf()].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TAKE_CONTROLS) != 0)
 | 
			
		||||
                    if ((m_host.TaskInventory[InventorySelf()].PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        // Unregister controls from Presence
 | 
			
		||||
                        presence.UnRegisterControlEventsToScript(m_localID, m_itemID);
 | 
			
		||||
                        // Remove Take Control permission.
 | 
			
		||||
                        m_host.TaskInventory[InventorySelf()].PermsMask &= ~BuiltIn_Commands_BaseClass.PERMISSION_TAKE_CONTROLS;
 | 
			
		||||
                        m_host.TaskInventory[InventorySelf()].PermsMask &= ~ScriptBaseClass.PERMISSION_TAKE_CONTROLS;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -2110,7 +2100,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION) != 0)
 | 
			
		||||
            if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0)
 | 
			
		||||
            {
 | 
			
		||||
                ScenePresence presence = World.GetScenePresence(m_host.TaskInventory[invItemID].PermsGranter);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2137,7 +2127,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION) != 0)
 | 
			
		||||
            if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0)
 | 
			
		||||
            {
 | 
			
		||||
                LLUUID animID = new LLUUID();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2212,10 +2202,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                m_host.TaskInventory[invItemID].PermsGranter=LLUUID.Zero;
 | 
			
		||||
                m_host.TaskInventory[invItemID].PermsMask=0;
 | 
			
		||||
 | 
			
		||||
                m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams(
 | 
			
		||||
                m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
 | 
			
		||||
                        "run_time_permissions", new Object[] {
 | 
			
		||||
                        new LSL_Types.LSLInteger(0) },
 | 
			
		||||
                        new XDetectParams[0]));
 | 
			
		||||
                        new DetectParams[0]));
 | 
			
		||||
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -2225,19 +2215,19 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            if (m_host.ParentGroup.RootPart.m_IsAttachment && agent == m_host.ParentGroup.RootPart.m_attachedAvatar)
 | 
			
		||||
            {
 | 
			
		||||
                // When attached, certain permissions are implicit if requested from owner
 | 
			
		||||
                int implicitPerms = BuiltIn_Commands_BaseClass.PERMISSION_TAKE_CONTROLS |
 | 
			
		||||
                        BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION |
 | 
			
		||||
                        BuiltIn_Commands_BaseClass.PERMISSION_ATTACH;
 | 
			
		||||
                int implicitPerms = ScriptBaseClass.PERMISSION_TAKE_CONTROLS |
 | 
			
		||||
                        ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION |
 | 
			
		||||
                        ScriptBaseClass.PERMISSION_ATTACH;
 | 
			
		||||
 | 
			
		||||
                if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms
 | 
			
		||||
                {
 | 
			
		||||
                    m_host.TaskInventory[invItemID].PermsGranter=agentID;
 | 
			
		||||
                    m_host.TaskInventory[invItemID].PermsMask=perm;
 | 
			
		||||
 | 
			
		||||
                    m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams(
 | 
			
		||||
                    m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
 | 
			
		||||
                            "run_time_permissions", new Object[] {
 | 
			
		||||
                            new LSL_Types.LSLInteger(perm) },
 | 
			
		||||
                            new XDetectParams[0]));
 | 
			
		||||
                            new DetectParams[0]));
 | 
			
		||||
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -2245,18 +2235,18 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            else if (m_host.m_sitTargetAvatar == agentID) // Sitting avatar
 | 
			
		||||
            {
 | 
			
		||||
                // When agent is sitting, certain permissions are implicit if requested from sitting agent
 | 
			
		||||
                int implicitPerms = BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION |
 | 
			
		||||
                        BuiltIn_Commands_BaseClass.PERMISSION_TRACK_CAMERA;
 | 
			
		||||
                int implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION |
 | 
			
		||||
                        ScriptBaseClass.PERMISSION_TRACK_CAMERA;
 | 
			
		||||
 | 
			
		||||
                if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms
 | 
			
		||||
                {
 | 
			
		||||
                    m_host.TaskInventory[invItemID].PermsGranter=agentID;
 | 
			
		||||
                    m_host.TaskInventory[invItemID].PermsMask=perm;
 | 
			
		||||
 | 
			
		||||
                    m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams(
 | 
			
		||||
                    m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
 | 
			
		||||
                            "run_time_permissions", new Object[] {
 | 
			
		||||
                            new LSL_Types.LSLInteger(perm) },
 | 
			
		||||
                            new XDetectParams[0]));
 | 
			
		||||
                            new DetectParams[0]));
 | 
			
		||||
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -2283,10 +2273,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            // Requested agent is not in range, refuse perms
 | 
			
		||||
            m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams(
 | 
			
		||||
            m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
 | 
			
		||||
                    "run_time_permissions", new Object[] {
 | 
			
		||||
                    new LSL_Types.LSLInteger(0) },
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void handleScriptAnswer(IClientAPI client, LLUUID taskID, LLUUID itemID, int answer)
 | 
			
		||||
| 
						 | 
				
			
			@ -2303,10 +2293,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            m_waitingForScriptAnswer=false;
 | 
			
		||||
 | 
			
		||||
            m_host.TaskInventory[invItemID].PermsMask=answer;
 | 
			
		||||
            m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams(
 | 
			
		||||
            m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
 | 
			
		||||
                    "run_time_permissions", new Object[] {
 | 
			
		||||
                    new LSL_Types.LSLInteger(answer) },
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string llGetPermissionsKey()
 | 
			
		||||
| 
						 | 
				
			
			@ -2631,12 +2621,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
            LLUUID rq = LLUUID.Random();
 | 
			
		||||
 | 
			
		||||
            LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.
 | 
			
		||||
                m_Dataserver.RegisterRequest(m_localID,
 | 
			
		||||
            LLUUID tid = AsyncCommands.
 | 
			
		||||
                DataserverPlugin.RegisterRequest(m_localID,
 | 
			
		||||
                                             m_itemID, rq.ToString());
 | 
			
		||||
 | 
			
		||||
            m_ScriptEngine.m_ASYNCLSLCommandManager.
 | 
			
		||||
            m_Dataserver.DataserverReply(rq.ToString(), reply);
 | 
			
		||||
            AsyncCommands.
 | 
			
		||||
            DataserverPlugin.DataserverReply(rq.ToString(), reply);
 | 
			
		||||
 | 
			
		||||
            return tid.ToString();
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -2649,8 +2639,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            {
 | 
			
		||||
                if (item.Type == 3 && item.Name == name)
 | 
			
		||||
                {
 | 
			
		||||
                    LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.
 | 
			
		||||
                        m_Dataserver.RegisterRequest(m_localID,
 | 
			
		||||
                    LLUUID tid = AsyncCommands.
 | 
			
		||||
                        DataserverPlugin.RegisterRequest(m_localID,
 | 
			
		||||
                                                     m_itemID, item.AssetID.ToString());
 | 
			
		||||
 | 
			
		||||
                    LLVector3 region = new LLVector3(
 | 
			
		||||
| 
						 | 
				
			
			@ -2667,8 +2657,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
                            string reply = region.ToString();
 | 
			
		||||
 | 
			
		||||
                            m_ScriptEngine.m_ASYNCLSLCommandManager.
 | 
			
		||||
                                m_Dataserver.DataserverReply(i.ToString(),
 | 
			
		||||
                            AsyncCommands.
 | 
			
		||||
                                DataserverPlugin.DataserverReply(i.ToString(),
 | 
			
		||||
                                                             reply);
 | 
			
		||||
                        }, false);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2733,7 +2723,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            switch ((int)linknum)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                case (int)BuiltIn_Commands_BaseClass.LINK_ROOT:
 | 
			
		||||
                case (int)ScriptBaseClass.LINK_ROOT:
 | 
			
		||||
 | 
			
		||||
                    SceneObjectPart part = m_host.ParentGroup.RootPart;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2750,14 +2740,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                            };
 | 
			
		||||
 | 
			
		||||
                            m_ScriptEngine.PostScriptEvent(partItemID,
 | 
			
		||||
                                    new XEventParams("link_message",
 | 
			
		||||
                                    resobj, new XDetectParams[0]));
 | 
			
		||||
                                    new EventParams("link_message",
 | 
			
		||||
                                    resobj, new DetectParams[0]));
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case (int)BuiltIn_Commands_BaseClass.LINK_SET:
 | 
			
		||||
                case (int)ScriptBaseClass.LINK_SET:
 | 
			
		||||
 | 
			
		||||
                    foreach (SceneObjectPart partInst in m_host.ParentGroup.GetParts())
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -2774,15 +2764,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                                };
 | 
			
		||||
 | 
			
		||||
                                m_ScriptEngine.PostScriptEvent(partItemID,
 | 
			
		||||
                                        new XEventParams("link_message",
 | 
			
		||||
                                        resobj, new XDetectParams[0]));
 | 
			
		||||
                                        new EventParams("link_message",
 | 
			
		||||
                                        resobj, new DetectParams[0]));
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case (int)BuiltIn_Commands_BaseClass.LINK_ALL_OTHERS:
 | 
			
		||||
                case (int)ScriptBaseClass.LINK_ALL_OTHERS:
 | 
			
		||||
 | 
			
		||||
                    foreach (SceneObjectPart partInst in m_host.ParentGroup.GetParts())
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -2802,8 +2792,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                                    };
 | 
			
		||||
 | 
			
		||||
                                    m_ScriptEngine.PostScriptEvent(partItemID,
 | 
			
		||||
                                            new XEventParams("link_message",
 | 
			
		||||
                                            resobj, new XDetectParams[0]));
 | 
			
		||||
                                            new EventParams("link_message",
 | 
			
		||||
                                            resobj, new DetectParams[0]));
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2812,7 +2802,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case (int)BuiltIn_Commands_BaseClass.LINK_ALL_CHILDREN:
 | 
			
		||||
                case (int)ScriptBaseClass.LINK_ALL_CHILDREN:
 | 
			
		||||
 | 
			
		||||
                    foreach (SceneObjectPart partInst in m_host.ParentGroup.GetParts())
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -2832,8 +2822,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                                    };
 | 
			
		||||
 | 
			
		||||
                                    m_ScriptEngine.PostScriptEvent(partItemID,
 | 
			
		||||
                                            new XEventParams("link_message",
 | 
			
		||||
                                            resobj, new XDetectParams[0]));
 | 
			
		||||
                                            new EventParams("link_message",
 | 
			
		||||
                                            resobj, new DetectParams[0]));
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2842,7 +2832,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case (int)BuiltIn_Commands_BaseClass.LINK_THIS:
 | 
			
		||||
                case (int)ScriptBaseClass.LINK_THIS:
 | 
			
		||||
 | 
			
		||||
                    foreach (TaskInventoryItem item in m_host.TaskInventory.Values)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -2856,8 +2846,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                            };
 | 
			
		||||
 | 
			
		||||
                            m_ScriptEngine.PostScriptEvent(partItemID,
 | 
			
		||||
                                    new XEventParams("link_message",
 | 
			
		||||
                                    resobj, new XDetectParams[0]));
 | 
			
		||||
                                    new EventParams("link_message",
 | 
			
		||||
                                    resobj, new DetectParams[0]));
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2883,8 +2873,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                                    };
 | 
			
		||||
 | 
			
		||||
                                    m_ScriptEngine.PostScriptEvent(partItemID,
 | 
			
		||||
                                            new XEventParams("link_message",
 | 
			
		||||
                                            resObjDef, new XDetectParams[0]));
 | 
			
		||||
                                            new EventParams("link_message",
 | 
			
		||||
                                            resObjDef, new DetectParams[0]));
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4061,23 +4051,23 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            {
 | 
			
		||||
                switch ((int)rules.Data[i])
 | 
			
		||||
                {
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_PART_FLAGS:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_PART_FLAGS:
 | 
			
		||||
                        prules.PartDataFlags = (Primitive.ParticleSystem.ParticleDataFlags)((uint)Convert.ToInt32(rules.Data[i + 1].ToString()));
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_PART_START_COLOR:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_PART_START_COLOR:
 | 
			
		||||
                        tempv = (LSL_Types.Vector3)rules.Data[i + 1];
 | 
			
		||||
                        prules.PartStartColor.R = (float)tempv.x;
 | 
			
		||||
                        prules.PartStartColor.G = (float)tempv.y;
 | 
			
		||||
                        prules.PartStartColor.B = (float)tempv.z;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_PART_START_ALPHA:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_PART_START_ALPHA:
 | 
			
		||||
                        tempf = Convert.ToSingle(rules.Data[i + 1].ToString());
 | 
			
		||||
                        prules.PartStartColor.A = (float)tempf;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_PART_END_COLOR:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_PART_END_COLOR:
 | 
			
		||||
                        tempv = (LSL_Types.Vector3)rules.Data[i + 1];
 | 
			
		||||
                        //prules.PartEndColor = new LLColor(tempv.x,tempv.y,tempv.z,1);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4086,36 +4076,36 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                        prules.PartEndColor.B = (float)tempv.z;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_PART_END_ALPHA:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_PART_END_ALPHA:
 | 
			
		||||
                        tempf = Convert.ToSingle(rules.Data[i + 1].ToString());
 | 
			
		||||
                        prules.PartEndColor.A = (float)tempf;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_PART_START_SCALE:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_PART_START_SCALE:
 | 
			
		||||
                        tempv = (LSL_Types.Vector3)rules.Data[i + 1];
 | 
			
		||||
                        prules.PartStartScaleX = (float)tempv.x;
 | 
			
		||||
                        prules.PartStartScaleY = (float)tempv.y;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_PART_END_SCALE:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_PART_END_SCALE:
 | 
			
		||||
                        tempv = (LSL_Types.Vector3)rules.Data[i + 1];
 | 
			
		||||
                        prules.PartEndScaleX = (float)tempv.x;
 | 
			
		||||
                        prules.PartEndScaleY = (float)tempv.y;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_PART_MAX_AGE:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_PART_MAX_AGE:
 | 
			
		||||
                        tempf = Convert.ToSingle(rules.Data[i + 1].ToString());
 | 
			
		||||
                        prules.PartMaxAge = (float)tempf;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_ACCEL:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_SRC_ACCEL:
 | 
			
		||||
                        tempv = (LSL_Types.Vector3)rules.Data[i + 1];
 | 
			
		||||
                        prules.PartAcceleration.X = (float)tempv.x;
 | 
			
		||||
                        prules.PartAcceleration.Y = (float)tempv.y;
 | 
			
		||||
                        prules.PartAcceleration.Z = (float)tempv.z;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_PATTERN:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_SRC_PATTERN:
 | 
			
		||||
                        int tmpi = int.Parse(rules.Data[i + 1].ToString());
 | 
			
		||||
                        prules.Pattern = (Primitive.ParticleSystem.SourcePattern)tmpi;
 | 
			
		||||
                        break;
 | 
			
		||||
| 
						 | 
				
			
			@ -4124,40 +4114,40 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                    // Wiki:    PSYS_SRC_TEXTURE      string      inventory item name or key of the particle texture
 | 
			
		||||
                    //          "" = default texture.
 | 
			
		||||
                    // 20080530 Updated to remove code duplication
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_TEXTURE:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_SRC_TEXTURE:
 | 
			
		||||
                        prules.Texture = KeyOrName(rules.Data[i + 1].ToString());
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_BURST_RATE:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_SRC_BURST_RATE:
 | 
			
		||||
                        tempf = Convert.ToSingle(rules.Data[i + 1].ToString());
 | 
			
		||||
                        prules.BurstRate = (float)tempf;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_BURST_PART_COUNT:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_SRC_BURST_PART_COUNT:
 | 
			
		||||
                        prules.BurstPartCount = (byte)Convert.ToByte(rules.Data[i + 1].ToString());
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_BURST_RADIUS:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_SRC_BURST_RADIUS:
 | 
			
		||||
                        tempf = Convert.ToSingle(rules.Data[i + 1].ToString());
 | 
			
		||||
                        prules.BurstRadius = (float)tempf;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_BURST_SPEED_MIN:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MIN:
 | 
			
		||||
                        tempf = Convert.ToSingle(rules.Data[i + 1].ToString());
 | 
			
		||||
                        prules.BurstSpeedMin = (float)tempf;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_BURST_SPEED_MAX:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MAX:
 | 
			
		||||
                        tempf = Convert.ToSingle(rules.Data[i + 1].ToString());
 | 
			
		||||
                        prules.BurstSpeedMax = (float)tempf;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_MAX_AGE:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_SRC_MAX_AGE:
 | 
			
		||||
                        tempf = Convert.ToSingle(rules.Data[i + 1].ToString());
 | 
			
		||||
                        prules.MaxAge = (float)tempf;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_TARGET_KEY:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_SRC_TARGET_KEY:
 | 
			
		||||
                        LLUUID key = LLUUID.Zero;
 | 
			
		||||
                        if (LLUUID.TryParse(rules.Data[i + 1].ToString(), out key))
 | 
			
		||||
                        {
 | 
			
		||||
| 
						 | 
				
			
			@ -4169,7 +4159,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                        }
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_OMEGA:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_SRC_OMEGA:
 | 
			
		||||
                        // AL: This is an assumption, since it is the only thing that would match.
 | 
			
		||||
                        tempv = (LSL_Types.Vector3)rules.Data[i + 1];
 | 
			
		||||
                        prules.AngularVelocity.X = (float)tempv.x;
 | 
			
		||||
| 
						 | 
				
			
			@ -4178,12 +4168,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                        //cast??                    prules.MaxAge = (float)rules[i + 1];
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_ANGLE_BEGIN:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_SRC_ANGLE_BEGIN:
 | 
			
		||||
                        tempf = Convert.ToSingle(rules.Data[i + 1].ToString());
 | 
			
		||||
                        prules.InnerAngle = (float)tempf;
 | 
			
		||||
                        break;
 | 
			
		||||
 | 
			
		||||
                    case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_ANGLE_END:
 | 
			
		||||
                    case (int)ScriptBaseClass.PSYS_SRC_ANGLE_END:
 | 
			
		||||
                        tempf = Convert.ToSingle(rules.Data[i + 1].ToString());
 | 
			
		||||
                        prules.OuterAngle = (float)tempf;
 | 
			
		||||
                        break;
 | 
			
		||||
| 
						 | 
				
			
			@ -4444,9 +4434,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            {
 | 
			
		||||
                LLUUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, LLUUID.Zero);
 | 
			
		||||
                object[] resobj = new object[] { new LSL_Types.LSLInteger(1), new LSL_Types.LSLString(channelID.ToString()), new LSL_Types.LSLString(LLUUID.Zero.ToString()), new LSL_Types.LSLString(String.Empty), new LSL_Types.LSLInteger(0), new LSL_Types.LSLString(String.Empty) };
 | 
			
		||||
                m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams(
 | 
			
		||||
                m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
 | 
			
		||||
                        "remote_data", resobj,
 | 
			
		||||
                        new XDetectParams[0]));
 | 
			
		||||
                        new DetectParams[0]));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -5472,27 +5462,27 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
            int permmask = 0;
 | 
			
		||||
 | 
			
		||||
            if (mask == BuiltIn_Commands_BaseClass.MASK_BASE)//0
 | 
			
		||||
            if (mask == ScriptBaseClass.MASK_BASE)//0
 | 
			
		||||
            {
 | 
			
		||||
                permmask = (int)m_host.BaseMask;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            else if (mask == BuiltIn_Commands_BaseClass.MASK_OWNER)//1
 | 
			
		||||
            else if (mask == ScriptBaseClass.MASK_OWNER)//1
 | 
			
		||||
            {
 | 
			
		||||
                permmask = (int)m_host.OwnerMask;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            else if (mask == BuiltIn_Commands_BaseClass.MASK_GROUP)//2
 | 
			
		||||
            else if (mask == ScriptBaseClass.MASK_GROUP)//2
 | 
			
		||||
            {
 | 
			
		||||
                permmask = (int)m_host.GroupMask;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            else if (mask == BuiltIn_Commands_BaseClass.MASK_EVERYONE)//3
 | 
			
		||||
            else if (mask == ScriptBaseClass.MASK_EVERYONE)//3
 | 
			
		||||
            {
 | 
			
		||||
                permmask = (int)m_host.EveryoneMask;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            else if (mask == BuiltIn_Commands_BaseClass.MASK_NEXT)//4
 | 
			
		||||
            else if (mask == ScriptBaseClass.MASK_NEXT)//4
 | 
			
		||||
            {
 | 
			
		||||
                permmask = (int)m_host.NextOwnerMask;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -5511,27 +5501,27 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            {
 | 
			
		||||
                if (World.ExternalChecks.ExternalChecksCanRunConsoleCommand(m_host.OwnerID))
 | 
			
		||||
                {
 | 
			
		||||
                    if (mask == BuiltIn_Commands_BaseClass.MASK_BASE)//0
 | 
			
		||||
                    if (mask == ScriptBaseClass.MASK_BASE)//0
 | 
			
		||||
                    {
 | 
			
		||||
                        m_host.BaseMask = (uint)value;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    else if (mask == BuiltIn_Commands_BaseClass.MASK_OWNER)//1
 | 
			
		||||
                    else if (mask == ScriptBaseClass.MASK_OWNER)//1
 | 
			
		||||
                    {
 | 
			
		||||
                        m_host.OwnerMask = (uint)value;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    else if (mask == BuiltIn_Commands_BaseClass.MASK_GROUP)//2
 | 
			
		||||
                    else if (mask == ScriptBaseClass.MASK_GROUP)//2
 | 
			
		||||
                    {
 | 
			
		||||
                        m_host.GroupMask = (uint)value;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    else if (mask == BuiltIn_Commands_BaseClass.MASK_EVERYONE)//3
 | 
			
		||||
                    else if (mask == ScriptBaseClass.MASK_EVERYONE)//3
 | 
			
		||||
                    {
 | 
			
		||||
                        m_host.EveryoneMask = (uint)value;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    else if (mask == BuiltIn_Commands_BaseClass.MASK_NEXT)//4
 | 
			
		||||
                    else if (mask == ScriptBaseClass.MASK_NEXT)//4
 | 
			
		||||
                    {
 | 
			
		||||
                        m_host.NextOwnerMask = (uint)value;
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -5635,12 +5625,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                }
 | 
			
		||||
                LLUUID rq = LLUUID.Random();
 | 
			
		||||
 | 
			
		||||
                LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.
 | 
			
		||||
                    m_Dataserver.RegisterRequest(m_localID,
 | 
			
		||||
                LLUUID tid = AsyncCommands.
 | 
			
		||||
                    DataserverPlugin.RegisterRequest(m_localID,
 | 
			
		||||
                                                 m_itemID, rq.ToString());
 | 
			
		||||
 | 
			
		||||
                m_ScriptEngine.m_ASYNCLSLCommandManager.
 | 
			
		||||
                    m_Dataserver.DataserverReply(rq.ToString(), reply);
 | 
			
		||||
                AsyncCommands.
 | 
			
		||||
                    DataserverPlugin.DataserverReply(rq.ToString(), reply);
 | 
			
		||||
 | 
			
		||||
                return tid.ToString();
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -5943,27 +5933,27 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            LSL_Types.list nums = LSL_Types.list.ToDoubleList(src);
 | 
			
		||||
            switch (operation)
 | 
			
		||||
            {
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.LIST_STAT_RANGE:
 | 
			
		||||
                case ScriptBaseClass.LIST_STAT_RANGE:
 | 
			
		||||
                    return nums.Range();
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.LIST_STAT_MIN:
 | 
			
		||||
                case ScriptBaseClass.LIST_STAT_MIN:
 | 
			
		||||
                    return nums.Min();
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.LIST_STAT_MAX:
 | 
			
		||||
                case ScriptBaseClass.LIST_STAT_MAX:
 | 
			
		||||
                    return nums.Max();
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.LIST_STAT_MEAN:
 | 
			
		||||
                case ScriptBaseClass.LIST_STAT_MEAN:
 | 
			
		||||
                    return nums.Mean();
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.LIST_STAT_MEDIAN:
 | 
			
		||||
                case ScriptBaseClass.LIST_STAT_MEDIAN:
 | 
			
		||||
                    return nums.Median();
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.LIST_STAT_NUM_COUNT:
 | 
			
		||||
                case ScriptBaseClass.LIST_STAT_NUM_COUNT:
 | 
			
		||||
                    return nums.NumericLength();
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.LIST_STAT_STD_DEV:
 | 
			
		||||
                case ScriptBaseClass.LIST_STAT_STD_DEV:
 | 
			
		||||
                    return nums.StdDev();
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.LIST_STAT_SUM:
 | 
			
		||||
                case ScriptBaseClass.LIST_STAT_SUM:
 | 
			
		||||
                    return nums.Sum();
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.LIST_STAT_SUM_SQUARES:
 | 
			
		||||
                case ScriptBaseClass.LIST_STAT_SUM_SQUARES:
 | 
			
		||||
                    return nums.SumSqrs();
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.LIST_STAT_GEOMETRIC_MEAN:
 | 
			
		||||
                case ScriptBaseClass.LIST_STAT_GEOMETRIC_MEAN:
 | 
			
		||||
                    return nums.GeometricMean();
 | 
			
		||||
                case BuiltIn_Commands_BaseClass.LIST_STAT_HARMONIC_MEAN:
 | 
			
		||||
                case ScriptBaseClass.LIST_STAT_HARMONIC_MEAN:
 | 
			
		||||
                    return nums.HarmonicMean();
 | 
			
		||||
                default:
 | 
			
		||||
                    return 0.0;
 | 
			
		||||
| 
						 | 
				
			
			@ -6230,9 +6220,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public string llStringTrim(string src, int type)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            if (type == (int)BuiltIn_Commands_BaseClass.STRING_TRIM_HEAD) { return src.TrimStart(); }
 | 
			
		||||
            if (type == (int)BuiltIn_Commands_BaseClass.STRING_TRIM_TAIL) { return src.TrimEnd(); }
 | 
			
		||||
            if (type == (int)BuiltIn_Commands_BaseClass.STRING_TRIM) { return src.Trim(); }
 | 
			
		||||
            if (type == (int)ScriptBaseClass.STRING_TRIM_HEAD) { return src.TrimStart(); }
 | 
			
		||||
            if (type == (int)ScriptBaseClass.STRING_TRIM_TAIL) { return src.TrimEnd(); }
 | 
			
		||||
            if (type == (int)ScriptBaseClass.STRING_TRIM) { return src.Trim(); }
 | 
			
		||||
            return src;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -6331,7 +6321,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        internal void ShoutError(string msg)
 | 
			
		||||
        {
 | 
			
		||||
            llShout(BuiltIn_Commands_BaseClass.DEBUG_CHANNEL, msg);
 | 
			
		||||
            llShout(ScriptBaseClass.DEBUG_CHANNEL, msg);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -6366,13 +6356,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            {
 | 
			
		||||
                if (item.Type == 7 && item.Name == name)
 | 
			
		||||
                {
 | 
			
		||||
                    LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.
 | 
			
		||||
                            m_Dataserver.RegisterRequest(m_localID,
 | 
			
		||||
                    LLUUID tid = AsyncCommands.
 | 
			
		||||
                            DataserverPlugin.RegisterRequest(m_localID,
 | 
			
		||||
                            m_itemID, item.AssetID.ToString());
 | 
			
		||||
                    if (NotecardCache.IsCached(item.AssetID))
 | 
			
		||||
                    {
 | 
			
		||||
                        m_ScriptEngine.m_ASYNCLSLCommandManager.
 | 
			
		||||
                        m_Dataserver.DataserverReply(item.AssetID.ToString(),
 | 
			
		||||
                        AsyncCommands.
 | 
			
		||||
                        DataserverPlugin.DataserverReply(item.AssetID.ToString(),
 | 
			
		||||
                                NotecardCache.GetLines(item.AssetID).ToString());
 | 
			
		||||
                        return tid.ToString();
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -6383,8 +6373,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                        string data = enc.GetString(a.Data);
 | 
			
		||||
                        //Console.WriteLine(data);
 | 
			
		||||
                        NotecardCache.Cache(id, data);
 | 
			
		||||
                        m_ScriptEngine.m_ASYNCLSLCommandManager.
 | 
			
		||||
                                m_Dataserver.DataserverReply(id.ToString(),
 | 
			
		||||
                        AsyncCommands.
 | 
			
		||||
                                DataserverPlugin.DataserverReply(id.ToString(),
 | 
			
		||||
                                NotecardCache.GetLines(id).ToString());
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -6402,13 +6392,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            {
 | 
			
		||||
                if (item.Type == 7 && item.Name == name)
 | 
			
		||||
                {
 | 
			
		||||
                    LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.
 | 
			
		||||
                            m_Dataserver.RegisterRequest(m_localID,
 | 
			
		||||
                    LLUUID tid = AsyncCommands.
 | 
			
		||||
                            DataserverPlugin.RegisterRequest(m_localID,
 | 
			
		||||
                            m_itemID, item.AssetID.ToString());
 | 
			
		||||
                    if (NotecardCache.IsCached(item.AssetID))
 | 
			
		||||
                    {
 | 
			
		||||
                        m_ScriptEngine.m_ASYNCLSLCommandManager.
 | 
			
		||||
                        m_Dataserver.DataserverReply(item.AssetID.ToString(),
 | 
			
		||||
                        AsyncCommands.
 | 
			
		||||
                        DataserverPlugin.DataserverReply(item.AssetID.ToString(),
 | 
			
		||||
                                NotecardCache.GetLine(item.AssetID, line));
 | 
			
		||||
                        return tid.ToString();
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -6419,8 +6409,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                        string data = enc.GetString(a.Data);
 | 
			
		||||
                        //Console.WriteLine(data);
 | 
			
		||||
                        NotecardCache.Cache(id, data);
 | 
			
		||||
                        m_ScriptEngine.m_ASYNCLSLCommandManager.
 | 
			
		||||
                                m_Dataserver.DataserverReply(id.ToString(),
 | 
			
		||||
                        AsyncCommands.
 | 
			
		||||
                                DataserverPlugin.DataserverReply(id.ToString(),
 | 
			
		||||
                                NotecardCache.GetLine(id, line));
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -31,25 +31,25 @@ using Nini.Config;
 | 
			
		|||
using OpenSim.Framework.Console;
 | 
			
		||||
using OpenSim.Region.Environment.Interfaces;
 | 
			
		||||
using OpenSim.Region.Environment.Scenes;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.XEngine.Script;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared; 
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api.Plugins; 
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		||||
{
 | 
			
		||||
    [Serializable]
 | 
			
		||||
    public class OSSL_ScriptCommands : MarshalByRefObject, IOSSL_ScriptCommands
 | 
			
		||||
    public class OSSL_Api : MarshalByRefObject, IOSSL_Api, IScriptApi
 | 
			
		||||
    {
 | 
			
		||||
        internal XEngine m_ScriptEngine;
 | 
			
		||||
        internal XScriptInstance m_Instance;
 | 
			
		||||
        internal IScriptEngine m_ScriptEngine;
 | 
			
		||||
        internal SceneObjectPart m_host;
 | 
			
		||||
        internal uint m_localID;
 | 
			
		||||
        internal LLUUID m_itemID;
 | 
			
		||||
 | 
			
		||||
        public OSSL_ScriptCommands(XEngine scriptEngine,
 | 
			
		||||
                XScriptInstance instance, SceneObjectPart host,
 | 
			
		||||
                uint localID, LLUUID itemID)
 | 
			
		||||
        public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, LLUUID itemID)
 | 
			
		||||
        {
 | 
			
		||||
            m_ScriptEngine = scriptEngine;
 | 
			
		||||
            m_Instance = instance;
 | 
			
		||||
            m_ScriptEngine = ScriptEngine;
 | 
			
		||||
            m_host = host;
 | 
			
		||||
            m_localID = localID;
 | 
			
		||||
            m_itemID = itemID;
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public int osTerrainSetHeight(int x, int y, double val)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osTerrainSetHeight: permission denied");
 | 
			
		||||
                return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -85,7 +85,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public double osTerrainGetHeight(int x, int y)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osTerrainGetHeight: permission denied");
 | 
			
		||||
                return 0.0;
 | 
			
		||||
| 
						 | 
				
			
			@ -100,7 +100,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public int osRegionRestart(double seconds)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osRegionRestart: permission denied");
 | 
			
		||||
                return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -120,7 +120,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public void osRegionNotice(string msg)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osRegionNotice: permission denied");
 | 
			
		||||
                return;
 | 
			
		||||
| 
						 | 
				
			
			@ -132,7 +132,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public void osSetRot(LLUUID target, Quaternion rotation)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osSetRot: permission denied");
 | 
			
		||||
                return;
 | 
			
		||||
| 
						 | 
				
			
			@ -152,7 +152,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams,
 | 
			
		||||
                                             int timer)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osSetDynamicTextureURL: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +178,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public string osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams,
 | 
			
		||||
                                             int timer, int alpha)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osSetDynamicTextureURLBlend: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -204,7 +204,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public string osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams,
 | 
			
		||||
                                           int timer)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osSetDynamicTextureData: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -233,7 +233,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public string osSetDynamicTextureDataBlend(string dynamicID, string contentType, string data, string extraParams,
 | 
			
		||||
                                          int timer, int alpha)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osSetDynamicTextureDataBlend: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -262,7 +262,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public bool osConsoleCommand(string command)
 | 
			
		||||
        {
 | 
			
		||||
            m_host.AddScriptLPS(1);
 | 
			
		||||
            if (m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowosConsoleCommand", false))
 | 
			
		||||
            if (m_ScriptEngine.Config.GetBoolean("AllowosConsoleCommand", false))
 | 
			
		||||
            {
 | 
			
		||||
                if (World.ExternalChecks.ExternalChecksCanRunConsoleCommand(m_host.OwnerID))
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -275,7 +275,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        }
 | 
			
		||||
        public void osSetPrimFloatOnWater(int floatYN)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osSetPrimFloatOnWater: permission denied");
 | 
			
		||||
                return;
 | 
			
		||||
| 
						 | 
				
			
			@ -294,7 +294,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        // Adam's super super custom animation functions
 | 
			
		||||
        public void osAvatarPlayAnimation(string avatar, string animation)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osAvatarPlayAnimation: permission denied");
 | 
			
		||||
                return;
 | 
			
		||||
| 
						 | 
				
			
			@ -310,7 +310,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public void osAvatarStopAnimation(string avatar, string animation)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osAvatarStopAnimation: permission denied");
 | 
			
		||||
                return;
 | 
			
		||||
| 
						 | 
				
			
			@ -327,7 +327,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        //Texture draw functions
 | 
			
		||||
        public string osMovePen(string drawList, int x, int y)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osMovePen: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -340,7 +340,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public string osDrawLine(string drawList, int startX, int startY, int endX, int endY)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osDrawLine: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -353,7 +353,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public string osDrawLine(string drawList, int endX, int endY)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osDrawLine: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -366,7 +366,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public string osDrawText(string drawList, string text)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osDrawText: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -379,7 +379,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public string osDrawEllipse(string drawList, int width, int height)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osDrawEllipse: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -392,7 +392,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public string osDrawRectangle(string drawList, int width, int height)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osDrawRectangle: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -405,7 +405,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public string osDrawFilledRectangle(string drawList, int width, int height)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osDrawFilledRectangle: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -418,7 +418,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public string osSetFontSize(string drawList, int fontSize)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osSetFontSize: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -431,7 +431,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public string osSetPenSize(string drawList, int penSize)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osSetPenSize: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -444,7 +444,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public string osSetPenColour(string drawList, string colour)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osSetPenColour: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -457,7 +457,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public string osDrawImage(string drawList, int width, int height, string imageUrl)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osDrawImage: permission denied");
 | 
			
		||||
                return String.Empty;
 | 
			
		||||
| 
						 | 
				
			
			@ -470,7 +470,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public void osSetStateEvents(int events)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osSetStateEvents: permission denied");
 | 
			
		||||
                return;
 | 
			
		||||
| 
						 | 
				
			
			@ -481,7 +481,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public void osSetRegionWaterHeight(double height)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osSetRegionWaterHeight: permission denied");
 | 
			
		||||
                return;
 | 
			
		||||
| 
						 | 
				
			
			@ -498,7 +498,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public double osList2Double(LSL_Types.list src, int index)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osList2Double: permission denied");
 | 
			
		||||
                return 0.0;
 | 
			
		||||
| 
						 | 
				
			
			@ -518,7 +518,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public void osSetParcelMediaURL(string url)
 | 
			
		||||
        {
 | 
			
		||||
            if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
 | 
			
		||||
            {
 | 
			
		||||
                OSSLError("osSetParcelMediaURL: permission denied");
 | 
			
		||||
                return;
 | 
			
		||||
| 
						 | 
				
			
			@ -29,9 +29,10 @@ using System;
 | 
			
		|||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using libsecondlife;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.XEngine.Script;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
 | 
			
		||||
{
 | 
			
		||||
    public class Dataserver
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -94,10 +95,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            m_CmdManager.m_ScriptEngine.PostObjectEvent(ds.localID,
 | 
			
		||||
                    new XEventParams("dataserver", new Object[]
 | 
			
		||||
                    new EventParams("dataserver", new Object[]
 | 
			
		||||
                            { new LSL_Types.LSLString(ds.ID.ToString()),
 | 
			
		||||
                            new LSL_Types.LSLString(reply)},
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RemoveEvents(uint localID, LLUUID itemID)
 | 
			
		||||
| 
						 | 
				
			
			@ -28,9 +28,11 @@
 | 
			
		|||
using System;
 | 
			
		||||
using OpenSim.Region.Environment.Interfaces;
 | 
			
		||||
using OpenSim.Region.Environment.Modules.Scripting.HttpRequest;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.XEngine.Script;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
 | 
			
		||||
{
 | 
			
		||||
    public class HttpRequest
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -75,11 +77,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		|||
                    new LSL_Types.LSLString(httpInfo.response_body)
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                foreach (XEngine xe in XEngine.ScriptEngines)
 | 
			
		||||
                foreach (AsyncCommandManager m in m_CmdManager.Managers)
 | 
			
		||||
                {
 | 
			
		||||
                    if (xe.PostObjectEvent(httpInfo.localID,
 | 
			
		||||
                            new XEventParams("http_response",
 | 
			
		||||
                            resobj, new XDetectParams[0])))
 | 
			
		||||
                    if (m.m_ScriptEngine.PostObjectEvent(httpInfo.localID,
 | 
			
		||||
                            new EventParams("http_response",
 | 
			
		||||
                            resobj, new DetectParams[0])))
 | 
			
		||||
                        break;
 | 
			
		||||
                }
 | 
			
		||||
                httpInfo = iHttpReq.GetNextCompletedRequest();
 | 
			
		||||
| 
						 | 
				
			
			@ -29,9 +29,10 @@ using System;
 | 
			
		|||
using libsecondlife;
 | 
			
		||||
using OpenSim.Region.Environment.Interfaces;
 | 
			
		||||
using OpenSim.Region.Environment.Modules.Scripting.WorldComm;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.XEngine.Script;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
 | 
			
		||||
{
 | 
			
		||||
    public class Listener
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -66,9 +67,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		|||
                    };
 | 
			
		||||
 | 
			
		||||
                    m_CmdManager.m_ScriptEngine.PostScriptEvent(
 | 
			
		||||
                            lInfo.GetItemID(), new XEventParams(
 | 
			
		||||
                            lInfo.GetItemID(), new EventParams(
 | 
			
		||||
                            "listen", resobj,
 | 
			
		||||
                            new XDetectParams[0]));
 | 
			
		||||
                            new DetectParams[0]));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -30,9 +30,10 @@ using System.Collections.Generic;
 | 
			
		|||
using libsecondlife;
 | 
			
		||||
using OpenSim.Framework;
 | 
			
		||||
using OpenSim.Region.Environment.Scenes;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.XEngine.Script;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
 | 
			
		||||
{
 | 
			
		||||
    public class SensorRepeat
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -72,8 +73,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		|||
                                        string name, LLUUID keyID, int type, double range,
 | 
			
		||||
                                        double arc, double sec, SceneObjectPart host)
 | 
			
		||||
        {
 | 
			
		||||
            Console.WriteLine("SetSensorEvent");
 | 
			
		||||
 | 
			
		||||
            // Always remove first, in case this is a re-set
 | 
			
		||||
            UnSetSenseRepeaterEvents(m_localID, m_itemID);
 | 
			
		||||
            if (sec == 0) // Disabling timer
 | 
			
		||||
| 
						 | 
				
			
			@ -163,7 +162,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		|||
                Dictionary<LLUUID, LSL_Types.list> Obj = null;
 | 
			
		||||
                if (!SenseEvents.TryGetValue(m_localID, out Obj))
 | 
			
		||||
                {
 | 
			
		||||
                    m_CmdManager.m_ScriptEngine.Log.Info("[AsyncLSL]: GetSensorList missing localID: " + m_localID);
 | 
			
		||||
                    return null;
 | 
			
		||||
                }
 | 
			
		||||
                lock (Obj)
 | 
			
		||||
| 
						 | 
				
			
			@ -172,7 +170,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		|||
                    LSL_Types.list SenseList = null;
 | 
			
		||||
                    if (!Obj.TryGetValue(m_itemID, out SenseList))
 | 
			
		||||
                    {
 | 
			
		||||
                        m_CmdManager.m_ScriptEngine.Log.Info("[AsyncLSL]: GetSensorList missing itemID: " + m_itemID);
 | 
			
		||||
                        return null;
 | 
			
		||||
                    }
 | 
			
		||||
                    return SenseList;
 | 
			
		||||
| 
						 | 
				
			
			@ -182,15 +179,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		|||
 | 
			
		||||
        private void SensorSweep(SenseRepeatClass ts)
 | 
			
		||||
        {
 | 
			
		||||
            //m_ScriptEngine.Log.Info("[AsyncLSL]:Enter SensorSweep");
 | 
			
		||||
            SceneObjectPart SensePoint = ts.host;
 | 
			
		||||
 | 
			
		||||
            if (SensePoint == null)
 | 
			
		||||
            {
 | 
			
		||||
                //m_ScriptEngine.Log.Info("[AsyncLSL]: Enter SensorSweep (SensePoint == null) for "+ts.itemID.ToString());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            //m_ScriptEngine.Log.Info("[AsyncLSL]: Enter SensorSweep Scan");
 | 
			
		||||
 | 
			
		||||
            LLVector3 sensorPos = SensePoint.AbsolutePosition;
 | 
			
		||||
            LLVector3 regionPos = new LLVector3(m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocX * Constants.RegionSize, m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocY * Constants.RegionSize, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -220,7 +214,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		|||
                        objtype |= 0x04; // passive non-moving
 | 
			
		||||
                    else
 | 
			
		||||
                        objtype |= 0x02; // active moving
 | 
			
		||||
                    if (ent is IScript) objtype |= 0x08; // Scripted. It COULD have one hidden ...
 | 
			
		||||
 | 
			
		||||
                    SceneObjectPart part = m_CmdManager.m_ScriptEngine.World.GetSceneObjectPart(ent.UUID);
 | 
			
		||||
 | 
			
		||||
                    if (part != null && part.ContainsScripts()) objtype |= 0x08; // Scripted. It COULD have one hidden ...
 | 
			
		||||
 | 
			
		||||
                    if (((ts.type & objtype) != 0) || ((ts.type & objtype) == ts.type))
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -288,7 +285,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		|||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            //m_ScriptEngine.Log.Info("[AsyncLSL]: Enter SensorSweep SenseLock");
 | 
			
		||||
 | 
			
		||||
            lock (SenseLock)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -311,24 +307,24 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		|||
                    // send a "no_sensor"
 | 
			
		||||
                    // Add it to queue
 | 
			
		||||
                    m_CmdManager.m_ScriptEngine.PostScriptEvent(ts.itemID,
 | 
			
		||||
                            new XEventParams("no_sensor", new Object[0],
 | 
			
		||||
                            new XDetectParams[0]));
 | 
			
		||||
                            new EventParams("no_sensor", new Object[0],
 | 
			
		||||
                            new DetectParams[0]));
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    XDetectParams[] detect =
 | 
			
		||||
                            new XDetectParams[SensedObjects.Length];
 | 
			
		||||
                    DetectParams[] detect =
 | 
			
		||||
                            new DetectParams[SensedObjects.Length];
 | 
			
		||||
 | 
			
		||||
                    int idx;
 | 
			
		||||
                    for (idx = 0; idx < SensedObjects.Length; idx++)
 | 
			
		||||
                    {
 | 
			
		||||
                        detect[idx] = new XDetectParams();
 | 
			
		||||
                        detect[idx] = new DetectParams();
 | 
			
		||||
                        detect[idx].Key=(LLUUID)(SensedObjects.Data[idx]);
 | 
			
		||||
                        detect[idx].Populate(m_CmdManager.m_ScriptEngine.World);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    m_CmdManager.m_ScriptEngine.PostScriptEvent(ts.itemID,
 | 
			
		||||
                            new XEventParams("sensor",
 | 
			
		||||
                            new EventParams("sensor",
 | 
			
		||||
                            new Object[] {
 | 
			
		||||
                            new LSL_Types.LSLInteger(SensedObjects.Length) },
 | 
			
		||||
                            detect));
 | 
			
		||||
| 
						 | 
				
			
			@ -29,8 +29,9 @@ using System;
 | 
			
		|||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using libsecondlife;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
 | 
			
		||||
{
 | 
			
		||||
    public class Timer
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -110,8 +111,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		|||
                        //                        Console.WriteLine("Time has passed: Now: " + DateTime.Now.Ticks + ", Passed: " + ts.next);
 | 
			
		||||
                        // Add it to queue
 | 
			
		||||
                        m_CmdManager.m_ScriptEngine.PostScriptEvent(ts.itemID,
 | 
			
		||||
                                new XEventParams("timer", new Object[0],
 | 
			
		||||
                                new XDetectParams[0]));
 | 
			
		||||
                                new EventParams("timer", new Object[0],
 | 
			
		||||
                                new DetectParams[0]));
 | 
			
		||||
                        // set next interval
 | 
			
		||||
 | 
			
		||||
                        //ts.next = DateTime.Now.ToUniversalTime().AddSeconds(ts.interval);
 | 
			
		||||
| 
						 | 
				
			
			@ -28,9 +28,11 @@
 | 
			
		|||
using System;
 | 
			
		||||
using OpenSim.Region.Environment.Interfaces;
 | 
			
		||||
using OpenSim.Region.Environment.Modules.Scripting.XMLRPC;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.XEngine.Script;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
 | 
			
		||||
{
 | 
			
		||||
    public class XmlRequest
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -69,12 +71,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		|||
                        new LSL_Types.LSLString(rInfo.GetStrVal())
 | 
			
		||||
                    };
 | 
			
		||||
                    
 | 
			
		||||
                    foreach (XEngine xe in XEngine.ScriptEngines)
 | 
			
		||||
                    foreach (AsyncCommandManager m in m_CmdManager.Managers)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (xe.PostScriptEvent(
 | 
			
		||||
                                rInfo.GetItemID(), new XEventParams(
 | 
			
		||||
                        if (m.m_ScriptEngine.PostScriptEvent(
 | 
			
		||||
                                rInfo.GetItemID(), new EventParams(
 | 
			
		||||
                                    "remote_data", resobj,
 | 
			
		||||
                                    new XDetectParams[0])))
 | 
			
		||||
                                    new DetectParams[0])))
 | 
			
		||||
                            break;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -98,12 +100,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
 | 
			
		|||
                        new LSL_Types.LSLString(srdInfo.sdata)
 | 
			
		||||
                    };
 | 
			
		||||
 | 
			
		||||
                    foreach (XEngine xe in XEngine.ScriptEngines)
 | 
			
		||||
                    foreach (AsyncCommandManager m in m_CmdManager.Managers)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (xe.PostScriptEvent(
 | 
			
		||||
                                srdInfo.m_itemID, new XEventParams(
 | 
			
		||||
                        if (m.m_ScriptEngine.PostScriptEvent(
 | 
			
		||||
                                srdInfo.m_itemID, new EventParams(
 | 
			
		||||
                                    "remote_data", resobj,
 | 
			
		||||
                                    new XDetectParams[0])))
 | 
			
		||||
                                    new DetectParams[0])))
 | 
			
		||||
                            break;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -25,20 +25,16 @@
 | 
			
		|||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using OpenSim.Region.Environment.Interfaces;
 | 
			
		||||
using System;
 | 
			
		||||
using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
 | 
			
		||||
using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
 | 
			
		||||
{
 | 
			
		||||
    public interface ILSL_ScriptCommands
 | 
			
		||||
    public interface ILSL_Api
 | 
			
		||||
    {
 | 
			
		||||
        // Interface used for loading and executing scripts
 | 
			
		||||
 | 
			
		||||
        string State { get; set ; }
 | 
			
		||||
 | 
			
		||||
        void state(string newState);
 | 
			
		||||
 | 
			
		||||
        ICommander GetCommander(string name);
 | 
			
		||||
 | 
			
		||||
        void llSay(int channelID, string text);
 | 
			
		||||
        double llSin(double f);
 | 
			
		||||
        double llCos(double f);
 | 
			
		||||
| 
						 | 
				
			
			@ -25,9 +25,9 @@
 | 
			
		|||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
 | 
			
		||||
{
 | 
			
		||||
    public interface IOSSL_ScriptCommands
 | 
			
		||||
    public interface IOSSL_Api
 | 
			
		||||
    {
 | 
			
		||||
        //OpenSim functions
 | 
			
		||||
        string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer);
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,421 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) Contributors, http://opensimulator.org/
 | 
			
		||||
 * See CONTRIBUTORS.TXT for a full list of copyright holders.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the OpenSim Project nor the
 | 
			
		||||
 *       names of its contributors may be used to endorse or promote products
 | 
			
		||||
 *       derived from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
 | 
			
		||||
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 | 
			
		||||
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
 | 
			
		||||
using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
 | 
			
		||||
{
 | 
			
		||||
    public partial class ScriptBaseClass : MarshalByRefObject
 | 
			
		||||
    {
 | 
			
		||||
        // LSL CONSTANTS
 | 
			
		||||
        public const int TRUE = 1;
 | 
			
		||||
        public const int FALSE = 0;
 | 
			
		||||
 | 
			
		||||
        public const int STATUS_PHYSICS = 1;
 | 
			
		||||
        public const int STATUS_ROTATE_X = 2;
 | 
			
		||||
        public const int STATUS_ROTATE_Y = 4;
 | 
			
		||||
        public const int STATUS_ROTATE_Z = 8;
 | 
			
		||||
        public const int STATUS_PHANTOM = 16;
 | 
			
		||||
        public const int STATUS_SANDBOX = 32;
 | 
			
		||||
        public const int STATUS_BLOCK_GRAB = 64;
 | 
			
		||||
        public const int STATUS_DIE_AT_EDGE = 128;
 | 
			
		||||
        public const int STATUS_RETURN_AT_EDGE = 256;
 | 
			
		||||
        public const int STATUS_CAST_SHADOWS = 512;
 | 
			
		||||
 | 
			
		||||
        public const int AGENT = 1;
 | 
			
		||||
        public const int ACTIVE = 2;
 | 
			
		||||
        public const int PASSIVE = 4;
 | 
			
		||||
        public const int SCRIPTED = 8;
 | 
			
		||||
 | 
			
		||||
        public const int CONTROL_FWD = 1;
 | 
			
		||||
        public const int CONTROL_BACK = 2;
 | 
			
		||||
        public const int CONTROL_LEFT = 4;
 | 
			
		||||
        public const int CONTROL_RIGHT = 8;
 | 
			
		||||
        public const int CONTROL_UP = 16;
 | 
			
		||||
        public const int CONTROL_DOWN = 32;
 | 
			
		||||
        public const int CONTROL_ROT_LEFT = 256;
 | 
			
		||||
        public const int CONTROL_ROT_RIGHT = 512;
 | 
			
		||||
        public const int CONTROL_LBUTTON = 268435456;
 | 
			
		||||
        public const int CONTROL_ML_LBUTTON = 1073741824;
 | 
			
		||||
 | 
			
		||||
        //Permissions
 | 
			
		||||
        public const int PERMISSION_DEBIT = 2;
 | 
			
		||||
        public const int PERMISSION_TAKE_CONTROLS = 4;
 | 
			
		||||
        public const int PERMISSION_REMAP_CONTROLS = 8;
 | 
			
		||||
        public const int PERMISSION_TRIGGER_ANIMATION = 16;
 | 
			
		||||
        public const int PERMISSION_ATTACH = 32;
 | 
			
		||||
        public const int PERMISSION_RELEASE_OWNERSHIP = 64;
 | 
			
		||||
        public const int PERMISSION_CHANGE_LINKS = 128;
 | 
			
		||||
        public const int PERMISSION_CHANGE_JOINTS = 256;
 | 
			
		||||
        public const int PERMISSION_CHANGE_PERMISSIONS = 512;
 | 
			
		||||
        public const int PERMISSION_TRACK_CAMERA = 1024;
 | 
			
		||||
 | 
			
		||||
        public const int AGENT_FLYING = 1;
 | 
			
		||||
        public const int AGENT_ATTACHMENTS = 2;
 | 
			
		||||
        public const int AGENT_SCRIPTED = 4;
 | 
			
		||||
        public const int AGENT_MOUSELOOK = 8;
 | 
			
		||||
        public const int AGENT_SITTING = 16;
 | 
			
		||||
        public const int AGENT_ON_OBJECT = 32;
 | 
			
		||||
        public const int AGENT_AWAY = 64;
 | 
			
		||||
        public const int AGENT_WALKING = 128;
 | 
			
		||||
        public const int AGENT_IN_AIR = 256;
 | 
			
		||||
        public const int AGENT_TYPING = 512;
 | 
			
		||||
        public const int AGENT_CROUCHING = 1024;
 | 
			
		||||
        public const int AGENT_BUSY = 2048;
 | 
			
		||||
        public const int AGENT_ALWAYS_RUN = 4096;
 | 
			
		||||
 | 
			
		||||
        //Particle Systems
 | 
			
		||||
        public const int PSYS_PART_INTERP_COLOR_MASK = 1;
 | 
			
		||||
        public const int PSYS_PART_INTERP_SCALE_MASK = 2;
 | 
			
		||||
        public const int PSYS_PART_BOUNCE_MASK = 4;
 | 
			
		||||
        public const int PSYS_PART_WIND_MASK = 8;
 | 
			
		||||
        public const int PSYS_PART_FOLLOW_SRC_MASK = 16;
 | 
			
		||||
        public const int PSYS_PART_FOLLOW_VELOCITY_MASK = 32;
 | 
			
		||||
        public const int PSYS_PART_TARGET_POS_MASK = 64;
 | 
			
		||||
        public const int PSYS_PART_TARGET_LINEAR_MASK = 128;
 | 
			
		||||
        public const int PSYS_PART_EMISSIVE_MASK = 256;
 | 
			
		||||
        public const int PSYS_PART_FLAGS = 0;
 | 
			
		||||
        public const int PSYS_PART_START_COLOR = 1;
 | 
			
		||||
        public const int PSYS_PART_START_ALPHA = 2;
 | 
			
		||||
        public const int PSYS_PART_END_COLOR = 3;
 | 
			
		||||
        public const int PSYS_PART_END_ALPHA = 4;
 | 
			
		||||
        public const int PSYS_PART_START_SCALE = 5;
 | 
			
		||||
        public const int PSYS_PART_END_SCALE = 6;
 | 
			
		||||
        public const int PSYS_PART_MAX_AGE = 7;
 | 
			
		||||
        public const int PSYS_SRC_ACCEL = 8;
 | 
			
		||||
        public const int PSYS_SRC_PATTERN = 9;
 | 
			
		||||
        public const int PSYS_SRC_INNERANGLE = 10;
 | 
			
		||||
        public const int PSYS_SRC_OUTERANGLE = 11;
 | 
			
		||||
        public const int PSYS_SRC_TEXTURE = 12;
 | 
			
		||||
        public const int PSYS_SRC_BURST_RATE = 13;
 | 
			
		||||
        public const int PSYS_SRC_BURST_PART_COUNT = 15;
 | 
			
		||||
        public const int PSYS_SRC_BURST_RADIUS = 16;
 | 
			
		||||
        public const int PSYS_SRC_BURST_SPEED_MIN = 17;
 | 
			
		||||
        public const int PSYS_SRC_BURST_SPEED_MAX = 18;
 | 
			
		||||
        public const int PSYS_SRC_MAX_AGE = 19;
 | 
			
		||||
        public const int PSYS_SRC_TARGET_KEY = 20;
 | 
			
		||||
        public const int PSYS_SRC_OMEGA = 21;
 | 
			
		||||
        public const int PSYS_SRC_ANGLE_BEGIN = 22;
 | 
			
		||||
        public const int PSYS_SRC_ANGLE_END = 23;
 | 
			
		||||
        public const int PSYS_SRC_PATTERN_DROP = 1;
 | 
			
		||||
        public const int PSYS_SRC_PATTERN_EXPLODE = 2;
 | 
			
		||||
        public const int PSYS_SRC_PATTERN_ANGLE = 4;
 | 
			
		||||
        public const int PSYS_SRC_PATTERN_ANGLE_CONE = 8;
 | 
			
		||||
        public const int PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY = 16;
 | 
			
		||||
 | 
			
		||||
        public const int VEHICLE_TYPE_NONE = 0;
 | 
			
		||||
        public const int VEHICLE_TYPE_SLED = 1;
 | 
			
		||||
        public const int VEHICLE_TYPE_CAR = 2;
 | 
			
		||||
        public const int VEHICLE_TYPE_BOAT = 3;
 | 
			
		||||
        public const int VEHICLE_TYPE_AIRPLANE = 4;
 | 
			
		||||
        public const int VEHICLE_TYPE_BALLOON = 5;
 | 
			
		||||
        public const int VEHICLE_LINEAR_FRICTION_TIMESCALE = 16;
 | 
			
		||||
        public const int VEHICLE_ANGULAR_FRICTION_TIMESCALE = 17;
 | 
			
		||||
        public const int VEHICLE_LINEAR_MOTOR_DIRECTION = 18;
 | 
			
		||||
        public const int VEHICLE_LINEAR_MOTOR_OFFSET = 20;
 | 
			
		||||
        public const int VEHICLE_ANGULAR_MOTOR_DIRECTION = 19;
 | 
			
		||||
        public const int VEHICLE_HOVER_HEIGHT = 24;
 | 
			
		||||
        public const int VEHICLE_HOVER_EFFICIENCY = 25;
 | 
			
		||||
        public const int VEHICLE_HOVER_TIMESCALE = 26;
 | 
			
		||||
        public const int VEHICLE_BUOYANCY = 27;
 | 
			
		||||
        public const int VEHICLE_LINEAR_DEFLECTION_EFFICIENCY = 28;
 | 
			
		||||
        public const int VEHICLE_LINEAR_DEFLECTION_TIMESCALE = 29;
 | 
			
		||||
        public const int VEHICLE_LINEAR_MOTOR_TIMESCALE = 30;
 | 
			
		||||
        public const int VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE = 31;
 | 
			
		||||
        public const int VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY = 32;
 | 
			
		||||
        public const int VEHICLE_ANGULAR_DEFLECTION_TIMESCALE = 33;
 | 
			
		||||
        public const int VEHICLE_ANGULAR_MOTOR_TIMESCALE = 34;
 | 
			
		||||
        public const int VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE = 35;
 | 
			
		||||
        public const int VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY = 36;
 | 
			
		||||
        public const int VEHICLE_VERTICAL_ATTRACTION_TIMESCALE = 37;
 | 
			
		||||
        public const int VEHICLE_BANKING_EFFICIENCY = 38;
 | 
			
		||||
        public const int VEHICLE_BANKING_MIX = 39;
 | 
			
		||||
        public const int VEHICLE_BANKING_TIMESCALE = 40;
 | 
			
		||||
        public const int VEHICLE_REFERENCE_FRAME = 44;
 | 
			
		||||
        public const int VEHICLE_FLAG_NO_DEFLECTION_UP = 1;
 | 
			
		||||
        public const int VEHICLE_FLAG_LIMIT_ROLL_ONLY = 2;
 | 
			
		||||
        public const int VEHICLE_FLAG_HOVER_WATER_ONLY = 4;
 | 
			
		||||
        public const int VEHICLE_FLAG_HOVER_TERRAIN_ONLY = 8;
 | 
			
		||||
        public const int VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT = 16;
 | 
			
		||||
        public const int VEHICLE_FLAG_HOVER_UP_ONLY = 32;
 | 
			
		||||
        public const int VEHICLE_FLAG_LIMIT_MOTOR_UP = 64;
 | 
			
		||||
        public const int VEHICLE_FLAG_MOUSELOOK_STEER = 128;
 | 
			
		||||
        public const int VEHICLE_FLAG_MOUSELOOK_BANK = 256;
 | 
			
		||||
        public const int VEHICLE_FLAG_CAMERA_DECOUPLED = 512;
 | 
			
		||||
 | 
			
		||||
        public const int INVENTORY_ALL = -1;
 | 
			
		||||
        public const int INVENTORY_NONE = -1;
 | 
			
		||||
        public const int INVENTORY_TEXTURE = 0;
 | 
			
		||||
        public const int INVENTORY_SOUND = 1;
 | 
			
		||||
        public const int INVENTORY_LANDMARK = 3;
 | 
			
		||||
        public const int INVENTORY_CLOTHING = 5;
 | 
			
		||||
        public const int INVENTORY_OBJECT = 6;
 | 
			
		||||
        public const int INVENTORY_NOTECARD = 7;
 | 
			
		||||
        public const int INVENTORY_SCRIPT = 10;
 | 
			
		||||
        public const int INVENTORY_BODYPART = 13;
 | 
			
		||||
        public const int INVENTORY_ANIMATION = 20;
 | 
			
		||||
        public const int INVENTORY_GESTURE = 21;
 | 
			
		||||
 | 
			
		||||
        public const int ATTACH_CHEST = 1;
 | 
			
		||||
        public const int ATTACH_HEAD = 2;
 | 
			
		||||
        public const int ATTACH_LSHOULDER = 3;
 | 
			
		||||
        public const int ATTACH_RSHOULDER = 4;
 | 
			
		||||
        public const int ATTACH_LHAND = 5;
 | 
			
		||||
        public const int ATTACH_RHAND = 6;
 | 
			
		||||
        public const int ATTACH_LFOOT = 7;
 | 
			
		||||
        public const int ATTACH_RFOOT = 8;
 | 
			
		||||
        public const int ATTACH_BACK = 9;
 | 
			
		||||
        public const int ATTACH_PELVIS = 10;
 | 
			
		||||
        public const int ATTACH_MOUTH = 11;
 | 
			
		||||
        public const int ATTACH_CHIN = 12;
 | 
			
		||||
        public const int ATTACH_LEAR = 13;
 | 
			
		||||
        public const int ATTACH_REAR = 14;
 | 
			
		||||
        public const int ATTACH_LEYE = 15;
 | 
			
		||||
        public const int ATTACH_REYE = 16;
 | 
			
		||||
        public const int ATTACH_NOSE = 17;
 | 
			
		||||
        public const int ATTACH_RUARM = 18;
 | 
			
		||||
        public const int ATTACH_RLARM = 19;
 | 
			
		||||
        public const int ATTACH_LUARM = 20;
 | 
			
		||||
        public const int ATTACH_LLARM = 21;
 | 
			
		||||
        public const int ATTACH_RHIP = 22;
 | 
			
		||||
        public const int ATTACH_RULEG = 23;
 | 
			
		||||
        public const int ATTACH_RLLEG = 24;
 | 
			
		||||
        public const int ATTACH_LHIP = 25;
 | 
			
		||||
        public const int ATTACH_LULEG = 26;
 | 
			
		||||
        public const int ATTACH_LLLEG = 27;
 | 
			
		||||
        public const int ATTACH_BELLY = 28;
 | 
			
		||||
        public const int ATTACH_RPEC = 29;
 | 
			
		||||
        public const int ATTACH_LPEC = 30;
 | 
			
		||||
 | 
			
		||||
        public const int LAND_LEVEL = 0;
 | 
			
		||||
        public const int LAND_RAISE = 1;
 | 
			
		||||
        public const int LAND_LOWER = 2;
 | 
			
		||||
        public const int LAND_SMOOTH = 3;
 | 
			
		||||
        public const int LAND_NOISE = 4;
 | 
			
		||||
        public const int LAND_REVERT = 5;
 | 
			
		||||
        public const int LAND_SMALL_BRUSH = 1;
 | 
			
		||||
        public const int LAND_MEDIUM_BRUSH = 2;
 | 
			
		||||
        public const int LAND_LARGE_BRUSH = 3;
 | 
			
		||||
 | 
			
		||||
        //Agent Dataserver
 | 
			
		||||
        public const int DATA_ONLINE = 1;
 | 
			
		||||
        public const int DATA_NAME = 2;
 | 
			
		||||
        public const int DATA_BORN = 3;
 | 
			
		||||
        public const int DATA_RATING = 4;
 | 
			
		||||
        public const int DATA_SIM_POS = 5;
 | 
			
		||||
        public const int DATA_SIM_STATUS = 6;
 | 
			
		||||
        public const int DATA_SIM_RATING = 7;
 | 
			
		||||
        public const int DATA_PAYINFO = 8;
 | 
			
		||||
 | 
			
		||||
        public const int ANIM_ON = 1;
 | 
			
		||||
        public const int LOOP = 2;
 | 
			
		||||
        public const int REVERSE = 4;
 | 
			
		||||
        public const int PING_PONG = 8;
 | 
			
		||||
        public const int SMOOTH = 16;
 | 
			
		||||
        public const int ROTATE = 32;
 | 
			
		||||
        public const int SCALE = 64;
 | 
			
		||||
        public const int ALL_SIDES = -1;
 | 
			
		||||
        public const int LINK_SET = -1;
 | 
			
		||||
        public const int LINK_ROOT = 1;
 | 
			
		||||
        public const int LINK_ALL_OTHERS = -2;
 | 
			
		||||
        public const int LINK_ALL_CHILDREN = -3;
 | 
			
		||||
        public const int LINK_THIS = -4;
 | 
			
		||||
        public const int CHANGED_INVENTORY = 1;
 | 
			
		||||
        public const int CHANGED_COLOR = 2;
 | 
			
		||||
        public const int CHANGED_SHAPE = 4;
 | 
			
		||||
        public const int CHANGED_SCALE = 8;
 | 
			
		||||
        public const int CHANGED_TEXTURE = 16;
 | 
			
		||||
        public const int CHANGED_LINK = 32;
 | 
			
		||||
        public const int CHANGED_ALLOWED_DROP = 64;
 | 
			
		||||
        public const int CHANGED_OWNER = 128;
 | 
			
		||||
        public const int CHANGED_REGION_RESTART = 256;
 | 
			
		||||
        public const int TYPE_INVALID = 0;
 | 
			
		||||
        public const int TYPE_INTEGER = 1;
 | 
			
		||||
        public const int TYPE_double = 2;
 | 
			
		||||
        public const int TYPE_STRING = 3;
 | 
			
		||||
        public const int TYPE_KEY = 4;
 | 
			
		||||
        public const int TYPE_VECTOR = 5;
 | 
			
		||||
        public const int TYPE_ROTATION = 6;
 | 
			
		||||
 | 
			
		||||
        //XML RPC Remote Data Channel
 | 
			
		||||
        public const int REMOTE_DATA_CHANNEL = 1;
 | 
			
		||||
        public const int REMOTE_DATA_REQUEST = 2;
 | 
			
		||||
        public const int REMOTE_DATA_REPLY = 3;
 | 
			
		||||
 | 
			
		||||
        //llHTTPRequest
 | 
			
		||||
        public const int HTTP_METHOD = 0;
 | 
			
		||||
        public const int HTTP_MIMETYPE = 1;
 | 
			
		||||
        public const int HTTP_BODY_MAXLENGTH = 2;
 | 
			
		||||
        public const int HTTP_VERIFY_CERT = 3;
 | 
			
		||||
 | 
			
		||||
        public const int PRIM_MATERIAL = 2;
 | 
			
		||||
        public const int PRIM_PHYSICS = 3;
 | 
			
		||||
        public const int PRIM_TEMP_ON_REZ = 4;
 | 
			
		||||
        public const int PRIM_PHANTOM = 5;
 | 
			
		||||
        public const int PRIM_POSITION = 6;
 | 
			
		||||
        public const int PRIM_SIZE = 7;
 | 
			
		||||
        public const int PRIM_ROTATION = 8;
 | 
			
		||||
        public const int PRIM_TYPE = 9;
 | 
			
		||||
        public const int PRIM_TEXTURE = 17;
 | 
			
		||||
        public const int PRIM_COLOR = 18;
 | 
			
		||||
        public const int PRIM_BUMP_SHINY = 19;
 | 
			
		||||
        public const int PRIM_FULLBRIGHT = 20;
 | 
			
		||||
        public const int PRIM_FLEXIBLE = 21;
 | 
			
		||||
        public const int PRIM_TEXGEN = 22;
 | 
			
		||||
        public const int PRIM_CAST_SHADOWS = 24; // Not implemented, here for completeness sake
 | 
			
		||||
        public const int PRIM_POINT_LIGHT = 23; // Huh?
 | 
			
		||||
        public const int PRIM_TEXGEN_DEFAULT = 0;
 | 
			
		||||
        public const int PRIM_TEXGEN_PLANAR = 1;
 | 
			
		||||
 | 
			
		||||
        public const int PRIM_TYPE_BOX = 0;
 | 
			
		||||
        public const int PRIM_TYPE_CYLINDER = 1;
 | 
			
		||||
        public const int PRIM_TYPE_PRISM = 2;
 | 
			
		||||
        public const int PRIM_TYPE_SPHERE = 3;
 | 
			
		||||
        public const int PRIM_TYPE_TORUS = 4;
 | 
			
		||||
        public const int PRIM_TYPE_TUBE = 5;
 | 
			
		||||
        public const int PRIM_TYPE_RING = 6;
 | 
			
		||||
        public const int PRIM_TYPE_SCULPT = 7;
 | 
			
		||||
 | 
			
		||||
        public const int PRIM_HOLE_DEFAULT = 0;
 | 
			
		||||
        public const int PRIM_HOLE_CIRCLE = 16;
 | 
			
		||||
        public const int PRIM_HOLE_SQUARE = 32;
 | 
			
		||||
        public const int PRIM_HOLE_TRIANGLE = 48;
 | 
			
		||||
 | 
			
		||||
        public const int PRIM_MATERIAL_STONE = 0;
 | 
			
		||||
        public const int PRIM_MATERIAL_METAL = 1;
 | 
			
		||||
        public const int PRIM_MATERIAL_GLASS = 2;
 | 
			
		||||
        public const int PRIM_MATERIAL_WOOD = 3;
 | 
			
		||||
        public const int PRIM_MATERIAL_FLESH = 4;
 | 
			
		||||
        public const int PRIM_MATERIAL_PLASTIC = 5;
 | 
			
		||||
        public const int PRIM_MATERIAL_RUBBER = 6;
 | 
			
		||||
        public const int PRIM_MATERIAL_LIGHT = 7;
 | 
			
		||||
 | 
			
		||||
        public const int PRIM_SHINY_NONE = 0;
 | 
			
		||||
        public const int PRIM_SHINY_LOW = 1;
 | 
			
		||||
        public const int PRIM_SHINY_MEDIUM = 2;
 | 
			
		||||
        public const int PRIM_SHINY_HIGH = 3;
 | 
			
		||||
        public const int PRIM_BUMP_NONE = 0;
 | 
			
		||||
        public const int PRIM_BUMP_BRIGHT = 1;
 | 
			
		||||
        public const int PRIM_BUMP_DARK = 2;
 | 
			
		||||
        public const int PRIM_BUMP_WOOD = 3;
 | 
			
		||||
        public const int PRIM_BUMP_BARK = 4;
 | 
			
		||||
        public const int PRIM_BUMP_BRICKS = 5;
 | 
			
		||||
        public const int PRIM_BUMP_CHECKER = 6;
 | 
			
		||||
        public const int PRIM_BUMP_CONCRETE = 7;
 | 
			
		||||
        public const int PRIM_BUMP_TILE = 8;
 | 
			
		||||
        public const int PRIM_BUMP_STONE = 9;
 | 
			
		||||
        public const int PRIM_BUMP_DISKS = 10;
 | 
			
		||||
        public const int PRIM_BUMP_GRAVEL = 11;
 | 
			
		||||
        public const int PRIM_BUMP_BLOBS = 12;
 | 
			
		||||
        public const int PRIM_BUMP_SIDING = 13;
 | 
			
		||||
        public const int PRIM_BUMP_LARGETILE = 14;
 | 
			
		||||
        public const int PRIM_BUMP_STUCCO = 15;
 | 
			
		||||
        public const int PRIM_BUMP_SUCTION = 16;
 | 
			
		||||
        public const int PRIM_BUMP_WEAVE = 17;
 | 
			
		||||
 | 
			
		||||
        public const int PRIM_SCULPT_TYPE_SPHERE = 1;
 | 
			
		||||
        public const int PRIM_SCULPT_TYPE_TORUS = 2;
 | 
			
		||||
        public const int PRIM_SCULPT_TYPE_PLANE = 3;
 | 
			
		||||
        public const int PRIM_SCULPT_TYPE_CYLINDER = 4;
 | 
			
		||||
 | 
			
		||||
        public const int MASK_BASE = 0;
 | 
			
		||||
        public const int MASK_OWNER = 1;
 | 
			
		||||
        public const int MASK_GROUP = 2;
 | 
			
		||||
        public const int MASK_EVERYONE = 3;
 | 
			
		||||
        public const int MASK_NEXT = 4;
 | 
			
		||||
 | 
			
		||||
        public const int PERM_TRANSFER = 8192;
 | 
			
		||||
        public const int PERM_MODIFY = 16384;
 | 
			
		||||
        public const int PERM_COPY = 32768;
 | 
			
		||||
        public const int PERM_MOVE = 524288;
 | 
			
		||||
        public const int PERM_ALL = 2147483647;
 | 
			
		||||
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_STOP = 0;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_PAUSE = 1;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_PLAY = 2;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_LOOP = 3;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_TEXTURE = 4;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_URL = 5;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_TIME = 6;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_AGENT = 7;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_UNLOAD = 8;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_AUTO_ALIGN = 9;
 | 
			
		||||
 | 
			
		||||
        public const int PAY_HIDE = -1;
 | 
			
		||||
        public const int PAY_DEFAULT = -2;
 | 
			
		||||
 | 
			
		||||
        public const string NULL_KEY = "00000000-0000-0000-0000-000000000000";
 | 
			
		||||
        public const string EOF = "\n\n\n";
 | 
			
		||||
        public const double PI = 3.14159274f;
 | 
			
		||||
        public const double TWO_PI = 6.28318548f;
 | 
			
		||||
        public const double PI_BY_TWO = 1.57079637f;
 | 
			
		||||
        public const double DEG_TO_RAD = 0.01745329238f;
 | 
			
		||||
        public const double RAD_TO_DEG = 57.29578f;
 | 
			
		||||
        public const double SQRT2 = 1.414213538f;
 | 
			
		||||
        public const int STRING_TRIM_HEAD = 1;
 | 
			
		||||
        public const int STRING_TRIM_TAIL = 2;
 | 
			
		||||
        public const int STRING_TRIM = 3;
 | 
			
		||||
        public const int LIST_STAT_RANGE = 0;
 | 
			
		||||
        public const int LIST_STAT_MIN = 1;
 | 
			
		||||
        public const int LIST_STAT_MAX = 2;
 | 
			
		||||
        public const int LIST_STAT_MEAN = 3;
 | 
			
		||||
        public const int LIST_STAT_MEDIAN = 4;
 | 
			
		||||
        public const int LIST_STAT_STD_DEV = 5;
 | 
			
		||||
        public const int LIST_STAT_SUM = 6;
 | 
			
		||||
        public const int LIST_STAT_SUM_SQUARES = 7;
 | 
			
		||||
        public const int LIST_STAT_NUM_COUNT = 8;
 | 
			
		||||
        public const int LIST_STAT_GEOMETRIC_MEAN = 9;
 | 
			
		||||
        public const int LIST_STAT_HARMONIC_MEAN = 100;
 | 
			
		||||
 | 
			
		||||
        //ParcelPrim Categories
 | 
			
		||||
        public const int PARCEL_COUNT_TOTAL = 0;
 | 
			
		||||
        public const int PARCEL_COUNT_OWNER = 1;
 | 
			
		||||
        public const int PARCEL_COUNT_GROUP = 2;
 | 
			
		||||
        public const int PARCEL_COUNT_OTHER = 3;
 | 
			
		||||
        public const int PARCEL_COUNT_SELECTED = 4;
 | 
			
		||||
        public const int PARCEL_COUNT_TEMP = 5;
 | 
			
		||||
 | 
			
		||||
        public const int DEBUG_CHANNEL  = 0x7FFFFFFF;
 | 
			
		||||
        public const int PUBLIC_CHANNEL = 0x00000000;
 | 
			
		||||
 | 
			
		||||
        public const int OBJECT_NAME = 1;
 | 
			
		||||
        public const int OBJECT_DESC = 2;
 | 
			
		||||
        public const int OBJECT_POS = 3;
 | 
			
		||||
        public const int OBJECT_ROT = 4;
 | 
			
		||||
        public const int OBJECT_VELOCITY = 5;
 | 
			
		||||
        public const int OBJECT_OWNER = 6;
 | 
			
		||||
        public const int OBJECT_GROUP = 7;
 | 
			
		||||
        public const int OBJECT_CREATOR = 8;
 | 
			
		||||
 | 
			
		||||
        // Can not be public const?
 | 
			
		||||
        public vector ZERO_VECTOR = new vector(0.0, 0.0, 0.0);
 | 
			
		||||
        public rotation ZERO_ROTATION = new rotation(0.0, 0, 0.0, 1.0);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -31,100 +31,25 @@ using System.Threading;
 | 
			
		|||
using System.Reflection;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using OpenSim.Region.Environment.Interfaces;
 | 
			
		||||
using integer = OpenSim.Region.ScriptEngine.XEngine.Script.LSL_Types.LSLInteger;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces;
 | 
			
		||||
using integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
 | 
			
		||||
using key = System.String;
 | 
			
		||||
using vector = OpenSim.Region.ScriptEngine.XEngine.Script.LSL_Types.Vector3;
 | 
			
		||||
using rotation = OpenSim.Region.ScriptEngine.XEngine.Script.LSL_Types.Quaternion;
 | 
			
		||||
using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
 | 
			
		||||
using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
 | 
			
		||||
{
 | 
			
		||||
    public class BuiltIn_Commands_BaseClass : MarshalByRefObject, IOSSL_ScriptCommands, ILSL_ScriptCommands, IScript
 | 
			
		||||
    public partial class ScriptBaseClass : MarshalByRefObject
 | 
			
		||||
    {
 | 
			
		||||
        //private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
        public ILSL_Api m_LSL_Functions;
 | 
			
		||||
 | 
			
		||||
        // Object never expires
 | 
			
		||||
        public override Object InitializeLifetimeService()
 | 
			
		||||
        public void ApiTypeLSL(IScriptApi api)
 | 
			
		||||
        {
 | 
			
		||||
            //Console.WriteLine("LSL_BaseClass: InitializeLifetimeService()");
 | 
			
		||||
            //            return null;
 | 
			
		||||
            ILease lease = (ILease)base.InitializeLifetimeService();
 | 
			
		||||
            if(!(api is ILSL_Api))
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            if (lease.CurrentState == LeaseState.Initial)
 | 
			
		||||
            {
 | 
			
		||||
                lease.InitialLeaseTime = TimeSpan.Zero; // TimeSpan.FromMinutes(1);
 | 
			
		||||
                //lease.SponsorshipTimeout = TimeSpan.FromMinutes(2);
 | 
			
		||||
                //lease.RenewOnCallTime = TimeSpan.FromSeconds(2);
 | 
			
		||||
            }
 | 
			
		||||
            return lease;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public ILSL_ScriptCommands m_LSL_Functions;
 | 
			
		||||
        public IOSSL_ScriptCommands m_OSSL_Functions;
 | 
			
		||||
 | 
			
		||||
        public BuiltIn_Commands_BaseClass()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Type Start(ILSL_ScriptCommands LSL_Functions, IOSSL_ScriptCommands OSSL_Functions)
 | 
			
		||||
        {
 | 
			
		||||
            m_LSL_Functions = LSL_Functions;
 | 
			
		||||
            m_OSSL_Functions = OSSL_Functions;
 | 
			
		||||
            m_InitialValues=GetVars();
 | 
			
		||||
            return GetType();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private Dictionary<string, object> m_InitialValues =
 | 
			
		||||
                new Dictionary<string, object>();
 | 
			
		||||
        private Dictionary<string, FieldInfo> m_Fields =
 | 
			
		||||
                new Dictionary<string, FieldInfo>();
 | 
			
		||||
 | 
			
		||||
        public Dictionary<string, object> GetVars()
 | 
			
		||||
        {
 | 
			
		||||
            Dictionary<string, object> vars = new Dictionary<string, object>();
 | 
			
		||||
 | 
			
		||||
            if (m_Fields == null)
 | 
			
		||||
                return vars;
 | 
			
		||||
 | 
			
		||||
            m_Fields.Clear();
 | 
			
		||||
 | 
			
		||||
            Type t = GetType();
 | 
			
		||||
 | 
			
		||||
            FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic |
 | 
			
		||||
                                             BindingFlags.Public |
 | 
			
		||||
                                             BindingFlags.Instance |
 | 
			
		||||
                                             BindingFlags.DeclaredOnly);
 | 
			
		||||
 | 
			
		||||
            foreach (FieldInfo field in fields)
 | 
			
		||||
            {
 | 
			
		||||
                m_Fields[field.Name]=field;
 | 
			
		||||
 | 
			
		||||
                vars[field.Name]=field.GetValue(this);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return vars;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SetVars(Dictionary<string, object> vars)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (KeyValuePair<string, object> var in vars)
 | 
			
		||||
            {
 | 
			
		||||
                if (m_Fields.ContainsKey(var.Key))
 | 
			
		||||
                {
 | 
			
		||||
                    m_Fields[var.Key].SetValue(this, var.Value);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void ResetVars()
 | 
			
		||||
        {
 | 
			
		||||
            SetVars(m_InitialValues);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string State
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_LSL_Functions.State; }
 | 
			
		||||
            set { m_LSL_Functions.State = value; }
 | 
			
		||||
            m_LSL_Functions = (ILSL_Api)api;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void state(string newState)
 | 
			
		||||
| 
						 | 
				
			
			@ -132,26 +57,19 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            m_LSL_Functions.state(newState);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Script functions
 | 
			
		||||
        //
 | 
			
		||||
        public void llSay(int channelID, string text)
 | 
			
		||||
        {
 | 
			
		||||
            m_LSL_Functions.llSay(channelID, text);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        // They are only forwarders to LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
 | 
			
		||||
        public ICommander GetCommander(string name)
 | 
			
		||||
        {
 | 
			
		||||
            return m_LSL_Functions.GetCommander(name);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public double llSin(double f)
 | 
			
		||||
        {
 | 
			
		||||
            return m_LSL_Functions.llSin(f);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public double llCos(double f)
 | 
			
		||||
        {
 | 
			
		||||
            return m_LSL_Functions.llCos(f);
 | 
			
		||||
| 
						 | 
				
			
			@ -262,9 +180,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            m_LSL_Functions.llWhisper(channelID, text);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public void llShout(int channelID, string text)
 | 
			
		||||
        {
 | 
			
		||||
            m_LSL_Functions.llShout(channelID, text);
 | 
			
		||||
| 
						 | 
				
			
			@ -355,9 +270,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            return m_LSL_Functions.llDetectedLinkNumber(number);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public void llDie()
 | 
			
		||||
        {
 | 
			
		||||
            m_LSL_Functions.llDie();
 | 
			
		||||
| 
						 | 
				
			
			@ -443,9 +355,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            return m_LSL_Functions.llGetTexture(face);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public void llSetPos(vector pos)
 | 
			
		||||
        {
 | 
			
		||||
            m_LSL_Functions.llSetPos(pos);
 | 
			
		||||
| 
						 | 
				
			
			@ -521,9 +430,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            m_LSL_Functions.llApplyImpulse(force, local);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public void llApplyRotationalImpulse(vector force, int local)
 | 
			
		||||
        {
 | 
			
		||||
            m_LSL_Functions.llApplyRotationalImpulse(force, local);
 | 
			
		||||
| 
						 | 
				
			
			@ -614,9 +520,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            m_LSL_Functions.llPlaySoundSlave(sound, volume);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public void llTriggerSound(string sound, double volume)
 | 
			
		||||
        {
 | 
			
		||||
            m_LSL_Functions.llTriggerSound(sound, volume);
 | 
			
		||||
| 
						 | 
				
			
			@ -707,9 +610,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            m_LSL_Functions.llSleep(sec);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public double llGetMass()
 | 
			
		||||
        {
 | 
			
		||||
            return m_LSL_Functions.llGetMass();
 | 
			
		||||
| 
						 | 
				
			
			@ -805,9 +705,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            m_LSL_Functions.llRotLookAt(target, strength, damping);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public LSL_Types.LSLInteger llStringLength(string str)
 | 
			
		||||
        {
 | 
			
		||||
            return m_LSL_Functions.llStringLength(str);
 | 
			
		||||
| 
						 | 
				
			
			@ -908,9 +805,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            return m_LSL_Functions.llGetInventoryName(type, number);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public void llSetScriptState(string name, int run)
 | 
			
		||||
        {
 | 
			
		||||
            m_LSL_Functions.llSetScriptState(name, run);
 | 
			
		||||
| 
						 | 
				
			
			@ -1016,9 +910,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            return m_LSL_Functions.llGetNumberOfSides();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public rotation llAxisAngle2Rot(vector axis, double angle)
 | 
			
		||||
        {
 | 
			
		||||
            return m_LSL_Functions.llAxisAngle2Rot(axis, angle);
 | 
			
		||||
| 
						 | 
				
			
			@ -1104,9 +995,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            return m_LSL_Functions.llGetListLength(src);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public LSL_Types.LSLInteger llList2Integer(LSL_Types.list src, int index)
 | 
			
		||||
        {
 | 
			
		||||
            return m_LSL_Functions.llList2Integer(src, index);
 | 
			
		||||
| 
						 | 
				
			
			@ -1207,9 +1095,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            return m_LSL_Functions.llGetAgentInfo(id);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public void llAdjustSoundVolume(double volume)
 | 
			
		||||
        {
 | 
			
		||||
            m_LSL_Functions.llAdjustSoundVolume(volume);
 | 
			
		||||
| 
						 | 
				
			
			@ -1320,9 +1205,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            return m_LSL_Functions.llGetRegionFPS();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public void llParticleSystem(LSL_Types.list rules)
 | 
			
		||||
        {
 | 
			
		||||
            m_LSL_Functions.llParticleSystem(rules);
 | 
			
		||||
| 
						 | 
				
			
			@ -1453,9 +1335,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            m_LSL_Functions.llRemoteLoadScriptPin(target, name, pin, running, start_param);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public void llOpenRemoteDataChannel()
 | 
			
		||||
        {
 | 
			
		||||
            m_LSL_Functions.llOpenRemoteDataChannel();
 | 
			
		||||
| 
						 | 
				
			
			@ -1590,9 +1469,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            return m_LSL_Functions.llGetPrimitiveParams(rules);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public string llIntegerToBase64(int number)
 | 
			
		||||
        {
 | 
			
		||||
            return m_LSL_Functions.llIntegerToBase64(number);
 | 
			
		||||
| 
						 | 
				
			
			@ -1698,9 +1574,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            return m_LSL_Functions.llModPow(a, b, c);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public LSL_Types.LSLInteger llGetInventoryType(string name)
 | 
			
		||||
        {
 | 
			
		||||
            return m_LSL_Functions.llGetInventoryType(name);
 | 
			
		||||
| 
						 | 
				
			
			@ -1826,9 +1699,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
            return m_LSL_Functions.llGetObjectPrimCount(object_id);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs
 | 
			
		||||
        //
 | 
			
		||||
        public LSL_Types.LSLInteger llGetParcelMaxPrims(vector pos, int sim_wide)
 | 
			
		||||
        {
 | 
			
		||||
            return m_LSL_Functions.llGetParcelMaxPrims(pos, sim_wide);
 | 
			
		||||
| 
						 | 
				
			
			@ -1858,540 +1728,5 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
        {
 | 
			
		||||
            return m_LSL_Functions.llList2Float(src, index);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // LSL CONSTANTS
 | 
			
		||||
        public const int TRUE = 1;
 | 
			
		||||
        public const int FALSE = 0;
 | 
			
		||||
 | 
			
		||||
        public const int STATUS_PHYSICS = 1;
 | 
			
		||||
        public const int STATUS_ROTATE_X = 2;
 | 
			
		||||
        public const int STATUS_ROTATE_Y = 4;
 | 
			
		||||
        public const int STATUS_ROTATE_Z = 8;
 | 
			
		||||
        public const int STATUS_PHANTOM = 16;
 | 
			
		||||
        public const int STATUS_SANDBOX = 32;
 | 
			
		||||
        public const int STATUS_BLOCK_GRAB = 64;
 | 
			
		||||
        public const int STATUS_DIE_AT_EDGE = 128;
 | 
			
		||||
        public const int STATUS_RETURN_AT_EDGE = 256;
 | 
			
		||||
        public const int STATUS_CAST_SHADOWS = 512;
 | 
			
		||||
 | 
			
		||||
        public const int AGENT = 1;
 | 
			
		||||
        public const int ACTIVE = 2;
 | 
			
		||||
        public const int PASSIVE = 4;
 | 
			
		||||
        public const int SCRIPTED = 8;
 | 
			
		||||
 | 
			
		||||
        public const int CONTROL_FWD = 1;
 | 
			
		||||
        public const int CONTROL_BACK = 2;
 | 
			
		||||
        public const int CONTROL_LEFT = 4;
 | 
			
		||||
        public const int CONTROL_RIGHT = 8;
 | 
			
		||||
        public const int CONTROL_UP = 16;
 | 
			
		||||
        public const int CONTROL_DOWN = 32;
 | 
			
		||||
        public const int CONTROL_ROT_LEFT = 256;
 | 
			
		||||
        public const int CONTROL_ROT_RIGHT = 512;
 | 
			
		||||
        public const int CONTROL_LBUTTON = 268435456;
 | 
			
		||||
        public const int CONTROL_ML_LBUTTON = 1073741824;
 | 
			
		||||
 | 
			
		||||
        //Permissions
 | 
			
		||||
        public const int PERMISSION_DEBIT = 2;
 | 
			
		||||
        public const int PERMISSION_TAKE_CONTROLS = 4;
 | 
			
		||||
        public const int PERMISSION_REMAP_CONTROLS = 8;
 | 
			
		||||
        public const int PERMISSION_TRIGGER_ANIMATION = 16;
 | 
			
		||||
        public const int PERMISSION_ATTACH = 32;
 | 
			
		||||
        public const int PERMISSION_RELEASE_OWNERSHIP = 64;
 | 
			
		||||
        public const int PERMISSION_CHANGE_LINKS = 128;
 | 
			
		||||
        public const int PERMISSION_CHANGE_JOINTS = 256;
 | 
			
		||||
        public const int PERMISSION_CHANGE_PERMISSIONS = 512;
 | 
			
		||||
        public const int PERMISSION_TRACK_CAMERA = 1024;
 | 
			
		||||
 | 
			
		||||
        public const int AGENT_FLYING = 1;
 | 
			
		||||
        public const int AGENT_ATTACHMENTS = 2;
 | 
			
		||||
        public const int AGENT_SCRIPTED = 4;
 | 
			
		||||
        public const int AGENT_MOUSELOOK = 8;
 | 
			
		||||
        public const int AGENT_SITTING = 16;
 | 
			
		||||
        public const int AGENT_ON_OBJECT = 32;
 | 
			
		||||
        public const int AGENT_AWAY = 64;
 | 
			
		||||
        public const int AGENT_WALKING = 128;
 | 
			
		||||
        public const int AGENT_IN_AIR = 256;
 | 
			
		||||
        public const int AGENT_TYPING = 512;
 | 
			
		||||
        public const int AGENT_CROUCHING = 1024;
 | 
			
		||||
        public const int AGENT_BUSY = 2048;
 | 
			
		||||
        public const int AGENT_ALWAYS_RUN = 4096;
 | 
			
		||||
 | 
			
		||||
        //Particle Systems
 | 
			
		||||
        public const int PSYS_PART_INTERP_COLOR_MASK = 1;
 | 
			
		||||
        public const int PSYS_PART_INTERP_SCALE_MASK = 2;
 | 
			
		||||
        public const int PSYS_PART_BOUNCE_MASK = 4;
 | 
			
		||||
        public const int PSYS_PART_WIND_MASK = 8;
 | 
			
		||||
        public const int PSYS_PART_FOLLOW_SRC_MASK = 16;
 | 
			
		||||
        public const int PSYS_PART_FOLLOW_VELOCITY_MASK = 32;
 | 
			
		||||
        public const int PSYS_PART_TARGET_POS_MASK = 64;
 | 
			
		||||
        public const int PSYS_PART_TARGET_LINEAR_MASK = 128;
 | 
			
		||||
        public const int PSYS_PART_EMISSIVE_MASK = 256;
 | 
			
		||||
        public const int PSYS_PART_FLAGS = 0;
 | 
			
		||||
        public const int PSYS_PART_START_COLOR = 1;
 | 
			
		||||
        public const int PSYS_PART_START_ALPHA = 2;
 | 
			
		||||
        public const int PSYS_PART_END_COLOR = 3;
 | 
			
		||||
        public const int PSYS_PART_END_ALPHA = 4;
 | 
			
		||||
        public const int PSYS_PART_START_SCALE = 5;
 | 
			
		||||
        public const int PSYS_PART_END_SCALE = 6;
 | 
			
		||||
        public const int PSYS_PART_MAX_AGE = 7;
 | 
			
		||||
        public const int PSYS_SRC_ACCEL = 8;
 | 
			
		||||
        public const int PSYS_SRC_PATTERN = 9;
 | 
			
		||||
        public const int PSYS_SRC_INNERANGLE = 10;
 | 
			
		||||
        public const int PSYS_SRC_OUTERANGLE = 11;
 | 
			
		||||
        public const int PSYS_SRC_TEXTURE = 12;
 | 
			
		||||
        public const int PSYS_SRC_BURST_RATE = 13;
 | 
			
		||||
        public const int PSYS_SRC_BURST_PART_COUNT = 15;
 | 
			
		||||
        public const int PSYS_SRC_BURST_RADIUS = 16;
 | 
			
		||||
        public const int PSYS_SRC_BURST_SPEED_MIN = 17;
 | 
			
		||||
        public const int PSYS_SRC_BURST_SPEED_MAX = 18;
 | 
			
		||||
        public const int PSYS_SRC_MAX_AGE = 19;
 | 
			
		||||
        public const int PSYS_SRC_TARGET_KEY = 20;
 | 
			
		||||
        public const int PSYS_SRC_OMEGA = 21;
 | 
			
		||||
        public const int PSYS_SRC_ANGLE_BEGIN = 22;
 | 
			
		||||
        public const int PSYS_SRC_ANGLE_END = 23;
 | 
			
		||||
        public const int PSYS_SRC_PATTERN_DROP = 1;
 | 
			
		||||
        public const int PSYS_SRC_PATTERN_EXPLODE = 2;
 | 
			
		||||
        public const int PSYS_SRC_PATTERN_ANGLE = 4;
 | 
			
		||||
        public const int PSYS_SRC_PATTERN_ANGLE_CONE = 8;
 | 
			
		||||
        public const int PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY = 16;
 | 
			
		||||
 | 
			
		||||
        public const int VEHICLE_TYPE_NONE = 0;
 | 
			
		||||
        public const int VEHICLE_TYPE_SLED = 1;
 | 
			
		||||
        public const int VEHICLE_TYPE_CAR = 2;
 | 
			
		||||
        public const int VEHICLE_TYPE_BOAT = 3;
 | 
			
		||||
        public const int VEHICLE_TYPE_AIRPLANE = 4;
 | 
			
		||||
        public const int VEHICLE_TYPE_BALLOON = 5;
 | 
			
		||||
        public const int VEHICLE_LINEAR_FRICTION_TIMESCALE = 16;
 | 
			
		||||
        public const int VEHICLE_ANGULAR_FRICTION_TIMESCALE = 17;
 | 
			
		||||
        public const int VEHICLE_LINEAR_MOTOR_DIRECTION = 18;
 | 
			
		||||
        public const int VEHICLE_LINEAR_MOTOR_OFFSET = 20;
 | 
			
		||||
        public const int VEHICLE_ANGULAR_MOTOR_DIRECTION = 19;
 | 
			
		||||
        public const int VEHICLE_HOVER_HEIGHT = 24;
 | 
			
		||||
        public const int VEHICLE_HOVER_EFFICIENCY = 25;
 | 
			
		||||
        public const int VEHICLE_HOVER_TIMESCALE = 26;
 | 
			
		||||
        public const int VEHICLE_BUOYANCY = 27;
 | 
			
		||||
        public const int VEHICLE_LINEAR_DEFLECTION_EFFICIENCY = 28;
 | 
			
		||||
        public const int VEHICLE_LINEAR_DEFLECTION_TIMESCALE = 29;
 | 
			
		||||
        public const int VEHICLE_LINEAR_MOTOR_TIMESCALE = 30;
 | 
			
		||||
        public const int VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE = 31;
 | 
			
		||||
        public const int VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY = 32;
 | 
			
		||||
        public const int VEHICLE_ANGULAR_DEFLECTION_TIMESCALE = 33;
 | 
			
		||||
        public const int VEHICLE_ANGULAR_MOTOR_TIMESCALE = 34;
 | 
			
		||||
        public const int VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE = 35;
 | 
			
		||||
        public const int VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY = 36;
 | 
			
		||||
        public const int VEHICLE_VERTICAL_ATTRACTION_TIMESCALE = 37;
 | 
			
		||||
        public const int VEHICLE_BANKING_EFFICIENCY = 38;
 | 
			
		||||
        public const int VEHICLE_BANKING_MIX = 39;
 | 
			
		||||
        public const int VEHICLE_BANKING_TIMESCALE = 40;
 | 
			
		||||
        public const int VEHICLE_REFERENCE_FRAME = 44;
 | 
			
		||||
        public const int VEHICLE_FLAG_NO_DEFLECTION_UP = 1;
 | 
			
		||||
        public const int VEHICLE_FLAG_LIMIT_ROLL_ONLY = 2;
 | 
			
		||||
        public const int VEHICLE_FLAG_HOVER_WATER_ONLY = 4;
 | 
			
		||||
        public const int VEHICLE_FLAG_HOVER_TERRAIN_ONLY = 8;
 | 
			
		||||
        public const int VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT = 16;
 | 
			
		||||
        public const int VEHICLE_FLAG_HOVER_UP_ONLY = 32;
 | 
			
		||||
        public const int VEHICLE_FLAG_LIMIT_MOTOR_UP = 64;
 | 
			
		||||
        public const int VEHICLE_FLAG_MOUSELOOK_STEER = 128;
 | 
			
		||||
        public const int VEHICLE_FLAG_MOUSELOOK_BANK = 256;
 | 
			
		||||
        public const int VEHICLE_FLAG_CAMERA_DECOUPLED = 512;
 | 
			
		||||
 | 
			
		||||
        public const int INVENTORY_ALL = -1;
 | 
			
		||||
        public const int INVENTORY_NONE = -1;
 | 
			
		||||
        public const int INVENTORY_TEXTURE = 0;
 | 
			
		||||
        public const int INVENTORY_SOUND = 1;
 | 
			
		||||
        public const int INVENTORY_LANDMARK = 3;
 | 
			
		||||
        public const int INVENTORY_CLOTHING = 5;
 | 
			
		||||
        public const int INVENTORY_OBJECT = 6;
 | 
			
		||||
        public const int INVENTORY_NOTECARD = 7;
 | 
			
		||||
        public const int INVENTORY_SCRIPT = 10;
 | 
			
		||||
        public const int INVENTORY_BODYPART = 13;
 | 
			
		||||
        public const int INVENTORY_ANIMATION = 20;
 | 
			
		||||
        public const int INVENTORY_GESTURE = 21;
 | 
			
		||||
 | 
			
		||||
        public const int ATTACH_CHEST = 1;
 | 
			
		||||
        public const int ATTACH_HEAD = 2;
 | 
			
		||||
        public const int ATTACH_LSHOULDER = 3;
 | 
			
		||||
        public const int ATTACH_RSHOULDER = 4;
 | 
			
		||||
        public const int ATTACH_LHAND = 5;
 | 
			
		||||
        public const int ATTACH_RHAND = 6;
 | 
			
		||||
        public const int ATTACH_LFOOT = 7;
 | 
			
		||||
        public const int ATTACH_RFOOT = 8;
 | 
			
		||||
        public const int ATTACH_BACK = 9;
 | 
			
		||||
        public const int ATTACH_PELVIS = 10;
 | 
			
		||||
        public const int ATTACH_MOUTH = 11;
 | 
			
		||||
        public const int ATTACH_CHIN = 12;
 | 
			
		||||
        public const int ATTACH_LEAR = 13;
 | 
			
		||||
        public const int ATTACH_REAR = 14;
 | 
			
		||||
        public const int ATTACH_LEYE = 15;
 | 
			
		||||
        public const int ATTACH_REYE = 16;
 | 
			
		||||
        public const int ATTACH_NOSE = 17;
 | 
			
		||||
        public const int ATTACH_RUARM = 18;
 | 
			
		||||
        public const int ATTACH_RLARM = 19;
 | 
			
		||||
        public const int ATTACH_LUARM = 20;
 | 
			
		||||
        public const int ATTACH_LLARM = 21;
 | 
			
		||||
        public const int ATTACH_RHIP = 22;
 | 
			
		||||
        public const int ATTACH_RULEG = 23;
 | 
			
		||||
        public const int ATTACH_RLLEG = 24;
 | 
			
		||||
        public const int ATTACH_LHIP = 25;
 | 
			
		||||
        public const int ATTACH_LULEG = 26;
 | 
			
		||||
        public const int ATTACH_LLLEG = 27;
 | 
			
		||||
        public const int ATTACH_BELLY = 28;
 | 
			
		||||
        public const int ATTACH_RPEC = 29;
 | 
			
		||||
        public const int ATTACH_LPEC = 30;
 | 
			
		||||
 | 
			
		||||
        public const int LAND_LEVEL = 0;
 | 
			
		||||
        public const int LAND_RAISE = 1;
 | 
			
		||||
        public const int LAND_LOWER = 2;
 | 
			
		||||
        public const int LAND_SMOOTH = 3;
 | 
			
		||||
        public const int LAND_NOISE = 4;
 | 
			
		||||
        public const int LAND_REVERT = 5;
 | 
			
		||||
        public const int LAND_SMALL_BRUSH = 1;
 | 
			
		||||
        public const int LAND_MEDIUM_BRUSH = 2;
 | 
			
		||||
        public const int LAND_LARGE_BRUSH = 3;
 | 
			
		||||
 | 
			
		||||
        //Agent Dataserver
 | 
			
		||||
        public const int DATA_ONLINE = 1;
 | 
			
		||||
        public const int DATA_NAME = 2;
 | 
			
		||||
        public const int DATA_BORN = 3;
 | 
			
		||||
        public const int DATA_RATING = 4;
 | 
			
		||||
        public const int DATA_SIM_POS = 5;
 | 
			
		||||
        public const int DATA_SIM_STATUS = 6;
 | 
			
		||||
        public const int DATA_SIM_RATING = 7;
 | 
			
		||||
        public const int DATA_PAYINFO = 8;
 | 
			
		||||
 | 
			
		||||
        public const int ANIM_ON = 1;
 | 
			
		||||
        public const int LOOP = 2;
 | 
			
		||||
        public const int REVERSE = 4;
 | 
			
		||||
        public const int PING_PONG = 8;
 | 
			
		||||
        public const int SMOOTH = 16;
 | 
			
		||||
        public const int ROTATE = 32;
 | 
			
		||||
        public const int SCALE = 64;
 | 
			
		||||
        public const int ALL_SIDES = -1;
 | 
			
		||||
        public const int LINK_SET = -1;
 | 
			
		||||
        public const int LINK_ROOT = 1;
 | 
			
		||||
        public const int LINK_ALL_OTHERS = -2;
 | 
			
		||||
        public const int LINK_ALL_CHILDREN = -3;
 | 
			
		||||
        public const int LINK_THIS = -4;
 | 
			
		||||
        public const int CHANGED_INVENTORY = 1;
 | 
			
		||||
        public const int CHANGED_COLOR = 2;
 | 
			
		||||
        public const int CHANGED_SHAPE = 4;
 | 
			
		||||
        public const int CHANGED_SCALE = 8;
 | 
			
		||||
        public const int CHANGED_TEXTURE = 16;
 | 
			
		||||
        public const int CHANGED_LINK = 32;
 | 
			
		||||
        public const int CHANGED_ALLOWED_DROP = 64;
 | 
			
		||||
        public const int CHANGED_OWNER = 128;
 | 
			
		||||
        public const int CHANGED_REGION_RESTART = 256;
 | 
			
		||||
        public const int TYPE_INVALID = 0;
 | 
			
		||||
        public const int TYPE_INTEGER = 1;
 | 
			
		||||
        public const int TYPE_double = 2;
 | 
			
		||||
        public const int TYPE_STRING = 3;
 | 
			
		||||
        public const int TYPE_KEY = 4;
 | 
			
		||||
        public const int TYPE_VECTOR = 5;
 | 
			
		||||
        public const int TYPE_ROTATION = 6;
 | 
			
		||||
 | 
			
		||||
        //XML RPC Remote Data Channel
 | 
			
		||||
        public const int REMOTE_DATA_CHANNEL = 1;
 | 
			
		||||
        public const int REMOTE_DATA_REQUEST = 2;
 | 
			
		||||
        public const int REMOTE_DATA_REPLY = 3;
 | 
			
		||||
 | 
			
		||||
        //llHTTPRequest
 | 
			
		||||
        public const int HTTP_METHOD = 0;
 | 
			
		||||
        public const int HTTP_MIMETYPE = 1;
 | 
			
		||||
        public const int HTTP_BODY_MAXLENGTH = 2;
 | 
			
		||||
        public const int HTTP_VERIFY_CERT = 3;
 | 
			
		||||
 | 
			
		||||
        public const int PRIM_MATERIAL = 2;
 | 
			
		||||
        public const int PRIM_PHYSICS = 3;
 | 
			
		||||
        public const int PRIM_TEMP_ON_REZ = 4;
 | 
			
		||||
        public const int PRIM_PHANTOM = 5;
 | 
			
		||||
        public const int PRIM_POSITION = 6;
 | 
			
		||||
        public const int PRIM_SIZE = 7;
 | 
			
		||||
        public const int PRIM_ROTATION = 8;
 | 
			
		||||
        public const int PRIM_TYPE = 9;
 | 
			
		||||
        public const int PRIM_TEXTURE = 17;
 | 
			
		||||
        public const int PRIM_COLOR = 18;
 | 
			
		||||
        public const int PRIM_BUMP_SHINY = 19;
 | 
			
		||||
        public const int PRIM_FULLBRIGHT = 20;
 | 
			
		||||
        public const int PRIM_FLEXIBLE = 21;
 | 
			
		||||
        public const int PRIM_TEXGEN = 22;
 | 
			
		||||
        public const int PRIM_CAST_SHADOWS = 24; // Not implemented, here for completeness sake
 | 
			
		||||
        public const int PRIM_POINT_LIGHT = 23; // Huh?
 | 
			
		||||
        public const int PRIM_TEXGEN_DEFAULT = 0;
 | 
			
		||||
        public const int PRIM_TEXGEN_PLANAR = 1;
 | 
			
		||||
 | 
			
		||||
        public const int PRIM_TYPE_BOX = 0;
 | 
			
		||||
        public const int PRIM_TYPE_CYLINDER = 1;
 | 
			
		||||
        public const int PRIM_TYPE_PRISM = 2;
 | 
			
		||||
        public const int PRIM_TYPE_SPHERE = 3;
 | 
			
		||||
        public const int PRIM_TYPE_TORUS = 4;
 | 
			
		||||
        public const int PRIM_TYPE_TUBE = 5;
 | 
			
		||||
        public const int PRIM_TYPE_RING = 6;
 | 
			
		||||
        public const int PRIM_TYPE_SCULPT = 7;
 | 
			
		||||
 | 
			
		||||
        public const int PRIM_HOLE_DEFAULT = 0;
 | 
			
		||||
        public const int PRIM_HOLE_CIRCLE = 16;
 | 
			
		||||
        public const int PRIM_HOLE_SQUARE = 32;
 | 
			
		||||
        public const int PRIM_HOLE_TRIANGLE = 48;
 | 
			
		||||
 | 
			
		||||
        public const int PRIM_MATERIAL_STONE = 0;
 | 
			
		||||
        public const int PRIM_MATERIAL_METAL = 1;
 | 
			
		||||
        public const int PRIM_MATERIAL_GLASS = 2;
 | 
			
		||||
        public const int PRIM_MATERIAL_WOOD = 3;
 | 
			
		||||
        public const int PRIM_MATERIAL_FLESH = 4;
 | 
			
		||||
        public const int PRIM_MATERIAL_PLASTIC = 5;
 | 
			
		||||
        public const int PRIM_MATERIAL_RUBBER = 6;
 | 
			
		||||
        public const int PRIM_MATERIAL_LIGHT = 7;
 | 
			
		||||
 | 
			
		||||
        public const int PRIM_SHINY_NONE = 0;
 | 
			
		||||
        public const int PRIM_SHINY_LOW = 1;
 | 
			
		||||
        public const int PRIM_SHINY_MEDIUM = 2;
 | 
			
		||||
        public const int PRIM_SHINY_HIGH = 3;
 | 
			
		||||
        public const int PRIM_BUMP_NONE = 0;
 | 
			
		||||
        public const int PRIM_BUMP_BRIGHT = 1;
 | 
			
		||||
        public const int PRIM_BUMP_DARK = 2;
 | 
			
		||||
        public const int PRIM_BUMP_WOOD = 3;
 | 
			
		||||
        public const int PRIM_BUMP_BARK = 4;
 | 
			
		||||
        public const int PRIM_BUMP_BRICKS = 5;
 | 
			
		||||
        public const int PRIM_BUMP_CHECKER = 6;
 | 
			
		||||
        public const int PRIM_BUMP_CONCRETE = 7;
 | 
			
		||||
        public const int PRIM_BUMP_TILE = 8;
 | 
			
		||||
        public const int PRIM_BUMP_STONE = 9;
 | 
			
		||||
        public const int PRIM_BUMP_DISKS = 10;
 | 
			
		||||
        public const int PRIM_BUMP_GRAVEL = 11;
 | 
			
		||||
        public const int PRIM_BUMP_BLOBS = 12;
 | 
			
		||||
        public const int PRIM_BUMP_SIDING = 13;
 | 
			
		||||
        public const int PRIM_BUMP_LARGETILE = 14;
 | 
			
		||||
        public const int PRIM_BUMP_STUCCO = 15;
 | 
			
		||||
        public const int PRIM_BUMP_SUCTION = 16;
 | 
			
		||||
        public const int PRIM_BUMP_WEAVE = 17;
 | 
			
		||||
 | 
			
		||||
        public const int PRIM_SCULPT_TYPE_SPHERE = 1;
 | 
			
		||||
        public const int PRIM_SCULPT_TYPE_TORUS = 2;
 | 
			
		||||
        public const int PRIM_SCULPT_TYPE_PLANE = 3;
 | 
			
		||||
        public const int PRIM_SCULPT_TYPE_CYLINDER = 4;
 | 
			
		||||
 | 
			
		||||
        public const int MASK_BASE = 0;
 | 
			
		||||
        public const int MASK_OWNER = 1;
 | 
			
		||||
        public const int MASK_GROUP = 2;
 | 
			
		||||
        public const int MASK_EVERYONE = 3;
 | 
			
		||||
        public const int MASK_NEXT = 4;
 | 
			
		||||
 | 
			
		||||
        public const int PERM_TRANSFER = 8192;
 | 
			
		||||
        public const int PERM_MODIFY = 16384;
 | 
			
		||||
        public const int PERM_COPY = 32768;
 | 
			
		||||
        public const int PERM_MOVE = 524288;
 | 
			
		||||
        public const int PERM_ALL = 2147483647;
 | 
			
		||||
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_STOP = 0;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_PAUSE = 1;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_PLAY = 2;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_LOOP = 3;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_TEXTURE = 4;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_URL = 5;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_TIME = 6;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_AGENT = 7;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_UNLOAD = 8;
 | 
			
		||||
        public const int PARCEL_MEDIA_COMMAND_AUTO_ALIGN = 9;
 | 
			
		||||
 | 
			
		||||
        public const int PAY_HIDE = -1;
 | 
			
		||||
        public const int PAY_DEFAULT = -2;
 | 
			
		||||
 | 
			
		||||
        public const string NULL_KEY = "00000000-0000-0000-0000-000000000000";
 | 
			
		||||
        public const string EOF = "\n\n\n";
 | 
			
		||||
        public const double PI = 3.14159274f;
 | 
			
		||||
        public const double TWO_PI = 6.28318548f;
 | 
			
		||||
        public const double PI_BY_TWO = 1.57079637f;
 | 
			
		||||
        public const double DEG_TO_RAD = 0.01745329238f;
 | 
			
		||||
        public const double RAD_TO_DEG = 57.29578f;
 | 
			
		||||
        public const double SQRT2 = 1.414213538f;
 | 
			
		||||
        public const int STRING_TRIM_HEAD = 1;
 | 
			
		||||
        public const int STRING_TRIM_TAIL = 2;
 | 
			
		||||
        public const int STRING_TRIM = 3;
 | 
			
		||||
        public const int LIST_STAT_RANGE = 0;
 | 
			
		||||
        public const int LIST_STAT_MIN = 1;
 | 
			
		||||
        public const int LIST_STAT_MAX = 2;
 | 
			
		||||
        public const int LIST_STAT_MEAN = 3;
 | 
			
		||||
        public const int LIST_STAT_MEDIAN = 4;
 | 
			
		||||
        public const int LIST_STAT_STD_DEV = 5;
 | 
			
		||||
        public const int LIST_STAT_SUM = 6;
 | 
			
		||||
        public const int LIST_STAT_SUM_SQUARES = 7;
 | 
			
		||||
        public const int LIST_STAT_NUM_COUNT = 8;
 | 
			
		||||
        public const int LIST_STAT_GEOMETRIC_MEAN = 9;
 | 
			
		||||
        public const int LIST_STAT_HARMONIC_MEAN = 100;
 | 
			
		||||
 | 
			
		||||
        //ParcelPrim Categories
 | 
			
		||||
        public const int PARCEL_COUNT_TOTAL = 0;
 | 
			
		||||
        public const int PARCEL_COUNT_OWNER = 1;
 | 
			
		||||
        public const int PARCEL_COUNT_GROUP = 2;
 | 
			
		||||
        public const int PARCEL_COUNT_OTHER = 3;
 | 
			
		||||
        public const int PARCEL_COUNT_SELECTED = 4;
 | 
			
		||||
        public const int PARCEL_COUNT_TEMP = 5;
 | 
			
		||||
 | 
			
		||||
        public const int DEBUG_CHANNEL  = 0x7FFFFFFF;
 | 
			
		||||
        public const int PUBLIC_CHANNEL = 0x00000000;
 | 
			
		||||
 | 
			
		||||
        public const int OBJECT_NAME = 1;
 | 
			
		||||
        public const int OBJECT_DESC = 2;
 | 
			
		||||
        public const int OBJECT_POS = 3;
 | 
			
		||||
        public const int OBJECT_ROT = 4;
 | 
			
		||||
        public const int OBJECT_VELOCITY = 5;
 | 
			
		||||
        public const int OBJECT_OWNER = 6;
 | 
			
		||||
        public const int OBJECT_GROUP = 7;
 | 
			
		||||
        public const int OBJECT_CREATOR = 8;
 | 
			
		||||
 | 
			
		||||
        // Can not be public const?
 | 
			
		||||
        public vector ZERO_VECTOR = new vector(0.0, 0.0, 0.0);
 | 
			
		||||
        public rotation ZERO_ROTATION = new rotation(0.0, 0, 0.0, 1.0);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // OSSL
 | 
			
		||||
        //
 | 
			
		||||
        // FIXME: Refactor so we don't need to pull the script engine
 | 
			
		||||
        // into the app domain
 | 
			
		||||
        //
 | 
			
		||||
 | 
			
		||||
        public void osSetRegionWaterHeight(double height)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osSetRegionWaterHeight(height);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public double osList2Double(LSL_Types.list src, int index)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osList2Double(src, index);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams,
 | 
			
		||||
                                             int timer)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetDynamicTextureURL(dynamicID, contentType, url, extraParams, timer);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams,
 | 
			
		||||
                                             int timer)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetDynamicTextureData(dynamicID, contentType, data, extraParams, timer);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams,
 | 
			
		||||
                                           int timer, int alpha)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetDynamicTextureURLBlend(dynamicID, contentType, url, extraParams, timer, alpha);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetDynamicTextureDataBlend(string dynamicID, string contentType, string data, string extraParams,
 | 
			
		||||
                                             int timer, int alpha)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetDynamicTextureDataBlend(dynamicID, contentType, data, extraParams, timer, alpha);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public double osTerrainGetHeight(int x, int y)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osTerrainGetHeight(x, y);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int osTerrainSetHeight(int x, int y, double val)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osTerrainSetHeight(x, y, val);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int osRegionRestart(double seconds)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osRegionRestart(seconds);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void osRegionNotice(string msg)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osRegionNotice(msg);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool osConsoleCommand(string Command)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osConsoleCommand(Command);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void osSetParcelMediaURL(string url)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osSetParcelMediaURL(url);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void osSetPrimFloatOnWater(int floatYN)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osSetPrimFloatOnWater(floatYN);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Animation Functions
 | 
			
		||||
 | 
			
		||||
        public void osAvatarPlayAnimation(string avatar, string animation)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osAvatarPlayAnimation(avatar, animation);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void osAvatarStopAnimation(string avatar, string animation)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osAvatarStopAnimation(avatar, animation);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //Texture Draw functions
 | 
			
		||||
 | 
			
		||||
        public string osMovePen(string drawList, int x, int y)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osMovePen(drawList, x, y);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawLine(string drawList, int startX, int startY, int endX, int endY)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawLine(drawList, startX, startY, endX, endY);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawLine(string drawList, int endX, int endY)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawLine(drawList, endX, endY);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawText(string drawList, string text)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawText(drawList, text);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawEllipse(string drawList, int width, int height)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawEllipse(drawList, width, height);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawRectangle(string drawList, int width, int height)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawRectangle(drawList, width, height);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawFilledRectangle(string drawList, int width, int height)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawFilledRectangle(drawList, width, height);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetFontSize(string drawList, int fontSize)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetFontSize(drawList, fontSize);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetPenSize(string drawList, int penSize)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetPenSize(drawList, penSize);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetPenColour(string drawList, string colour)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetPenColour(drawList, colour);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawImage(string drawList, int width, int height, string imageUrl)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawImage(drawList, width, height, imageUrl);
 | 
			
		||||
        }
 | 
			
		||||
        public void osSetStateEvents(int events)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osSetStateEvents(events);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,199 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) Contributors, http://opensimulator.org/
 | 
			
		||||
 * See CONTRIBUTORS.TXT for a full list of copyright holders.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the OpenSim Project nor the
 | 
			
		||||
 *       names of its contributors may be used to endorse or promote products
 | 
			
		||||
 *       derived from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
 | 
			
		||||
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 | 
			
		||||
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Runtime.Remoting.Lifetime;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using OpenSim.Region.Environment.Interfaces;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces;
 | 
			
		||||
using integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
 | 
			
		||||
using key = System.String;
 | 
			
		||||
using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
 | 
			
		||||
using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
 | 
			
		||||
{
 | 
			
		||||
    public partial class ScriptBaseClass : MarshalByRefObject
 | 
			
		||||
    {
 | 
			
		||||
        public IOSSL_Api m_OSSL_Functions;
 | 
			
		||||
 | 
			
		||||
        public void ApiTypeOSSL(IScriptApi api)
 | 
			
		||||
        {
 | 
			
		||||
            if(!(api is IOSSL_Api))
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            m_OSSL_Functions = (IOSSL_Api)api;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void osSetRegionWaterHeight(double height)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osSetRegionWaterHeight(height);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public double osList2Double(LSL_Types.list src, int index)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osList2Double(src, index);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams,
 | 
			
		||||
                                             int timer)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetDynamicTextureURL(dynamicID, contentType, url, extraParams, timer);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams,
 | 
			
		||||
                                             int timer)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetDynamicTextureData(dynamicID, contentType, data, extraParams, timer);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams,
 | 
			
		||||
                                           int timer, int alpha)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetDynamicTextureURLBlend(dynamicID, contentType, url, extraParams, timer, alpha);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetDynamicTextureDataBlend(string dynamicID, string contentType, string data, string extraParams,
 | 
			
		||||
                                             int timer, int alpha)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetDynamicTextureDataBlend(dynamicID, contentType, data, extraParams, timer, alpha);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public double osTerrainGetHeight(int x, int y)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osTerrainGetHeight(x, y);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int osTerrainSetHeight(int x, int y, double val)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osTerrainSetHeight(x, y, val);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int osRegionRestart(double seconds)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osRegionRestart(seconds);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void osRegionNotice(string msg)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osRegionNotice(msg);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool osConsoleCommand(string Command)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osConsoleCommand(Command);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void osSetParcelMediaURL(string url)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osSetParcelMediaURL(url);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void osSetPrimFloatOnWater(int floatYN)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osSetPrimFloatOnWater(floatYN);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Animation Functions
 | 
			
		||||
 | 
			
		||||
        public void osAvatarPlayAnimation(string avatar, string animation)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osAvatarPlayAnimation(avatar, animation);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void osAvatarStopAnimation(string avatar, string animation)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osAvatarStopAnimation(avatar, animation);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //Texture Draw functions
 | 
			
		||||
 | 
			
		||||
        public string osMovePen(string drawList, int x, int y)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osMovePen(drawList, x, y);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawLine(string drawList, int startX, int startY, int endX, int endY)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawLine(drawList, startX, startY, endX, endY);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawLine(string drawList, int endX, int endY)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawLine(drawList, endX, endY);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawText(string drawList, string text)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawText(drawList, text);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawEllipse(string drawList, int width, int height)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawEllipse(drawList, width, height);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawRectangle(string drawList, int width, int height)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawRectangle(drawList, width, height);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawFilledRectangle(string drawList, int width, int height)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawFilledRectangle(drawList, width, height);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetFontSize(string drawList, int fontSize)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetFontSize(drawList, fontSize);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetPenSize(string drawList, int penSize)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetPenSize(drawList, penSize);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osSetPenColour(string drawList, string colour)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osSetPenColour(drawList, colour);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string osDrawImage(string drawList, int width, int height, string imageUrl)
 | 
			
		||||
        {
 | 
			
		||||
            return m_OSSL_Functions.osDrawImage(drawList, width, height, imageUrl);
 | 
			
		||||
        }
 | 
			
		||||
        public void osSetStateEvents(int events)
 | 
			
		||||
        {
 | 
			
		||||
            m_OSSL_Functions.osSetStateEvents(events);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,161 @@
 | 
			
		|||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <ProjectType>Local</ProjectType>
 | 
			
		||||
    <ProductVersion>9.0.21022</ProductVersion>
 | 
			
		||||
    <SchemaVersion>2.0</SchemaVersion>
 | 
			
		||||
    <ProjectGuid>{21BC44EA-0000-0000-0000-000000000000}</ProjectGuid>
 | 
			
		||||
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
 | 
			
		||||
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
 | 
			
		||||
    <ApplicationIcon></ApplicationIcon>
 | 
			
		||||
    <AssemblyKeyContainerName>
 | 
			
		||||
    </AssemblyKeyContainerName>
 | 
			
		||||
    <AssemblyName>OpenSim.Region.ScriptEngine.Shared.Api.Runtime</AssemblyName>
 | 
			
		||||
    <DefaultClientScript>JScript</DefaultClientScript>
 | 
			
		||||
    <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
 | 
			
		||||
    <DefaultTargetSchema>IE50</DefaultTargetSchema>
 | 
			
		||||
    <DelaySign>false</DelaySign>
 | 
			
		||||
    <OutputType>Library</OutputType>
 | 
			
		||||
    <AppDesignerFolder></AppDesignerFolder>
 | 
			
		||||
    <RootNamespace>OpenSim.Region.ScriptEngine.Shared.Api.Runtime</RootNamespace>
 | 
			
		||||
    <StartupObject></StartupObject>
 | 
			
		||||
    <FileUpgradeFlags>
 | 
			
		||||
    </FileUpgradeFlags>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
 | 
			
		||||
    <AllowUnsafeBlocks>False</AllowUnsafeBlocks>
 | 
			
		||||
    <BaseAddress>285212672</BaseAddress>
 | 
			
		||||
    <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
 | 
			
		||||
    <ConfigurationOverrideFile>
 | 
			
		||||
    </ConfigurationOverrideFile>
 | 
			
		||||
    <DefineConstants>TRACE;DEBUG</DefineConstants>
 | 
			
		||||
    <DocumentationFile></DocumentationFile>
 | 
			
		||||
    <DebugSymbols>True</DebugSymbols>
 | 
			
		||||
    <FileAlignment>4096</FileAlignment>
 | 
			
		||||
    <Optimize>False</Optimize>
 | 
			
		||||
    <OutputPath>..\..\..\..\..\..\bin\</OutputPath>
 | 
			
		||||
    <RegisterForComInterop>False</RegisterForComInterop>
 | 
			
		||||
    <RemoveIntegerChecks>False</RemoveIntegerChecks>
 | 
			
		||||
    <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
 | 
			
		||||
    <WarningLevel>4</WarningLevel>
 | 
			
		||||
    <NoWarn></NoWarn>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
 | 
			
		||||
    <AllowUnsafeBlocks>False</AllowUnsafeBlocks>
 | 
			
		||||
    <BaseAddress>285212672</BaseAddress>
 | 
			
		||||
    <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
 | 
			
		||||
    <ConfigurationOverrideFile>
 | 
			
		||||
    </ConfigurationOverrideFile>
 | 
			
		||||
    <DefineConstants>TRACE</DefineConstants>
 | 
			
		||||
    <DocumentationFile></DocumentationFile>
 | 
			
		||||
    <DebugSymbols>False</DebugSymbols>
 | 
			
		||||
    <FileAlignment>4096</FileAlignment>
 | 
			
		||||
    <Optimize>True</Optimize>
 | 
			
		||||
    <OutputPath>..\..\..\..\..\..\bin\</OutputPath>
 | 
			
		||||
    <RegisterForComInterop>False</RegisterForComInterop>
 | 
			
		||||
    <RemoveIntegerChecks>False</RemoveIntegerChecks>
 | 
			
		||||
    <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
 | 
			
		||||
    <WarningLevel>4</WarningLevel>
 | 
			
		||||
    <NoWarn></NoWarn>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Reference Include="Axiom.MathLib.dll" >
 | 
			
		||||
      <HintPath>..\..\..\..\..\..\bin\Axiom.MathLib.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="libsecondlife.dll" >
 | 
			
		||||
      <HintPath>..\..\..\..\..\..\bin\libsecondlife.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="log4net.dll" >
 | 
			
		||||
      <HintPath>..\..\..\..\..\..\bin\log4net.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="Nini.dll" >
 | 
			
		||||
      <HintPath>..\..\..\..\..\..\bin\Nini.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="Nini.dll" >
 | 
			
		||||
      <HintPath>..\..\..\..\..\..\bin\Nini.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="RAIL.dll" >
 | 
			
		||||
      <HintPath>..\..\..\..\..\..\bin\RAIL.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="System" >
 | 
			
		||||
      <HintPath>System.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="System.Data" >
 | 
			
		||||
      <HintPath>System.Data.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="System.Web" >
 | 
			
		||||
      <HintPath>System.Web.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="System.Xml" >
 | 
			
		||||
      <HintPath>System.Xml.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <ProjectReference Include="..\..\..\..\Application\OpenSim.csproj">
 | 
			
		||||
      <Name>OpenSim</Name>
 | 
			
		||||
      <Project>{438A9556-0000-0000-0000-000000000000}</Project>
 | 
			
		||||
      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
 | 
			
		||||
			<Private>False</Private>
 | 
			
		||||
    </ProjectReference>
 | 
			
		||||
    <ProjectReference Include="..\..\..\..\..\Framework\OpenSim.Framework.csproj">
 | 
			
		||||
      <Name>OpenSim.Framework</Name>
 | 
			
		||||
      <Project>{8ACA2445-0000-0000-0000-000000000000}</Project>
 | 
			
		||||
      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
 | 
			
		||||
			<Private>False</Private>
 | 
			
		||||
    </ProjectReference>
 | 
			
		||||
    <ProjectReference Include="..\..\..\..\..\Framework\Communications\OpenSim.Framework.Communications.csproj">
 | 
			
		||||
      <Name>OpenSim.Framework.Communications</Name>
 | 
			
		||||
      <Project>{CB52B7E7-0000-0000-0000-000000000000}</Project>
 | 
			
		||||
      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
 | 
			
		||||
			<Private>False</Private>
 | 
			
		||||
    </ProjectReference>
 | 
			
		||||
    <ProjectReference Include="..\..\..\..\..\Framework\Console\OpenSim.Framework.Console.csproj">
 | 
			
		||||
      <Name>OpenSim.Framework.Console</Name>
 | 
			
		||||
      <Project>{A7CD0630-0000-0000-0000-000000000000}</Project>
 | 
			
		||||
      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
 | 
			
		||||
			<Private>False</Private>
 | 
			
		||||
    </ProjectReference>
 | 
			
		||||
    <ProjectReference Include="..\..\..\..\Environment\OpenSim.Region.Environment.csproj">
 | 
			
		||||
      <Name>OpenSim.Region.Environment</Name>
 | 
			
		||||
      <Project>{DCBA491C-0000-0000-0000-000000000000}</Project>
 | 
			
		||||
      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
 | 
			
		||||
			<Private>False</Private>
 | 
			
		||||
    </ProjectReference>
 | 
			
		||||
    <ProjectReference Include="..\..\OpenSim.Region.ScriptEngine.Shared.csproj">
 | 
			
		||||
      <Name>OpenSim.Region.ScriptEngine.Shared</Name>
 | 
			
		||||
      <Project>{D9F1B557-0000-0000-0000-000000000000}</Project>
 | 
			
		||||
      <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
 | 
			
		||||
			<Private>False</Private>
 | 
			
		||||
    </ProjectReference>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Compile Include="LSL_Constants.cs">
 | 
			
		||||
      <SubType>Code</SubType>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="LSL_Stub.cs">
 | 
			
		||||
      <SubType>Code</SubType>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="OSSL_Stub.cs">
 | 
			
		||||
      <SubType>Code</SubType>
 | 
			
		||||
    </Compile>
 | 
			
		||||
    <Compile Include="ScriptBase.cs">
 | 
			
		||||
      <SubType>Code</SubType>
 | 
			
		||||
    </Compile>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <PreBuildEvent>
 | 
			
		||||
    </PreBuildEvent>
 | 
			
		||||
    <PostBuildEvent>
 | 
			
		||||
    </PostBuildEvent>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
 | 
			
		||||
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
 | 
			
		||||
    <ReferencePath>C:\Data\OpenSim\bin\</ReferencePath>
 | 
			
		||||
    <LastOpenVersion>9.0.21022</LastOpenVersion>
 | 
			
		||||
    <ProjectView>ProjectFiles</ProjectView>
 | 
			
		||||
    <ProjectTrust>0</ProjectTrust>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " />
 | 
			
		||||
  <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
 | 
			
		||||
</Project>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,62 @@
 | 
			
		|||
<?xml version="1.0" ?>
 | 
			
		||||
<project name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" default="build">
 | 
			
		||||
    <target name="build">
 | 
			
		||||
        <echo message="Build Directory is ${project::get-base-directory()}/${build.dir}" />
 | 
			
		||||
        <mkdir dir="${project::get-base-directory()}/${build.dir}" />
 | 
			
		||||
        <copy todir="${project::get-base-directory()}/${build.dir}" flatten="true">
 | 
			
		||||
            <fileset basedir="${project::get-base-directory()}">
 | 
			
		||||
            </fileset>
 | 
			
		||||
        </copy>
 | 
			
		||||
        <copy todir="${project::get-base-directory()}/${build.dir}">
 | 
			
		||||
            <fileset basedir=".">
 | 
			
		||||
            </fileset>
 | 
			
		||||
        </copy>
 | 
			
		||||
        <csc target="library" debug="${build.debug}" unsafe="False" warnaserror="False" define="TRACE;DEBUG" main="" output="${project::get-base-directory()}/${build.dir}/${project::get-name()}.dll">
 | 
			
		||||
            <resources prefix="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" dynamicprefix="true" >
 | 
			
		||||
            </resources>
 | 
			
		||||
            <sources failonempty="true">
 | 
			
		||||
                <include name="LSL_Constants.cs" />
 | 
			
		||||
                <include name="LSL_Stub.cs" />
 | 
			
		||||
                <include name="OSSL_Stub.cs" />
 | 
			
		||||
                <include name="ScriptBase.cs" />
 | 
			
		||||
            </sources>
 | 
			
		||||
            <references basedir="${project::get-base-directory()}">
 | 
			
		||||
                <lib>
 | 
			
		||||
                    <include name="${project::get-base-directory()}" />
 | 
			
		||||
                    <include name="${project::get-base-directory()}/${build.dir}" />
 | 
			
		||||
                </lib>
 | 
			
		||||
                <include name="../../../../../../bin/Axiom.MathLib.dll" />
 | 
			
		||||
                <include name="../../../../../../bin/libsecondlife.dll" />
 | 
			
		||||
                <include name="../../../../../../bin/log4net.dll" />
 | 
			
		||||
                <include name="../../../../../../bin/Nini.dll" />
 | 
			
		||||
                <include name="../../../../../../bin/Nini.dll" />
 | 
			
		||||
                <include name="../../../../../../bin/OpenSim.exe" />
 | 
			
		||||
                <include name="../../../../../../bin/OpenSim.Framework.dll" />
 | 
			
		||||
                <include name="../../../../../../bin/OpenSim.Framework.Communications.dll" />
 | 
			
		||||
                <include name="../../../../../../bin/OpenSim.Framework.Console.dll" />
 | 
			
		||||
                <include name="../../../../../../bin/OpenSim.Region.Environment.dll" />
 | 
			
		||||
                <include name="../../../../../../bin/OpenSim.Region.ScriptEngine.Shared.dll" />
 | 
			
		||||
                <include name="../../../../../../bin/RAIL.dll" />
 | 
			
		||||
                <include name="System.dll" />
 | 
			
		||||
                <include name="System.Data.dll" />
 | 
			
		||||
                <include name="System.Web.dll" />
 | 
			
		||||
                <include name="System.Xml.dll" />
 | 
			
		||||
            </references>
 | 
			
		||||
        </csc>
 | 
			
		||||
        <echo message="Copying from [${project::get-base-directory()}/${build.dir}/] to [${project::get-base-directory()}/../../../../../../bin/" />
 | 
			
		||||
        <mkdir dir="${project::get-base-directory()}/../../../../../../bin/"/>
 | 
			
		||||
        <copy todir="${project::get-base-directory()}/../../../../../../bin/">
 | 
			
		||||
            <fileset basedir="${project::get-base-directory()}/${build.dir}/" >
 | 
			
		||||
                <include name="*.dll"/>
 | 
			
		||||
                <include name="*.exe"/>
 | 
			
		||||
                <include name="*.mdb"/>
 | 
			
		||||
            </fileset>
 | 
			
		||||
        </copy>
 | 
			
		||||
    </target>
 | 
			
		||||
    <target name="clean">
 | 
			
		||||
        <delete dir="${obj.dir}" failonerror="false" />
 | 
			
		||||
        <delete dir="${bin.dir}" failonerror="false" />
 | 
			
		||||
    </target>
 | 
			
		||||
    <target name="doc" description="Creates documentation.">
 | 
			
		||||
    </target>
 | 
			
		||||
</project>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
<Project name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" description="" standardNamespace="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" newfilesearch="None" enableviewstate="True" fileversion="2.0" language="C#" clr-version="Net_2_0" ctype="DotNetProject">
 | 
			
		||||
  <Configurations active="Debug">
 | 
			
		||||
    <Configuration name="Debug" ctype="DotNetProjectConfiguration">
 | 
			
		||||
      <Output directory="./../../../../../../bin/" assembly="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" executeScript="" executeBeforeBuild="" executeAfterBuild="" executeBeforeBuildArguments="" executeAfterBuildArguments="" />
 | 
			
		||||
      <Build debugmode="True" target="Library" />
 | 
			
		||||
      <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" clr-version="Net_2_0" />
 | 
			
		||||
      <CodeGeneration compiler="Csc" warninglevel="4" nowarn="" includedebuginformation="True" optimize="False" unsafecodeallowed="False" generateoverflowchecks="False" mainclass="" target="Library" definesymbols="TRACE;DEBUG" generatexmldocumentation="False" win32Icon="" ctype="CSharpCompilerParameters" />
 | 
			
		||||
    </Configuration>
 | 
			
		||||
    <Configuration name="Release" ctype="DotNetProjectConfiguration">
 | 
			
		||||
      <Output directory="./../../../../../../bin/" assembly="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" executeScript="" executeBeforeBuild="" executeAfterBuild="" executeBeforeBuildArguments="" executeAfterBuildArguments="" />
 | 
			
		||||
      <Build debugmode="True" target="Library" />
 | 
			
		||||
      <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" clr-version="Net_2_0" />
 | 
			
		||||
      <CodeGeneration compiler="Csc" warninglevel="4" nowarn="" includedebuginformation="False" optimize="True" unsafecodeallowed="False" generateoverflowchecks="False" mainclass="" target="Library" definesymbols="TRACE" generatexmldocumentation="False" win32Icon="" ctype="CSharpCompilerParameters" />
 | 
			
		||||
    </Configuration>
 | 
			
		||||
  </Configurations>
 | 
			
		||||
  <DeploymentInformation target="" script="" strategy="File">
 | 
			
		||||
    <excludeFiles />
 | 
			
		||||
  </DeploymentInformation>
 | 
			
		||||
  <Contents>
 | 
			
		||||
    <File name="./LSL_Constants.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
 | 
			
		||||
    <File name="./LSL_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
 | 
			
		||||
    <File name="./OSSL_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
 | 
			
		||||
    <File name="./ScriptBase.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
 | 
			
		||||
  </Contents>
 | 
			
		||||
  <References>
 | 
			
		||||
    <ProjectReference type="Assembly" refto="../../../../../../bin/Axiom.MathLib.dll" localcopy="False" />
 | 
			
		||||
    <ProjectReference type="Assembly" refto="../../../../../../bin/libsecondlife.dll" localcopy="False" />
 | 
			
		||||
    <ProjectReference type="Assembly" refto="../../../../../../bin/log4net.dll" localcopy="False" />
 | 
			
		||||
    <ProjectReference type="Assembly" refto="../../../../../../bin/Nini.dll" localcopy="False" />
 | 
			
		||||
    <ProjectReference type="Assembly" refto="../../../../../../bin/Nini.dll" localcopy="False" />
 | 
			
		||||
    <ProjectReference type="Project" localcopy="False" refto="OpenSim" />
 | 
			
		||||
    <ProjectReference type="Project" localcopy="False" refto="OpenSim.Framework" />
 | 
			
		||||
    <ProjectReference type="Project" localcopy="False" refto="OpenSim.Framework.Communications" />
 | 
			
		||||
    <ProjectReference type="Project" localcopy="False" refto="OpenSim.Framework.Console" />
 | 
			
		||||
    <ProjectReference type="Project" localcopy="False" refto="OpenSim.Region.Environment" />
 | 
			
		||||
    <ProjectReference type="Project" localcopy="False" refto="OpenSim.Region.ScriptEngine.Shared" />
 | 
			
		||||
    <ProjectReference type="Assembly" refto="../../../../../../bin/RAIL.dll" localcopy="False" />
 | 
			
		||||
    <ProjectReference type="Gac" localcopy="False" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
 | 
			
		||||
    <ProjectReference type="Gac" localcopy="False" refto="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
 | 
			
		||||
    <ProjectReference type="Gac" localcopy="False" refto="System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
 | 
			
		||||
    <ProjectReference type="Gac" localcopy="False" refto="System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
 | 
			
		||||
  </References>
 | 
			
		||||
</Project>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,124 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (c) Contributors, http://opensimulator.org/
 | 
			
		||||
 * See CONTRIBUTORS.TXT for a full list of copyright holders.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the OpenSim Project nor the
 | 
			
		||||
 *       names of its contributors may be used to endorse or promote products
 | 
			
		||||
 *       derived from this software without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
 | 
			
		||||
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 | 
			
		||||
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Runtime.Remoting.Lifetime;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
 | 
			
		||||
{
 | 
			
		||||
    public partial class ScriptBaseClass : MarshalByRefObject, IScript
 | 
			
		||||
    {
 | 
			
		||||
        private Dictionary<string,MethodInfo> inits = new Dictionary<string,MethodInfo>();
 | 
			
		||||
 | 
			
		||||
        public ScriptBaseClass()
 | 
			
		||||
        {
 | 
			
		||||
            MethodInfo[] myArrayMethodInfo = GetType().GetMethods(BindingFlags.Public|BindingFlags.Instance);
 | 
			
		||||
 | 
			
		||||
            foreach(MethodInfo mi in myArrayMethodInfo)
 | 
			
		||||
            {
 | 
			
		||||
                if(mi.Name.Length > 7 && mi.Name.Substring(0, 7) == "ApiType")
 | 
			
		||||
                {
 | 
			
		||||
                    string type=mi.Name.Substring(7);
 | 
			
		||||
                    inits[type]=mi;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string[] GetApis()
 | 
			
		||||
        {
 | 
			
		||||
            string[] apis = new string[inits.Count];
 | 
			
		||||
            inits.Keys.CopyTo(apis, 0);
 | 
			
		||||
            return apis;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void InitApi(string api, IScriptApi data)
 | 
			
		||||
        {
 | 
			
		||||
            if(!inits.ContainsKey(api))
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            MethodInfo mi = inits[api];
 | 
			
		||||
            
 | 
			
		||||
            Object[] args = new Object[1];
 | 
			
		||||
            args[0] = data;
 | 
			
		||||
 | 
			
		||||
            mi.Invoke(this, args);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private Dictionary<string, object> m_InitialValues =
 | 
			
		||||
                new Dictionary<string, object>();
 | 
			
		||||
        private Dictionary<string, FieldInfo> m_Fields =
 | 
			
		||||
                new Dictionary<string, FieldInfo>();
 | 
			
		||||
 | 
			
		||||
        public Dictionary<string, object> GetVars()
 | 
			
		||||
        {
 | 
			
		||||
            Dictionary<string, object> vars = new Dictionary<string, object>();
 | 
			
		||||
 | 
			
		||||
            if (m_Fields == null)
 | 
			
		||||
                return vars;
 | 
			
		||||
 | 
			
		||||
            m_Fields.Clear();
 | 
			
		||||
 | 
			
		||||
            Type t = GetType();
 | 
			
		||||
 | 
			
		||||
            FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic |
 | 
			
		||||
                                             BindingFlags.Public |
 | 
			
		||||
                                             BindingFlags.Instance |
 | 
			
		||||
                                             BindingFlags.DeclaredOnly);
 | 
			
		||||
 | 
			
		||||
            foreach (FieldInfo field in fields)
 | 
			
		||||
            {
 | 
			
		||||
                m_Fields[field.Name]=field;
 | 
			
		||||
 | 
			
		||||
                vars[field.Name]=field.GetValue(this);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return vars;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SetVars(Dictionary<string, object> vars)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (KeyValuePair<string, object> var in vars)
 | 
			
		||||
            {
 | 
			
		||||
                if (m_Fields.ContainsKey(var.Key))
 | 
			
		||||
                {
 | 
			
		||||
                    m_Fields[var.Key].SetValue(this, var.Value);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void ResetVars()
 | 
			
		||||
        {
 | 
			
		||||
            SetVars(m_InitialValues);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,218 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (C) 2007-2008, Jeff Thompson
 | 
			
		||||
 *
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the copyright holder nor the names of its contributors
 | 
			
		||||
 *       may be used to endorse or promote products derived from this software
 | 
			
		||||
 *       without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
			
		||||
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
			
		||||
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
			
		||||
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
			
		||||
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
 | 
			
		||||
{
 | 
			
		||||
    public class Atom : IUnifiable
 | 
			
		||||
    {
 | 
			
		||||
        private static Dictionary<string, Atom> _atomStore = new Dictionary<string, Atom>();
 | 
			
		||||
        public readonly string _name;
 | 
			
		||||
        public readonly Atom _module;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// You should not call this constructor, but use Atom.a instead.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="name"></param>
 | 
			
		||||
        /// <param name="module"></param>
 | 
			
		||||
        private Atom(string name, Atom module)
 | 
			
		||||
        {
 | 
			
		||||
            _name = name;
 | 
			
		||||
            _module = module;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Return the unique Atom object for name where module is null. You should use this to create
 | 
			
		||||
        /// an Atom instead of calling the Atom constructor.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="name"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static Atom a(string name)
 | 
			
		||||
        {
 | 
			
		||||
            Atom atom;
 | 
			
		||||
            if (!_atomStore.TryGetValue(name, out atom))
 | 
			
		||||
            {
 | 
			
		||||
                atom = new Atom(name, null);
 | 
			
		||||
                _atomStore[name] = atom;
 | 
			
		||||
            }
 | 
			
		||||
            return atom;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Return an Atom object with the name and module.  If module is null or Atom.NIL,
 | 
			
		||||
        /// this behaves like Atom.a(name) and returns the unique object where the module is null.
 | 
			
		||||
        /// If module is not null or Atom.NIL, this may or may not be the same object as another Atom
 | 
			
		||||
        /// with the same name and module.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="name"></param>
 | 
			
		||||
        /// <param name="module"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static Atom a(string name, Atom module)
 | 
			
		||||
        {
 | 
			
		||||
            if (module == null || module == Atom.NIL)
 | 
			
		||||
                return a(name);
 | 
			
		||||
            return new Atom(name, module);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// If Obj is an Atom unify its _module with Module.  If the Atom's _module is null, use Atom.NIL.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="Atom"></param>
 | 
			
		||||
        /// <param name="Module"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static IEnumerable<bool> module(object Obj, object Module)
 | 
			
		||||
        {
 | 
			
		||||
            Obj = YP.getValue(Obj);
 | 
			
		||||
            if (Obj is Atom)
 | 
			
		||||
            {
 | 
			
		||||
                if (((Atom)Obj)._module == null)
 | 
			
		||||
                    return YP.unify(Module, Atom.NIL);
 | 
			
		||||
                else
 | 
			
		||||
                    return YP.unify(Module, ((Atom)Obj)._module);
 | 
			
		||||
            }
 | 
			
		||||
            return YP.fail();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static readonly Atom NIL = Atom.a("[]");
 | 
			
		||||
        public static readonly Atom DOT = Atom.a(".");
 | 
			
		||||
        public static readonly Atom F = Atom.a("f");
 | 
			
		||||
        public static readonly Atom SLASH = Atom.a("/");
 | 
			
		||||
        public static readonly Atom HAT = Atom.a("^");
 | 
			
		||||
        public static readonly Atom RULE = Atom.a(":-");
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<bool> unify(object arg)
 | 
			
		||||
        {
 | 
			
		||||
            arg = YP.getValue(arg);
 | 
			
		||||
            if (arg is Atom)
 | 
			
		||||
                return Equals(arg) ? YP.succeed() : YP.fail();
 | 
			
		||||
            else if (arg is Variable)
 | 
			
		||||
                return ((Variable)arg).unify(this);
 | 
			
		||||
            else
 | 
			
		||||
                return YP.fail();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void addUniqueVariables(List<Variable> variableSet)
 | 
			
		||||
        {
 | 
			
		||||
            // Atom does not contain variables.
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public object makeCopy(Variable.CopyStore copyStore)
 | 
			
		||||
        {
 | 
			
		||||
            // Atom does not contain variables that need to be copied.
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool termEqual(object term)
 | 
			
		||||
        {
 | 
			
		||||
            return Equals(YP.getValue(term));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool ground()
 | 
			
		||||
        {
 | 
			
		||||
            // Atom is always ground.
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override bool Equals(object obj)
 | 
			
		||||
        {
 | 
			
		||||
            if (obj is Atom)
 | 
			
		||||
            {
 | 
			
		||||
                if (_module == null && ((Atom)obj)._module == null)
 | 
			
		||||
                    // When _declaringClass is null, we always use an identical object from _atomStore.
 | 
			
		||||
                    return this == obj;
 | 
			
		||||
                // Otherwise, ignore _declaringClass and do a normal string compare on the _name.
 | 
			
		||||
                return _name == ((Atom)obj)._name;
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            return _name;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override int GetHashCode()
 | 
			
		||||
        {
 | 
			
		||||
            // Debug: need to check _declaringClass.
 | 
			
		||||
            return _name.GetHashCode();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string toQuotedString()
 | 
			
		||||
        {
 | 
			
		||||
            if (_name.Length == 0)
 | 
			
		||||
                return "''";
 | 
			
		||||
            else if (this == Atom.NIL)
 | 
			
		||||
                return "[]";
 | 
			
		||||
 | 
			
		||||
            StringBuilder result = new StringBuilder(_name.Length);
 | 
			
		||||
            bool useQuotes = false;
 | 
			
		||||
            foreach (char c in _name)
 | 
			
		||||
            {
 | 
			
		||||
                int cInt = (int)c;
 | 
			
		||||
                if (c == '\'')
 | 
			
		||||
                {
 | 
			
		||||
                    result.Append("''");
 | 
			
		||||
                    useQuotes = true;
 | 
			
		||||
                }
 | 
			
		||||
                else if (c == '_' || cInt >= (int)'a' && cInt <= (int)'z' ||
 | 
			
		||||
                         cInt >= (int)'A' && cInt <= (int)'Z' || cInt >= (int)'0' && cInt <= (int)'9')
 | 
			
		||||
                    result.Append(c);
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    // Debug: Need to handle non-printable chars.
 | 
			
		||||
                    result.Append(c);
 | 
			
		||||
                    useQuotes = true;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!useQuotes && (int)_name[0] >= (int)'a' && (int)_name[0] <= (int)'z')
 | 
			
		||||
                return result.ToString();
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                // Surround in single quotes.
 | 
			
		||||
                result.Append('\'');
 | 
			
		||||
                return "'" + result;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Return true if _name is lexicographically less than atom._name.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="atom"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public bool lessThan(Atom atom)
 | 
			
		||||
        {
 | 
			
		||||
            return _name.CompareTo(atom._name) < 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,234 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (C) 2007-2008, Jeff Thompson
 | 
			
		||||
 *
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the copyright holder nor the names of its contributors
 | 
			
		||||
 *       may be used to endorse or promote products derived from this software
 | 
			
		||||
 *       without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
			
		||||
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
			
		||||
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
			
		||||
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
			
		||||
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// A BagofAnswers holds answers for bagof and setof.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class BagofAnswers
 | 
			
		||||
    {
 | 
			
		||||
        private object _template;
 | 
			
		||||
        private Variable[] _freeVariables;
 | 
			
		||||
        private Dictionary<object[], List<object>> _bagForFreeVariables;
 | 
			
		||||
        private List<object> _findallBagArray;
 | 
			
		||||
        private static TermArrayEqualityComparer _termArrayEqualityComparer =
 | 
			
		||||
            new TermArrayEqualityComparer();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// To get the free variables, split off any existential qualifiers from Goal such as the X in
 | 
			
		||||
        /// "X ^ f(Y)", get the set of unbound variables in Goal that are not qualifiers, then remove
 | 
			
		||||
        /// the unbound variables that are qualifiers as well as the unbound variables in Template.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="Template"></param>
 | 
			
		||||
        /// <param name="Goal"></param>
 | 
			
		||||
        public BagofAnswers(object Template, object Goal)
 | 
			
		||||
        {
 | 
			
		||||
            _template = Template;
 | 
			
		||||
 | 
			
		||||
            // First get the set of variables that are not free variables.
 | 
			
		||||
            List<Variable> variableSet = new List<Variable>();
 | 
			
		||||
            YP.addUniqueVariables(Template, variableSet);
 | 
			
		||||
            object UnqualifiedGoal = YP.getValue(Goal);
 | 
			
		||||
            while (UnqualifiedGoal is Functor2 && ((Functor2)UnqualifiedGoal)._name == Atom.HAT)
 | 
			
		||||
            {
 | 
			
		||||
                YP.addUniqueVariables(((Functor2)UnqualifiedGoal)._arg1, variableSet);
 | 
			
		||||
                UnqualifiedGoal = YP.getValue(((Functor2)UnqualifiedGoal)._arg2);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Remember how many non-free variables there are so we can find the unique free variables
 | 
			
		||||
            //   that are added.
 | 
			
		||||
            int nNonFreeVariables = variableSet.Count;
 | 
			
		||||
            YP.addUniqueVariables(UnqualifiedGoal, variableSet);
 | 
			
		||||
            int nFreeVariables = variableSet.Count - nNonFreeVariables;
 | 
			
		||||
            if (nFreeVariables == 0)
 | 
			
		||||
            {
 | 
			
		||||
                // There were no free variables added, so we won't waste time with _bagForFreeVariables.
 | 
			
		||||
                _freeVariables = null;
 | 
			
		||||
                _findallBagArray = new List<object>();
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                // Copy the free variables.
 | 
			
		||||
                _freeVariables = new Variable[nFreeVariables];
 | 
			
		||||
                for (int i = 0; i < nFreeVariables; ++i)
 | 
			
		||||
                    _freeVariables[i] = variableSet[i + nNonFreeVariables];
 | 
			
		||||
 | 
			
		||||
                _bagForFreeVariables = new Dictionary<object[], List<object>>(_termArrayEqualityComparer);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void add()
 | 
			
		||||
        {
 | 
			
		||||
            if (_freeVariables == null)
 | 
			
		||||
                // The goal has bound the values in _template but we don't bother with _freeVariables.
 | 
			
		||||
                _findallBagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                // The goal has bound the values in _template and _freeVariables.
 | 
			
		||||
                // Find the entry for this set of _freeVariables values.
 | 
			
		||||
                object[] freeVariableValues = new object[_freeVariables.Length];
 | 
			
		||||
                for (int i = 0; i < _freeVariables.Length; ++i)
 | 
			
		||||
                    freeVariableValues[i] = YP.getValue(_freeVariables[i]);
 | 
			
		||||
                List<object> bagArray;
 | 
			
		||||
                if (!_bagForFreeVariables.TryGetValue(freeVariableValues, out bagArray))
 | 
			
		||||
                {
 | 
			
		||||
                    bagArray = new List<object>();
 | 
			
		||||
                    _bagForFreeVariables[freeVariableValues] = bagArray;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Now copy the template and add to the bag for the freeVariables values.
 | 
			
		||||
                bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// For each result, unify the _freeVariables and unify bagArrayVariable with the associated bag.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="bagArrayVariable">this is unified with the List<object> of matches for template that
 | 
			
		||||
        /// corresponds to the bindings for freeVariables.  Be very careful: this does not unify with a Prolog
 | 
			
		||||
        /// list.</param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public IEnumerable<bool> resultArray(Variable bagArrayVariable)
 | 
			
		||||
        {
 | 
			
		||||
            if (_freeVariables == null)
 | 
			
		||||
            {
 | 
			
		||||
                // No unbound free variables, so we only filled one bag.  If empty, bagof fails.
 | 
			
		||||
                if (_findallBagArray.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (bool l1 in bagArrayVariable.unify(_findallBagArray))
 | 
			
		||||
                        yield return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                foreach (KeyValuePair<object[], List<object>> valuesAndBag in _bagForFreeVariables)
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (bool l1 in YP.unifyArrays(_freeVariables, valuesAndBag.Key))
 | 
			
		||||
                    {
 | 
			
		||||
                        foreach (bool l2 in bagArrayVariable.unify(valuesAndBag.Value))
 | 
			
		||||
                            yield return false;
 | 
			
		||||
                    }
 | 
			
		||||
                    // Debug: Should we free memory of the answers already returned?
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// For each result, unify the _freeVariables and unify Bag with the associated bag.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="Bag"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public IEnumerable<bool> result(object Bag)
 | 
			
		||||
        {
 | 
			
		||||
            Variable bagArrayVariable = new Variable();
 | 
			
		||||
            foreach (bool l1 in resultArray(bagArrayVariable))
 | 
			
		||||
            {
 | 
			
		||||
                foreach (bool l2 in YP.unify(Bag, ListPair.make((List<object>)bagArrayVariable.getValue())))
 | 
			
		||||
                    yield return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// For each result, unify the _freeVariables and unify Bag with the associated bag which is sorted
 | 
			
		||||
        /// with duplicates removed, as in setof.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="Bag"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public IEnumerable<bool> resultSet(object Bag)
 | 
			
		||||
        {
 | 
			
		||||
            Variable bagArrayVariable = new Variable();
 | 
			
		||||
            foreach (bool l1 in resultArray(bagArrayVariable))
 | 
			
		||||
            {
 | 
			
		||||
                List<object> bagArray = (List<object>)bagArrayVariable.getValue();
 | 
			
		||||
                YP.sortArray(bagArray);
 | 
			
		||||
                foreach (bool l2 in YP.unify(Bag, ListPair.makeWithoutRepeatedTerms(bagArray)))
 | 
			
		||||
                    yield return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static IEnumerable<bool> bagofArray
 | 
			
		||||
            (object Template, object Goal, IEnumerable<bool> goalIterator, Variable bagArrayVariable)
 | 
			
		||||
        {
 | 
			
		||||
            BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
 | 
			
		||||
            foreach (bool l1 in goalIterator)
 | 
			
		||||
                bagOfAnswers.add();
 | 
			
		||||
            return bagOfAnswers.resultArray(bagArrayVariable);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static IEnumerable<bool> bagof
 | 
			
		||||
            (object Template, object Goal, IEnumerable<bool> goalIterator, object Bag)
 | 
			
		||||
        {
 | 
			
		||||
            BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
 | 
			
		||||
            foreach (bool l1 in goalIterator)
 | 
			
		||||
                bagOfAnswers.add();
 | 
			
		||||
            return bagOfAnswers.result(Bag);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static IEnumerable<bool> setof
 | 
			
		||||
            (object Template, object Goal, IEnumerable<bool> goalIterator, object Bag)
 | 
			
		||||
        {
 | 
			
		||||
            BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal);
 | 
			
		||||
            foreach (bool l1 in goalIterator)
 | 
			
		||||
                bagOfAnswers.add();
 | 
			
		||||
            return bagOfAnswers.resultSet(Bag);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// A TermArrayEqualityComparer implements IEqualityComparer to compare two object arrays using YP.termEqual.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private class TermArrayEqualityComparer : IEqualityComparer<object[]>
 | 
			
		||||
        {
 | 
			
		||||
            public bool Equals(object[] array1, object[] array2)
 | 
			
		||||
            {
 | 
			
		||||
                if (array1.Length != array2.Length)
 | 
			
		||||
                    return false;
 | 
			
		||||
                for (int i = 0; i < array1.Length; ++i)
 | 
			
		||||
                {
 | 
			
		||||
                    if (!YP.termEqual(array1[i], array2[i]))
 | 
			
		||||
                        return false;
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            public int GetHashCode(object[] array)
 | 
			
		||||
            {
 | 
			
		||||
                int hashCode = 0;
 | 
			
		||||
                for (int i = 0; i < array.Length; ++i)
 | 
			
		||||
                    hashCode ^= array[i].GetHashCode();
 | 
			
		||||
                return hashCode;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,103 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (C) 2007-2008, Jeff Thompson
 | 
			
		||||
 *
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the copyright holder nor the names of its contributors
 | 
			
		||||
 *       may be used to endorse or promote products derived from this software
 | 
			
		||||
 *       without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
			
		||||
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
			
		||||
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
			
		||||
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
			
		||||
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// A FindallAnswers holds answers for findall.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class FindallAnswers
 | 
			
		||||
    {
 | 
			
		||||
        private object _template;
 | 
			
		||||
        private List<object> _bagArray;
 | 
			
		||||
 | 
			
		||||
        public FindallAnswers(object Template)
 | 
			
		||||
        {
 | 
			
		||||
            _template = Template;
 | 
			
		||||
            _bagArray = new List<object>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void add()
 | 
			
		||||
        {
 | 
			
		||||
            _bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public List<object> resultArray()
 | 
			
		||||
        {
 | 
			
		||||
            return _bagArray;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Unify Bag with the result. This frees the internal answers, so you can only call this once.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="Bag"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public IEnumerable<bool> result(object Bag)
 | 
			
		||||
        {
 | 
			
		||||
            object result = ListPair.make(_bagArray);
 | 
			
		||||
            // Try to free the memory.
 | 
			
		||||
            _bagArray = null;
 | 
			
		||||
            return YP.unify(Bag, result);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// This is a simplified findall when the goal is a single call.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="Template"></param>
 | 
			
		||||
        /// <param name="goal"></param>
 | 
			
		||||
        /// <param name="Bag"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static IEnumerable<bool> findall(object Template, IEnumerable<bool> goal, object Bag)
 | 
			
		||||
        {
 | 
			
		||||
            FindallAnswers findallAnswers = new FindallAnswers(Template);
 | 
			
		||||
            foreach (bool l1 in goal)
 | 
			
		||||
                findallAnswers.add();
 | 
			
		||||
            return findallAnswers.result(Bag);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Like findall, except return an array of the results.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="template"></param>
 | 
			
		||||
        /// <param name="goal"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static List<object> findallArray(object Template, IEnumerable<bool> goal)
 | 
			
		||||
        {
 | 
			
		||||
            FindallAnswers findallAnswers = new FindallAnswers(Template);
 | 
			
		||||
            foreach (bool l1 in goal)
 | 
			
		||||
                findallAnswers.add();
 | 
			
		||||
            return findallAnswers.resultArray();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,188 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (C) 2007-2008, Jeff Thompson
 | 
			
		||||
 *
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the copyright holder nor the names of its contributors
 | 
			
		||||
 *       may be used to endorse or promote products derived from this software
 | 
			
		||||
 *       without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
			
		||||
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
			
		||||
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
			
		||||
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
			
		||||
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
 | 
			
		||||
{
 | 
			
		||||
    public class Functor : IUnifiable
 | 
			
		||||
    {
 | 
			
		||||
        public readonly Atom _name;
 | 
			
		||||
        public readonly object[] _args;
 | 
			
		||||
 | 
			
		||||
        public Functor(Atom name, object[] args)
 | 
			
		||||
        {
 | 
			
		||||
            if (args.Length <= 3)
 | 
			
		||||
            {
 | 
			
		||||
                if (args.Length == 0)
 | 
			
		||||
                    throw new Exception("For arity 0 functor, just use name as an Atom");
 | 
			
		||||
                else if (args.Length == 1)
 | 
			
		||||
                    throw new Exception("For arity 1 functor, use Functor1");
 | 
			
		||||
                else if (args.Length == 2)
 | 
			
		||||
                    throw new Exception("For arity 2 functor, use Functor2");
 | 
			
		||||
                else if (args.Length == 3)
 | 
			
		||||
                    throw new Exception("For arity 3 functor, use Functor3");
 | 
			
		||||
                else
 | 
			
		||||
                    // (This shouldn't happen, but include it for completeness.
 | 
			
		||||
                    throw new Exception("Cannot create a Functor of arity " + args.Length);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            _name = name;
 | 
			
		||||
            _args = args;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Functor(string name, object[] args)
 | 
			
		||||
            : this(Atom.a(name), args)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Return an Atom, Functor1, Functor2, Functor3 or Functor depending on the
 | 
			
		||||
        /// length of args.
 | 
			
		||||
        /// Note that this is different than the Functor constructor which requires
 | 
			
		||||
        /// the length of args to be greater than 3.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="name"></param>
 | 
			
		||||
        /// <param name="args"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static object make(Atom name, object[] args)
 | 
			
		||||
        {
 | 
			
		||||
            if (args.Length <= 0)
 | 
			
		||||
                return name;
 | 
			
		||||
            else if (args.Length == 1)
 | 
			
		||||
                return new Functor1(name, args[0]);
 | 
			
		||||
            else if (args.Length == 2)
 | 
			
		||||
                return new Functor2(name, args[0], args[1]);
 | 
			
		||||
            else if (args.Length == 3)
 | 
			
		||||
                return new Functor3(name, args[0], args[1], args[2]);
 | 
			
		||||
            else
 | 
			
		||||
                return new Functor(name, args);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Call the main make, first converting name to an Atom.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="name"></param>
 | 
			
		||||
        /// <param name="args"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static object make(string name, object[] args)
 | 
			
		||||
        {
 | 
			
		||||
            return make(Atom.a(name), args);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<bool> unify(object arg)
 | 
			
		||||
        {
 | 
			
		||||
            arg = YP.getValue(arg);
 | 
			
		||||
            if (arg is Functor)
 | 
			
		||||
            {
 | 
			
		||||
                Functor argFunctor = (Functor)arg;
 | 
			
		||||
                if (_name.Equals(argFunctor._name))
 | 
			
		||||
                    return YP.unifyArrays(_args, argFunctor._args);
 | 
			
		||||
                else
 | 
			
		||||
                    return YP.fail();
 | 
			
		||||
            }
 | 
			
		||||
            else if (arg is Variable)
 | 
			
		||||
                return ((Variable)arg).unify(this);
 | 
			
		||||
            else
 | 
			
		||||
                return YP.fail();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            string result = _name + "(" + YP.getValue(_args[0]);
 | 
			
		||||
            for (int i = 1; i < _args.Length; ++i)
 | 
			
		||||
                result += ", " + YP.getValue(_args[i]);
 | 
			
		||||
            result += ")";
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool termEqual(object term)
 | 
			
		||||
        {
 | 
			
		||||
            term = YP.getValue(term);
 | 
			
		||||
            if (term is Functor)
 | 
			
		||||
            {
 | 
			
		||||
                Functor termFunctor = (Functor)term;
 | 
			
		||||
                if (_name.Equals(termFunctor._name) && _args.Length == termFunctor._args.Length)
 | 
			
		||||
                {
 | 
			
		||||
                    for (int i = 0; i < _args.Length; ++i)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (!YP.termEqual(_args[i], termFunctor._args[i]))
 | 
			
		||||
                            return false;
 | 
			
		||||
                    }
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool lessThan(Functor functor)
 | 
			
		||||
        {
 | 
			
		||||
            // Do the equal check first since it is faster.
 | 
			
		||||
            if (!_name.Equals(functor._name))
 | 
			
		||||
                return _name.lessThan(functor._name);
 | 
			
		||||
 | 
			
		||||
            if (_args.Length != functor._args.Length)
 | 
			
		||||
                return _args.Length < functor._args.Length;
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < _args.Length; ++i)
 | 
			
		||||
            {
 | 
			
		||||
                if (!YP.termEqual(_args[i], functor._args[i]))
 | 
			
		||||
                    return YP.termLessThan(_args[i], functor._args[i]);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool ground()
 | 
			
		||||
        {
 | 
			
		||||
            for (int i = 0; i < _args.Length; ++i)
 | 
			
		||||
            {
 | 
			
		||||
                if (!YP.ground(_args[i]))
 | 
			
		||||
                    return false;
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void addUniqueVariables(List<Variable> variableSet)
 | 
			
		||||
        {
 | 
			
		||||
            for (int i = 0; i < _args.Length; ++i)
 | 
			
		||||
                YP.addUniqueVariables(_args[i], variableSet);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public object makeCopy(Variable.CopyStore copyStore)
 | 
			
		||||
        {
 | 
			
		||||
            object[] argsCopy = new object[_args.Length];
 | 
			
		||||
            for (int i = 0; i < _args.Length; ++i)
 | 
			
		||||
                argsCopy[i] = YP.makeCopy(_args[i], copyStore);
 | 
			
		||||
            return new Functor(_name, argsCopy);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,111 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (C) 2007-2008, Jeff Thompson
 | 
			
		||||
 *
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the copyright holder nor the names of its contributors
 | 
			
		||||
 *       may be used to endorse or promote products derived from this software
 | 
			
		||||
 *       without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
			
		||||
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
			
		||||
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
			
		||||
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
			
		||||
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
 | 
			
		||||
{
 | 
			
		||||
    public class Functor1 : IUnifiable
 | 
			
		||||
    {
 | 
			
		||||
        public readonly Atom _name;
 | 
			
		||||
        public readonly object _arg1;
 | 
			
		||||
 | 
			
		||||
        public Functor1(Atom name, object arg1)
 | 
			
		||||
        {
 | 
			
		||||
            _name = name;
 | 
			
		||||
            _arg1 = arg1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Functor1(string name, object arg1)
 | 
			
		||||
            : this(Atom.a(name), arg1)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<bool> unify(object arg)
 | 
			
		||||
        {
 | 
			
		||||
            arg = YP.getValue(arg);
 | 
			
		||||
            if (arg is Functor1)
 | 
			
		||||
            {
 | 
			
		||||
                Functor1 argFunctor = (Functor1)arg;
 | 
			
		||||
                if (_name.Equals(argFunctor._name))
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
 | 
			
		||||
                        yield return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else if (arg is Variable)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (bool l1 in ((Variable)arg).unify(this))
 | 
			
		||||
                    yield return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            return _name + "(" + YP.getValue(_arg1) + ")";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool termEqual(object term)
 | 
			
		||||
        {
 | 
			
		||||
            term = YP.getValue(term);
 | 
			
		||||
            if (term is Functor1)
 | 
			
		||||
            {
 | 
			
		||||
                Functor1 termFunctor = (Functor1)term;
 | 
			
		||||
                return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1);
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool lessThan(Functor1 functor)
 | 
			
		||||
        {
 | 
			
		||||
            // Do the equal check first since it is faster.
 | 
			
		||||
            if (!_name.Equals(functor._name))
 | 
			
		||||
                return _name.lessThan(functor._name);
 | 
			
		||||
 | 
			
		||||
            return YP.termLessThan(_arg1, functor._arg1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool ground()
 | 
			
		||||
        {
 | 
			
		||||
            return YP.ground(_arg1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void addUniqueVariables(List<Variable> variableSet)
 | 
			
		||||
        {
 | 
			
		||||
            YP.addUniqueVariables(_arg1, variableSet);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public object makeCopy(Variable.CopyStore copyStore)
 | 
			
		||||
        {
 | 
			
		||||
            return new Functor1(_name, YP.makeCopy(_arg1, copyStore));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,154 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (C) 2007-2008, Jeff Thompson
 | 
			
		||||
 *
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the copyright holder nor the names of its contributors
 | 
			
		||||
 *       may be used to endorse or promote products derived from this software
 | 
			
		||||
 *       without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
			
		||||
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
			
		||||
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
			
		||||
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
			
		||||
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
 | 
			
		||||
{
 | 
			
		||||
    public class Functor2 : IUnifiable
 | 
			
		||||
    {
 | 
			
		||||
        public readonly Atom _name;
 | 
			
		||||
        public readonly object _arg1;
 | 
			
		||||
        public readonly object _arg2;
 | 
			
		||||
 | 
			
		||||
        public Functor2(Atom name, object arg1, object arg2)
 | 
			
		||||
        {
 | 
			
		||||
            _name = name;
 | 
			
		||||
            _arg1 = arg1;
 | 
			
		||||
            _arg2 = arg2;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Functor2(string name, object arg1, object arg2)
 | 
			
		||||
            : this(Atom.a(name), arg1, arg2)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<bool> unify(object arg)
 | 
			
		||||
        {
 | 
			
		||||
            arg = YP.getValue(arg);
 | 
			
		||||
            if (arg is Functor2)
 | 
			
		||||
            {
 | 
			
		||||
                Functor2 argFunctor = (Functor2)arg;
 | 
			
		||||
                if (_name.Equals(argFunctor._name))
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
 | 
			
		||||
                    {
 | 
			
		||||
                        foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2))
 | 
			
		||||
                            yield return false;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else if (arg is Variable)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (bool l1 in ((Variable)arg).unify(this))
 | 
			
		||||
                    yield return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            if (_name == Atom.DOT)
 | 
			
		||||
                return listPairToString(this);
 | 
			
		||||
            else
 | 
			
		||||
                return _name + "(" + YP.getValue(_arg1) + ", " +  YP.getValue(_arg2) + ")";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool termEqual(object term)
 | 
			
		||||
        {
 | 
			
		||||
            term = YP.getValue(term);
 | 
			
		||||
            if (term is Functor2)
 | 
			
		||||
            {
 | 
			
		||||
                Functor2 termFunctor = (Functor2)term;
 | 
			
		||||
                return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1)
 | 
			
		||||
                     && YP.termEqual(_arg2, termFunctor._arg2);
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool lessThan(Functor2 functor)
 | 
			
		||||
        {
 | 
			
		||||
            // Do the equal check first since it is faster.
 | 
			
		||||
            if (!_name.Equals(functor._name))
 | 
			
		||||
                return _name.lessThan(functor._name);
 | 
			
		||||
 | 
			
		||||
            if (!YP.termEqual(_arg1, functor._arg1))
 | 
			
		||||
                return YP.termLessThan(_arg1, functor._arg1);
 | 
			
		||||
 | 
			
		||||
            return YP.termLessThan(_arg2, functor._arg2);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool ground()
 | 
			
		||||
        {
 | 
			
		||||
            return YP.ground(_arg1) && YP.ground(_arg2);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void addUniqueVariables(List<Variable> variableSet)
 | 
			
		||||
        {
 | 
			
		||||
            YP.addUniqueVariables(_arg1, variableSet);
 | 
			
		||||
            YP.addUniqueVariables(_arg2, variableSet);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public object makeCopy(Variable.CopyStore copyStore)
 | 
			
		||||
        {
 | 
			
		||||
            return new Functor2(_name, YP.makeCopy(_arg1, copyStore),
 | 
			
		||||
                YP.makeCopy(_arg2, copyStore));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static string listPairToString(Functor2 listPair)
 | 
			
		||||
        {
 | 
			
		||||
            string result = "[";
 | 
			
		||||
            while (true)
 | 
			
		||||
            {
 | 
			
		||||
                object head = YP.getValue(listPair._arg1);
 | 
			
		||||
                object tail = YP.getValue(listPair._arg2);
 | 
			
		||||
                if (tail == (object)Atom.NIL)
 | 
			
		||||
                {
 | 
			
		||||
                    result += head;
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                else if (tail is Functor2 && ((Functor2)tail)._name == Atom.DOT)
 | 
			
		||||
                {
 | 
			
		||||
                    result += head + ", ";
 | 
			
		||||
                    listPair = (Functor2)tail;
 | 
			
		||||
                    // Loop again.
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    // The list is not terminated with NIL.
 | 
			
		||||
                    result += head + "|" + tail;
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            result += "]";
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,133 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (C) 2007-2008, Jeff Thompson
 | 
			
		||||
 *
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the copyright holder nor the names of its contributors
 | 
			
		||||
 *       may be used to endorse or promote products derived from this software
 | 
			
		||||
 *       without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
			
		||||
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
			
		||||
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
			
		||||
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
			
		||||
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
 | 
			
		||||
{
 | 
			
		||||
    public class Functor3 : IUnifiable
 | 
			
		||||
    {
 | 
			
		||||
        public readonly Atom _name;
 | 
			
		||||
        public readonly object _arg1;
 | 
			
		||||
        public readonly object _arg2;
 | 
			
		||||
        public readonly object _arg3;
 | 
			
		||||
 | 
			
		||||
        public Functor3(Atom name, object arg1, object arg2, object arg3)
 | 
			
		||||
        {
 | 
			
		||||
            _name = name;
 | 
			
		||||
            _arg1 = arg1;
 | 
			
		||||
            _arg2 = arg2;
 | 
			
		||||
            _arg3 = arg3;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Functor3(string name, object arg1, object arg2, object arg3)
 | 
			
		||||
            : this(Atom.a(name), arg1, arg2, arg3)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<bool> unify(object arg)
 | 
			
		||||
        {
 | 
			
		||||
            arg = YP.getValue(arg);
 | 
			
		||||
            if (arg is Functor3)
 | 
			
		||||
            {
 | 
			
		||||
                Functor3 argFunctor = (Functor3)arg;
 | 
			
		||||
                if (_name.Equals(argFunctor._name))
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1))
 | 
			
		||||
                    {
 | 
			
		||||
                        foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2))
 | 
			
		||||
                        {
 | 
			
		||||
                            foreach (bool l3 in YP.unify(_arg3, argFunctor._arg3))
 | 
			
		||||
                                yield return false;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else if (arg is Variable)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (bool l1 in ((Variable)arg).unify(this))
 | 
			
		||||
                    yield return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            return _name + "(" + YP.getValue(_arg1) + ", " + YP.getValue(_arg2) + ", " +
 | 
			
		||||
                YP.getValue(_arg3) + ")";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool termEqual(object term)
 | 
			
		||||
        {
 | 
			
		||||
            term = YP.getValue(term);
 | 
			
		||||
            if (term is Functor3)
 | 
			
		||||
            {
 | 
			
		||||
                Functor3 termFunctor = (Functor3)term;
 | 
			
		||||
                return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1)
 | 
			
		||||
                     && YP.termEqual(_arg2, termFunctor._arg2)
 | 
			
		||||
                     && YP.termEqual(_arg3, termFunctor._arg3);
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool lessThan(Functor3 functor)
 | 
			
		||||
        {
 | 
			
		||||
            // Do the equal check first since it is faster.
 | 
			
		||||
            if (!_name.Equals(functor._name))
 | 
			
		||||
                return _name.lessThan(functor._name);
 | 
			
		||||
 | 
			
		||||
            if (!YP.termEqual(_arg1, functor._arg1))
 | 
			
		||||
                return YP.termLessThan(_arg1, functor._arg1);
 | 
			
		||||
 | 
			
		||||
            if (!YP.termEqual(_arg2, functor._arg2))
 | 
			
		||||
                return YP.termLessThan(_arg2, functor._arg2);
 | 
			
		||||
 | 
			
		||||
            return YP.termLessThan(_arg3, functor._arg3);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool ground()
 | 
			
		||||
        {
 | 
			
		||||
            return YP.ground(_arg1) && YP.ground(_arg2) && YP.ground(_arg3);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void addUniqueVariables(List<Variable> variableSet)
 | 
			
		||||
        {
 | 
			
		||||
            YP.addUniqueVariables(_arg1, variableSet);
 | 
			
		||||
            YP.addUniqueVariables(_arg2, variableSet);
 | 
			
		||||
            YP.addUniqueVariables(_arg3, variableSet);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public object makeCopy(Variable.CopyStore copyStore)
 | 
			
		||||
        {
 | 
			
		||||
            return new Functor3(_name, YP.makeCopy(_arg1, copyStore),
 | 
			
		||||
                YP.makeCopy(_arg2, copyStore), YP.makeCopy(_arg3, copyStore));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,288 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (C) 2007-2008, Jeff Thompson
 | 
			
		||||
 *
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the copyright holder nor the names of its contributors
 | 
			
		||||
 *       may be used to endorse or promote products derived from this software
 | 
			
		||||
 *       without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
			
		||||
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
			
		||||
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
			
		||||
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
			
		||||
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// An IndexedAnswers holds answers to a query based on the values of index arguments.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class IndexedAnswers : YP.IClause
 | 
			
		||||
    {
 | 
			
		||||
        // addAnswer adds the answer here and indexes it later.
 | 
			
		||||
        private List<object[]> _allAnswers = new List<object[]>();
 | 
			
		||||
        // The key has the arity of answers with non-null values for each indexed arg.  The value
 | 
			
		||||
        //   is a list of the matching answers.  The signature is implicit in the pattern on non-null index args.
 | 
			
		||||
        private Dictionary<HashedList, List<object[]>> _indexedAnswers =
 | 
			
		||||
            new Dictionary<HashedList, List<object[]>>();
 | 
			
		||||
        // Keeps track of whether we have started adding entries to _indexedAnswers for the signature.
 | 
			
		||||
        private Dictionary<int, object> _gotAnswersForSignature = new Dictionary<int, object>();
 | 
			
		||||
        private const int MAX_INDEX_ARGS = 31;
 | 
			
		||||
 | 
			
		||||
        public IndexedAnswers()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Elements of answer must be ground, since arguments with unbound variables make this
 | 
			
		||||
        /// into a dynamic rule which we don't index.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="answer"></param>
 | 
			
		||||
        public void addAnswer(object[] answer)
 | 
			
		||||
        {
 | 
			
		||||
            // Store a copy of the answer array.
 | 
			
		||||
            object[] answerCopy = new object[answer.Length];
 | 
			
		||||
            Variable.CopyStore copyStore = new Variable.CopyStore();
 | 
			
		||||
            for (int i = 0; i < answer.Length; ++i)
 | 
			
		||||
                answerCopy[i] = YP.makeCopy(answer[i], copyStore);
 | 
			
		||||
            if (copyStore.getNUniqueVariables() > 0)
 | 
			
		||||
                throw new InvalidOperationException
 | 
			
		||||
                    ("Elements of answer must be ground, but found " + copyStore.getNUniqueVariables() +
 | 
			
		||||
                     " unbound variables");
 | 
			
		||||
            _allAnswers.Add(answerCopy);
 | 
			
		||||
 | 
			
		||||
            // If match has already indexed answers for a signature, we need to add
 | 
			
		||||
            //   this to the existing indexed answers.
 | 
			
		||||
            foreach (int signature in _gotAnswersForSignature.Keys)
 | 
			
		||||
                indexAnswerForSignature(answerCopy, signature);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void indexAnswerForSignature(object[] answer, int signature)
 | 
			
		||||
        {
 | 
			
		||||
            // First find out which of the answer values can be used as an index.
 | 
			
		||||
            object[] indexValues = new object[answer.Length];
 | 
			
		||||
            for (int i = 0; i < answer.Length; ++i)
 | 
			
		||||
            {
 | 
			
		||||
                // We limit the number of indexed args in a 32-bit signature.
 | 
			
		||||
                if (i >= MAX_INDEX_ARGS)
 | 
			
		||||
                    indexValues[i] = null;
 | 
			
		||||
                else
 | 
			
		||||
                    indexValues[i] = getIndexValue(YP.getValue(answer[i]));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // We need an entry in indexArgs from indexValues for each 1 bit in signature.
 | 
			
		||||
            HashedList indexArgs = new HashedList(indexValues.Length);
 | 
			
		||||
            for (int i = 0; i < indexValues.Length; ++i)
 | 
			
		||||
            {
 | 
			
		||||
                if ((signature & (1 << i)) == 0)
 | 
			
		||||
                    indexArgs.Add(null);
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    if (indexValues[i] == null)
 | 
			
		||||
                        // The signature wants an index value here, but we don't have one so
 | 
			
		||||
                        //   we can't add it as an answer for this signature.
 | 
			
		||||
                        return;
 | 
			
		||||
                    else
 | 
			
		||||
                        indexArgs.Add(indexValues[i]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Add the answer to the answers list for indexArgs, creating the entry if needed.
 | 
			
		||||
            List<object[]> answers;
 | 
			
		||||
            if (!_indexedAnswers.TryGetValue(indexArgs, out answers))
 | 
			
		||||
            {
 | 
			
		||||
                answers = new List<object[]>();
 | 
			
		||||
                _indexedAnswers[indexArgs] = answers;
 | 
			
		||||
            }
 | 
			
		||||
            answers.Add(answer);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<bool> match(object[] arguments)
 | 
			
		||||
        {
 | 
			
		||||
            // Set up indexArgs, up to arg position MAX_INDEX_ARGS.  The signature has a 1 bit for
 | 
			
		||||
            //   each non-null index arg.
 | 
			
		||||
            HashedList indexArgs = new HashedList(arguments.Length);
 | 
			
		||||
            bool gotAllIndexArgs = true;
 | 
			
		||||
            int signature = 0;
 | 
			
		||||
            for (int i = 0; i < arguments.Length; ++i)
 | 
			
		||||
            {
 | 
			
		||||
                object indexValue = null;
 | 
			
		||||
                if (i < MAX_INDEX_ARGS)
 | 
			
		||||
                {
 | 
			
		||||
                    // We limit the number of args in a 32-bit signature.
 | 
			
		||||
                    indexValue = getIndexValue(YP.getValue(arguments[i]));
 | 
			
		||||
                    if (indexValue != null)
 | 
			
		||||
                        signature += (1 << i);
 | 
			
		||||
                }
 | 
			
		||||
                if (indexValue == null)
 | 
			
		||||
                    gotAllIndexArgs = false;
 | 
			
		||||
                indexArgs.Add(indexValue);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            List<object[]> answers;
 | 
			
		||||
            if (signature == 0)
 | 
			
		||||
                // No index args, so we have to match from _allAnswers.
 | 
			
		||||
                answers = _allAnswers;
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if (!_gotAnswersForSignature.ContainsKey(signature))
 | 
			
		||||
                {
 | 
			
		||||
                    // We need to create the entry in _indexedAnswers.
 | 
			
		||||
                    foreach (object[] answer in _allAnswers)
 | 
			
		||||
                        indexAnswerForSignature(answer, signature);
 | 
			
		||||
                    // Mark that we did this signature.
 | 
			
		||||
                    _gotAnswersForSignature[signature] = null;
 | 
			
		||||
                }
 | 
			
		||||
                if (!_indexedAnswers.TryGetValue(indexArgs, out answers))
 | 
			
		||||
                    yield break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (gotAllIndexArgs)
 | 
			
		||||
            {
 | 
			
		||||
                // All the arguments were already bound, so we don't need to do bindings.
 | 
			
		||||
                yield return false;
 | 
			
		||||
                yield break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Find matches in answers.
 | 
			
		||||
            IEnumerator<bool>[] iterators = new IEnumerator<bool>[arguments.Length];
 | 
			
		||||
            foreach (object[] answer in answers)
 | 
			
		||||
            {
 | 
			
		||||
                bool gotMatch = true;
 | 
			
		||||
                int nIterators = 0;
 | 
			
		||||
                // Try to bind all the arguments.
 | 
			
		||||
                for (int i = 0; i < arguments.Length; ++i)
 | 
			
		||||
                {
 | 
			
		||||
                    if (indexArgs[i] != null)
 | 
			
		||||
                        // We already matched this argument by looking up _indexedAnswers.
 | 
			
		||||
                        continue;
 | 
			
		||||
 | 
			
		||||
                    IEnumerator<bool> iterator = YP.unify(arguments[i], answer[i]).GetEnumerator();
 | 
			
		||||
                    iterators[nIterators++] = iterator;
 | 
			
		||||
                    // MoveNext() is true if YP.unify succeeds.
 | 
			
		||||
                    if (!iterator.MoveNext())
 | 
			
		||||
                    {
 | 
			
		||||
                        gotMatch = false;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    if (gotMatch)
 | 
			
		||||
                        yield return false;
 | 
			
		||||
                }
 | 
			
		||||
                finally
 | 
			
		||||
                {
 | 
			
		||||
                    // Manually finalize all the iterators.
 | 
			
		||||
                    for (int i = 0; i < nIterators; ++i)
 | 
			
		||||
                        iterators[i].Dispose();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// A HashedList extends an ArrayList with methods to get a hash and to check equality
 | 
			
		||||
        /// based on the elements of the list.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public class HashedList : ArrayList
 | 
			
		||||
        {
 | 
			
		||||
            private bool _gotHashCode = false;
 | 
			
		||||
            private int _hashCode;
 | 
			
		||||
 | 
			
		||||
            public HashedList()
 | 
			
		||||
                : base()
 | 
			
		||||
            {
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            public HashedList(int capacity)
 | 
			
		||||
                : base(capacity)
 | 
			
		||||
            {
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            public HashedList(ICollection c)
 | 
			
		||||
                : base(c)
 | 
			
		||||
            {
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Debug: Should override all the other methods that change this.
 | 
			
		||||
            public override int Add(object value)
 | 
			
		||||
            {
 | 
			
		||||
                _gotHashCode = false;
 | 
			
		||||
                return base.Add(value);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            public override int GetHashCode()
 | 
			
		||||
            {
 | 
			
		||||
                if (!_gotHashCode)
 | 
			
		||||
                {
 | 
			
		||||
                    int hashCode = 1;
 | 
			
		||||
                    foreach (object obj in this)
 | 
			
		||||
                        hashCode = 31 * hashCode + (obj == null ? 0 : obj.GetHashCode());
 | 
			
		||||
                    _hashCode = hashCode;
 | 
			
		||||
                    _gotHashCode = true;
 | 
			
		||||
                }
 | 
			
		||||
                return _hashCode;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            public override bool Equals(object obj)
 | 
			
		||||
            {
 | 
			
		||||
                if (!(obj is ArrayList))
 | 
			
		||||
                    return false;
 | 
			
		||||
 | 
			
		||||
                ArrayList objList = (ArrayList)obj;
 | 
			
		||||
                if (objList.Count != Count)
 | 
			
		||||
                    return false;
 | 
			
		||||
 | 
			
		||||
                for (int i = 0; i < Count; ++i)
 | 
			
		||||
                {
 | 
			
		||||
                    object value = objList[i];
 | 
			
		||||
                    if (value == null)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (this[i] != null)
 | 
			
		||||
                            return false;
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        if (!value.Equals(this[i]))
 | 
			
		||||
                            return false;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// If we keep an index on value, return the value, or null if we don't index it.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="value">the term to examine.  Assume you already called YP.getValue(value)</param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static object getIndexValue(object value)
 | 
			
		||||
        {
 | 
			
		||||
            if (value is Atom || value is string || value is Int32 || value is DateTime)
 | 
			
		||||
                return value;
 | 
			
		||||
            else
 | 
			
		||||
                return null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,156 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (C) 2007-2008, Jeff Thompson
 | 
			
		||||
 *
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the copyright holder nor the names of its contributors
 | 
			
		||||
 *       may be used to endorse or promote products derived from this software
 | 
			
		||||
 *       without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
			
		||||
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
			
		||||
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
			
		||||
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
			
		||||
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
 | 
			
		||||
{
 | 
			
		||||
    public class ListPair : Functor2
 | 
			
		||||
    {
 | 
			
		||||
        public ListPair(object head, object tail) : base(Atom.DOT, head, tail)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static object make(List<object> list)
 | 
			
		||||
        {
 | 
			
		||||
            if (list.Count <= 0)
 | 
			
		||||
                return Atom.NIL;
 | 
			
		||||
 | 
			
		||||
            object result = Atom.NIL;
 | 
			
		||||
            // Start from the end.
 | 
			
		||||
            for (int i = list.Count - 1; i >= 0; --i)
 | 
			
		||||
                result = new ListPair(list[i], result);
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static object make(object[] array)
 | 
			
		||||
        {
 | 
			
		||||
            if (array.Length <= 0)
 | 
			
		||||
                return Atom.NIL;
 | 
			
		||||
 | 
			
		||||
            object result = Atom.NIL;
 | 
			
		||||
            // Start from the end.
 | 
			
		||||
            for (int i = array.Length - 1; i >= 0; --i)
 | 
			
		||||
                result = new ListPair(array[i], result);
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Return a ListPair version of array, where repeated elements
 | 
			
		||||
        /// (according to YP.termEqual) are removed.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="array"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static object makeWithoutRepeatedTerms(object[] array)
 | 
			
		||||
        {
 | 
			
		||||
            if (array.Length <= 0)
 | 
			
		||||
                return Atom.NIL;
 | 
			
		||||
 | 
			
		||||
            // Start from the end.
 | 
			
		||||
            object previousTerm = array[array.Length - 1];
 | 
			
		||||
            object result = new ListPair(previousTerm, Atom.NIL);
 | 
			
		||||
            for (int i = array.Length - 2; i >= 0; --i)
 | 
			
		||||
            {
 | 
			
		||||
                object term = array[i];
 | 
			
		||||
                if (YP.termEqual(term, previousTerm))
 | 
			
		||||
                    continue;
 | 
			
		||||
                result = new ListPair(term, result);
 | 
			
		||||
                previousTerm = term;
 | 
			
		||||
            }
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Return a ListPair version of array, where repeated elements
 | 
			
		||||
        /// (according to YP.termEqual) are removed.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="array"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static object makeWithoutRepeatedTerms(List<object> array)
 | 
			
		||||
        {
 | 
			
		||||
            if (array.Count <= 0)
 | 
			
		||||
                return Atom.NIL;
 | 
			
		||||
 | 
			
		||||
            // Start from the end.
 | 
			
		||||
            object previousTerm = array[array.Count - 1];
 | 
			
		||||
            object result = new ListPair(previousTerm, Atom.NIL);
 | 
			
		||||
            for (int i = array.Count - 2; i >= 0; --i)
 | 
			
		||||
            {
 | 
			
		||||
                object term = array[i];
 | 
			
		||||
                if (YP.termEqual(term, previousTerm))
 | 
			
		||||
                    continue;
 | 
			
		||||
                result = new ListPair(term, result);
 | 
			
		||||
                previousTerm = term;
 | 
			
		||||
            }
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static object make(object element1)
 | 
			
		||||
        {
 | 
			
		||||
            return new ListPair(element1, Atom.NIL);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static object make(object element1, object element2)
 | 
			
		||||
        {
 | 
			
		||||
            return new ListPair(element1, new ListPair(element2, Atom.NIL));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static object make(object element1, object element2, object element3)
 | 
			
		||||
        {
 | 
			
		||||
            return new ListPair(element1,
 | 
			
		||||
                new ListPair(element2, new ListPair(element3, Atom.NIL)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Return an array of the elements in list or null if it is not
 | 
			
		||||
        /// a proper list.  If list is Atom.NIL, return an array of zero elements.
 | 
			
		||||
        /// This does not call YP.getValue on each element.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="list"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static object[] toArray(object list)
 | 
			
		||||
        {
 | 
			
		||||
            list = YP.getValue(list);
 | 
			
		||||
            if (list.Equals(Atom.NIL))
 | 
			
		||||
                return new object[0];
 | 
			
		||||
 | 
			
		||||
            List<object> result = new List<object>();
 | 
			
		||||
            for (object element = list;
 | 
			
		||||
                 element is Functor2 && ((Functor2)element)._name == Atom.DOT;
 | 
			
		||||
                 element = YP.getValue(((Functor2)element)._arg2))
 | 
			
		||||
                result.Add(((Functor2)element)._arg1);
 | 
			
		||||
 | 
			
		||||
            if (result.Count <= 0)
 | 
			
		||||
                return null;
 | 
			
		||||
            return result.ToArray();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -0,0 +1,71 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (C) 2007-2008, Jeff Thompson
 | 
			
		||||
 *
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the copyright holder nor the names of its contributors
 | 
			
		||||
 *       may be used to endorse or promote products derived from this software
 | 
			
		||||
 *       without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
			
		||||
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
			
		||||
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
			
		||||
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
			
		||||
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// A PrologException is used as the exception thrown by YP.throw(Term).
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class PrologException : Exception
 | 
			
		||||
    {
 | 
			
		||||
        public readonly object _term;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Create a PrologException with the given Term.  The printable exception message is the full Term.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="Term">the term of the exception</param>
 | 
			
		||||
        /// </param>
 | 
			
		||||
        public PrologException(object Term)
 | 
			
		||||
            : base(YP.getValue(Term).ToString())
 | 
			
		||||
        {
 | 
			
		||||
            _term = YP.makeCopy(Term, new Variable.CopyStore());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Create a PrologException where the Term is error(ErrorTerm, Message).
 | 
			
		||||
        /// This uses YP.makeCopy to copy the ErrorTerm and Message so that they are valid after unbinding.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="ErrorTerm">the term of the exception</param>
 | 
			
		||||
        /// <param name="Messsage">the message, converted to a string, to use as the printable exception message
 | 
			
		||||
        /// </param>
 | 
			
		||||
        public PrologException(object ErrorTerm, object Message)
 | 
			
		||||
            : base(YP.getValue(Message).ToString())
 | 
			
		||||
        {
 | 
			
		||||
            _term = YP.makeCopy(new Functor2(Atom.a("error"), ErrorTerm, Message), new Variable.CopyStore());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public object Term
 | 
			
		||||
        {
 | 
			
		||||
            get { return _term; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,62 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (C) 2007-2008, Jeff Thompson
 | 
			
		||||
 *
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the copyright holder nor the names of its contributors
 | 
			
		||||
 *       may be used to endorse or promote products derived from this software
 | 
			
		||||
 *       without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
			
		||||
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
			
		||||
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
			
		||||
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
			
		||||
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// An UndefinedPredicateException extends PrologException to create an existence_error exception.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class UndefinedPredicateException : PrologException
 | 
			
		||||
    {
 | 
			
		||||
        private Atom _predicateName;
 | 
			
		||||
        private int _arity;
 | 
			
		||||
 | 
			
		||||
        public UndefinedPredicateException(object message, Atom predicateName, int arity)
 | 
			
		||||
            : base(new Functor2
 | 
			
		||||
                   (Atom.a("existence_error"), Atom.a("procedure"), new Functor2(Atom.a("/"), predicateName, arity)),
 | 
			
		||||
                   message)
 | 
			
		||||
        {
 | 
			
		||||
            _predicateName = predicateName;
 | 
			
		||||
            _arity = arity;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Atom PredicateName
 | 
			
		||||
        {
 | 
			
		||||
            get { return _predicateName; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int Arity
 | 
			
		||||
        {
 | 
			
		||||
            get { return _arity; }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,196 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Copyright (C) 2007-2008, Jeff Thompson
 | 
			
		||||
 *
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 *     * Redistributions of source code must retain the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 *     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *       documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *     * Neither the name of the copyright holder nor the names of its contributors
 | 
			
		||||
 *       may be used to endorse or promote products derived from this software
 | 
			
		||||
 *       without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | 
			
		||||
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
			
		||||
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
			
		||||
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | 
			
		||||
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | 
			
		||||
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog
 | 
			
		||||
{
 | 
			
		||||
    public interface IUnifiable
 | 
			
		||||
    {
 | 
			
		||||
        IEnumerable<bool> unify(object arg);
 | 
			
		||||
        void addUniqueVariables(List<Variable> variableSet);
 | 
			
		||||
        object makeCopy(Variable.CopyStore copyStore);
 | 
			
		||||
        bool termEqual(object term);
 | 
			
		||||
        bool ground();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class Variable : IUnifiable
 | 
			
		||||
    {
 | 
			
		||||
        // Use _isBound separate from _value so that it can be bound to any value,
 | 
			
		||||
        //   including null.
 | 
			
		||||
        private bool _isBound = false;
 | 
			
		||||
        private object _value;
 | 
			
		||||
 | 
			
		||||
        public object getValue()
 | 
			
		||||
        {
 | 
			
		||||
            if (!_isBound)
 | 
			
		||||
                return this;
 | 
			
		||||
 | 
			
		||||
            object result = _value;
 | 
			
		||||
            while (result is Variable)
 | 
			
		||||
            {
 | 
			
		||||
                if (!((Variable)result)._isBound)
 | 
			
		||||
                    return result;
 | 
			
		||||
 | 
			
		||||
                // Keep following the Variable chain.
 | 
			
		||||
                result = ((Variable)result)._value;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IEnumerable<bool> unify(object arg)
 | 
			
		||||
        {
 | 
			
		||||
            if (!_isBound)
 | 
			
		||||
            {
 | 
			
		||||
                _value = YP.getValue(arg);
 | 
			
		||||
                if (_value == this)
 | 
			
		||||
                    // We are unifying this unbound variable with itself, so leave it unbound.
 | 
			
		||||
                    yield return false;
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    _isBound = true;
 | 
			
		||||
                    try
 | 
			
		||||
                    {
 | 
			
		||||
                        yield return false;
 | 
			
		||||
                    }
 | 
			
		||||
                    finally
 | 
			
		||||
                    {
 | 
			
		||||
                        // Remove the binding.
 | 
			
		||||
                        _isBound = false;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                foreach (bool l1 in YP.unify(this, arg))
 | 
			
		||||
                    yield return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            object value = getValue();
 | 
			
		||||
            if (value == this)
 | 
			
		||||
                return "Variable";
 | 
			
		||||
            else
 | 
			
		||||
                return getValue().ToString();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// If bound, call YP.addUniqueVariables on the value.  Otherwise, if this unbound
 | 
			
		||||
        /// variable is not already in variableSet, add it.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="variableSet"></param>
 | 
			
		||||
        public void addUniqueVariables(List<Variable> variableSet)
 | 
			
		||||
        {
 | 
			
		||||
            if (_isBound)
 | 
			
		||||
                YP.addUniqueVariables(getValue(), variableSet);
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                if (variableSet.IndexOf(this) < 0)
 | 
			
		||||
                    variableSet.Add(this);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// If bound, return YP.makeCopy for the value, else return copyStore.getCopy(this).
 | 
			
		||||
        /// However, if copyStore is null, just return this.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="copyStore"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public object makeCopy(Variable.CopyStore copyStore)
 | 
			
		||||
        {
 | 
			
		||||
            if (_isBound)
 | 
			
		||||
                return YP.makeCopy(getValue(), copyStore);
 | 
			
		||||
            else
 | 
			
		||||
                return copyStore == null ? this : copyStore.getCopy(this);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool termEqual(object term)
 | 
			
		||||
        {
 | 
			
		||||
            if (_isBound)
 | 
			
		||||
                return YP.termEqual(getValue(), term);
 | 
			
		||||
            else
 | 
			
		||||
                return this == YP.getValue(term);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool ground()
 | 
			
		||||
        {
 | 
			
		||||
            if (_isBound)
 | 
			
		||||
                // This is usually called by YP.ground which already did getValue, so this
 | 
			
		||||
                //   should never be reached, but check anyway.
 | 
			
		||||
                return YP.ground(getValue());
 | 
			
		||||
            else
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// A CopyStore is used by makeCopy to track which Variable objects have
 | 
			
		||||
        /// been copied.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public class CopyStore
 | 
			
		||||
        {
 | 
			
		||||
            private List<Variable> _inVariableSet = new List<Variable>();
 | 
			
		||||
            private List<Variable> _outVariableSet = new List<Variable>();
 | 
			
		||||
 | 
			
		||||
            /// <summary>
 | 
			
		||||
            /// If inVariable has already been copied, return its copy. Otherwise,
 | 
			
		||||
            /// return a fresh Variable associated with inVariable.
 | 
			
		||||
            /// </summary>
 | 
			
		||||
            /// <param name="inVariable"></param>
 | 
			
		||||
            /// <returns></returns>
 | 
			
		||||
            public Variable getCopy(Variable inVariable)
 | 
			
		||||
            {
 | 
			
		||||
                int index = _inVariableSet.IndexOf(inVariable);
 | 
			
		||||
                if (index >= 0)
 | 
			
		||||
                    return _outVariableSet[index];
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    Variable outVariable = new Variable();
 | 
			
		||||
                    _inVariableSet.Add(inVariable);
 | 
			
		||||
                    _outVariableSet.Add(outVariable);
 | 
			
		||||
                    return outVariable;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /// <summary>
 | 
			
		||||
            /// Return the number of unique variables that have been copied.
 | 
			
		||||
            /// </summary>
 | 
			
		||||
            /// <returns></returns>
 | 
			
		||||
            public int getNUniqueVariables()
 | 
			
		||||
            {
 | 
			
		||||
                return _inVariableSet.Count;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -29,7 +29,7 @@ using System;
 | 
			
		|||
using System.IO;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared
 | 
			
		||||
{
 | 
			
		||||
    [Serializable]
 | 
			
		||||
    public class AssemblyResolver
 | 
			
		||||
| 
						 | 
				
			
			@ -34,8 +34,9 @@ using Microsoft.CSharp;
 | 
			
		|||
using Microsoft.JScript;
 | 
			
		||||
using Microsoft.VisualBasic;
 | 
			
		||||
using OpenSim.Region.Environment.Interfaces;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
 | 
			
		||||
{
 | 
			
		||||
    public class Compiler
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -78,8 +79,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        private static int instanceID = new Random().Next(0, int.MaxValue);                 // Unique number to use on our compiled files
 | 
			
		||||
        private static UInt64 scriptCompileCounter = 0;                                     // And a counter
 | 
			
		||||
 | 
			
		||||
        public XEngine m_scriptEngine;
 | 
			
		||||
        public Compiler(XEngine scriptEngine)
 | 
			
		||||
        public IScriptEngine m_scriptEngine;
 | 
			
		||||
        public Compiler(IScriptEngine scriptEngine)
 | 
			
		||||
        {
 | 
			
		||||
            m_scriptEngine = scriptEngine;
 | 
			
		||||
            ReadConfig();
 | 
			
		||||
| 
						 | 
				
			
			@ -89,11 +90,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        {
 | 
			
		||||
 | 
			
		||||
            // Get some config
 | 
			
		||||
            WriteScriptSourceToDebugFile = m_scriptEngine.ScriptConfigSource.GetBoolean("WriteScriptSourceToDebugFile", true);
 | 
			
		||||
            CompileWithDebugInformation = m_scriptEngine.ScriptConfigSource.GetBoolean("CompileWithDebugInformation", true);
 | 
			
		||||
            WriteScriptSourceToDebugFile = m_scriptEngine.Config.GetBoolean("WriteScriptSourceToDebugFile", true);
 | 
			
		||||
            CompileWithDebugInformation = m_scriptEngine.Config.GetBoolean("CompileWithDebugInformation", true);
 | 
			
		||||
 | 
			
		||||
            // Get file prefix from scriptengine name and make it file system safe:
 | 
			
		||||
            FilePrefix = m_scriptEngine.ScriptEngineName;
 | 
			
		||||
            FilePrefix = "CommonCompiler";
 | 
			
		||||
            foreach (char c in Path.GetInvalidFileNameChars())
 | 
			
		||||
            {
 | 
			
		||||
                FilePrefix = FilePrefix.Replace(c, '_');
 | 
			
		||||
| 
						 | 
				
			
			@ -113,11 +114,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            LanguageMapping.Add(enumCompileType.js.ToString(), enumCompileType.js);
 | 
			
		||||
 | 
			
		||||
            // Allowed compilers
 | 
			
		||||
            string allowComp = m_scriptEngine.ScriptConfigSource.GetString("AllowedCompilers", "lsl,cs,vb,js");
 | 
			
		||||
            string allowComp = m_scriptEngine.Config.GetString("AllowedCompilers", "lsl,cs,vb,js");
 | 
			
		||||
            AllowedCompilers.Clear();
 | 
			
		||||
 | 
			
		||||
#if DEBUG
 | 
			
		||||
            m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: Allowed languages: " + allowComp);
 | 
			
		||||
            m_scriptEngine.Log.Debug("[Compiler]: Allowed languages: " + allowComp);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -126,26 +127,26 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                string strlan = strl.Trim(" \t".ToCharArray()).ToLower();
 | 
			
		||||
                if (!LanguageMapping.ContainsKey(strlan))
 | 
			
		||||
                {
 | 
			
		||||
                    m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Config error. Compiler is unable to recognize language type \"" + strlan + "\" specified in \"AllowedCompilers\".");
 | 
			
		||||
                    m_scriptEngine.Log.Error("[Compiler]: Config error. Compiler is unable to recognize language type \"" + strlan + "\" specified in \"AllowedCompilers\".");
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
#if DEBUG
 | 
			
		||||
                    //m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: Config OK. Compiler recognized language type \"" + strlan + "\" specified in \"AllowedCompilers\".");
 | 
			
		||||
                    //m_scriptEngine.Log.Debug("[Compiler]: Config OK. Compiler recognized language type \"" + strlan + "\" specified in \"AllowedCompilers\".");
 | 
			
		||||
#endif
 | 
			
		||||
                }
 | 
			
		||||
                AllowedCompilers.Add(strlan, true);
 | 
			
		||||
            }
 | 
			
		||||
            if (AllowedCompilers.Count == 0)
 | 
			
		||||
                m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Config error. Compiler could not recognize any language in \"AllowedCompilers\". Scripts will not be executed!");
 | 
			
		||||
                m_scriptEngine.Log.Error("[Compiler]: Config error. Compiler could not recognize any language in \"AllowedCompilers\". Scripts will not be executed!");
 | 
			
		||||
 | 
			
		||||
            // Default language
 | 
			
		||||
            string defaultCompileLanguage = m_scriptEngine.ScriptConfigSource.GetString("DefaultCompileLanguage", "lsl").ToLower();
 | 
			
		||||
            string defaultCompileLanguage = m_scriptEngine.Config.GetString("DefaultCompileLanguage", "lsl").ToLower();
 | 
			
		||||
 | 
			
		||||
            // Is this language recognized at all?
 | 
			
		||||
            if (!LanguageMapping.ContainsKey(defaultCompileLanguage))
 | 
			
		||||
            {
 | 
			
		||||
                m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: " +
 | 
			
		||||
                m_scriptEngine.Log.Error("[Compiler]: " +
 | 
			
		||||
                                            "Config error. Default language \"" + defaultCompileLanguage + "\" specified in \"DefaultCompileLanguage\" is not recognized as a valid language. Changing default to: \"lsl\".");
 | 
			
		||||
                defaultCompileLanguage = "lsl";
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -153,13 +154,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            // Is this language in allow-list?
 | 
			
		||||
            if (!AllowedCompilers.ContainsKey(defaultCompileLanguage))
 | 
			
		||||
            {
 | 
			
		||||
                m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: " +
 | 
			
		||||
                m_scriptEngine.Log.Error("[Compiler]: " +
 | 
			
		||||
                                            "Config error. Default language \"" + defaultCompileLanguage + "\"specified in \"DefaultCompileLanguage\" is not in list of \"AllowedCompilers\". Scripts may not be executed!");
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
#if DEBUG
 | 
			
		||||
//                m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: " +
 | 
			
		||||
//                m_scriptEngine.Log.Debug("[Compiler]: " +
 | 
			
		||||
//                                            "Config OK. Default language \"" + defaultCompileLanguage + "\" specified in \"DefaultCompileLanguage\" is recognized as a valid language.");
 | 
			
		||||
#endif
 | 
			
		||||
                // LANGUAGE IS IN ALLOW-LIST
 | 
			
		||||
| 
						 | 
				
			
			@ -185,7 +186,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
                    m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception trying to create ScriptEngine directory \"" + ScriptEnginesPath + "\": " + ex.ToString());
 | 
			
		||||
                    m_scriptEngine.Log.Error("[Compiler]: Exception trying to create ScriptEngine directory \"" + ScriptEnginesPath + "\": " + ex.ToString());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -199,7 +200,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                }
 | 
			
		||||
                catch (Exception ex)
 | 
			
		||||
                {
 | 
			
		||||
                    m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception trying to create ScriptEngine directory \"" + Path.Combine(ScriptEnginesPath,
 | 
			
		||||
                    m_scriptEngine.Log.Error("[Compiler]: Exception trying to create ScriptEngine directory \"" + Path.Combine(ScriptEnginesPath,
 | 
			
		||||
                                            m_scriptEngine.World.RegionInfo.RegionID.ToString())+ "\": " + ex.ToString());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -207,7 +208,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            foreach (string file in Directory.GetFiles(Path.Combine(ScriptEnginesPath,
 | 
			
		||||
                                m_scriptEngine.World.RegionInfo.RegionID.ToString())))
 | 
			
		||||
            {
 | 
			
		||||
                //m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: FILE FOUND: " + file);
 | 
			
		||||
                //m_scriptEngine.Log.Error("[Compiler]: FILE FOUND: " + file);
 | 
			
		||||
 | 
			
		||||
                if (file.ToLower().StartsWith(FilePrefix + "_compiled_") ||
 | 
			
		||||
                    file.ToLower().StartsWith(FilePrefix + "_source_"))
 | 
			
		||||
| 
						 | 
				
			
			@ -218,7 +219,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                    }
 | 
			
		||||
                    catch (Exception ex)
 | 
			
		||||
                    {
 | 
			
		||||
                        m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception trying delete old script file \"" + file + "\": " + ex.ToString());
 | 
			
		||||
                        m_scriptEngine.Log.Error("[Compiler]: Exception trying delete old script file \"" + file + "\": " + ex.ToString());
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -233,10 +234,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        //    {
 | 
			
		||||
        //        case ".txt":
 | 
			
		||||
        //        case ".lsl":
 | 
			
		||||
        //            Common.ScriptEngineBase.Common.SendToDebug("Source code is LSL, converting to CS");
 | 
			
		||||
        //            Common.ScriptEngineBase.Shared.SendToDebug("Source code is LSL, converting to CS");
 | 
			
		||||
        //            return CompileFromLSLText(File.ReadAllText(LSOFileName));
 | 
			
		||||
        //        case ".cs":
 | 
			
		||||
        //            Common.ScriptEngineBase.Common.SendToDebug("Source code is CS");
 | 
			
		||||
        //            Common.ScriptEngineBase.Shared.SendToDebug("Source code is CS");
 | 
			
		||||
        //            return CompileFromCSText(File.ReadAllText(LSOFileName));
 | 
			
		||||
        //        default:
 | 
			
		||||
        //            throw new Exception("Unknown script type.");
 | 
			
		||||
| 
						 | 
				
			
			@ -258,7 +259,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
            if (File.Exists(OutFile))
 | 
			
		||||
            {
 | 
			
		||||
                m_scriptEngine.Log.DebugFormat("[XEngine] Returning existing assembly for {0}", asset);
 | 
			
		||||
                m_scriptEngine.Log.DebugFormat("[Compiler] Returning existing assembly for {0}", asset);
 | 
			
		||||
                return OutFile;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -359,9 +360,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        private static string CreateJSCompilerScript(string compileScript)
 | 
			
		||||
        {
 | 
			
		||||
            compileScript = String.Empty +
 | 
			
		||||
                "import OpenSim.Region.ScriptEngine.XEngine.Script; import System.Collections.Generic;\r\n" +
 | 
			
		||||
                "import OpenSim.Region.ScriptEngine.Shared; import System.Collections.Generic;\r\n" +
 | 
			
		||||
                "package SecondLife {\r\n" +
 | 
			
		||||
                "class Script extends OpenSim.Region.ScriptEngine.XEngine.Script.BuiltIn_Commands_BaseClass { \r\n" +
 | 
			
		||||
                "class Script extends OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass { \r\n" +
 | 
			
		||||
                compileScript +
 | 
			
		||||
                "} }\r\n";
 | 
			
		||||
            return compileScript;
 | 
			
		||||
| 
						 | 
				
			
			@ -370,9 +371,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        private static string CreateCSCompilerScript(string compileScript)
 | 
			
		||||
        {
 | 
			
		||||
            compileScript = String.Empty +
 | 
			
		||||
                "using OpenSim.Region.ScriptEngine.XEngine.Script; using System.Collections.Generic;\r\n" +
 | 
			
		||||
                "using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;\r\n" +
 | 
			
		||||
                String.Empty + "namespace SecondLife { " +
 | 
			
		||||
                String.Empty + "public class Script : OpenSim.Region.ScriptEngine.XEngine.Script.BuiltIn_Commands_BaseClass { \r\n" +
 | 
			
		||||
                String.Empty + "public class Script : OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass { \r\n" +
 | 
			
		||||
                @"public Script() { } " +
 | 
			
		||||
                compileScript +
 | 
			
		||||
                "} }\r\n";
 | 
			
		||||
| 
						 | 
				
			
			@ -382,9 +383,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        private static string CreateVBCompilerScript(string compileScript)
 | 
			
		||||
        {
 | 
			
		||||
            compileScript = String.Empty +
 | 
			
		||||
                "Imports OpenSim.Region.ScriptEngine.XEngine.Script: Imports System.Collections.Generic: " +
 | 
			
		||||
                "Imports OpenSim.Region.ScriptEngine.Shared: Imports System.Collections.Generic: " +
 | 
			
		||||
                String.Empty + "NameSpace SecondLife:" +
 | 
			
		||||
                String.Empty + "Public Class Script: Inherits OpenSim.Region.ScriptEngine.XEngine.Script.BuiltIn_Commands_BaseClass: " +
 | 
			
		||||
                String.Empty + "Public Class Script: Inherits OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass: " +
 | 
			
		||||
                "\r\nPublic Sub New()\r\nEnd Sub: " +
 | 
			
		||||
                compileScript +
 | 
			
		||||
                ":End Class :End Namespace\r\n";
 | 
			
		||||
| 
						 | 
				
			
			@ -406,7 +407,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                                              m_scriptEngine.World.RegionInfo.RegionID.ToString(),
 | 
			
		||||
                                              FilePrefix + "_compiled_" + asset + ".dll"));
 | 
			
		||||
#if DEBUG
 | 
			
		||||
//            m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: Starting compile of \"" + OutFile + "\".");
 | 
			
		||||
//            m_scriptEngine.Log.Debug("[Compiler]: Starting compile of \"" + OutFile + "\".");
 | 
			
		||||
#endif
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -414,7 +415,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            }
 | 
			
		||||
            catch (Exception e) // NOTLEGIT - Should be just catching FileIOException
 | 
			
		||||
            {
 | 
			
		||||
                //m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Unable to delete old existring script-file before writing new. Compile aborted: " + e.ToString());
 | 
			
		||||
                //m_scriptEngine.Log.Error("[Compiler]: Unable to delete old existring script-file before writing new. Compile aborted: " + e.ToString());
 | 
			
		||||
                throw new Exception("Unable to delete old existring script-file before writing new. Compile aborted: " + e.ToString());
 | 
			
		||||
            }
 | 
			
		||||
            //string OutFile = Path.Combine("ScriptEngines", "SecondLife.Script.dll");
 | 
			
		||||
| 
						 | 
				
			
			@ -432,7 +433,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                }
 | 
			
		||||
                catch (Exception ex) // NOTLEGIT - Should be just catching FileIOException
 | 
			
		||||
                {
 | 
			
		||||
                    m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception while trying to write script source to file \"" + srcFileName + "\": " + ex.ToString());
 | 
			
		||||
                    m_scriptEngine.Log.Error("[Compiler]: Exception while trying to write script source to file \"" + srcFileName + "\": " + ex.ToString());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -451,10 +452,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            string rootPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
 | 
			
		||||
            string rootPathSE = Path.GetDirectoryName(GetType().Assembly.Location);
 | 
			
		||||
            //Console.WriteLine("Assembly location: " + rootPath);
 | 
			
		||||
            parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.XEngine.Script.dll"));
 | 
			
		||||
//            parameters.ReferencedAssemblies.Add(Path.Combine(rootPathSE, "OpenSim.Region.ScriptEngine.XEngine.dll"));
 | 
			
		||||
            parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.dll"));
 | 
			
		||||
            parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.Api.Runtime.dll"));
 | 
			
		||||
 | 
			
		||||
            //parameters.ReferencedAssemblies.Add("OpenSim.Region.Environment");
 | 
			
		||||
            parameters.GenerateExecutable = false;
 | 
			
		||||
            parameters.OutputAssembly = OutFile;
 | 
			
		||||
            parameters.IncludeDebugInformation = CompileWithDebugInformation;
 | 
			
		||||
| 
						 | 
				
			
			@ -508,7 +508,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                errtext += "No compile error. But not able to locate compiled file.";
 | 
			
		||||
                throw new Exception(errtext);
 | 
			
		||||
            }
 | 
			
		||||
            m_scriptEngine.Log.DebugFormat("[XEngine] Compiled new assembly for {0}", asset);
 | 
			
		||||
            m_scriptEngine.Log.DebugFormat("[Compiler] Compiled new assembly for {0}", asset);
 | 
			
		||||
            return OutFile;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +30,7 @@ using System;
 | 
			
		|||
using System.Collections.Generic;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
 | 
			
		||||
{
 | 
			
		||||
    public class LSL2CSConverter
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			@ -355,13 +355,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
            //System.Console.WriteLine(Script);
 | 
			
		||||
            Return = String.Empty;// +
 | 
			
		||||
                     //"using OpenSim.Region.ScriptEngine.Common; using System.Collections.Generic;";
 | 
			
		||||
                     //"using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;";
 | 
			
		||||
 | 
			
		||||
            //Return += String.Empty +
 | 
			
		||||
            //          "namespace SecondLife { ";
 | 
			
		||||
            //Return += String.Empty +
 | 
			
		||||
            //          //"[Serializable] " +
 | 
			
		||||
            //          "public class Script : OpenSim.Region.ScriptEngine.Common.LSL_BaseClass { ";
 | 
			
		||||
            //          "public class Script : OpenSim.Region.ScriptEngine.Shared.LSL_BaseClass { ";
 | 
			
		||||
            //Return += @"public Script() { } ";
 | 
			
		||||
            Return += Script;
 | 
			
		||||
            //Return += "} }\r\n";
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,108 @@
 | 
			
		|||
/*
 | 
			
		||||
* Copyright (c) Contributors, http://opensimulator.org/
 | 
			
		||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
 | 
			
		||||
*
 | 
			
		||||
* Redistribution and use in source and binary forms, with or without
 | 
			
		||||
* modification, are permitted provided that the following conditions are met:
 | 
			
		||||
*     * Redistributions of source code must retain the above copyright
 | 
			
		||||
*       notice, this list of conditions and the following disclaimer.
 | 
			
		||||
*     * Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
*       notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
*       documentation and/or other materials provided with the distribution.
 | 
			
		||||
*     * Neither the name of the OpenSim Project nor the
 | 
			
		||||
*       names of its contributors may be used to endorse or promote products
 | 
			
		||||
*       derived from this software without specific prior written permission.
 | 
			
		||||
*
 | 
			
		||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY
 | 
			
		||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
			
		||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
 | 
			
		||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
			
		||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 | 
			
		||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
*
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.YieldProlog;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
 | 
			
		||||
{
 | 
			
		||||
    public class YP2CSConverter
 | 
			
		||||
    {
 | 
			
		||||
        public YP2CSConverter()
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string Convert(string Script)
 | 
			
		||||
        {
 | 
			
		||||
            string CS_code = GenCode(Script);
 | 
			
		||||
            return CS_code;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        static string GenCode(string myCode)
 | 
			
		||||
        {
 | 
			
		||||
            Variable TermList = new Variable();
 | 
			
		||||
            Variable FunctionCode = new Variable();
 | 
			
		||||
 | 
			
		||||
            string CS_code = "";
 | 
			
		||||
 | 
			
		||||
            int cs_pointer = myCode.IndexOf("\n//cs");
 | 
			
		||||
            if (cs_pointer > 0)
 | 
			
		||||
            {
 | 
			
		||||
                CS_code = myCode.Substring(cs_pointer); // CS code comes after
 | 
			
		||||
                myCode = myCode.Substring(0, cs_pointer);
 | 
			
		||||
            }
 | 
			
		||||
            myCode.Replace("//yp", "%YPCode");
 | 
			
		||||
            
 | 
			
		||||
            StringWriter myCS_SW = new StringWriter();
 | 
			
		||||
            StringReader myCode_SR = new StringReader(" yp_nop_header_nop. \n "+myCode + "\n");
 | 
			
		||||
 | 
			
		||||
            YP.see(myCode_SR);
 | 
			
		||||
            YP.tell(myCS_SW);
 | 
			
		||||
 | 
			
		||||
            //Console.WriteLine("Mycode\n ===================================\n" + myCode+"\n");
 | 
			
		||||
            foreach (bool l1 in Parser.parseInput(TermList))
 | 
			
		||||
            {
 | 
			
		||||
                foreach (bool l2 in YPCompiler.makeFunctionPseudoCode(TermList, FunctionCode))
 | 
			
		||||
                {
 | 
			
		||||
                    ListPair VFC = new ListPair(FunctionCode, new Variable());
 | 
			
		||||
                    //Console.WriteLine("-------------------------")
 | 
			
		||||
                    //Console.WriteLine(FunctionCode.ToString())
 | 
			
		||||
                    //Console.WriteLine("-------------------------")
 | 
			
		||||
                    YPCompiler.convertFunctionCSharp(FunctionCode);
 | 
			
		||||
                    //YPCompiler.convertStringCodesCSharp(VFC);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            YP.seen();
 | 
			
		||||
            myCS_SW.Close();
 | 
			
		||||
            YP.told();
 | 
			
		||||
            StringBuilder bu = myCS_SW.GetStringBuilder();
 | 
			
		||||
            string finalcode = "//YPEncoded\n" + bu.ToString();
 | 
			
		||||
            // FIX script events (we're in the same script)
 | 
			
		||||
            // 'YP.script_event(Atom.a(@"sayit"),' ==> 'sayit('
 | 
			
		||||
            finalcode = Regex.Replace(finalcode,
 | 
			
		||||
                                        @"YP.script_event\(Atom.a\(\@\""(.*?)""\)\,",
 | 
			
		||||
                                        @"this.$1(",
 | 
			
		||||
                                        RegexOptions.Compiled | RegexOptions.Singleline);
 | 
			
		||||
            finalcode = Regex.Replace(finalcode,
 | 
			
		||||
                            @" static ",
 | 
			
		||||
                            @" ",
 | 
			
		||||
                            RegexOptions.Compiled | RegexOptions.Singleline);
 | 
			
		||||
 | 
			
		||||
            finalcode = CS_code+"\n\r"+ finalcode;
 | 
			
		||||
            finalcode = Regex.Replace(finalcode,
 | 
			
		||||
                                        @"PrologCallback",
 | 
			
		||||
                                        @"public IEnumerable<bool> ",
 | 
			
		||||
                                        RegexOptions.Compiled | RegexOptions.Singleline);
 | 
			
		||||
            return finalcode;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,121 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Threading;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using libsecondlife;
 | 
			
		||||
using OpenSim.Framework;
 | 
			
		||||
using OpenSim.Region.Environment;
 | 
			
		||||
using OpenSim.Region.Environment.Scenes;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared
 | 
			
		||||
{
 | 
			
		||||
    public class DetectParams
 | 
			
		||||
    {
 | 
			
		||||
        public DetectParams()
 | 
			
		||||
        {
 | 
			
		||||
            Key = LLUUID.Zero;
 | 
			
		||||
            OffsetPos = new LSL_Types.Vector3();
 | 
			
		||||
            LinkNum = 0;
 | 
			
		||||
            Group = LLUUID.Zero;
 | 
			
		||||
            Name = String.Empty;
 | 
			
		||||
            Owner = LLUUID.Zero;
 | 
			
		||||
            Position = new LSL_Types.Vector3();
 | 
			
		||||
            Rotation = new LSL_Types.Quaternion();
 | 
			
		||||
            Type = 0;
 | 
			
		||||
            Velocity = new LSL_Types.Vector3();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public LLUUID Key;
 | 
			
		||||
        public LSL_Types.Vector3 OffsetPos;
 | 
			
		||||
        public int LinkNum;
 | 
			
		||||
        public LLUUID Group;
 | 
			
		||||
        public string Name;
 | 
			
		||||
        public LLUUID Owner;
 | 
			
		||||
        public LSL_Types.Vector3 Position;
 | 
			
		||||
        public LSL_Types.Quaternion Rotation;
 | 
			
		||||
        public int Type;
 | 
			
		||||
        public LSL_Types.Vector3 Velocity;
 | 
			
		||||
 | 
			
		||||
        public void Populate(Scene scene)
 | 
			
		||||
        {
 | 
			
		||||
            SceneObjectPart part = scene.GetSceneObjectPart(Key);
 | 
			
		||||
            if (part == null) // Avatar, maybe?
 | 
			
		||||
            {
 | 
			
		||||
                ScenePresence presence = scene.GetScenePresence(Key);
 | 
			
		||||
                if (presence == null)
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
                Name = presence.Firstname + " " + presence.Lastname;
 | 
			
		||||
                Owner = Key;
 | 
			
		||||
                Position = new LSL_Types.Vector3(
 | 
			
		||||
                        presence.AbsolutePosition.X,
 | 
			
		||||
                        presence.AbsolutePosition.X,
 | 
			
		||||
                        presence.AbsolutePosition.Z);
 | 
			
		||||
                Rotation = new LSL_Types.Quaternion(
 | 
			
		||||
                        presence.Rotation.x,
 | 
			
		||||
                        presence.Rotation.y,
 | 
			
		||||
                        presence.Rotation.z,
 | 
			
		||||
                        presence.Rotation.w);
 | 
			
		||||
                Velocity = new LSL_Types.Vector3(
 | 
			
		||||
                        presence.Velocity.X,
 | 
			
		||||
                        presence.Velocity.X,
 | 
			
		||||
                        presence.Velocity.Z);
 | 
			
		||||
 | 
			
		||||
                Type = 0x01; // Avatar
 | 
			
		||||
                if (presence.Velocity != LLVector3.Zero)
 | 
			
		||||
                    Type |= 0x02; // Active
 | 
			
		||||
 | 
			
		||||
                Group = presence.ControllingClient.ActiveGroupId;
 | 
			
		||||
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            part=part.ParentGroup.RootPart; // We detect objects only
 | 
			
		||||
 | 
			
		||||
            LinkNum = 0; // Not relevant
 | 
			
		||||
 | 
			
		||||
            Group = part.GroupID;
 | 
			
		||||
            Name = part.Name;
 | 
			
		||||
            Owner = part.OwnerID;
 | 
			
		||||
            if (part.Velocity == LLVector3.Zero)
 | 
			
		||||
                Type = 0x04; // Passive
 | 
			
		||||
            else
 | 
			
		||||
                Type = 0x02; // Passive
 | 
			
		||||
 | 
			
		||||
            foreach (SceneObjectPart p in part.ParentGroup.Children.Values)
 | 
			
		||||
            {
 | 
			
		||||
                if (p.ContainsScripts())
 | 
			
		||||
                {
 | 
			
		||||
                    Type |= 0x08; // Scripted
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Position = new LSL_Types.Vector3(part.AbsolutePosition.X,
 | 
			
		||||
                                             part.AbsolutePosition.Y,
 | 
			
		||||
                                             part.AbsolutePosition.Z);
 | 
			
		||||
 | 
			
		||||
            LLQuaternion wr = part.GetWorldRotation();
 | 
			
		||||
            Rotation = new LSL_Types.Quaternion(wr.X, wr.Y, wr.Z, wr.W);
 | 
			
		||||
 | 
			
		||||
            Velocity = new LSL_Types.Vector3(part.Velocity.X,
 | 
			
		||||
                                             part.Velocity.Y,
 | 
			
		||||
                                             part.Velocity.Z);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class EventParams
 | 
			
		||||
    {
 | 
			
		||||
        public EventParams(string eventName, Object[] eventParams, DetectParams[] detectParams)
 | 
			
		||||
        {
 | 
			
		||||
            EventName=eventName;
 | 
			
		||||
            Params=eventParams;
 | 
			
		||||
            DetectParams=detectParams;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string EventName;
 | 
			
		||||
        public Object[] Params;
 | 
			
		||||
        public DetectParams[] DetectParams;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ using System;
 | 
			
		|||
using System.Collections;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.Shared
 | 
			
		||||
{
 | 
			
		||||
    [Serializable]
 | 
			
		||||
    public partial class LSL_Types
 | 
			
		||||
| 
						 | 
				
			
			@ -1474,6 +1474,19 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
                return f1.value != f2.value;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            public override bool Equals(Object o)
 | 
			
		||||
            {
 | 
			
		||||
                if(!(o is LSLFloat))
 | 
			
		||||
                    return false;
 | 
			
		||||
 | 
			
		||||
                return value == ((LSLFloat)o).value;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            public override int GetHashCode()
 | 
			
		||||
            {
 | 
			
		||||
                return (int)value;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            static public LSLFloat operator ++(LSLFloat f)
 | 
			
		||||
            {
 | 
			
		||||
                f.value++;
 | 
			
		||||
| 
						 | 
				
			
			@ -1491,12 +1504,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
 | 
			
		|||
                return f.value;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            static public explicit operator LSLString(LSLFloat f)
 | 
			
		||||
            {
 | 
			
		||||
                string v = String.Format("{0:0.000000}", f.value);
 | 
			
		||||
                return new LSLString(v);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            #endregion
 | 
			
		||||
 | 
			
		||||
            #region Overriders
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,8 @@ using OpenSim.Framework;
 | 
			
		|||
using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney;
 | 
			
		||||
using OpenSim.Region.Environment.Scenes;
 | 
			
		||||
using OpenSim.Region.Environment.Interfaces;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.XEngine.Script;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
using Axiom.Math;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		||||
| 
						 | 
				
			
			@ -83,8 +84,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                IClientAPI remoteClient)
 | 
			
		||||
        {
 | 
			
		||||
            // Add to queue for all scripts in ObjectID object
 | 
			
		||||
            XDetectParams[] det = new XDetectParams[1];
 | 
			
		||||
            det[0] = new XDetectParams();
 | 
			
		||||
            DetectParams[] det = new DetectParams[1];
 | 
			
		||||
            det[0] = new DetectParams();
 | 
			
		||||
            det[0].Key = remoteClient.AgentId;
 | 
			
		||||
            det[0].Populate(myScriptEngine.World);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +98,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            if (part.ParentGroup.Children.Count > 0)
 | 
			
		||||
                det[0].LinkNum = part.LinkNum + 1;
 | 
			
		||||
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "touch_start", new Object[] { new LSL_Types.LSLInteger(1) },
 | 
			
		||||
                    det));
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -106,8 +107,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                IClientAPI remoteClient)
 | 
			
		||||
        {
 | 
			
		||||
            // Add to queue for all scripts in ObjectID object
 | 
			
		||||
            XDetectParams[] det = new XDetectParams[1];
 | 
			
		||||
            det[0] = new XDetectParams();
 | 
			
		||||
            DetectParams[] det = new DetectParams[1];
 | 
			
		||||
            det[0] = new DetectParams();
 | 
			
		||||
            det[0].Key = remoteClient.AgentId;
 | 
			
		||||
            det[0].Populate(myScriptEngine.World);
 | 
			
		||||
            det[0].OffsetPos = new LSL_Types.Vector3(offsetPos.X,
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +124,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            if (part.ParentGroup.Children.Count > 0)
 | 
			
		||||
                det[0].LinkNum = part.LinkNum + 1;
 | 
			
		||||
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "touch", new Object[] { new LSL_Types.LSLInteger(1) },
 | 
			
		||||
                    det));
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -131,8 +132,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public void touch_end(uint localID, IClientAPI remoteClient)
 | 
			
		||||
        {
 | 
			
		||||
            // Add to queue for all scripts in ObjectID object
 | 
			
		||||
            XDetectParams[] det = new XDetectParams[1];
 | 
			
		||||
            det[0] = new XDetectParams();
 | 
			
		||||
            DetectParams[] det = new DetectParams[1];
 | 
			
		||||
            det[0] = new DetectParams();
 | 
			
		||||
            det[0].Key = remoteClient.AgentId;
 | 
			
		||||
            det[0].Populate(myScriptEngine.World);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +146,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            if (part.ParentGroup.Children.Count > 0)
 | 
			
		||||
                det[0].LinkNum = part.LinkNum + 1;
 | 
			
		||||
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "touch_end", new Object[] { new LSL_Types.LSLInteger(1) },
 | 
			
		||||
                    det));
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -153,9 +154,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public void changed(uint localID, uint change)
 | 
			
		||||
        {
 | 
			
		||||
            // Add to queue for all scripts in localID, Object pass change.
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "changed",new object[] { new LSL_Types.LSLInteger(change) },
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // state_entry: not processed here
 | 
			
		||||
| 
						 | 
				
			
			@ -163,27 +164,27 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public void money(uint localID, LLUUID agentID, int amount)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "money", new object[] {
 | 
			
		||||
                    new LSL_Types.LSLString(agentID.ToString()),
 | 
			
		||||
                    new LSL_Types.LSLInteger(amount) },
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void collision_start(uint localID, ColliderArgs col)
 | 
			
		||||
        {
 | 
			
		||||
            // Add to queue for all scripts in ObjectID object
 | 
			
		||||
            List<XDetectParams> det = new List<XDetectParams>();
 | 
			
		||||
            List<DetectParams> det = new List<DetectParams>();
 | 
			
		||||
 | 
			
		||||
            foreach (DetectedObject detobj in col.Colliders)
 | 
			
		||||
            {
 | 
			
		||||
                XDetectParams d = new XDetectParams();
 | 
			
		||||
                DetectParams d = new DetectParams();
 | 
			
		||||
                d.Key =detobj.keyUUID;
 | 
			
		||||
                d.Populate(myScriptEngine.World);
 | 
			
		||||
                det.Add(d);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "collision_start",
 | 
			
		||||
                    new Object[] { new LSL_Types.LSLInteger(1) },
 | 
			
		||||
                    det.ToArray()));
 | 
			
		||||
| 
						 | 
				
			
			@ -192,17 +193,17 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public void collision(uint localID, ColliderArgs col)
 | 
			
		||||
        {
 | 
			
		||||
            // Add to queue for all scripts in ObjectID object
 | 
			
		||||
            List<XDetectParams> det = new List<XDetectParams>();
 | 
			
		||||
            List<DetectParams> det = new List<DetectParams>();
 | 
			
		||||
 | 
			
		||||
            foreach (DetectedObject detobj in col.Colliders)
 | 
			
		||||
            {
 | 
			
		||||
                XDetectParams d = new XDetectParams();
 | 
			
		||||
                DetectParams d = new DetectParams();
 | 
			
		||||
                d.Key =detobj.keyUUID;
 | 
			
		||||
                d.Populate(myScriptEngine.World);
 | 
			
		||||
                det.Add(d);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "collision", new Object[] { new LSL_Types.LSLInteger(1) },
 | 
			
		||||
                    det.ToArray()));
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -210,17 +211,17 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public void collision_end(uint localID, ColliderArgs col)
 | 
			
		||||
        {
 | 
			
		||||
            // Add to queue for all scripts in ObjectID object
 | 
			
		||||
            List<XDetectParams> det = new List<XDetectParams>();
 | 
			
		||||
            List<DetectParams> det = new List<DetectParams>();
 | 
			
		||||
 | 
			
		||||
            foreach (DetectedObject detobj in col.Colliders)
 | 
			
		||||
            {
 | 
			
		||||
                XDetectParams d = new XDetectParams();
 | 
			
		||||
                DetectParams d = new DetectParams();
 | 
			
		||||
                d.Key =detobj.keyUUID;
 | 
			
		||||
                d.Populate(myScriptEngine.World);
 | 
			
		||||
                det.Add(d);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "collision_end",
 | 
			
		||||
                    new Object[] { new LSL_Types.LSLInteger(1) },
 | 
			
		||||
                    det.ToArray()));
 | 
			
		||||
| 
						 | 
				
			
			@ -228,26 +229,26 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public void land_collision_start(uint localID, LLUUID itemID)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "land_collision_start",
 | 
			
		||||
                    new object[0],
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void land_collision(uint localID, LLUUID itemID)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "land_collision",
 | 
			
		||||
                    new object[0],
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void land_collision_end(uint localID, LLUUID itemID)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "land_collision_end",
 | 
			
		||||
                    new object[0],
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // timer: not handled here
 | 
			
		||||
| 
						 | 
				
			
			@ -255,75 +256,75 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public void on_rez(uint localID, LLUUID itemID, int startParam)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "on_rez",new object[] {
 | 
			
		||||
                    new LSL_Types.LSLInteger(startParam)},
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void control(uint localID, LLUUID itemID, LLUUID agentID, uint held, uint change)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "control",new object[] {
 | 
			
		||||
                    new LSL_Types.LSLString(agentID.ToString()),
 | 
			
		||||
                    new LSL_Types.LSLInteger(held),
 | 
			
		||||
                    new LSL_Types.LSLInteger(change)},
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void email(uint localID, LLUUID itemID, string timeSent,
 | 
			
		||||
                string address, string subject, string message, int numLeft)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "email",new object[] {
 | 
			
		||||
                    new LSL_Types.LSLString(timeSent),
 | 
			
		||||
                    new LSL_Types.LSLString(address),
 | 
			
		||||
                    new LSL_Types.LSLString(subject),
 | 
			
		||||
                    new LSL_Types.LSLString(message),
 | 
			
		||||
                    new LSL_Types.LSLInteger(numLeft)},
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void at_target(uint localID, uint handle, LLVector3 targetpos,
 | 
			
		||||
                LLVector3 atpos)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "at_target", new object[] {
 | 
			
		||||
                    new LSL_Types.LSLInteger(handle),
 | 
			
		||||
                    new LSL_Types.Vector3(targetpos.X,targetpos.Y,targetpos.Z),
 | 
			
		||||
                    new LSL_Types.Vector3(atpos.X,atpos.Y,atpos.Z) },
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void not_at_target(uint localID)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "not_at_target",new object[0],
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void at_rot_target(uint localID, LLUUID itemID)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "at_rot_target",new object[0],
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void not_at_rot_target(uint localID, LLUUID itemID)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "not_at_rot_target",new object[0],
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // run_time_permissions: not handled here
 | 
			
		||||
 | 
			
		||||
        public void attach(uint localID, LLUUID itemID, LLUUID avatar)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "attach",new object[] {
 | 
			
		||||
                    new LSL_Types.LSLString(avatar.ToString()) },
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // dataserver: not handled here
 | 
			
		||||
| 
						 | 
				
			
			@ -331,16 +332,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public void moving_start(uint localID, LLUUID itemID)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "moving_start",new object[0],
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void moving_end(uint localID, LLUUID itemID)
 | 
			
		||||
        {
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new XEventParams(
 | 
			
		||||
            myScriptEngine.PostObjectEvent(localID, new EventParams(
 | 
			
		||||
                    "moving_end",new object[0],
 | 
			
		||||
                    new XDetectParams[0]));
 | 
			
		||||
                    new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // object_rez: not handled here
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,8 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.XEngine.Script;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -44,15 +45,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        protected override scriptEvents DoGetStateEventFlags()
 | 
			
		||||
        protected override scriptEvents DoGetStateEventFlags(string state)
 | 
			
		||||
        {
 | 
			
		||||
            //Console.WriteLine("Get event flags for " + m_Script.State);
 | 
			
		||||
            //Console.WriteLine("Get event flags for " + state);
 | 
			
		||||
 | 
			
		||||
            // Check to see if we've already computed the flags for this state
 | 
			
		||||
            scriptEvents eventFlags = scriptEvents.None;
 | 
			
		||||
            if (m_stateEvents.ContainsKey(m_Script.State))
 | 
			
		||||
            if (m_stateEvents.ContainsKey(state))
 | 
			
		||||
            {
 | 
			
		||||
                m_stateEvents.TryGetValue(m_Script.State, out eventFlags);
 | 
			
		||||
                m_stateEvents.TryGetValue(state, out eventFlags);
 | 
			
		||||
                return eventFlags;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -61,7 +62,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            // Fill in the events for this state, cache the results in the map
 | 
			
		||||
            foreach (KeyValuePair<string, scriptEvents> kvp in m_eventFlagsMap)
 | 
			
		||||
            {
 | 
			
		||||
                string evname = m_Script.State + "_event_" + kvp.Key;
 | 
			
		||||
                string evname = state + "_event_" + kvp.Key;
 | 
			
		||||
                //Console.WriteLine("Trying event "+evname);
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -80,18 +81,18 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
            // Save the flags we just computed and return the result
 | 
			
		||||
            if (eventFlags != 0)
 | 
			
		||||
                m_stateEvents.Add(m_Script.State, eventFlags);
 | 
			
		||||
                m_stateEvents.Add(state, eventFlags);
 | 
			
		||||
 | 
			
		||||
            //Console.WriteLine("Returning {0:x}", eventFlags);
 | 
			
		||||
            return (eventFlags);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void DoExecuteEvent(string FunctionName, object[] args)
 | 
			
		||||
        protected override void DoExecuteEvent(string state, string FunctionName, object[] args)
 | 
			
		||||
        {
 | 
			
		||||
            // IMPORTANT: Types and MemberInfo-derived objects require a LOT of memory.
 | 
			
		||||
            // Instead use RuntimeTypeHandle, RuntimeFieldHandle and RunTimeHandle (IntPtr) instead!
 | 
			
		||||
 | 
			
		||||
            string EventName = m_Script.State + "_event_" + FunctionName;
 | 
			
		||||
            string EventName = state + "_event_" + FunctionName;
 | 
			
		||||
 | 
			
		||||
//#if DEBUG
 | 
			
		||||
//            Console.WriteLine("ScriptEngine: Script event function name: " + EventName);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,9 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Runtime.Remoting.Lifetime;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.XEngine.Script;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -117,23 +119,23 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        /// <param name="FunctionName">Name of function to execute</param>
 | 
			
		||||
        /// <param name="args">Arguments to pass to function</param>
 | 
			
		||||
        public void ExecuteEvent(string FunctionName, object[] args)
 | 
			
		||||
        public void ExecuteEvent(string state, string FunctionName, object[] args)
 | 
			
		||||
        {
 | 
			
		||||
            DoExecuteEvent(FunctionName, args);
 | 
			
		||||
            DoExecuteEvent(state, FunctionName, args);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected abstract void DoExecuteEvent(string FunctionName, object[] args);
 | 
			
		||||
        protected abstract void DoExecuteEvent(string state, string FunctionName, object[] args);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        ///  Compute the events handled by the current state of the script
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>state mask</returns>
 | 
			
		||||
        public scriptEvents GetStateEventFlags()
 | 
			
		||||
        public scriptEvents GetStateEventFlags(string state)
 | 
			
		||||
        {
 | 
			
		||||
            return DoGetStateEventFlags();
 | 
			
		||||
            return DoGetStateEventFlags(state);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected abstract scriptEvents DoGetStateEventFlags();
 | 
			
		||||
        protected abstract scriptEvents DoGetStateEventFlags(string state);
 | 
			
		||||
 | 
			
		||||
        protected void initEventFlags()
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,11 +14,15 @@ using OpenSim.Framework;
 | 
			
		|||
using OpenSim.Region.Environment;
 | 
			
		||||
using OpenSim.Region.Environment.Scenes;
 | 
			
		||||
using OpenSim.Region.Environment.Interfaces;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.XEngine.Script;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.Api;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Shared.CodeTools;
 | 
			
		||||
using OpenSim.Region.ScriptEngine.Interfaces;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		||||
{
 | 
			
		||||
    public class XEngine : IRegionModule
 | 
			
		||||
    public class XEngine : IRegionModule, IScriptEngine
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -30,10 +34,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        private EventManager m_EventManager;
 | 
			
		||||
        private int m_EventLimit;
 | 
			
		||||
        private bool m_KillTimedOutScripts;
 | 
			
		||||
        public AsyncCommandManager m_AsyncCommands;
 | 
			
		||||
 | 
			
		||||
        private static List<XEngine> m_ScriptEngines =
 | 
			
		||||
                new List<XEngine>();
 | 
			
		||||
        public AsyncCommandManager m_ASYNCLSLCommandManager;
 | 
			
		||||
 | 
			
		||||
        // Maps the local id to the script inventory items in it
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -87,11 +91,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            string Script;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IConfig ScriptConfigSource
 | 
			
		||||
        public IConfig Config
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_ScriptConfig; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Object AsyncCommands
 | 
			
		||||
        {
 | 
			
		||||
            get { return (Object)m_AsyncCommands; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // IRegionModule functions
 | 
			
		||||
        //
 | 
			
		||||
| 
						 | 
				
			
			@ -155,7 +164,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            m_EventManager = new EventManager(this);
 | 
			
		||||
            m_ASYNCLSLCommandManager = new AsyncCommandManager(this);
 | 
			
		||||
 | 
			
		||||
            StartEngine(minThreads, maxThreads, idleTimeout, prio,
 | 
			
		||||
                    maxScriptQueue, stackSize);
 | 
			
		||||
| 
						 | 
				
			
			@ -166,6 +174,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            m_Scene.EventManager.OnRemoveScript += OnRemoveScript;
 | 
			
		||||
            m_Scene.EventManager.OnScriptReset += OnScriptReset;
 | 
			
		||||
 | 
			
		||||
            m_AsyncCommands = new AsyncCommandManager(this);
 | 
			
		||||
 | 
			
		||||
            if (sleepTime > 0)
 | 
			
		||||
            {
 | 
			
		||||
                m_ThreadPool.QueueWorkItem(new WorkItemCallback(
 | 
			
		||||
| 
						 | 
				
			
			@ -418,7 +428,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                if (!m_Scripts.ContainsKey(itemID))
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
                m_ASYNCLSLCommandManager.RemoveScript(localID, itemID);
 | 
			
		||||
                m_AsyncCommands.RemoveScript(localID, itemID);
 | 
			
		||||
 | 
			
		||||
                XScriptInstance instance=m_Scripts[itemID];
 | 
			
		||||
                m_Scripts.Remove(itemID);
 | 
			
		||||
| 
						 | 
				
			
			@ -552,7 +562,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        //
 | 
			
		||||
        // Post event to an entire prim
 | 
			
		||||
        //
 | 
			
		||||
        public bool PostObjectEvent(uint localID, XEventParams p)
 | 
			
		||||
        public bool PostObjectEvent(uint localID, EventParams p)
 | 
			
		||||
        {
 | 
			
		||||
            bool result = false;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -577,7 +587,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        //
 | 
			
		||||
        // Post an event to a single script
 | 
			
		||||
        //
 | 
			
		||||
        public bool PostScriptEvent(LLUUID itemID, XEventParams p)
 | 
			
		||||
        public bool PostScriptEvent(LLUUID itemID, EventParams p)
 | 
			
		||||
        {
 | 
			
		||||
            if (m_Scripts.ContainsKey(itemID))
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -654,7 +664,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                instance.ResetScript();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public XDetectParams GetDetectParams(LLUUID itemID, int idx)
 | 
			
		||||
        public DetectParams GetDetectParams(LLUUID itemID, int idx)
 | 
			
		||||
        {
 | 
			
		||||
            XScriptInstance instance = GetInstance(itemID);
 | 
			
		||||
            if (instance != null)
 | 
			
		||||
| 
						 | 
				
			
			@ -669,115 +679,21 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                return instance.GetDetectID(idx);
 | 
			
		||||
            return LLUUID.Zero;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class XDetectParams
 | 
			
		||||
    {
 | 
			
		||||
        public XDetectParams()
 | 
			
		||||
        public void SetState(LLUUID itemID, string newState)
 | 
			
		||||
        {
 | 
			
		||||
            Key = LLUUID.Zero;
 | 
			
		||||
            OffsetPos = new LSL_Types.Vector3();
 | 
			
		||||
            LinkNum = 0;
 | 
			
		||||
            Group = LLUUID.Zero;
 | 
			
		||||
            Name = String.Empty;
 | 
			
		||||
            Owner = LLUUID.Zero;
 | 
			
		||||
            Position = new LSL_Types.Vector3();
 | 
			
		||||
            Rotation = new LSL_Types.Quaternion();
 | 
			
		||||
            Type = 0;
 | 
			
		||||
            Velocity = new LSL_Types.Vector3();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public LLUUID Key;
 | 
			
		||||
        public LSL_Types.Vector3 OffsetPos;
 | 
			
		||||
        public int LinkNum;
 | 
			
		||||
        public LLUUID Group;
 | 
			
		||||
        public string Name;
 | 
			
		||||
        public LLUUID Owner;
 | 
			
		||||
        public LSL_Types.Vector3 Position;
 | 
			
		||||
        public LSL_Types.Quaternion Rotation;
 | 
			
		||||
        public int Type;
 | 
			
		||||
        public LSL_Types.Vector3 Velocity;
 | 
			
		||||
 | 
			
		||||
        public void Populate(Scene scene)
 | 
			
		||||
        {
 | 
			
		||||
            SceneObjectPart part = scene.GetSceneObjectPart(Key);
 | 
			
		||||
            if (part == null) // Avatar, maybe?
 | 
			
		||||
            {
 | 
			
		||||
                ScenePresence presence = scene.GetScenePresence(Key);
 | 
			
		||||
                if (presence == null)
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
                Name = presence.Firstname + " " + presence.Lastname;
 | 
			
		||||
                Owner = Key;
 | 
			
		||||
                Position = new LSL_Types.Vector3(
 | 
			
		||||
                        presence.AbsolutePosition.X,
 | 
			
		||||
                        presence.AbsolutePosition.X,
 | 
			
		||||
                        presence.AbsolutePosition.Z);
 | 
			
		||||
                Rotation = new LSL_Types.Quaternion(
 | 
			
		||||
                        presence.Rotation.x,
 | 
			
		||||
                        presence.Rotation.y,
 | 
			
		||||
                        presence.Rotation.z,
 | 
			
		||||
                        presence.Rotation.w);
 | 
			
		||||
                Velocity = new LSL_Types.Vector3(
 | 
			
		||||
                        presence.Velocity.X,
 | 
			
		||||
                        presence.Velocity.X,
 | 
			
		||||
                        presence.Velocity.Z);
 | 
			
		||||
 | 
			
		||||
                Type = 0x01; // Avatar
 | 
			
		||||
                if (presence.Velocity != LLVector3.Zero)
 | 
			
		||||
                    Type |= 0x02; // Active
 | 
			
		||||
 | 
			
		||||
                Group = presence.ControllingClient.ActiveGroupId;
 | 
			
		||||
 | 
			
		||||
            XScriptInstance instance = GetInstance(itemID);
 | 
			
		||||
            if (instance == null)
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            part=part.ParentGroup.RootPart; // We detect objects only
 | 
			
		||||
 | 
			
		||||
            LinkNum = 0; // Not relevant
 | 
			
		||||
 | 
			
		||||
            Group = part.GroupID;
 | 
			
		||||
            Name = part.Name;
 | 
			
		||||
            Owner = part.OwnerID;
 | 
			
		||||
            if (part.Velocity == LLVector3.Zero)
 | 
			
		||||
                Type = 0x04; // Passive
 | 
			
		||||
            else
 | 
			
		||||
                Type = 0x02; // Passive
 | 
			
		||||
 | 
			
		||||
            foreach (SceneObjectPart p in part.ParentGroup.Children.Values)
 | 
			
		||||
            {
 | 
			
		||||
                if (part.ContainsScripts())
 | 
			
		||||
                {
 | 
			
		||||
                    Type |= 0x08; // Scripted
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Position = new LSL_Types.Vector3(part.AbsolutePosition.X,
 | 
			
		||||
                                             part.AbsolutePosition.Y,
 | 
			
		||||
                                             part.AbsolutePosition.Z);
 | 
			
		||||
 | 
			
		||||
            LLQuaternion wr = part.GetWorldRotation();
 | 
			
		||||
            Rotation = new LSL_Types.Quaternion(wr.X, wr.Y, wr.Z, wr.W);
 | 
			
		||||
 | 
			
		||||
            Velocity = new LSL_Types.Vector3(part.Velocity.X,
 | 
			
		||||
                                             part.Velocity.Y,
 | 
			
		||||
                                             part.Velocity.Z);
 | 
			
		||||
            instance.SetState(newState);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class XEventParams
 | 
			
		||||
    {
 | 
			
		||||
        public XEventParams(string eventName, Object[] eventParams, XDetectParams[] detectParams)
 | 
			
		||||
        public string GetState(LLUUID itemID)
 | 
			
		||||
        {
 | 
			
		||||
            EventName=eventName;
 | 
			
		||||
            Params=eventParams;
 | 
			
		||||
            DetectParams=detectParams;
 | 
			
		||||
            XScriptInstance instance = GetInstance(itemID);
 | 
			
		||||
            if (instance == null)
 | 
			
		||||
                return "default";
 | 
			
		||||
            return instance.State;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string EventName;
 | 
			
		||||
        public Object[] Params;
 | 
			
		||||
        public XDetectParams[] DetectParams;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class XScriptInstance
 | 
			
		||||
| 
						 | 
				
			
			@ -791,17 +707,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        private LLUUID m_ObjectID;
 | 
			
		||||
        private LLUUID m_AssetID;
 | 
			
		||||
        private IScript m_Script;
 | 
			
		||||
        private LSL_ScriptCommands m_LSLCommands;
 | 
			
		||||
        private OSSL_ScriptCommands m_OSSLCommands;
 | 
			
		||||
        private Executor m_Executor;
 | 
			
		||||
        private LLUUID m_AppDomain;
 | 
			
		||||
        private XDetectParams[] m_DetectParams;
 | 
			
		||||
        private DetectParams[] m_DetectParams;
 | 
			
		||||
        private bool m_TimerQueued;
 | 
			
		||||
        private DateTime m_EventStart;
 | 
			
		||||
        private bool m_InEvent;
 | 
			
		||||
        private string m_PrimName;
 | 
			
		||||
        private string m_ScriptName;
 | 
			
		||||
        private string m_Assembly;
 | 
			
		||||
        private Dictionary<string,IScriptApi> m_Apis = new Dictionary<string,IScriptApi>();
 | 
			
		||||
 | 
			
		||||
        public enum StateSource
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -893,6 +808,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            m_ScriptName = scriptName;
 | 
			
		||||
            m_Assembly = assembly;
 | 
			
		||||
 | 
			
		||||
            ApiManager am = new ApiManager();
 | 
			
		||||
 | 
			
		||||
            SceneObjectPart part=engine.World.GetSceneObjectPart(localID);
 | 
			
		||||
            if (part == null)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -900,10 +817,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            m_LSLCommands = new LSL_ScriptCommands(engine, this, part, localID,
 | 
			
		||||
                                                   itemID);
 | 
			
		||||
            m_OSSLCommands = new OSSL_ScriptCommands(engine, this, part,
 | 
			
		||||
                                                     localID, itemID);
 | 
			
		||||
            foreach (string api in am.GetApis())
 | 
			
		||||
            {
 | 
			
		||||
                m_Apis[api] = am.CreateApi(api);
 | 
			
		||||
                m_Apis[api].Initialize(engine, part, localID, itemID);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -918,14 +836,17 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                m_Script.Start(m_LSLCommands, m_OSSLCommands);
 | 
			
		||||
                foreach (KeyValuePair<string,IScriptApi> kv in m_Apis)
 | 
			
		||||
                {
 | 
			
		||||
                    m_Script.InitApi(kv.Key, kv.Value);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                m_Executor = new Executor(m_Script);
 | 
			
		||||
 | 
			
		||||
//                m_Engine.Log.Debug("[XEngine] Script instance created");
 | 
			
		||||
 | 
			
		||||
                part.SetScriptEvents(m_ItemID,
 | 
			
		||||
                                     (int)m_Executor.GetStateEventFlags());
 | 
			
		||||
                                     (int)m_Executor.GetStateEventFlags(State));
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -958,7 +879,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
                            ScriptSerializer.Deserialize(xml, this);
 | 
			
		||||
 | 
			
		||||
                            m_Engine.m_ASYNCLSLCommandManager.CreateFromData(
 | 
			
		||||
                            m_Engine.m_AsyncCommands.CreateFromData(
 | 
			
		||||
                                m_LocalID, m_ItemID, m_ObjectID,
 | 
			
		||||
                                PluginData);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -976,32 +897,32 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                            if (stateSource == StateSource.NewRez)
 | 
			
		||||
                            {
 | 
			
		||||
//                                m_Engine.Log.Debug("[XEngine] Posted changed(CHANGED_REGION_RESTART) to script");
 | 
			
		||||
                                PostEvent(new XEventParams("changed",
 | 
			
		||||
                                    new Object[] {new LSL_Types.LSLInteger(256)}, new XDetectParams[0]));
 | 
			
		||||
                                PostEvent(new EventParams("changed",
 | 
			
		||||
                                    new Object[] {new LSL_Types.LSLInteger(256)}, new DetectParams[0]));
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        m_Engine.Log.Error("[XEngine] Unable to load script state: Memory limit exceeded");
 | 
			
		||||
                        PostEvent(new XEventParams("state_entry",
 | 
			
		||||
                                                   new Object[0], new XDetectParams[0]));
 | 
			
		||||
                        PostEvent(new EventParams("state_entry",
 | 
			
		||||
                                                   new Object[0], new DetectParams[0]));
 | 
			
		||||
                        Start();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_Engine.Log.ErrorFormat("[XEngine] Unable to load script state from xml: {0}\n"+e.ToString(), xml);
 | 
			
		||||
                    PostEvent(new XEventParams("state_entry",
 | 
			
		||||
                                               new Object[0], new XDetectParams[0]));
 | 
			
		||||
                    PostEvent(new EventParams("state_entry",
 | 
			
		||||
                                               new Object[0], new DetectParams[0]));
 | 
			
		||||
                    Start();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_Engine.Log.ErrorFormat("[XEngine] Unable to load script state, file not found");
 | 
			
		||||
                PostEvent(new XEventParams("state_entry",
 | 
			
		||||
                                           new Object[0], new XDetectParams[0]));
 | 
			
		||||
                PostEvent(new EventParams("state_entry",
 | 
			
		||||
                                           new Object[0], new DetectParams[0]));
 | 
			
		||||
                Start();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1100,15 +1021,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public void SetState(string state)
 | 
			
		||||
        {
 | 
			
		||||
            PostEvent(new XEventParams("state_exit", new Object[0],
 | 
			
		||||
                                       new XDetectParams[0]));
 | 
			
		||||
            PostEvent(new XEventParams("state", new Object[] { state },
 | 
			
		||||
                                       new XDetectParams[0]));
 | 
			
		||||
            PostEvent(new XEventParams("state_entry", new Object[0],
 | 
			
		||||
                                       new XDetectParams[0]));
 | 
			
		||||
            PostEvent(new EventParams("state_exit", new Object[0],
 | 
			
		||||
                                       new DetectParams[0]));
 | 
			
		||||
            PostEvent(new EventParams("state", new Object[] { state },
 | 
			
		||||
                                       new DetectParams[0]));
 | 
			
		||||
            PostEvent(new EventParams("state_entry", new Object[0],
 | 
			
		||||
                                       new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void PostEvent(XEventParams data)
 | 
			
		||||
        public void PostEvent(EventParams data)
 | 
			
		||||
        {
 | 
			
		||||
//            m_Engine.Log.DebugFormat("[XEngine] Posted event {2} in state {3} to {0}.{1}",
 | 
			
		||||
//                        m_PrimName, m_ScriptName, data.EventName, m_State);
 | 
			
		||||
| 
						 | 
				
			
			@ -1137,11 +1058,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
        public object EventProcessor()
 | 
			
		||||
        {
 | 
			
		||||
            XEventParams data = null;
 | 
			
		||||
            EventParams data = null;
 | 
			
		||||
 | 
			
		||||
            lock (m_EventQueue)
 | 
			
		||||
            {
 | 
			
		||||
                data = (XEventParams) m_EventQueue.Dequeue();
 | 
			
		||||
                data = (EventParams) m_EventQueue.Dequeue();
 | 
			
		||||
                if (data == null) // Shouldn't happen
 | 
			
		||||
                {
 | 
			
		||||
                    m_CurrentResult = null;
 | 
			
		||||
| 
						 | 
				
			
			@ -1158,7 +1079,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
//                m_Engine.Log.DebugFormat("[XEngine] Script {0}.{1} state set to {2}",
 | 
			
		||||
//                        m_PrimName, m_ScriptName, data.Params[0].ToString());
 | 
			
		||||
                m_State=data.Params[0].ToString();
 | 
			
		||||
                m_Engine.m_ASYNCLSLCommandManager.RemoveScript(
 | 
			
		||||
                m_Engine.m_AsyncCommands.RemoveScript(
 | 
			
		||||
                    m_LocalID, m_ItemID);
 | 
			
		||||
 | 
			
		||||
                SceneObjectPart part = m_Engine.World.GetSceneObjectPart(
 | 
			
		||||
| 
						 | 
				
			
			@ -1166,7 +1087,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                if (part != null)
 | 
			
		||||
                {
 | 
			
		||||
                    part.SetScriptEvents(m_ItemID,
 | 
			
		||||
                                         (int)m_Executor.GetStateEventFlags());
 | 
			
		||||
                                         (int)m_Executor.GetStateEventFlags(State));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
| 
						 | 
				
			
			@ -1181,7 +1102,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                {
 | 
			
		||||
                    m_EventStart = DateTime.Now;
 | 
			
		||||
                    m_InEvent = true;
 | 
			
		||||
                    m_Executor.ExecuteEvent(data.EventName, data.Params);
 | 
			
		||||
                    m_Executor.ExecuteEvent(State, data.EventName, data.Params);
 | 
			
		||||
                    m_InEvent = false;
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
| 
						 | 
				
			
			@ -1259,14 +1180,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            bool running = Running;
 | 
			
		||||
 | 
			
		||||
            Stop(0);
 | 
			
		||||
            m_Engine.m_ASYNCLSLCommandManager.RemoveScript(m_LocalID, m_ItemID);
 | 
			
		||||
            m_Engine.m_AsyncCommands.RemoveScript(m_LocalID, m_ItemID);
 | 
			
		||||
            m_EventQueue.Clear();
 | 
			
		||||
            m_Script.ResetVars();
 | 
			
		||||
            m_State = "default";
 | 
			
		||||
            if (running)
 | 
			
		||||
                Start();
 | 
			
		||||
            PostEvent(new XEventParams("state_entry",
 | 
			
		||||
                    new Object[0], new XDetectParams[0]));
 | 
			
		||||
            PostEvent(new EventParams("state_entry",
 | 
			
		||||
                    new Object[0], new DetectParams[0]));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Dictionary<string, object> GetVars()
 | 
			
		||||
| 
						 | 
				
			
			@ -1279,7 +1200,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            m_Script.SetVars(vars);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public XDetectParams GetDetectParams(int idx)
 | 
			
		||||
        public DetectParams GetDetectParams(int idx)
 | 
			
		||||
        {
 | 
			
		||||
            if (idx < 0 || idx >= m_DetectParams.Length)
 | 
			
		||||
                return null;
 | 
			
		||||
| 
						 | 
				
			
			@ -1298,7 +1219,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
        public void SaveState(string assembly)
 | 
			
		||||
        {
 | 
			
		||||
            PluginData =
 | 
			
		||||
                m_Engine.m_ASYNCLSLCommandManager.GetSerializationData(
 | 
			
		||||
                m_Engine.m_AsyncCommands.GetSerializationData(
 | 
			
		||||
                    m_ItemID);
 | 
			
		||||
 | 
			
		||||
            string xml = ScriptSerializer.Serialize(this);
 | 
			
		||||
| 
						 | 
				
			
			@ -1368,7 +1289,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
            while (count > 0)
 | 
			
		||||
            {
 | 
			
		||||
                XEventParams ep = (XEventParams)instance.EventQueue.Dequeue();
 | 
			
		||||
                EventParams ep = (EventParams)instance.EventQueue.Dequeue();
 | 
			
		||||
                instance.EventQueue.Enqueue(ep);
 | 
			
		||||
                count--;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1387,7 +1308,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
 | 
			
		||||
                XmlElement detect = xmldoc.CreateElement("", "Detected", "");
 | 
			
		||||
 | 
			
		||||
                foreach (XDetectParams det in ep.DetectParams)
 | 
			
		||||
                foreach (DetectParams det in ep.DetectParams)
 | 
			
		||||
                {
 | 
			
		||||
                    XmlElement objectElem = xmldoc.CreateElement("", "Object",
 | 
			
		||||
                                                                 "");
 | 
			
		||||
| 
						 | 
				
			
			@ -1449,9 +1370,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
            rootElement.AppendChild(queue);
 | 
			
		||||
 | 
			
		||||
            XmlNode plugins = xmldoc.CreateElement("", "Plugins", "");
 | 
			
		||||
            if (instance.PluginData.Length > 0)
 | 
			
		||||
                DumpList(xmldoc, plugins,
 | 
			
		||||
                         new LSL_Types.list(instance.PluginData));
 | 
			
		||||
            DumpList(xmldoc, plugins,
 | 
			
		||||
                     new LSL_Types.list(instance.PluginData));
 | 
			
		||||
 | 
			
		||||
            rootElement.AppendChild(plugins);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1510,8 +1430,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                        foreach (XmlNode item in itemL)
 | 
			
		||||
                        {
 | 
			
		||||
                            List<Object> parms = new List<Object>();
 | 
			
		||||
                            List<XDetectParams> detected =
 | 
			
		||||
                                    new List<XDetectParams>();
 | 
			
		||||
                            List<DetectParams> detected =
 | 
			
		||||
                                    new List<DetectParams>();
 | 
			
		||||
 | 
			
		||||
                            string eventName =
 | 
			
		||||
                                    item.Attributes.GetNamedItem("event").Value;
 | 
			
		||||
| 
						 | 
				
			
			@ -1595,7 +1515,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                                        LLUUID.TryParse(det.InnerText,
 | 
			
		||||
                                                out uuid);
 | 
			
		||||
 | 
			
		||||
                                        XDetectParams d = new XDetectParams();
 | 
			
		||||
                                        DetectParams d = new DetectParams();
 | 
			
		||||
                                        d.Key = uuid;
 | 
			
		||||
                                        d.OffsetPos = v;
 | 
			
		||||
                                        d.LinkNum = d_linkNum;
 | 
			
		||||
| 
						 | 
				
			
			@ -1612,7 +1532,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 | 
			
		|||
                                    break;
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            XEventParams ep = new XEventParams(
 | 
			
		||||
                            EventParams ep = new EventParams(
 | 
			
		||||
                                    eventName, parms.ToArray(),
 | 
			
		||||
                                    detected.ToArray());
 | 
			
		||||
                            instance.EventQueue.Enqueue(ep);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										278
									
								
								prebuild.xml
								
								
								
								
							
							
						
						
									
										278
									
								
								prebuild.xml
								
								
								
								
							| 
						 | 
				
			
			@ -1382,40 +1382,6 @@
 | 
			
		|||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <Project name="OpenSim.Region.ScriptEngine.XEngine.Script" path="OpenSim/Region/ScriptEngine/XEngine/Script" type="Library">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
      <Configuration name="Release">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
 | 
			
		||||
      <ReferencePath>../../../../../bin/</ReferencePath>      
 | 
			
		||||
      <Reference name="System" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Data" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Web" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Xml" localCopy="false"/>
 | 
			
		||||
      <Reference name="libsecondlife.dll"/>
 | 
			
		||||
      <Reference name="OpenSim" />
 | 
			
		||||
      <Reference name="OpenSim.Framework"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Communications"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.Environment" />
 | 
			
		||||
      <Reference name="OpenSim.Framework.Console"/>
 | 
			
		||||
      <Reference name="Axiom.MathLib.dll" localCopy="false"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="RAIL.dll"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="log4net.dll"/>
 | 
			
		||||
 | 
			
		||||
      <Files>
 | 
			
		||||
        <Match pattern="*.cs" recurse="true"/>
 | 
			
		||||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <Project name="SmartThreadPool" path="ThirdParty/SmartThreadPool" type="Library">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
        <Options>
 | 
			
		||||
| 
						 | 
				
			
			@ -1438,6 +1404,214 @@
 | 
			
		|||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <Project name="OpenSim.Region.ScriptEngine.Shared" path="OpenSim/Region/ScriptEngine/Shared" type="Library">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
      <Configuration name="Release">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
 | 
			
		||||
      <ReferencePath>../../../../bin/</ReferencePath>      
 | 
			
		||||
      <Reference name="System" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Data" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Web" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Xml" localCopy="false"/>
 | 
			
		||||
      <Reference name="libsecondlife.dll"/>
 | 
			
		||||
      <Reference name="OpenSim" />
 | 
			
		||||
      <Reference name="OpenSim.Framework"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Communications"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.Environment" />
 | 
			
		||||
      <Reference name="OpenSim.Framework.Console"/>
 | 
			
		||||
      <Reference name="Axiom.MathLib.dll" localCopy="false"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="RAIL.dll"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="log4net.dll"/>
 | 
			
		||||
 | 
			
		||||
      <Files>
 | 
			
		||||
        <Match pattern="*.cs" recurse="false"/>
 | 
			
		||||
        <Match path="../Interfaces" pattern="*.cs" recurse="false"/>
 | 
			
		||||
        <Match path="Api/Interface" pattern="*.cs" recurse="false"/>
 | 
			
		||||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <Project name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" path="OpenSim/Region/ScriptEngine/Shared/Api/Runtime" type="Library">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
      <Configuration name="Release">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
 | 
			
		||||
      <ReferencePath>../../../../../../bin/</ReferencePath>      
 | 
			
		||||
      <Reference name="System" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Data" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Web" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Xml" localCopy="false"/>
 | 
			
		||||
      <Reference name="libsecondlife.dll"/>
 | 
			
		||||
      <Reference name="OpenSim" />
 | 
			
		||||
      <Reference name="OpenSim.Framework"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Communications"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.Environment" />
 | 
			
		||||
      <Reference name="OpenSim.Framework.Console"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.ScriptEngine.Shared"/>
 | 
			
		||||
      <Reference name="Axiom.MathLib.dll" localCopy="false"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="RAIL.dll"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="log4net.dll"/>
 | 
			
		||||
 | 
			
		||||
      <Files>
 | 
			
		||||
        <Match pattern="*.cs" recurse="false"/>
 | 
			
		||||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <Project name="OpenSim.Region.ScriptEngine.Shared.YieldProlog" path="OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/" type="Library">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
      <Configuration name="Release">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
 | 
			
		||||
      <ReferencePath>../../../../../../../bin/</ReferencePath>      
 | 
			
		||||
      <Reference name="System" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Data" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Web" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Xml" localCopy="false"/>
 | 
			
		||||
      <Reference name="libsecondlife.dll"/>
 | 
			
		||||
      <Reference name="OpenSim" />
 | 
			
		||||
      <Reference name="OpenSim.Framework"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Communications"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.Environment" />
 | 
			
		||||
      <Reference name="OpenSim.Framework.Console"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.ScriptEngine.Shared"/>
 | 
			
		||||
      <Reference name="Axiom.MathLib.dll" localCopy="false"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="RAIL.dll"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="log4net.dll"/>
 | 
			
		||||
 | 
			
		||||
      <Files>
 | 
			
		||||
        <Match pattern="*.cs" recurse="false"/>
 | 
			
		||||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <Project name="OpenSim.Region.ScriptEngine.Shared.Api" path="OpenSim/Region/ScriptEngine/Shared/Api/Implementation" type="Library">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
      <Configuration name="Release">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
 | 
			
		||||
      <ReferencePath>../../../../../../bin/</ReferencePath>      
 | 
			
		||||
      <Reference name="System" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Data" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Web" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Xml" localCopy="false"/>
 | 
			
		||||
      <Reference name="libsecondlife.dll"/>
 | 
			
		||||
      <Reference name="OpenSim" />
 | 
			
		||||
      <Reference name="OpenSim.Framework"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Communications"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.Environment" />
 | 
			
		||||
      <Reference name="OpenSim.Framework.Console"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.ScriptEngine.Shared"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime"/>
 | 
			
		||||
      <Reference name="Axiom.MathLib.dll" localCopy="false"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="RAIL.dll"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="log4net.dll"/>
 | 
			
		||||
 | 
			
		||||
      <Files>
 | 
			
		||||
        <Match pattern="*.cs" recurse="true"/>
 | 
			
		||||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <Project name="OpenSim.Region.ScriptEngine.Shared.CodeTools" path="OpenSim/Region/ScriptEngine/Shared/CodeTools" type="Library">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
      <Configuration name="Release">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
 | 
			
		||||
      <ReferencePath>../../../../../bin/</ReferencePath>      
 | 
			
		||||
      <Reference name="System" localCopy="false"/>
 | 
			
		||||
      <Reference name="Microsoft.JScript"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework" />
 | 
			
		||||
      <Reference name="OpenSim.Region.Environment" />
 | 
			
		||||
      <Reference name="OpenSim.Region.ScriptEngine.Shared"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.ScriptEngine.Shared.YieldProlog"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.Environment" />
 | 
			
		||||
      <Reference name="libsecondlife.dll"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="RAIL.dll"/>
 | 
			
		||||
      <Reference name="log4net.dll"/>
 | 
			
		||||
 | 
			
		||||
      <Files>
 | 
			
		||||
        <Match pattern="*.cs" recurse="true"/>
 | 
			
		||||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <Project name="OpenSim.Region.ScriptEngine.XEngine" path="OpenSim/Region/ScriptEngine/XEngine" type="Library">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../bin/ScriptEngines/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
      <Configuration name="Release">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../bin/ScriptEngines/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
 | 
			
		||||
      <ReferencePath>../../../../bin/</ReferencePath>      
 | 
			
		||||
      <Reference name="System" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Data" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Web" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Xml" localCopy="false"/>
 | 
			
		||||
      <Reference name="libsecondlife.dll"/>
 | 
			
		||||
      <Reference name="OpenSim" />
 | 
			
		||||
      <Reference name="OpenSim.Framework"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Communications"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.Environment" />
 | 
			
		||||
      <Reference name="OpenSim.Framework.Console"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.ScriptEngine.Shared"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.ScriptEngine.Shared.CodeTools"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.ScriptEngine.Shared.Api"/>
 | 
			
		||||
      <Reference name="SmartThreadPool"/>
 | 
			
		||||
      <Reference name="Axiom.MathLib.dll" localCopy="false"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="RAIL.dll"/>
 | 
			
		||||
      <Reference name="log4net.dll"/>
 | 
			
		||||
 | 
			
		||||
      <Files>
 | 
			
		||||
        <Match pattern="*.cs" recurse="true"/>
 | 
			
		||||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    <!-- OGS projects -->
 | 
			
		||||
| 
						 | 
				
			
			@ -1686,42 +1860,6 @@
 | 
			
		|||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <Project name="OpenSim.Region.ScriptEngine.XEngine" path="OpenSim/Region/ScriptEngine/XEngine" type="Library">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../bin/ScriptEngines/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
      <Configuration name="Release">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../../bin/ScriptEngines/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
 | 
			
		||||
      <ReferencePath>../../../../bin/</ReferencePath>      
 | 
			
		||||
      <Reference name="System" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Data" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Xml" localCopy="false"/>
 | 
			
		||||
      <Reference name="System.Runtime.Remoting" localCopy="false"/>
 | 
			
		||||
      <Reference name="libsecondlife.dll"/>
 | 
			
		||||
      <Reference name="RAIL.dll"/>
 | 
			
		||||
      <Reference name="OpenSim"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Console"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Communications"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.Environment" />
 | 
			
		||||
      <Reference name="OpenSim.Region.ScriptEngine.XEngine.Script" />
 | 
			
		||||
      <Reference name="Microsoft.JScript"/>
 | 
			
		||||
      <Reference name="Axiom.MathLib.dll" localCopy="false"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="SmartThreadPool" />
 | 
			
		||||
      <Reference name="log4net.dll"/>
 | 
			
		||||
 | 
			
		||||
      <Files>
 | 
			
		||||
        <Match path="AsyncCommandPlugins" pattern="*.cs" recurse="false"/>
 | 
			
		||||
        <Match pattern="*.cs" recurse="false"/>
 | 
			
		||||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue