aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/OptionalModules/Scripting/Minimodule
diff options
context:
space:
mode:
authorUbitUmarov2015-09-01 11:43:07 +0100
committerUbitUmarov2015-09-01 11:43:07 +0100
commitfb78b182520fc9bb0f971afd0322029c70278ea6 (patch)
treeb4e30d383938fdeef8c92d1d1c2f44bb61d329bd /OpenSim/Region/OptionalModules/Scripting/Minimodule
parentlixo (diff)
parentMantis #7713: fixed bug introduced by 1st MOSES patch. (diff)
downloadopensim-SC_OLD-fb78b182520fc9bb0f971afd0322029c70278ea6.zip
opensim-SC_OLD-fb78b182520fc9bb0f971afd0322029c70278ea6.tar.gz
opensim-SC_OLD-fb78b182520fc9bb0f971afd0322029c70278ea6.tar.bz2
opensim-SC_OLD-fb78b182520fc9bb0f971afd0322029c70278ea6.tar.xz
Merge remote-tracking branch 'os/master'
Diffstat (limited to 'OpenSim/Region/OptionalModules/Scripting/Minimodule')
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/ExtensionHandler.cs66
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Graphics.cs72
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Heightmap.cs67
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Host.cs79
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/IMRMModule.cs38
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/ISecurityCredential.cs36
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IAvatar.cs51
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IAvatarAttachment.cs42
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IEntity.cs41
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IExtension.cs40
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IGraphics.cs39
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IHeightmap.cs69
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IHost.cs44
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IInventoryItem.cs43
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IMicrothreader.cs39
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs245
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObjectAccessor.cs41
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IParcel.cs42
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IPersistence.cs56
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IScheduler.cs79
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/ISocialEntity.cs41
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IWorld.cs61
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs98
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/LOParcel.cs73
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMBase.cs63
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs521
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/MicroScheduler.cs69
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectInventory.cs42
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectPhysics.cs66
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectShape.cs75
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectSound.cs39
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/ObjectAccessor.cs185
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/SEUser.cs61
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs833
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectInventory.cs215
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectMaterial.cs136
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs105
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatarAttachment.cs65
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/SecurityCredential.cs62
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/DrunkenTextAppreciationModule.cs64
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/Microthreads/MicrothreadSample.txt40
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/TestModule.cs98
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs250
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/WorldX/IWorldAudio.cs40
44 files changed, 4531 insertions, 0 deletions
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/ExtensionHandler.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/ExtensionHandler.cs
new file mode 100644
index 0000000..3f1bd54
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/ExtensionHandler.cs
@@ -0,0 +1,66 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31using OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
34{
35 class ExtensionHandler : IExtension
36 {
37 private readonly Dictionary<Type, object> m_instances;
38
39 public ExtensionHandler(Dictionary<Type, object> instances)
40 {
41 m_instances = instances;
42 }
43
44 public T Get<T>()
45 {
46 return (T) m_instances[typeof (T)];
47 }
48
49 public bool TryGet<T>(out T extension)
50 {
51 if (!m_instances.ContainsKey(typeof(T)))
52 {
53 extension = default(T);
54 return false;
55 }
56
57 extension = Get<T>();
58 return true;
59 }
60
61 public bool Has<T>()
62 {
63 return m_instances.ContainsKey(typeof (T));
64 }
65 }
66}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Graphics.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Graphics.cs
new file mode 100644
index 0000000..a0dc38b
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Graphics.cs
@@ -0,0 +1,72 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System.Drawing;
29using OpenMetaverse;
30using OpenMetaverse.Imaging;
31using OpenSim.Framework;
32using OpenSim.Region.Framework.Scenes;
33
34namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
35{
36 class Graphics : System.MarshalByRefObject, IGraphics
37 {
38 private readonly Scene m_scene;
39
40 public Graphics(Scene m_scene)
41 {
42 this.m_scene = m_scene;
43 }
44
45 public UUID SaveBitmap(Bitmap data)
46 {
47 return SaveBitmap(data, false, true);
48 }
49
50 public UUID SaveBitmap(Bitmap data, bool lossless, bool temporary)
51 {
52 AssetBase asset = new AssetBase(UUID.Random(), "MRMDynamicImage", (sbyte)AssetType.Texture, m_scene.RegionInfo.RegionID.ToString());
53 asset.Data = OpenJPEG.EncodeFromImage(data, lossless);
54 asset.Description = "MRM Image";
55 asset.Local = false;
56 asset.Temporary = temporary;
57 m_scene.AssetService.Store(asset);
58
59 return asset.FullID;
60 }
61
62 public Bitmap LoadBitmap(UUID assetID)
63 {
64 AssetBase bmp = m_scene.AssetService.Get(assetID.ToString());
65 ManagedImage outimg;
66 Image img;
67 OpenJPEG.DecodeToImage(bmp.Data, out outimg, out img);
68
69 return new Bitmap(img);
70 }
71 }
72}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Heightmap.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Heightmap.cs
new file mode 100644
index 0000000..47c3085
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Heightmap.cs
@@ -0,0 +1,67 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using OpenSim.Region.Framework.Scenes;
29
30namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
31{
32 public class Heightmap : System.MarshalByRefObject, IHeightmap
33 {
34 private readonly Scene m_scene;
35
36 public Heightmap(Scene scene)
37 {
38 m_scene = scene;
39 }
40
41 public double this[int x, int y]
42 {
43 get { return Get(x, y); }
44 set { Set(x, y, value); }
45 }
46
47 public int Length
48 {
49 get { return m_scene.Heightmap.Height; }
50 }
51
52 public int Width
53 {
54 get { return m_scene.Heightmap.Width; }
55 }
56
57 protected double Get(int x, int y)
58 {
59 return m_scene.Heightmap[x, y];
60 }
61
62 protected void Set(int x, int y, double val)
63 {
64 m_scene.Heightmap[x, y] = val;
65 }
66 }
67}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Host.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Host.cs
new file mode 100644
index 0000000..cbde283
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Host.cs
@@ -0,0 +1,79 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System.Reflection;
29using log4net;
30using OpenSim.Region.Framework.Scenes;
31using OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
34{
35 class Host : System.MarshalByRefObject, IHost
36 {
37 private readonly IObject m_obj;
38 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
39 private readonly IGraphics m_graphics;
40 private readonly IExtension m_extend;
41 private readonly IMicrothreader m_threader;
42 //private Scene m_scene;
43
44 public Host(IObject m_obj, Scene m_scene, IExtension m_extend, IMicrothreader m_threader)
45 {
46 this.m_obj = m_obj;
47 this.m_threader = m_threader;
48 this.m_extend = m_extend;
49 //this.m_scene = m_scene;
50
51 m_graphics = new Graphics(m_scene);
52 }
53
54 public IObject Object
55 {
56 get { return m_obj; }
57 }
58
59 public ILog Console
60 {
61 get { return m_log; }
62 }
63
64 public IGraphics Graphics
65 {
66 get { return m_graphics; }
67 }
68
69 public IExtension Extensions
70 {
71 get { return m_extend; }
72 }
73
74 public IMicrothreader Microthreads
75 {
76 get { return m_threader; }
77 }
78 }
79}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/IMRMModule.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/IMRMModule.cs
new file mode 100644
index 0000000..e957a62
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/IMRMModule.cs
@@ -0,0 +1,38 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using OpenMetaverse;
29
30namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
31{
32 public interface IMRMModule
33 {
34 void RegisterExtension<T>(T instance);
35 void InitializeMRM(MRMBase mmb, uint localID, UUID itemID);
36 void GetGlobalEnvironment(uint localID, out IWorld world, out IHost host);
37 }
38}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/ISecurityCredential.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/ISecurityCredential.cs
new file mode 100644
index 0000000..533d176
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/ISecurityCredential.cs
@@ -0,0 +1,36 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
29{
30 public interface ISecurityCredential
31 {
32 ISocialEntity owner { get; }
33 bool CanEditObject(IObject target);
34 bool CanEditTerrain(int x, int y);
35 }
36} \ No newline at end of file
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IAvatar.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IAvatar.cs
new file mode 100644
index 0000000..3d49732
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IAvatar.cs
@@ -0,0 +1,51 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31using OpenMetaverse;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
34{
35 public interface IAvatar : IEntity
36 {
37
38 bool IsChildAgent { get; }
39
40 //// <value>
41 /// Array of worn attachments, empty but not null, if no attachments are worn
42 /// </value>
43
44 IAvatarAttachment[] Attachments { get; }
45
46 /// <summary>
47 /// Request to open an url clientside
48 /// </summary>
49 void LoadUrl(IObject sender, string message, string url);
50 }
51}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IAvatarAttachment.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IAvatarAttachment.cs
new file mode 100644
index 0000000..1993948
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IAvatarAttachment.cs
@@ -0,0 +1,42 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
29{
30 public interface IAvatarAttachment
31 {
32 //// <value>
33 /// Describes where on the avatar the attachment is located
34 /// </value>
35 int Location { get ; }
36
37 //// <value>
38 /// Accessor to the rez'ed asset, representing the attachment
39 /// </value>
40 IObject Asset { get; }
41 }
42} \ No newline at end of file
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IEntity.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IEntity.cs
new file mode 100644
index 0000000..6ea23df
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IEntity.cs
@@ -0,0 +1,41 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31using OpenMetaverse;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
34{
35 public interface IEntity
36 {
37 string Name { get; set; }
38 UUID GlobalID { get; }
39 Vector3 WorldPosition { get; set; }
40 }
41}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IExtension.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IExtension.cs
new file mode 100644
index 0000000..f5beebd
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IExtension.cs
@@ -0,0 +1,40 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31
32namespace OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces
33{
34 public interface IExtension
35 {
36 T Get<T>();
37 bool TryGet<T>(out T extension);
38 bool Has<T>();
39 }
40}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IGraphics.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IGraphics.cs
new file mode 100644
index 0000000..012cd37
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IGraphics.cs
@@ -0,0 +1,39 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System.Drawing;
29using OpenMetaverse;
30
31namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
32{
33 public interface IGraphics
34 {
35 UUID SaveBitmap(Bitmap data);
36 UUID SaveBitmap(Bitmap data, bool lossless, bool temporary);
37 Bitmap LoadBitmap(UUID assetID);
38 }
39}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IHeightmap.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IHeightmap.cs
new file mode 100644
index 0000000..93cbc5b
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IHeightmap.cs
@@ -0,0 +1,69 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31
32namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
33{
34 public interface IHeightmap
35 {
36 /// <summary>
37 /// Returns [or sets] the heightmap value at specified coordinates.
38 /// </summary>
39 /// <param name="x">X Coordinate</param>
40 /// <param name="y">Y Coordinate</param>
41 /// <returns>A value in meters representing height. Can be negative. Value correlates with Z parameter in world coordinates</returns>
42 /// <example>
43 /// double heightVal = World.Heightmap[128,128];
44 /// World.Heightmap[128,128] *= 5.0;
45 /// World.Heightmap[128,128] = 25;
46 /// </example>
47 double this[int x, int y]
48 {
49 get;
50 set;
51 }
52
53 /// <summary>
54 /// The maximum length of the region (Y axis), exclusive. (eg Height = 256, max Y = 255). Minimum is always 0 inclusive.
55 /// </summary>
56 /// <example>
57 /// Host.Console.Info("The terrain length of this region is " + World.Heightmap.Length);
58 /// </example>
59 int Length { get; }
60
61 /// <summary>
62 /// The maximum width of the region (X axis), exclusive. (eg Width = 256, max X = 255). Minimum is always 0 inclusive.
63 /// </summary>
64 /// <example>
65 /// Host.Console.Info("The terrain width of this region is " + World.Heightmap.Width);
66 /// </example>
67 int Width { get; }
68 }
69}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IHost.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IHost.cs
new file mode 100644
index 0000000..cf63fd6
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IHost.cs
@@ -0,0 +1,44 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31using log4net;
32using OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces;
33
34namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
35{
36 public interface IHost
37 {
38 IObject Object { get; }
39 ILog Console { get; }
40 IGraphics Graphics { get; }
41 IExtension Extensions { get; }
42 IMicrothreader Microthreads { get; }
43 }
44}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IInventoryItem.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IInventoryItem.cs
new file mode 100644
index 0000000..a8e545c
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IInventoryItem.cs
@@ -0,0 +1,43 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using OpenMetaverse;
30using OpenMetaverse.Assets;
31
32namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
33{
34 /// <summary>
35 /// This implements the methods needed to operate on individual inventory items.
36 /// </summary>
37 public interface IInventoryItem
38 {
39 int Type { get; }
40 UUID AssetID { get; }
41 T RetrieveAsset<T>() where T : OpenMetaverse.Assets.Asset, new();
42 }
43}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IMicrothreader.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IMicrothreader.cs
new file mode 100644
index 0000000..2723476
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IMicrothreader.cs
@@ -0,0 +1,39 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Generic;
31using System.Text;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces
34{
35 public interface IMicrothreader
36 {
37 void Run(IEnumerable microthread);
38 }
39}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs
new file mode 100644
index 0000000..e189489
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs
@@ -0,0 +1,245 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Drawing;
30using OpenMetaverse;
31using OpenSim.Region.OptionalModules.Scripting.Minimodule.Object;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
34{
35 [Serializable]
36 public class TouchEventArgs : EventArgs
37 {
38 public IAvatar Avatar;
39
40 public Vector3 TouchBiNormal;
41 public Vector3 TouchNormal;
42 public Vector3 TouchPosition;
43
44 public Vector2 TouchUV;
45 public Vector2 TouchST;
46
47 public int TouchMaterialIndex;
48 }
49
50 public delegate void OnTouchDelegate(IObject sender, TouchEventArgs e);
51
52 public interface IObject : IEntity
53 {
54 #region Events
55
56 event OnTouchDelegate OnTouch;
57
58 #endregion
59
60 /// <summary>
61 /// Returns whether or not this object is still in the world.
62 /// Eg, if you store an IObject reference, however the object
63 /// is deleted before you use it, it will throw a NullReference
64 /// exception. 'Exists' allows you to check the object is still
65 /// in play before utilizing it.
66 /// </summary>
67 /// <example>
68 /// IObject deleteMe = World.Objects[0];
69 ///
70 /// if (deleteMe.Exists) {
71 /// deleteMe.Say("Hello, I still exist!");
72 /// }
73 ///
74 /// World.Objects.Remove(deleteMe);
75 ///
76 /// if (!deleteMe.Exists) {
77 /// Host.Console.Info("I was deleted");
78 /// }
79 /// </example>
80 /// <remarks>
81 /// Objects should be near-guarunteed to exist for any event which
82 /// passes them as an argument. Storing an object for a longer period
83 /// of time however will limit their reliability.
84 ///
85 /// It is a good practice to use Try/Catch blocks handling for
86 /// NullReferenceException, when accessing remote objects.
87 /// </remarks>
88 bool Exists { get; }
89
90 /// <summary>
91 /// The local region-unique ID for this object.
92 /// </summary>
93 uint LocalID { get; }
94
95 /// <summary>
96 /// The description assigned to this object.
97 /// </summary>
98 String Description { get; set; }
99
100 /// <summary>
101 /// Returns the UUID of the Owner of the Object.
102 /// </summary>
103 UUID OwnerId { get; }
104
105 /// <summary>
106 /// Returns the UUID of the Creator of the Object.
107 /// </summary>
108 UUID CreatorId { get; }
109
110 /// <summary>
111 /// Returns the root object of a linkset. If this object is the root, it will return itself.
112 /// </summary>
113 IObject Root { get; }
114
115 /// <summary>
116 /// Returns a collection of objects which are linked to the current object. Does not include the root object.
117 /// </summary>
118 IObject[] Children { get; }
119
120 /// <summary>
121 /// Returns a list of materials attached to this object. Each may contain unique texture
122 /// and other visual information. For primitive based objects, this correlates with
123 /// Object Faces. For mesh based objects, this correlates with Materials.
124 /// </summary>
125 IObjectMaterial[] Materials { get; }
126
127 /// <summary>
128 /// The bounding box of the object. Primitive and Mesh objects alike are scaled to fit within these bounds.
129 /// </summary>
130 Vector3 Scale { get; set; }
131
132 /// <summary>
133 /// The rotation of the object relative to the Scene
134 /// </summary>
135 Quaternion WorldRotation { get; set; }
136
137 /// <summary>
138 /// The rotation of the object relative to a parent object
139 /// If root, works the same as WorldRotation
140 /// </summary>
141 Quaternion OffsetRotation { get; set; }
142
143 /// <summary>
144 /// The position of the object relative to a parent object
145 /// If root, works the same as WorldPosition
146 /// </summary>
147 Vector3 OffsetPosition { get; set; }
148
149 Vector3 SitTarget { get; set; }
150 String SitTargetText { get; set; }
151
152 String TouchText { get; set; }
153
154 /// <summary>
155 /// Text to be associated with this object, in the
156 /// Second Life(r) viewer, this is shown above the
157 /// object.
158 /// </summary>
159 String Text { get; set; }
160
161 bool IsRotationLockedX { get; set; } // SetStatus(!ROTATE_X)
162 bool IsRotationLockedY { get; set; } // SetStatus(!ROTATE_Y)
163 bool IsRotationLockedZ { get; set; } // SetStatus(!ROTATE_Z)
164 bool IsSandboxed { get; set; } // SetStatus(SANDBOX)
165 bool IsImmotile { get; set; } // SetStatus(BLOCK_GRAB)
166 bool IsAlwaysReturned { get; set; } // SetStatus(!DIE_AT_EDGE)
167 bool IsTemporary { get; set; } // TEMP_ON_REZ
168
169 bool IsFlexible { get; set; }
170
171 IObjectShape Shape { get; }
172
173 // TODO:
174 // PrimHole
175 // Repeats, Offsets, Cut/Dimple/ProfileCut
176 // Hollow, Twist, HoleSize,
177 // Taper[A+B], Shear[A+B], Revolutions,
178 // RadiusOffset, Skew
179
180 PhysicsMaterial PhysicsMaterial { get; set; }
181
182 IObjectPhysics Physics { get; }
183
184 IObjectSound Sound { get; }
185
186 /// <summary>
187 /// Causes the object to speak to its surroundings,
188 /// equivilent to LSL/OSSL llSay
189 /// </summary>
190 /// <param name="msg">The message to send to the user</param>
191 void Say(string msg);
192
193 /// <summary>
194 /// Causes the object to speak to on a specific channel,
195 /// equivilent to LSL/OSSL llSay
196 /// </summary>
197 /// <param name="msg">The message to send to the user</param>
198 /// <param name="channel">The channel on which to send the message</param>
199 void Say(string msg,int channel);
200
201 /// <summary>
202 /// Opens a Dialog Panel in the Users Viewer,
203 /// equivilent to LSL/OSSL llDialog
204 /// </summary>
205 /// <param name="avatar">The UUID of the Avatar to which the Dialog should be send</param>
206 /// <param name="message">The Message to display at the top of the Dialog</param>
207 /// <param name="buttons">The Strings that act as label/value of the Bottons in the Dialog</param>
208 /// <param name="chat_channel">The channel on which to send the response</param>
209 void Dialog(UUID avatar, string message, string[] buttons, int chat_channel);
210
211 //// <value>
212 /// Grants access to the objects inventory
213 /// </value>
214 IObjectInventory Inventory { get; }
215 }
216
217 public enum PhysicsMaterial
218 {
219 Default,
220 Glass,
221 Metal,
222 Plastic,
223 Wood,
224 Rubber,
225 Stone,
226 Flesh
227 }
228
229 public enum TextureMapping
230 {
231 Default,
232 Planar
233 }
234
235 public interface IObjectMaterial
236 {
237 Color Color { get; set; }
238 UUID Texture { get; set; }
239 TextureMapping Mapping { get; set; } // SetPrimParms(PRIM_TEXGEN)
240 bool Bright { get; set; } // SetPrimParms(FULLBRIGHT)
241 double Bloom { get; set; } // SetPrimParms(GLOW)
242 bool Shiny { get; set; } // SetPrimParms(SHINY)
243 bool BumpMap { get; set; } // SetPrimParms(BUMPMAP) [DEPRECATE IN FAVOUR OF UUID?]
244 }
245}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObjectAccessor.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObjectAccessor.cs
new file mode 100644
index 0000000..a6c8c36
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObjectAccessor.cs
@@ -0,0 +1,41 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System.Collections.Generic;
29using OpenMetaverse;
30
31namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
32{
33 public interface IObjectAccessor : ICollection<IObject>
34 {
35 IObject this[int index] { get; }
36 IObject this[uint index] { get; }
37 IObject this[UUID index] { get; }
38 IObject Create(Vector3 position);
39 IObject Create(Vector3 position, Quaternion rotation);
40 }
41} \ No newline at end of file
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IParcel.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IParcel.cs
new file mode 100644
index 0000000..759b26d
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IParcel.cs
@@ -0,0 +1,42 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31using OpenMetaverse;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
34{
35 public interface IParcel
36 {
37 string Name { get; set; }
38 string Description { get; set; }
39 ISocialEntity Owner { get; set; }
40 bool[,] Bitmap { get; }
41 }
42}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IPersistence.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IPersistence.cs
new file mode 100644
index 0000000..17bb6e7
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IPersistence.cs
@@ -0,0 +1,56 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31
32namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
33{
34 interface IPersistence
35 {
36 T Get<T>(Guid storageID);
37 T Get<T>();
38
39 /// <summary>
40 /// Stores 'data' into the persistence system
41 /// associated with this object, however saved
42 /// under the ID 'storageID'. This data may
43 /// be accessed by other scripts however.
44 /// </summary>
45 /// <param name="storageID"></param>
46 /// <param name="data"></param>
47 void Put<T>(Guid storageID, T data);
48
49 /// <summary>
50 /// Stores 'data' into the persistence system
51 /// using the default ID for this script.
52 /// </summary>
53 /// <param name="data"></param>
54 void Put<T>(T data);
55 }
56}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IScheduler.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IScheduler.cs
new file mode 100644
index 0000000..13e7934
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IScheduler.cs
@@ -0,0 +1,79 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29
30namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
31{
32 interface IScheduler
33 {
34 /// <summary>
35 /// Schedule an event callback to occur
36 /// when 'time' is elapsed.
37 /// </summary>
38 /// <param name="time">The period to wait before executing</param>
39 void RunIn(TimeSpan time);
40
41 /// <summary>
42 /// Schedule an event callback to fire
43 /// every "time". Equivilent to a repeating
44 /// timer.
45 /// </summary>
46 /// <param name="time">The period to wait between executions</param>
47 void RunAndRepeat(TimeSpan time);
48
49 /// <summary>
50 /// Fire this scheduler only when the region has
51 /// a user in it.
52 /// </summary>
53 bool IfOccupied { get; set; }
54
55 /// <summary>
56 /// Fire this only when simulator performance
57 /// is reasonable. (eg sysload <= 1.0)
58 /// </summary>
59 bool IfHealthy { get; set; }
60
61 /// <summary>
62 /// Fire this event only when the region is visible
63 /// to a child agent, or there is a full agent
64 /// in this region.
65 /// </summary>
66 bool IfVisible { get; set; }
67
68 /// <summary>
69 /// Determines whether this runs in the master scheduler thread, or a new thread
70 /// is spawned to handle your request. Running in scheduler may mean that your
71 /// code does not execute perfectly on time, however will result in better
72 /// region performance.
73 /// </summary>
74 /// <remarks>
75 /// Default: true
76 /// </remarks>
77 bool Schedule { get; set; }
78 }
79}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/ISocialEntity.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/ISocialEntity.cs
new file mode 100644
index 0000000..400367f
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/ISocialEntity.cs
@@ -0,0 +1,41 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31using OpenMetaverse;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
34{
35 public interface ISocialEntity
36 {
37 UUID GlobalID { get; }
38 string Name { get; }
39 bool IsUser { get; }
40 }
41} \ No newline at end of file
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IWorld.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IWorld.cs
new file mode 100644
index 0000000..3b3b3d0
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IWorld.cs
@@ -0,0 +1,61 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using OpenSim.Region.OptionalModules.Scripting.Minimodule.WorldX;
30
31namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
32{
33 public class NewUserEventArgs : EventArgs
34 {
35 public IAvatar Avatar;
36 }
37
38 public delegate void OnNewUserDelegate(IWorld sender, NewUserEventArgs e);
39
40 public class ChatEventArgs : EventArgs
41 {
42 public string Text;
43 public IEntity Sender;
44 public int Channel;
45 }
46
47 public delegate void OnChatDelegate(IWorld sender, ChatEventArgs e);
48
49 public interface IWorld
50 {
51 IObjectAccessor Objects { get; }
52 IAvatar[] Avatars { get; }
53 IParcel[] Parcels { get; }
54 IHeightmap Terrain { get; }
55 IWorldAudio Audio { get; }
56
57
58 event OnChatDelegate OnChat;
59 event OnNewUserDelegate OnNewUser;
60 }
61}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs
new file mode 100644
index 0000000..bf85cbc
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs
@@ -0,0 +1,98 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Text;
30
31using OpenSim.Framework;
32using OpenSim.Region.Framework.Scenes;
33//using OpenSim.Services.AssetService;
34using OpenMetaverse;
35using OpenMetaverse.Assets;
36
37namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
38{
39 public class InventoryItem : IInventoryItem
40 {
41 TaskInventoryItem m_privateItem;
42 Scene m_rootScene;
43
44 public InventoryItem(Scene rootScene, TaskInventoryItem internalItem)
45 {
46 m_rootScene = rootScene;
47 m_privateItem = internalItem;
48 }
49
50 // Marked internal, to prevent scripts from accessing the internal type
51 internal TaskInventoryItem ToTaskInventoryItem()
52 {
53 return m_privateItem;
54 }
55
56 /// <summary>
57 /// This will attempt to convert from an IInventoryItem to an InventoryItem object
58 /// </summary>
59 /// <description>
60 /// In order for this to work the object which implements IInventoryItem must inherit from InventoryItem, otherwise
61 /// an exception is thrown.
62 /// </description>
63 /// <param name="i">
64 /// The interface to upcast <see cref="IInventoryItem"/>
65 /// </param>
66 /// <returns>
67 /// The object backing the interface implementation <see cref="InventoryItem"/>
68 /// </returns>
69 internal static InventoryItem FromInterface(IInventoryItem i)
70 {
71 if (typeof(InventoryItem).IsAssignableFrom(i.GetType()))
72 {
73 return (InventoryItem)i;
74 }
75 else
76 {
77 throw new ApplicationException("[MRM] There is no legal conversion from IInventoryItem to InventoryItem");
78 }
79 }
80
81 public int Type { get { return m_privateItem.Type; } }
82 public UUID AssetID { get { return m_privateItem.AssetID; } }
83
84 // This method exposes OpenSim/OpenMetaverse internals and needs to be replaced with a IAsset specific to MRM.
85 public T RetrieveAsset<T>() where T : OpenMetaverse.Assets.Asset, new()
86 {
87 AssetBase a = m_rootScene.AssetService.Get(AssetID.ToString());
88 T result = new T();
89
90 if ((sbyte)result.AssetType != a.Type)
91 throw new ApplicationException("[MRM] The supplied asset class does not match the found asset");
92
93 result.AssetData = a.Data;
94 result.Decode();
95 return result;
96 }
97 }
98}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/LOParcel.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/LOParcel.cs
new file mode 100644
index 0000000..c898da6
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/LOParcel.cs
@@ -0,0 +1,73 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using OpenSim.Framework;
29using OpenSim.Region.Framework.Interfaces;
30using OpenSim.Region.Framework.Scenes;
31
32namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
33{
34 class LOParcel : System.MarshalByRefObject, IParcel
35 {
36 private readonly Scene m_scene;
37 private readonly int m_parcelID;
38
39 public LOParcel(Scene m_scene, int m_parcelID)
40 {
41 this.m_scene = m_scene;
42 this.m_parcelID = m_parcelID;
43 }
44
45 private ILandObject GetLO()
46 {
47 return m_scene.LandChannel.GetLandObject(m_parcelID);
48 }
49
50 public string Name
51 {
52 get { return GetLO().LandData.Name; }
53 set { GetLO().LandData.Name = value; }
54 }
55
56 public string Description
57 {
58 get { return GetLO().LandData.Description; }
59 set { GetLO().LandData.Description = value; }
60 }
61
62 public ISocialEntity Owner
63 {
64 get { throw new System.NotImplementedException(); }
65 set { throw new System.NotImplementedException(); }
66 }
67
68 public bool[,] Bitmap
69 {
70 get { return GetLO().LandBitmap; }
71 }
72 }
73}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMBase.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMBase.cs
new file mode 100644
index 0000000..6a23f5d
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMBase.cs
@@ -0,0 +1,63 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using OpenMetaverse;
29
30namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
31{
32 public abstract class MRMBase : System.MarshalByRefObject
33 {
34 private IWorld m_world;
35 private IHost m_host;
36 private UUID m_id;
37
38 public void InitMiniModule(IWorld world, IHost host, UUID uniqueID)
39 {
40 m_world = world;
41 m_host = host;
42 m_id = uniqueID;
43 }
44
45 protected IWorld World
46 {
47 get { return m_world; }
48 }
49
50 protected IHost Host
51 {
52 get { return m_host; }
53 }
54
55 public UUID ID
56 {
57 get { return m_id; }
58 }
59
60 public abstract void Start();
61 public abstract void Stop();
62 }
63}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs
new file mode 100644
index 0000000..4bafe2f
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs
@@ -0,0 +1,521 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.CodeDom.Compiler;
30using System.Collections;
31using System.Collections.Generic;
32using System.Diagnostics;
33using System.IO;
34using System.Reflection;
35using System.Security;
36using System.Security.Permissions;
37using System.Security.Policy;
38using System.Text;
39using log4net;
40using Microsoft.CSharp;
41using Nini.Config;
42using OpenMetaverse;
43using OpenSim.Framework;
44using OpenSim.Region.Framework.Interfaces;
45using OpenSim.Region.Framework.Scenes;
46using Mono.Addins;
47
48namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
49{
50 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MRMModule")]
51 public class MRMModule : INonSharedRegionModule, IMRMModule
52 {
53 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
54 private Scene m_scene;
55 private bool m_Enabled;
56 private bool m_Hidden;
57
58 private readonly Dictionary<UUID,MRMBase> m_scripts = new Dictionary<UUID, MRMBase>();
59
60 private readonly Dictionary<Type,object> m_extensions = new Dictionary<Type, object>();
61
62 private static readonly CSharpCodeProvider CScodeProvider = new CSharpCodeProvider();
63
64 private readonly MicroScheduler m_microthreads = new MicroScheduler();
65
66
67 private IConfig m_config;
68
69 public void RegisterExtension<T>(T instance)
70 {
71 m_extensions[typeof (T)] = instance;
72 }
73
74 #region INonSharedRegionModule
75
76 public void Initialise(IConfigSource source)
77 {
78 if (source.Configs["MRM"] != null)
79 {
80 m_config = source.Configs["MRM"];
81
82 if (source.Configs["MRM"].GetBoolean("Enabled", false))
83 {
84 m_log.Info("[MRM]: Enabling MRM Module");
85 m_Enabled = true;
86 m_Hidden = source.Configs["MRM"].GetBoolean("Hidden", false);
87 }
88 }
89 }
90
91 public void AddRegion(Scene scene)
92 {
93 if (!m_Enabled)
94 return;
95
96 m_scene = scene;
97
98 // when hidden, we don't listen for client initiated script events
99 // only making the MRM engine available for region modules
100 if (!m_Hidden)
101 {
102 scene.EventManager.OnRezScript += EventManager_OnRezScript;
103 scene.EventManager.OnStopScript += EventManager_OnStopScript;
104 }
105
106 scene.EventManager.OnFrame += EventManager_OnFrame;
107
108 scene.RegisterModuleInterface<IMRMModule>(this);
109 }
110
111 public void RegionLoaded(Scene scene)
112 {
113 }
114
115 public void RemoveRegion(Scene scene)
116 {
117 }
118
119 public void Close()
120 {
121 foreach (KeyValuePair<UUID, MRMBase> pair in m_scripts)
122 {
123 pair.Value.Stop();
124 }
125 }
126
127 public string Name
128 {
129 get { return "MiniRegionModule"; }
130 }
131
132 public Type ReplaceableInterface
133 {
134 get { return null; }
135 }
136
137 #endregion
138
139 void EventManager_OnStopScript(uint localID, UUID itemID)
140 {
141 if (m_scripts.ContainsKey(itemID))
142 {
143 m_scripts[itemID].Stop();
144 }
145 }
146
147 void EventManager_OnFrame()
148 {
149 m_microthreads.Tick(1000);
150 }
151
152 static string ConvertMRMKeywords(string script)
153 {
154 script = script.Replace("microthreaded void", "IEnumerable");
155 script = script.Replace("relax;", "yield return null;");
156
157 return script;
158 }
159
160 /// <summary>
161 /// Create an AppDomain that contains policy restricting code to execute
162 /// with only the permissions granted by a named permission set
163 /// </summary>
164 /// <param name="permissionSetName">name of the permission set to restrict to</param>
165 /// <param name="appDomainName">'friendly' name of the appdomain to be created</param>
166 /// <exception cref="ArgumentNullException">
167 /// if <paramref name="permissionSetName"/> is null
168 /// </exception>
169 /// <exception cref="ArgumentOutOfRangeException">
170 /// if <paramref name="permissionSetName"/> is empty
171 /// </exception>
172 /// <returns>AppDomain with a restricted security policy</returns>
173 /// <remarks>Substantial portions of this function from: http://blogs.msdn.com/shawnfa/archive/2004/10/25/247379.aspx
174 /// Valid permissionSetName values are:
175 /// * FullTrust
176 /// * SkipVerification
177 /// * Execution
178 /// * Nothing
179 /// * LocalIntranet
180 /// * Internet
181 /// * Everything
182 /// </remarks>
183#pragma warning disable 0618
184 public static AppDomain CreateRestrictedDomain(string permissionSetName, string appDomainName)
185 {
186 if (permissionSetName == null)
187 throw new ArgumentNullException("permissionSetName");
188 if (permissionSetName.Length == 0)
189 throw new ArgumentOutOfRangeException("permissionSetName", permissionSetName,
190 "Cannot have an empty permission set name");
191
192 // Default to all code getting nothing
193 PolicyStatement emptyPolicy = new PolicyStatement(new PermissionSet(PermissionState.None));
194 UnionCodeGroup policyRoot = new UnionCodeGroup(new AllMembershipCondition(), emptyPolicy);
195
196 bool foundName = false;
197 PermissionSet setIntersection = new PermissionSet(PermissionState.Unrestricted);
198
199 // iterate over each policy level
200 IEnumerator levelEnumerator = SecurityManager.PolicyHierarchy();
201 while (levelEnumerator.MoveNext())
202 {
203 PolicyLevel level = levelEnumerator.Current as PolicyLevel;
204
205 // if this level has defined a named permission set with the
206 // given name, then intersect it with what we've retrieved
207 // from all the previous levels
208 if (level != null)
209 {
210 PermissionSet levelSet = level.GetNamedPermissionSet(permissionSetName);
211 if (levelSet != null)
212 {
213 foundName = true;
214 if (setIntersection != null)
215 setIntersection = setIntersection.Intersect(levelSet);
216 }
217 }
218 }
219
220 // Intersect() can return null for an empty set, so convert that
221 // to an empty set object. Also return an empty set if we didn't find
222 // the named permission set we were looking for
223 if (setIntersection == null || !foundName)
224 setIntersection = new PermissionSet(PermissionState.None);
225 else
226 setIntersection = new NamedPermissionSet(permissionSetName, setIntersection);
227
228 // if no named permission sets were found, return an empty set,
229 // otherwise return the set that was found
230 PolicyStatement permissions = new PolicyStatement(setIntersection);
231 policyRoot.AddChild(new UnionCodeGroup(new AllMembershipCondition(), permissions));
232
233 // create an AppDomain policy level for the policy tree
234 PolicyLevel appDomainLevel = PolicyLevel.CreateAppDomainLevel();
235 appDomainLevel.RootCodeGroup = policyRoot;
236
237 // create an AppDomain where this policy will be in effect
238 string domainName = appDomainName;
239 AppDomain restrictedDomain = AppDomain.CreateDomain(domainName);
240 restrictedDomain.SetAppDomainPolicy(appDomainLevel);
241
242 return restrictedDomain;
243 }
244#pragma warning restore 0618
245
246
247 void EventManager_OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource)
248 {
249 if (script.StartsWith("//MRM:C#"))
250 {
251 if (m_config.GetBoolean("OwnerOnly", true))
252 if (m_scene.GetSceneObjectPart(localID).OwnerID != m_scene.RegionInfo.EstateSettings.EstateOwner
253 || m_scene.GetSceneObjectPart(localID).CreatorID != m_scene.RegionInfo.EstateSettings.EstateOwner)
254 return;
255
256 script = ConvertMRMKeywords(script);
257
258 try
259 {
260 AppDomain target;
261 if (m_config.GetBoolean("Sandboxed", true))
262 {
263 m_log.Info("[MRM] Found C# MRM - Starting in AppDomain with " +
264 m_config.GetString("SandboxLevel", "Internet") + "-level security.");
265
266 string domainName = UUID.Random().ToString();
267 target = CreateRestrictedDomain(m_config.GetString("SandboxLevel", "Internet"),
268 domainName);
269 }
270 else
271 {
272 m_log.Info("[MRM] Found C# MRM - Starting in current AppDomain");
273 m_log.Warn(
274 "[MRM] Security Risk: AppDomain is run in current context. Use only in trusted environments.");
275 target = AppDomain.CurrentDomain;
276 }
277
278 m_log.Info("[MRM] Unwrapping into target AppDomain");
279 MRMBase mmb = (MRMBase) target.CreateInstanceFromAndUnwrap(
280 CompileFromDotNetText(script, itemID.ToString()),
281 "OpenSim.MiniModule");
282
283 m_log.Info("[MRM] Initialising MRM Globals");
284 InitializeMRM(mmb, localID, itemID);
285
286 m_scripts[itemID] = mmb;
287
288 m_log.Info("[MRM] Starting MRM");
289 mmb.Start();
290 }
291 catch (UnauthorizedAccessException e)
292 {
293 m_log.Error("[MRM] UAE " + e.Message);
294 m_log.Error("[MRM] " + e.StackTrace);
295
296 if (e.InnerException != null)
297 m_log.Error("[MRM] " + e.InnerException);
298
299 m_scene.ForEachClient(delegate(IClientAPI user)
300 {
301 user.SendAlertMessage(
302 "MRM UnAuthorizedAccess: " + e);
303 });
304 }
305 catch (Exception e)
306 {
307 m_log.Info("[MRM] Error: " + e);
308 m_scene.ForEachClient(delegate(IClientAPI user)
309 {
310 user.SendAlertMessage(
311 "Compile error while building MRM script, check OpenSim console for more information.");
312 });
313 }
314 }
315 }
316
317 public void GetGlobalEnvironment(uint localID, out IWorld world, out IHost host)
318 {
319 // UUID should be changed to object owner.
320 UUID owner = m_scene.RegionInfo.EstateSettings.EstateOwner;
321 SEUser securityUser = new SEUser(owner, "Name Unassigned");
322 SecurityCredential creds = new SecurityCredential(securityUser, m_scene);
323
324 world = new World(m_scene, creds);
325 host = new Host(new SOPObject(m_scene, localID, creds), m_scene, new ExtensionHandler(m_extensions),
326 m_microthreads);
327 }
328
329 public void InitializeMRM(MRMBase mmb, uint localID, UUID itemID)
330 {
331 m_log.Info("[MRM] Created MRM Instance");
332
333 IWorld world;
334 IHost host;
335
336 GetGlobalEnvironment(localID, out world, out host);
337
338 mmb.InitMiniModule(world, host, itemID);
339 }
340
341 /// <summary>
342 /// Stolen from ScriptEngine Common
343 /// </summary>
344 /// <param name="Script"></param>
345 /// <param name="uuid">Unique ID for this module</param>
346 /// <returns></returns>
347 internal string CompileFromDotNetText(string Script, string uuid)
348 {
349 m_log.Info("MRM 1");
350 const string ext = ".cs";
351 const string FilePrefix = "MiniModule";
352
353 // Output assembly name
354 string OutFile = Path.Combine("MiniModules", Path.Combine(
355 m_scene.RegionInfo.RegionID.ToString(),
356 FilePrefix + "_compiled_" + uuid + "_" +
357 Util.RandomClass.Next(9000) + ".dll"));
358
359 // Create Directories for Assemblies
360 if (!Directory.Exists("MiniModules"))
361 Directory.CreateDirectory("MiniModules");
362 string tmp = Path.Combine("MiniModules", m_scene.RegionInfo.RegionID.ToString());
363 if (!Directory.Exists(tmp))
364 Directory.CreateDirectory(tmp);
365
366 m_log.Info("MRM 2");
367
368 try
369 {
370 File.Delete(OutFile);
371 }
372 catch (UnauthorizedAccessException e)
373 {
374 throw new Exception("Unable to delete old existing " +
375 "script-file before writing new. Compile aborted: " +
376 e);
377 }
378 catch (IOException e)
379 {
380 throw new Exception("Unable to delete old existing " +
381 "script-file before writing new. Compile aborted: " +
382 e);
383 }
384
385 m_log.Info("MRM 3");
386
387 // DEBUG - write source to disk
388 string srcFileName = FilePrefix + "_source_" +
389 Path.GetFileNameWithoutExtension(OutFile) + ext;
390 try
391 {
392 File.WriteAllText(Path.Combine(Path.Combine(
393 "MiniModules",
394 m_scene.RegionInfo.RegionID.ToString()),
395 srcFileName), Script);
396 }
397 catch (Exception ex) //NOTLEGIT - Should be just FileIOException
398 {
399 m_log.Error("[Compiler]: Exception while " +
400 "trying to write script source to file \"" +
401 srcFileName + "\": " + ex);
402 }
403
404 m_log.Info("MRM 4");
405
406 // Do actual compile
407 CompilerParameters parameters = new CompilerParameters();
408
409 parameters.IncludeDebugInformation = true;
410
411 string rootPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
412
413 List<string> libraries = new List<string>();
414 string[] lines = Script.Split(new string[] {"\n"}, StringSplitOptions.RemoveEmptyEntries);
415 foreach (string s in lines)
416 {
417 if (s.StartsWith("//@DEPENDS:"))
418 {
419 libraries.Add(s.Replace("//@DEPENDS:", ""));
420 }
421 }
422
423 libraries.Add("OpenSim.Region.OptionalModules.dll");
424 libraries.Add("OpenMetaverseTypes.dll");
425 libraries.Add("log4net.dll");
426
427 foreach (string library in libraries)
428 {
429 parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, library));
430 }
431
432 parameters.GenerateExecutable = false;
433 parameters.OutputAssembly = OutFile;
434 parameters.IncludeDebugInformation = true;
435 parameters.TreatWarningsAsErrors = false;
436
437 m_log.Info("MRM 5");
438
439 CompilerResults results = CScodeProvider.CompileAssemblyFromSource(
440 parameters, Script);
441
442 m_log.Info("MRM 6");
443
444 int display = 5;
445 if (results.Errors.Count > 0)
446 {
447 string errtext = String.Empty;
448 foreach (CompilerError CompErr in results.Errors)
449 {
450 // Show 5 errors max
451 //
452 if (display <= 0)
453 break;
454 display--;
455
456 string severity = "Error";
457 if (CompErr.IsWarning)
458 {
459 severity = "Warning";
460 }
461
462 string text = CompErr.ErrorText;
463
464 // The Second Life viewer's script editor begins
465 // countingn lines and columns at 0, so we subtract 1.
466 errtext += String.Format("Line ({0},{1}): {4} {2}: {3}\n",
467 CompErr.Line - 1, CompErr.Column - 1,
468 CompErr.ErrorNumber, text, severity);
469 }
470
471 if (!File.Exists(OutFile))
472 {
473 throw new Exception(errtext);
474 }
475 }
476
477 m_log.Info("MRM 7");
478
479 if (!File.Exists(OutFile))
480 {
481 string errtext = String.Empty;
482 errtext += "No compile error. But not able to locate compiled file.";
483 throw new Exception(errtext);
484 }
485
486 FileInfo fi = new FileInfo(OutFile);
487
488 Byte[] data = new Byte[fi.Length];
489
490 try
491 {
492 FileStream fs = File.Open(OutFile, FileMode.Open, FileAccess.Read);
493 fs.Read(data, 0, data.Length);
494 fs.Close();
495 }
496 catch (IOException)
497 {
498 string errtext = String.Empty;
499 errtext += "No compile error. But not able to open file.";
500 throw new Exception(errtext);
501 }
502
503 m_log.Info("MRM 8");
504
505 // Convert to base64
506 //
507 string filetext = Convert.ToBase64String(data);
508 Byte[] buf = Encoding.ASCII.GetBytes(filetext);
509
510 m_log.Info("MRM 9");
511
512 FileStream sfs = File.Create(OutFile + ".cil.b64");
513 sfs.Write(buf, 0, buf.Length);
514 sfs.Close();
515
516 m_log.Info("MRM 10");
517
518 return OutFile;
519 }
520 }
521}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/MicroScheduler.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MicroScheduler.cs
new file mode 100644
index 0000000..73fe8b8
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MicroScheduler.cs
@@ -0,0 +1,69 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Generic;
31using System.Reflection;
32using System.Text;
33using log4net;
34using OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces;
35
36namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
37{
38 public class MicroScheduler : System.MarshalByRefObject, IMicrothreader
39 {
40 private readonly List<IEnumerator> m_threads = new List<IEnumerator>();
41
42 public void Run(IEnumerable microthread)
43 {
44 lock (m_threads)
45 m_threads.Add(microthread.GetEnumerator());
46 }
47
48 public void Tick(int count)
49 {
50 lock (m_threads)
51 {
52 if (m_threads.Count == 0)
53 return;
54
55 int i = 0;
56 while (m_threads.Count > 0 && i < count)
57 {
58 i++;
59
60 bool running = m_threads[i%m_threads.Count].MoveNext();
61
62
63 if (!running)
64 m_threads.Remove(m_threads[i%m_threads.Count]);
65 }
66 }
67 }
68 }
69}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectInventory.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectInventory.cs
new file mode 100644
index 0000000..bb85d06
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectInventory.cs
@@ -0,0 +1,42 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30
31using OpenMetaverse;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule.Object
34{
35 /// <summary>
36 /// This implements the methods neccesary to operate on the inventory of an object
37 /// </summary>
38 public interface IObjectInventory : IDictionary<UUID, IInventoryItem>
39 {
40 IInventoryItem this[string name] { get; }
41 }
42}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectPhysics.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectPhysics.cs
new file mode 100644
index 0000000..45bf25e
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectPhysics.cs
@@ -0,0 +1,66 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31using OpenMetaverse;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule.Object
34{
35 /// <summary>
36 /// This implements an interface similar to that provided by physics engines to OpenSim internally.
37 /// Eg, PhysicsActor. It is capable of setting and getting properties related to the current
38 /// physics scene representation of this object.
39 /// </summary>
40 public interface IObjectPhysics
41 {
42 bool Enabled { get; set; }
43
44 bool Phantom { get; set; }
45 bool PhantomCollisions { get; set; }
46
47 double Density { get; set; }
48 double Mass { get; set; }
49 double Buoyancy { get; set; }
50
51 Vector3 GeometricCenter { get; }
52 Vector3 CenterOfMass { get; }
53
54 Vector3 RotationalVelocity { get; set; }
55 Vector3 Velocity { get; set; }
56 Vector3 Torque { get; set; }
57 Vector3 Acceleration { get; }
58 Vector3 Force { get; set; }
59
60 bool FloatOnWater { set; }
61
62 void AddForce(Vector3 force, bool pushforce);
63 void AddAngularForce(Vector3 force, bool pushforce);
64 void SetMomentum(Vector3 momentum);
65 }
66}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectShape.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectShape.cs
new file mode 100644
index 0000000..27cf279
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectShape.cs
@@ -0,0 +1,75 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31using OpenMetaverse;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule.Object
34{
35 public enum SculptType
36 {
37 Default = 1,
38 Sphere = 1,
39 Torus = 2,
40 Plane = 3,
41 Cylinder = 4
42 }
43
44 public enum HoleShape
45 {
46 Default = 0x00,
47 Circle = 0x10,
48 Square = 0x20,
49 Triangle = 0x30
50 }
51
52 public enum PrimType
53 {
54 NotPrimitive = 255,
55 Box = 0,
56 Cylinder = 1,
57 Prism = 2,
58 Sphere = 3,
59 Torus = 4,
60 Tube = 5,
61 Ring = 6,
62 Sculpt = 7
63 }
64
65 public interface IObjectShape
66 {
67 UUID SculptMap { get; set; }
68 SculptType SculptType { get; set; }
69
70 HoleShape HoleType { get; set; }
71 Double HoleSize { get; set; }
72 PrimType PrimType { get; set; }
73
74 }
75} \ No newline at end of file
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectSound.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectSound.cs
new file mode 100644
index 0000000..d623c51
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Object/IObjectSound.cs
@@ -0,0 +1,39 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31using OpenMetaverse;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule.Object
34{
35 public interface IObjectSound
36 {
37 void Play(UUID soundAsset, double volume);
38 }
39}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/ObjectAccessor.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/ObjectAccessor.cs
new file mode 100644
index 0000000..140264b
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/ObjectAccessor.cs
@@ -0,0 +1,185 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Generic;
31using OpenMetaverse;
32using OpenSim.Framework;
33using OpenSim.Region.Framework.Scenes;
34using IEnumerable=System.Collections.IEnumerable;
35
36namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
37{
38
39 internal class IObjEnum : System.MarshalByRefObject, IEnumerator<IObject>
40 {
41 private readonly Scene m_scene;
42 private readonly IEnumerator<EntityBase> m_sogEnum;
43 private readonly ISecurityCredential m_security;
44 private readonly List<EntityBase> m_entities;
45
46 public IObjEnum(Scene scene, ISecurityCredential security)
47 {
48 m_scene = scene;
49 m_security = security;
50 m_entities = new List<EntityBase>(m_scene.Entities.GetEntities());
51 m_sogEnum = m_entities.GetEnumerator();
52 }
53
54 public void Dispose()
55 {
56 m_sogEnum.Dispose();
57 }
58
59 public bool MoveNext()
60 {
61 return m_sogEnum.MoveNext();
62 }
63
64 public void Reset()
65 {
66 m_sogEnum.Reset();
67 }
68
69 public IObject Current
70 {
71 get
72 {
73 return new SOPObject(m_scene, m_sogEnum.Current.LocalId, m_security);
74 }
75 }
76
77 object IEnumerator.Current
78 {
79 get { return Current; }
80 }
81 }
82
83 public class ObjectAccessor : System.MarshalByRefObject, IObjectAccessor
84 {
85 private readonly Scene m_scene;
86 private readonly ISecurityCredential m_security;
87
88 public ObjectAccessor(Scene scene, ISecurityCredential security)
89 {
90 m_scene = scene;
91 m_security = security;
92 }
93
94 public IObject this[int index]
95 {
96 get
97 {
98 return new SOPObject(m_scene, m_scene.Entities[(uint)index].LocalId, m_security);
99 }
100 }
101
102 public IObject this[uint index]
103 {
104 get
105 {
106 return new SOPObject(m_scene, m_scene.Entities[index].LocalId, m_security);
107 }
108 }
109
110 public IObject this[UUID index]
111 {
112 get
113 {
114 return new SOPObject(m_scene, m_scene.Entities[index].LocalId, m_security);
115 }
116 }
117
118 public IObject Create(Vector3 position)
119 {
120 return Create(position, Quaternion.Identity);
121 }
122
123 public IObject Create(Vector3 position, Quaternion rotation)
124 {
125
126 SceneObjectGroup sog = m_scene.AddNewPrim(m_security.owner.GlobalID,
127 UUID.Zero,
128 position,
129 rotation,
130 PrimitiveBaseShape.CreateBox());
131
132 IObject ret = new SOPObject(m_scene, sog.LocalId, m_security);
133
134 return ret;
135 }
136
137 public IEnumerator<IObject> GetEnumerator()
138 {
139 return new IObjEnum(m_scene, m_security);
140 }
141
142 IEnumerator IEnumerable.GetEnumerator()
143 {
144 return GetEnumerator();
145 }
146
147 public void Add(IObject item)
148 {
149 throw new NotSupportedException("Collection is read-only. This is an API TODO FIX, creation of objects is presently impossible.");
150 }
151
152 public void Clear()
153 {
154 throw new NotSupportedException("Collection is read-only. TODO FIX.");
155 }
156
157 public bool Contains(IObject item)
158 {
159 return m_scene.Entities.ContainsKey(item.LocalID);
160 }
161
162 public void CopyTo(IObject[] array, int arrayIndex)
163 {
164 for (int i = arrayIndex; i < Count + arrayIndex; i++)
165 {
166 array[i] = this[i - arrayIndex];
167 }
168 }
169
170 public bool Remove(IObject item)
171 {
172 throw new NotSupportedException("Collection is read-only. TODO FIX.");
173 }
174
175 public int Count
176 {
177 get { return m_scene.Entities.Count; }
178 }
179
180 public bool IsReadOnly
181 {
182 get { return true; }
183 }
184 }
185}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SEUser.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SEUser.cs
new file mode 100644
index 0000000..e2bdf5e
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SEUser.cs
@@ -0,0 +1,61 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31using OpenMetaverse;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
34{
35 class SEUser : System.MarshalByRefObject, ISocialEntity
36 {
37 private readonly UUID m_uuid;
38 private readonly string m_name;
39
40 public SEUser(UUID uuid, string name)
41 {
42 m_uuid = uuid;
43 m_name = name;
44 }
45
46 public UUID GlobalID
47 {
48 get { return m_uuid; }
49 }
50
51 public string Name
52 {
53 get { return m_name; }
54 }
55
56 public bool IsUser
57 {
58 get { return true; }
59 }
60 }
61}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs
new file mode 100644
index 0000000..5ed1514
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs
@@ -0,0 +1,833 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Security;
31using OpenMetaverse;
32using OpenMetaverse.Packets;
33using OpenSim.Framework;
34using OpenSim.Region.Framework.Interfaces;
35using OpenSim.Region.Framework.Scenes;
36using OpenSim.Region.OptionalModules.Scripting.Minimodule.Object;
37using OpenSim.Region.Physics.Manager;
38using PrimType=OpenSim.Region.OptionalModules.Scripting.Minimodule.Object.PrimType;
39using SculptType=OpenSim.Region.OptionalModules.Scripting.Minimodule.Object.SculptType;
40
41namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
42{
43 class SOPObject : MarshalByRefObject, IObject, IObjectPhysics, IObjectShape, IObjectSound
44 {
45 private readonly Scene m_rootScene;
46 private readonly uint m_localID;
47 private readonly ISecurityCredential m_security;
48
49 [Obsolete("Replace with 'credential' constructor [security]")]
50 public SOPObject(Scene rootScene, uint localID)
51 {
52 m_rootScene = rootScene;
53 m_localID = localID;
54 }
55
56 public SOPObject(Scene rootScene, uint localID, ISecurityCredential credential)
57 {
58 m_rootScene = rootScene;
59 m_localID = localID;
60 m_security = credential;
61 }
62
63 /// <summary>
64 /// This needs to run very, very quickly.
65 /// It is utilized in nearly every property and method.
66 /// </summary>
67 /// <returns></returns>
68 private SceneObjectPart GetSOP()
69 {
70 return m_rootScene.GetSceneObjectPart(m_localID);
71 }
72
73 private bool CanEdit()
74 {
75 if (!m_security.CanEditObject(this))
76 {
77 throw new SecurityException("Insufficient Permission to edit object with UUID [" + GetSOP().UUID + "]");
78 }
79 return true;
80 }
81
82 #region OnTouch
83
84 private event OnTouchDelegate _OnTouch;
85 private bool _OnTouchActive = false;
86
87 public event OnTouchDelegate OnTouch
88 {
89 add
90 {
91 if (CanEdit())
92 {
93 if (!_OnTouchActive)
94 {
95 GetSOP().Flags |= PrimFlags.Touch;
96 _OnTouchActive = true;
97 m_rootScene.EventManager.OnObjectGrab += EventManager_OnObjectGrab;
98 }
99
100 _OnTouch += value;
101 }
102 }
103 remove
104 {
105 _OnTouch -= value;
106
107 if (_OnTouch == null)
108 {
109 GetSOP().Flags &= ~PrimFlags.Touch;
110 _OnTouchActive = false;
111 m_rootScene.EventManager.OnObjectGrab -= EventManager_OnObjectGrab;
112 }
113 }
114 }
115
116 void EventManager_OnObjectGrab(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
117 {
118 if (_OnTouchActive && m_localID == localID)
119 {
120 TouchEventArgs e = new TouchEventArgs();
121 e.Avatar = new SPAvatar(m_rootScene, remoteClient.AgentId, m_security);
122 e.TouchBiNormal = surfaceArgs.Binormal;
123 e.TouchMaterialIndex = surfaceArgs.FaceIndex;
124 e.TouchNormal = surfaceArgs.Normal;
125 e.TouchPosition = surfaceArgs.Position;
126 e.TouchST = new Vector2(surfaceArgs.STCoord.X, surfaceArgs.STCoord.Y);
127 e.TouchUV = new Vector2(surfaceArgs.UVCoord.X, surfaceArgs.UVCoord.Y);
128
129 IObject sender = this;
130
131 if (_OnTouch != null)
132 _OnTouch(sender, e);
133 }
134 }
135
136 #endregion
137
138 public bool Exists
139 {
140 get { return GetSOP() != null; }
141 }
142
143 public uint LocalID
144 {
145 get { return m_localID; }
146 }
147
148 public UUID GlobalID
149 {
150 get { return GetSOP().UUID; }
151 }
152
153 public string Name
154 {
155 get { return GetSOP().Name; }
156 set
157 {
158 if (CanEdit())
159 GetSOP().Name = value;
160 }
161 }
162
163 public string Description
164 {
165 get { return GetSOP().Description; }
166 set
167 {
168 if (CanEdit())
169 GetSOP().Description = value;
170 }
171 }
172
173 public UUID OwnerId
174 {
175 get { return GetSOP().OwnerID;}
176 }
177
178 public UUID CreatorId
179 {
180 get { return GetSOP().CreatorID;}
181 }
182
183 public IObject[] Children
184 {
185 get
186 {
187 SceneObjectPart my = GetSOP();
188 IObject[] rets = null;
189
190 int total = my.ParentGroup.PrimCount;
191
192 rets = new IObject[total];
193
194 int i = 0;
195
196 foreach (SceneObjectPart part in my.ParentGroup.Parts)
197 {
198 rets[i++] = new SOPObject(m_rootScene, part.LocalId, m_security);
199 }
200
201 return rets;
202 }
203 }
204
205 public IObject Root
206 {
207 get { return new SOPObject(m_rootScene, GetSOP().ParentGroup.RootPart.LocalId, m_security); }
208 }
209
210 public IObjectMaterial[] Materials
211 {
212 get
213 {
214 SceneObjectPart sop = GetSOP();
215 IObjectMaterial[] rets = new IObjectMaterial[getNumberOfSides(sop)];
216
217 for (int i = 0; i < rets.Length; i++)
218 {
219 rets[i] = new SOPObjectMaterial(i, sop);
220 }
221
222 return rets;
223 }
224 }
225
226 public Vector3 Scale
227 {
228 get { return GetSOP().Scale; }
229 set
230 {
231 if (CanEdit())
232 GetSOP().Scale = value;
233 }
234 }
235
236 public Quaternion WorldRotation
237 {
238 get { throw new System.NotImplementedException(); }
239 set { throw new System.NotImplementedException(); }
240 }
241
242 public Quaternion OffsetRotation
243 {
244 get { throw new System.NotImplementedException(); }
245 set { throw new System.NotImplementedException(); }
246 }
247
248 public Vector3 WorldPosition
249 {
250 get { return GetSOP().AbsolutePosition; }
251 set
252 {
253 if (CanEdit())
254 {
255 SceneObjectPart pos = GetSOP();
256 pos.UpdateOffSet(value - pos.AbsolutePosition);
257 }
258 }
259 }
260
261 public Vector3 OffsetPosition
262 {
263 get { return GetSOP().OffsetPosition; }
264 set
265 {
266 if (CanEdit())
267 {
268 GetSOP().OffsetPosition = value;
269 }
270 }
271 }
272
273 public Vector3 SitTarget
274 {
275 get { return GetSOP().SitTargetPosition; }
276 set
277 {
278 if (CanEdit())
279 {
280 GetSOP().SitTargetPosition = value;
281 }
282 }
283 }
284
285 public string SitTargetText
286 {
287 get { return GetSOP().SitName; }
288 set
289 {
290 if (CanEdit())
291 {
292 GetSOP().SitName = value;
293 }
294 }
295 }
296
297 public string TouchText
298 {
299 get { return GetSOP().TouchName; }
300 set
301 {
302 if (CanEdit())
303 {
304 GetSOP().TouchName = value;
305 }
306 }
307 }
308
309 public string Text
310 {
311 get { return GetSOP().Text; }
312 set
313 {
314 if (CanEdit())
315 {
316 GetSOP().SetText(value,new Vector3(1.0f,1.0f,1.0f),1.0f);
317 }
318 }
319 }
320
321 public bool IsRotationLockedX
322 {
323 get { throw new System.NotImplementedException(); }
324 set { throw new System.NotImplementedException(); }
325 }
326
327 public bool IsRotationLockedY
328 {
329 get { throw new System.NotImplementedException(); }
330 set { throw new System.NotImplementedException(); }
331 }
332
333 public bool IsRotationLockedZ
334 {
335 get { throw new System.NotImplementedException(); }
336 set { throw new System.NotImplementedException(); }
337 }
338
339 public bool IsSandboxed
340 {
341 get { throw new System.NotImplementedException(); }
342 set { throw new System.NotImplementedException(); }
343 }
344
345 public bool IsImmotile
346 {
347 get { throw new System.NotImplementedException(); }
348 set { throw new System.NotImplementedException(); }
349 }
350
351 public bool IsAlwaysReturned
352 {
353 get { throw new System.NotImplementedException(); }
354 set { throw new System.NotImplementedException(); }
355 }
356
357 public bool IsTemporary
358 {
359 get { throw new System.NotImplementedException(); }
360 set { throw new System.NotImplementedException(); }
361 }
362
363 public bool IsFlexible
364 {
365 get { throw new System.NotImplementedException(); }
366 set { throw new System.NotImplementedException(); }
367 }
368
369 public PhysicsMaterial PhysicsMaterial
370 {
371 get { throw new System.NotImplementedException(); }
372 set { throw new System.NotImplementedException(); }
373 }
374
375 public IObjectPhysics Physics
376 {
377 get { return this; }
378 }
379
380 public IObjectShape Shape
381 {
382 get { return this; }
383 }
384
385 public IObjectInventory Inventory
386 {
387 get { return new SOPObjectInventory(m_rootScene, GetSOP().TaskInventory); }
388 }
389
390 #region Public Functions
391
392 public void Say(string msg)
393 {
394 if (!CanEdit())
395 return;
396
397 SceneObjectPart sop = GetSOP();
398 m_rootScene.SimChat(msg, ChatTypeEnum.Say, sop.AbsolutePosition, sop.Name, sop.UUID, false);
399 }
400
401 public void Say(string msg,int channel)
402 {
403 if (!CanEdit())
404 return;
405
406 SceneObjectPart sop = GetSOP();
407 m_rootScene.SimChat(Utils.StringToBytes(msg), ChatTypeEnum.Say,channel, sop.AbsolutePosition, sop.Name, sop.UUID, false);
408 }
409
410 public void Dialog(UUID avatar, string message, string[] buttons, int chat_channel)
411 {
412 if (!CanEdit())
413 return;
414
415 IDialogModule dm = m_rootScene.RequestModuleInterface<IDialogModule>();
416
417 if (dm == null)
418 return;
419
420 if (buttons.Length < 1)
421 {
422 Say("ERROR: No less than 1 button can be shown",2147483647);
423 return;
424 }
425 if (buttons.Length > 12)
426 {
427 Say("ERROR: No more than 12 buttons can be shown",2147483647);
428 return;
429 }
430
431 foreach (string button in buttons)
432 {
433 if (button == String.Empty)
434 {
435 Say("ERROR: button label cannot be blank",2147483647);
436 return;
437 }
438 if (button.Length > 24)
439 {
440 Say("ERROR: button label cannot be longer than 24 characters",2147483647);
441 return;
442 }
443 }
444
445 dm.SendDialogToUser(
446 avatar, GetSOP().Name, GetSOP().UUID, GetSOP().OwnerID,
447 message, new UUID("00000000-0000-2222-3333-100000001000"), chat_channel, buttons);
448
449 }
450
451 #endregion
452
453
454 #region Supporting Functions
455
456 // Helper functions to understand if object has cut, hollow, dimple, and other affecting number of faces
457 private static void hasCutHollowDimpleProfileCut(int primType, PrimitiveBaseShape shape, out bool hasCut, out bool hasHollow,
458 out bool hasDimple, out bool hasProfileCut)
459 {
460 if (primType == (int)PrimType.Box
461 ||
462 primType == (int)PrimType.Cylinder
463 ||
464 primType == (int)PrimType.Prism)
465
466 hasCut = (shape.ProfileBegin > 0) || (shape.ProfileEnd > 0);
467 else
468 hasCut = (shape.PathBegin > 0) || (shape.PathEnd > 0);
469
470 hasHollow = shape.ProfileHollow > 0;
471 hasDimple = (shape.ProfileBegin > 0) || (shape.ProfileEnd > 0); // taken from llSetPrimitiveParms
472 hasProfileCut = hasDimple; // is it the same thing?
473
474 }
475
476 private static int getScriptPrimType(PrimitiveBaseShape primShape)
477 {
478 if (primShape.SculptEntry)
479 return (int) PrimType.Sculpt;
480 if ((primShape.ProfileCurve & 0x07) == (byte) ProfileShape.Square)
481 {
482 if (primShape.PathCurve == (byte) Extrusion.Straight)
483 return (int) PrimType.Box;
484 if (primShape.PathCurve == (byte) Extrusion.Curve1)
485 return (int) PrimType.Tube;
486 }
487 else if ((primShape.ProfileCurve & 0x07) == (byte) ProfileShape.Circle)
488 {
489 if (primShape.PathCurve == (byte) Extrusion.Straight)
490 return (int) PrimType.Cylinder;
491 if (primShape.PathCurve == (byte) Extrusion.Curve1)
492 return (int) PrimType.Torus;
493 }
494 else if ((primShape.ProfileCurve & 0x07) == (byte) ProfileShape.HalfCircle)
495 {
496 if (primShape.PathCurve == (byte) Extrusion.Curve1 || primShape.PathCurve == (byte) Extrusion.Curve2)
497 return (int) PrimType.Sphere;
498 }
499 else if ((primShape.ProfileCurve & 0x07) == (byte) ProfileShape.EquilateralTriangle)
500 {
501 if (primShape.PathCurve == (byte) Extrusion.Straight)
502 return (int) PrimType.Prism;
503 if (primShape.PathCurve == (byte) Extrusion.Curve1)
504 return (int) PrimType.Ring;
505 }
506 return (int) PrimType.NotPrimitive;
507 }
508
509 private static int getNumberOfSides(SceneObjectPart part)
510 {
511 int ret;
512 bool hasCut;
513 bool hasHollow;
514 bool hasDimple;
515 bool hasProfileCut;
516
517 int primType = getScriptPrimType(part.Shape);
518 hasCutHollowDimpleProfileCut(primType, part.Shape, out hasCut, out hasHollow, out hasDimple, out hasProfileCut);
519
520 switch (primType)
521 {
522 default:
523 case (int) PrimType.Box:
524 ret = 6;
525 if (hasCut) ret += 2;
526 if (hasHollow) ret += 1;
527 break;
528 case (int) PrimType.Cylinder:
529 ret = 3;
530 if (hasCut) ret += 2;
531 if (hasHollow) ret += 1;
532 break;
533 case (int) PrimType.Prism:
534 ret = 5;
535 if (hasCut) ret += 2;
536 if (hasHollow) ret += 1;
537 break;
538 case (int) PrimType.Sphere:
539 ret = 1;
540 if (hasCut) ret += 2;
541 if (hasDimple) ret += 2;
542 if (hasHollow)
543 ret += 1; // GOTCHA: LSL shows 2 additional sides here.
544 // This has been fixed, but may cause porting issues.
545 break;
546 case (int) PrimType.Torus:
547 ret = 1;
548 if (hasCut) ret += 2;
549 if (hasProfileCut) ret += 2;
550 if (hasHollow) ret += 1;
551 break;
552 case (int) PrimType.Tube:
553 ret = 4;
554 if (hasCut) ret += 2;
555 if (hasProfileCut) ret += 2;
556 if (hasHollow) ret += 1;
557 break;
558 case (int) PrimType.Ring:
559 ret = 3;
560 if (hasCut) ret += 2;
561 if (hasProfileCut) ret += 2;
562 if (hasHollow) ret += 1;
563 break;
564 case (int) PrimType.Sculpt:
565 ret = 1;
566 break;
567 }
568 return ret;
569 }
570
571
572 #endregion
573
574 #region IObjectPhysics
575
576 public bool Enabled
577 {
578 get { throw new System.NotImplementedException(); }
579 set { throw new System.NotImplementedException(); }
580 }
581
582 public bool Phantom
583 {
584 get { throw new System.NotImplementedException(); }
585 set { throw new System.NotImplementedException(); }
586 }
587
588 public bool PhantomCollisions
589 {
590 get { throw new System.NotImplementedException(); }
591 set { throw new System.NotImplementedException(); }
592 }
593
594 public double Density
595 {
596 get { return (GetSOP().PhysActor.Mass/Scale.X*Scale.Y/Scale.Z); }
597 set { throw new NotImplementedException(); }
598 }
599
600 public double Mass
601 {
602 get { return GetSOP().PhysActor.Mass; }
603 set { throw new NotImplementedException(); }
604 }
605
606 public double Buoyancy
607 {
608 get { return GetSOP().PhysActor.Buoyancy; }
609 set { GetSOP().PhysActor.Buoyancy = (float)value; }
610 }
611
612 public Vector3 GeometricCenter
613 {
614 get
615 {
616 Vector3 tmp = GetSOP().PhysActor.GeometricCenter;
617 return tmp;
618 }
619 }
620
621 public Vector3 CenterOfMass
622 {
623 get
624 {
625 Vector3 tmp = GetSOP().PhysActor.CenterOfMass;
626 return tmp;
627 }
628 }
629
630 public Vector3 RotationalVelocity
631 {
632 get
633 {
634 Vector3 tmp = GetSOP().PhysActor.RotationalVelocity;
635 return tmp;
636 }
637 set
638 {
639 if (!CanEdit())
640 return;
641
642 GetSOP().PhysActor.RotationalVelocity = value;
643 }
644 }
645
646 public Vector3 Velocity
647 {
648 get
649 {
650 Vector3 tmp = GetSOP().PhysActor.Velocity;
651 return tmp;
652 }
653 set
654 {
655 if (!CanEdit())
656 return;
657
658 GetSOP().PhysActor.Velocity = value;
659 }
660 }
661
662 public Vector3 Torque
663 {
664 get
665 {
666 Vector3 tmp = GetSOP().PhysActor.Torque;
667 return tmp;
668 }
669 set
670 {
671 if (!CanEdit())
672 return;
673
674 GetSOP().PhysActor.Torque = value;
675 }
676 }
677
678 public Vector3 Acceleration
679 {
680 get
681 {
682 Vector3 tmp = GetSOP().PhysActor.Acceleration;
683 return tmp;
684 }
685 }
686
687 public Vector3 Force
688 {
689 get
690 {
691 Vector3 tmp = GetSOP().PhysActor.Force;
692 return tmp;
693 }
694 set
695 {
696 if (!CanEdit())
697 return;
698
699 GetSOP().PhysActor.Force = value;
700 }
701 }
702
703 public bool FloatOnWater
704 {
705 set
706 {
707 if (!CanEdit())
708 return;
709 GetSOP().PhysActor.FloatOnWater = value;
710 }
711 }
712
713 public void AddForce(Vector3 force, bool pushforce)
714 {
715 if (!CanEdit())
716 return;
717
718 GetSOP().PhysActor.AddForce(force, pushforce);
719 }
720
721 public void AddAngularForce(Vector3 force, bool pushforce)
722 {
723 if (!CanEdit())
724 return;
725
726 GetSOP().PhysActor.AddAngularForce(force, pushforce);
727 }
728
729 public void SetMomentum(Vector3 momentum)
730 {
731 if (!CanEdit())
732 return;
733
734 GetSOP().PhysActor.SetMomentum(momentum);
735 }
736
737 #endregion
738
739 #region Implementation of IObjectShape
740
741 private UUID m_sculptMap = UUID.Zero;
742
743 public UUID SculptMap
744 {
745 get { return m_sculptMap; }
746 set
747 {
748 if (!CanEdit())
749 return;
750
751 m_sculptMap = value;
752 SetPrimitiveSculpted(SculptMap, (byte) SculptType);
753 }
754 }
755
756 private SculptType m_sculptType = Object.SculptType.Default;
757
758 public SculptType SculptType
759 {
760 get { return m_sculptType; }
761 set
762 {
763 if (!CanEdit())
764 return;
765
766 m_sculptType = value;
767 SetPrimitiveSculpted(SculptMap, (byte) SculptType);
768 }
769 }
770
771 public HoleShape HoleType
772 {
773 get { throw new System.NotImplementedException(); }
774 set { throw new System.NotImplementedException(); }
775 }
776
777 public double HoleSize
778 {
779 get { throw new System.NotImplementedException(); }
780 set { throw new System.NotImplementedException(); }
781 }
782
783 public PrimType PrimType
784 {
785 get { return (PrimType)getScriptPrimType(GetSOP().Shape); }
786 set { throw new System.NotImplementedException(); }
787 }
788
789 private void SetPrimitiveSculpted(UUID map, byte type)
790 {
791 ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock();
792
793 SceneObjectPart part = GetSOP();
794
795 UUID sculptId = map;
796
797 shapeBlock.ObjectLocalID = part.LocalId;
798 shapeBlock.PathScaleX = 100;
799 shapeBlock.PathScaleY = 150;
800
801 // retain pathcurve
802 shapeBlock.PathCurve = part.Shape.PathCurve;
803
804 part.Shape.SetSculptProperties((byte)type, sculptId);
805 part.Shape.SculptEntry = true;
806 part.UpdateShape(shapeBlock);
807 }
808
809
810 #endregion
811
812
813 #region Implementation of IObjectSound
814
815 public IObjectSound Sound
816 {
817 get { return this; }
818 }
819
820 public void Play(UUID asset, double volume)
821 {
822 if (!CanEdit())
823 return;
824 ISoundModule module = m_rootScene.RequestModuleInterface<ISoundModule>();
825 if (module != null)
826 {
827 module.SendSound(GetSOP().UUID, asset, volume, true, 0, 0, false, false);
828 }
829 }
830
831 #endregion
832 }
833}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectInventory.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectInventory.cs
new file mode 100644
index 0000000..d20f4a4
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectInventory.cs
@@ -0,0 +1,215 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Generic;
31
32using OpenSim.Framework;
33using OpenSim.Region.Framework.Scenes;
34using OpenMetaverse;
35
36namespace OpenSim.Region.OptionalModules.Scripting.Minimodule.Object
37{
38 public class SOPObjectInventory : IObjectInventory
39 {
40 TaskInventoryDictionary m_privateInventory; /// OpenSim's task inventory
41 Dictionary<UUID, IInventoryItem> m_publicInventory; /// MRM's inventory
42 Scene m_rootScene;
43
44 public SOPObjectInventory(Scene rootScene, TaskInventoryDictionary taskInventory)
45 {
46 m_rootScene = rootScene;
47 m_privateInventory = taskInventory;
48 m_publicInventory = new Dictionary<UUID, IInventoryItem>();
49 }
50
51 /// <summary>
52 /// Fully populate the public dictionary with the contents of the private dictionary
53 /// </summary>
54 /// <description>
55 /// This will only convert those items which hasn't already been converted. ensuring that
56 /// no items are converted twice, and that any references already in use are maintained.
57 /// </description>
58 private void SynchronizeDictionaries()
59 {
60 foreach (TaskInventoryItem privateItem in m_privateInventory.Values)
61 if (!m_publicInventory.ContainsKey(privateItem.ItemID))
62 m_publicInventory.Add(privateItem.ItemID, new InventoryItem(m_rootScene, privateItem));
63 }
64
65 #region IDictionary<UUID, IInventoryItem> implementation
66 public void Add (UUID key, IInventoryItem value)
67 {
68 m_publicInventory.Add(key, value);
69 m_privateInventory.Add(key, InventoryItem.FromInterface(value).ToTaskInventoryItem());
70 }
71
72 public bool ContainsKey (UUID key)
73 {
74 return m_privateInventory.ContainsKey(key);
75 }
76
77 public bool Remove (UUID key)
78 {
79 m_publicInventory.Remove(key);
80 return m_privateInventory.Remove(key);
81 }
82
83 public bool TryGetValue (UUID key, out IInventoryItem value)
84 {
85 value = null;
86
87 bool result = false;
88 if (!m_publicInventory.TryGetValue(key, out value))
89 {
90 // wasn't found in the public inventory
91 TaskInventoryItem privateItem;
92
93 result = m_privateInventory.TryGetValue(key, out privateItem);
94 if (result)
95 {
96 value = new InventoryItem(m_rootScene, privateItem);
97 m_publicInventory.Add(key, value); // add item, so we don't convert again
98 }
99 } else
100 return true;
101
102 return result;
103 }
104
105 public ICollection<UUID> Keys {
106 get {
107 return m_privateInventory.Keys;
108 }
109 }
110
111 public ICollection<IInventoryItem> Values {
112 get {
113 SynchronizeDictionaries();
114 return m_publicInventory.Values;
115 }
116 }
117 #endregion
118
119 #region IEnumerable<KeyValuePair<UUID, IInventoryItem>> implementation
120 public IEnumerator<KeyValuePair<UUID, IInventoryItem>> GetEnumerator ()
121 {
122 SynchronizeDictionaries();
123 return m_publicInventory.GetEnumerator();
124 }
125
126 #endregion
127
128 #region IEnumerable implementation
129 IEnumerator IEnumerable.GetEnumerator ()
130 {
131 SynchronizeDictionaries();
132 return m_publicInventory.GetEnumerator();
133 }
134
135 #endregion
136
137 #region ICollection<KeyValuePair<UUID, IInventoryItem>> implementation
138 public void Add (KeyValuePair<UUID, IInventoryItem> item)
139 {
140 Add(item.Key, item.Value);
141 }
142
143 public void Clear ()
144 {
145 m_publicInventory.Clear();
146 m_privateInventory.Clear();
147 }
148
149 public bool Contains (KeyValuePair<UUID, IInventoryItem> item)
150 {
151 return m_privateInventory.ContainsKey(item.Key);
152 }
153
154 public void CopyTo (KeyValuePair<UUID, IInventoryItem>[] array, int arrayIndex)
155 {
156 throw new NotImplementedException();
157 }
158
159 public bool Remove (KeyValuePair<UUID, IInventoryItem> item)
160 {
161 return Remove(item.Key);
162 }
163
164 public int Count {
165 get {
166 return m_privateInventory.Count;
167 }
168 }
169
170 public bool IsReadOnly {
171 get {
172 return false;
173 }
174 }
175 #endregion
176
177 #region Explicit implementations
178 IInventoryItem System.Collections.Generic.IDictionary<UUID, IInventoryItem>.this[UUID key]
179 {
180 get {
181 IInventoryItem result;
182 if (TryGetValue(key, out result))
183 return result;
184 else
185 throw new KeyNotFoundException("[MRM] The requrested item ID could not be found");
186 }
187 set {
188 m_publicInventory[key] = value;
189 m_privateInventory[key] = InventoryItem.FromInterface(value).ToTaskInventoryItem();
190 }
191 }
192
193 void System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<UUID, IInventoryItem>>.CopyTo(System.Collections.Generic.KeyValuePair<UUID,IInventoryItem>[] array, int offset)
194 {
195 throw new NotImplementedException();
196 }
197 #endregion
198
199 public IInventoryItem this[string name]
200 {
201 get {
202 foreach (TaskInventoryItem i in m_privateInventory.Values)
203 if (i.Name == name)
204 {
205 if (!m_publicInventory.ContainsKey(i.ItemID))
206 m_publicInventory.Add(i.ItemID, new InventoryItem(m_rootScene, i));
207
208 return m_publicInventory[i.ItemID];
209 }
210 throw new KeyNotFoundException();
211 }
212 }
213
214 }
215}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectMaterial.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectMaterial.cs
new file mode 100644
index 0000000..cea738c
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObjectMaterial.cs
@@ -0,0 +1,136 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System.Drawing;
29using OpenMetaverse;
30using OpenSim.Region.Framework.Scenes;
31
32namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
33{
34 class SOPObjectMaterial : System.MarshalByRefObject, IObjectMaterial
35 {
36 private readonly int m_face;
37 private readonly SceneObjectPart m_parent;
38
39 public SOPObjectMaterial(int m_face, SceneObjectPart m_parent)
40 {
41 this.m_face = m_face;
42 this.m_parent = m_parent;
43 }
44
45 public Color Color
46 {
47 get
48 {
49 Color4 res = GetTexface().RGBA;
50 return Color.FromArgb((int) (res.A*255), (int) (res.R*255), (int) (res.G*255), (int) (res.B*255));
51 }
52 set
53 {
54 Primitive.TextureEntry tex = m_parent.Shape.Textures;
55 Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face);
56 texface.RGBA = new Color4(value.R,value.G,value.B,value.A);
57 tex.FaceTextures[m_face] = texface;
58 m_parent.UpdateTextureEntry(tex.GetBytes());
59 }
60 }
61
62 public UUID Texture
63 {
64 get
65 {
66 Primitive.TextureEntryFace texface = GetTexface();
67 return texface.TextureID;
68 }
69 set
70 {
71 Primitive.TextureEntry tex = m_parent.Shape.Textures;
72 Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face);
73 texface.TextureID = value;
74 tex.FaceTextures[m_face] = texface;
75 m_parent.UpdateTextureEntry(tex.GetBytes());
76 }
77 }
78
79 private Primitive.TextureEntryFace GetTexface()
80 {
81 Primitive.TextureEntry tex = m_parent.Shape.Textures;
82 return tex.GetFace((uint)m_face);
83 }
84
85 public TextureMapping Mapping
86 {
87 get { throw new System.NotImplementedException(); }
88 set { throw new System.NotImplementedException(); }
89 }
90
91 public bool Bright
92 {
93 get { return GetTexface().Fullbright; }
94 set
95 {
96 Primitive.TextureEntry tex = m_parent.Shape.Textures;
97 Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face);
98 texface.Fullbright = value;
99 tex.FaceTextures[m_face] = texface;
100 m_parent.UpdateTextureEntry(tex.GetBytes());
101 }
102 }
103
104 public double Bloom
105 {
106 get { return GetTexface().Glow; }
107 set
108 {
109 Primitive.TextureEntry tex = m_parent.Shape.Textures;
110 Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face);
111 texface.Glow = (float) value;
112 tex.FaceTextures[m_face] = texface;
113 m_parent.UpdateTextureEntry(tex.GetBytes());
114 }
115 }
116
117 public bool Shiny
118 {
119 get { return GetTexface().Shiny != Shininess.None; }
120 set
121 {
122 Primitive.TextureEntry tex = m_parent.Shape.Textures;
123 Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face);
124 texface.Shiny = value ? Shininess.High : Shininess.None;
125 tex.FaceTextures[m_face] = texface;
126 m_parent.UpdateTextureEntry(tex.GetBytes());
127 }
128 }
129
130 public bool BumpMap
131 {
132 get { return GetTexface().Bump == Bumpiness.None; }
133 set { throw new System.NotImplementedException(); }
134 }
135 }
136}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs
new file mode 100644
index 0000000..d192309
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs
@@ -0,0 +1,105 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System.Collections;
29using System.Collections.Generic;
30using System.Security;
31using OpenMetaverse;
32using OpenSim.Framework;
33using OpenSim.Region.Framework.Scenes;
34using OpenSim.Region.Framework.Interfaces;
35
36namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
37{
38 class SPAvatar : System.MarshalByRefObject, IAvatar
39 {
40 private readonly Scene m_rootScene;
41 private readonly UUID m_ID;
42 private readonly ISecurityCredential m_security;
43 //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
44
45 public SPAvatar(Scene scene, UUID ID, ISecurityCredential security)
46 {
47 m_rootScene = scene;
48 m_security = security;
49 m_ID = ID;
50 }
51
52 private ScenePresence GetSP()
53 {
54 return m_rootScene.GetScenePresence(m_ID);
55 }
56
57 public string Name
58 {
59 get { return GetSP().Name; }
60 set { throw new SecurityException("Avatar Names are a read-only property."); }
61 }
62
63 public UUID GlobalID
64 {
65 get { return m_ID; }
66 }
67
68 public Vector3 WorldPosition
69 {
70 get { return GetSP().AbsolutePosition; }
71 set { GetSP().Teleport(value); }
72 }
73
74 public bool IsChildAgent
75 {
76 get { return GetSP().IsChildAgent; }
77 }
78
79 #region IAvatar implementation
80 public IAvatarAttachment[] Attachments
81 {
82 get {
83 List<IAvatarAttachment> attachments = new List<IAvatarAttachment>();
84
85 List<AvatarAttachment> internalAttachments = GetSP().Appearance.GetAttachments();
86 foreach (AvatarAttachment attach in internalAttachments)
87 {
88 attachments.Add(new SPAvatarAttachment(m_rootScene, this, attach.AttachPoint,
89 new UUID(attach.ItemID),
90 new UUID(attach.AssetID), m_security));
91 }
92
93 return attachments.ToArray();
94 }
95 }
96
97 public void LoadUrl(IObject sender, string message, string url)
98 {
99 IDialogModule dm = m_rootScene.RequestModuleInterface<IDialogModule>();
100 if (dm != null)
101 dm.SendUrlToUser(GetSP().UUID, sender.Name, sender.GlobalID, GetSP().UUID, false, message, url);
102 }
103 #endregion
104 }
105}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatarAttachment.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatarAttachment.cs
new file mode 100644
index 0000000..570459a
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatarAttachment.cs
@@ -0,0 +1,65 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29
30using OpenMetaverse;
31using OpenSim.Region.Framework.Scenes;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
34{
35 public class SPAvatarAttachment : IAvatarAttachment
36 {
37 private readonly Scene m_rootScene;
38 //private readonly IAvatar m_parent;
39 private readonly int m_location;
40 //private readonly UUID m_itemId;
41 private readonly UUID m_assetId;
42
43 private readonly ISecurityCredential m_security;
44
45 public SPAvatarAttachment(Scene rootScene, IAvatar self, int location, UUID itemId, UUID assetId, ISecurityCredential security)
46 {
47 m_rootScene = rootScene;
48 m_security = security;
49 //m_parent = self;
50 m_location = location;
51 //m_itemId = itemId;
52 m_assetId = assetId;
53 }
54
55 public int Location { get { return m_location; } }
56
57 public IObject Asset
58 {
59 get
60 {
61 return new SOPObject(m_rootScene, m_rootScene.GetSceneObjectPart(m_assetId).LocalId, m_security);
62 }
63 }
64 }
65}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SecurityCredential.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SecurityCredential.cs
new file mode 100644
index 0000000..bc7f6cb
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SecurityCredential.cs
@@ -0,0 +1,62 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31using OpenMetaverse;
32using OpenSim.Region.Framework.Scenes;
33
34namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
35{
36 class SecurityCredential : ISecurityCredential
37 {
38 private readonly ISocialEntity m_owner;
39 private readonly Scene m_scene;
40
41 public SecurityCredential(ISocialEntity m_owner, Scene m_scene)
42 {
43 this.m_owner = m_owner;
44 this.m_scene = m_scene;
45 }
46
47 public ISocialEntity owner
48 {
49 get { return m_owner; }
50 }
51
52 public bool CanEditObject(IObject target)
53 {
54 return m_scene.Permissions.CanEditObject(target.GlobalID, m_owner.GlobalID);
55 }
56
57 public bool CanEditTerrain(int x, int y)
58 {
59 return m_scene.Permissions.CanTerraformLand(m_owner.GlobalID, new Vector3(x, y, 0));
60 }
61 }
62}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/DrunkenTextAppreciationModule.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/DrunkenTextAppreciationModule.cs
new file mode 100644
index 0000000..778bf7d
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/DrunkenTextAppreciationModule.cs
@@ -0,0 +1,64 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using OpenSim.Region.OptionalModules.Scripting.Minimodule;
29
30namespace OpenSim
31{
32 class DrunkenTextAppreciationModule : MRMBase
33 {
34 public override void Start()
35 {
36 World.OnChat += World_OnChat;
37 }
38
39 void World_OnChat(IWorld sender, ChatEventArgs e)
40 {
41 if (e.Sender is IAvatar)
42 {
43 if (!e.Text.Contains("hic!"))
44 {
45 e.Text = e.Text.Replace("s", "sh");
46 e.Text = e.Text.Replace("S", "Sh");
47 e.Text += " ...hic!";
48
49 Host.Object.Say(e.Text);
50 }
51 }
52
53 if (e.Sender is IObject)
54 {
55 // Ignore
56 }
57 }
58
59 public override void Stop()
60 {
61
62 }
63 }
64}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/Microthreads/MicrothreadSample.txt b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/Microthreads/MicrothreadSample.txt
new file mode 100644
index 0000000..d2c204a
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/Microthreads/MicrothreadSample.txt
@@ -0,0 +1,40 @@
1//MRM:C#
2using System.Collections;
3using System.Collections.Generic;
4using OpenSim.Region.OptionalModules.Scripting.Minimodule;
5
6namespace OpenSim
7{
8 class MiniModule : MRMBase
9 {
10 public microthreaded void MicroThreadFunction(string testparam)
11 {
12 Host.Object.Say("Hello " + testparam);
13
14 relax; // the 'relax' keyword gives up processing time.
15 // and should be inserted before, after or in
16 // any computationally "heavy" zones.
17
18 int c = 500;
19 while(c-- < 0) {
20 Host.Object.Say("C=" + c);
21 relax; // Putting 'relax' in microthreaded loops
22 // is an easy way to lower the CPU tax
23 // on your script.
24 }
25
26 }
27
28 public override void Start()
29 {
30 Host.Microthreads.Run(
31 MicroThreadFunction("World!")
32 );
33 }
34
35 public override void Stop()
36 {
37
38 }
39 }
40}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/TestModule.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/TestModule.cs
new file mode 100644
index 0000000..13d0140
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/TestModule.cs
@@ -0,0 +1,98 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System.Collections;
29using System.Collections.Generic;
30using OpenSim.Region.OptionalModules.Scripting.Minimodule;
31
32namespace OpenSim
33{
34 class MiniModule : MRMBase
35 {
36 // private microthreaded Function(params...)
37 private IEnumerable TestMicrothread(string param)
38 {
39 Host.Console.Info("Microthreaded " + param);
40 // relax;
41 yield return null;
42 Host.Console.Info("Microthreaded 2" + param);
43 yield return null;
44 int c = 100;
45 while (c-- < 0)
46 {
47 Host.Console.Info("Microthreaded Looped " + c + " " + param);
48 yield return null;
49 }
50 }
51
52 public void Microthread(IEnumerable thread)
53 {
54
55 }
56
57 public void RunMicrothread()
58 {
59 List<IEnumerator> threads = new List<IEnumerator>();
60 threads.Add(TestMicrothread("A").GetEnumerator());
61 threads.Add(TestMicrothread("B").GetEnumerator());
62 threads.Add(TestMicrothread("C").GetEnumerator());
63
64 Microthread(TestMicrothread("Ohai"));
65
66 int i = 0;
67 while (threads.Count > 0)
68 {
69 i++;
70 bool running = threads[i%threads.Count].MoveNext();
71
72 if (!running)
73 threads.Remove(threads[i%threads.Count]);
74 }
75 }
76
77 public override void Start()
78 {
79 // Say Hello
80 Host.Object.Say("Hello, Avatar!");
81
82 // Register ourselves to listen
83 // for touch events.
84 Host.Object.OnTouch += OnTouched;
85 }
86
87 // This is our touch event handler
88 void OnTouched(IObject sender, TouchEventArgs e)
89 {
90 Host.Object.Say("Touched.");
91 }
92
93 public override void Stop()
94 {
95
96 }
97 }
98}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
new file mode 100644
index 0000000..f2324d2
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
@@ -0,0 +1,250 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System.Collections.Generic;
29using OpenMetaverse;
30using OpenSim.Framework;
31using OpenSim.Region.Framework.Interfaces;
32using OpenSim.Region.Framework.Scenes;
33using OpenSim.Region.OptionalModules.Scripting.Minimodule.WorldX;
34
35namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
36{
37 public class World : System.MarshalByRefObject, IWorld, IWorldAudio
38 {
39 private readonly Scene m_internalScene;
40 private readonly ISecurityCredential m_security;
41 private readonly Heightmap m_heights;
42
43 private readonly ObjectAccessor m_objs;
44
45 public World(Scene internalScene, ISecurityCredential securityCredential)
46 {
47 m_security = securityCredential;
48 m_internalScene = internalScene;
49 m_heights = new Heightmap(m_internalScene);
50 m_objs = new ObjectAccessor(m_internalScene, securityCredential);
51 }
52
53 #region Events
54
55 #region OnNewUser
56
57 private event OnNewUserDelegate _OnNewUser;
58 private bool _OnNewUserActive;
59
60 public event OnNewUserDelegate OnNewUser
61 {
62 add
63 {
64 if (!_OnNewUserActive)
65 {
66 _OnNewUserActive = true;
67 m_internalScene.EventManager.OnNewPresence += EventManager_OnNewPresence;
68 }
69
70 _OnNewUser += value;
71 }
72 remove
73 {
74 _OnNewUser -= value;
75
76 if (_OnNewUser == null)
77 {
78 _OnNewUserActive = false;
79 m_internalScene.EventManager.OnNewPresence -= EventManager_OnNewPresence;
80 }
81 }
82 }
83
84 void EventManager_OnNewPresence(ScenePresence presence)
85 {
86 if (_OnNewUser != null)
87 {
88 NewUserEventArgs e = new NewUserEventArgs();
89 e.Avatar = new SPAvatar(m_internalScene, presence.UUID, m_security);
90 _OnNewUser(this, e);
91 }
92 }
93
94 #endregion
95
96 #region OnChat
97 private event OnChatDelegate _OnChat;
98 private bool _OnChatActive;
99
100 public IWorldAudio Audio
101 {
102 get { return this; }
103 }
104
105 public event OnChatDelegate OnChat
106 {
107 add
108 {
109 if (!_OnChatActive)
110 {
111 _OnChatActive = true;
112 m_internalScene.EventManager.OnChatFromClient += EventManager_OnChatFromClient;
113 m_internalScene.EventManager.OnChatFromWorld += EventManager_OnChatFromWorld;
114 }
115
116 _OnChat += value;
117 }
118 remove
119 {
120 _OnChat -= value;
121
122 if (_OnChat == null)
123 {
124 _OnChatActive = false;
125 m_internalScene.EventManager.OnChatFromClient -= EventManager_OnChatFromClient;
126 m_internalScene.EventManager.OnChatFromWorld -= EventManager_OnChatFromWorld;
127 }
128 }
129 }
130
131 void EventManager_OnChatFromWorld(object sender, OSChatMessage chat)
132 {
133 if (_OnChat != null)
134 {
135 HandleChatPacket(chat);
136 return;
137 }
138 }
139
140 private void HandleChatPacket(OSChatMessage chat)
141 {
142 if (string.IsNullOrEmpty(chat.Message))
143 return;
144
145 // Object?
146 if (chat.Sender == null && chat.SenderObject != null)
147 {
148 ChatEventArgs e = new ChatEventArgs();
149 e.Sender = new SOPObject(m_internalScene, ((SceneObjectPart) chat.SenderObject).LocalId, m_security);
150 e.Text = chat.Message;
151 e.Channel = chat.Channel;
152
153 _OnChat(this, e);
154 return;
155 }
156 // Avatar?
157 if (chat.Sender != null && chat.SenderObject == null)
158 {
159 ChatEventArgs e = new ChatEventArgs();
160 e.Sender = new SPAvatar(m_internalScene, chat.SenderUUID, m_security);
161 e.Text = chat.Message;
162 e.Channel = chat.Channel;
163
164 _OnChat(this, e);
165 return;
166 }
167 // Skip if other
168 }
169
170 void EventManager_OnChatFromClient(object sender, OSChatMessage chat)
171 {
172 if (_OnChat != null)
173 {
174 HandleChatPacket(chat);
175 return;
176 }
177 }
178 #endregion
179
180 #endregion
181
182 public IObjectAccessor Objects
183 {
184 get { return m_objs; }
185 }
186
187 public IParcel[] Parcels
188 {
189 get
190 {
191 List<ILandObject> m_los = m_internalScene.LandChannel.AllParcels();
192 List<IParcel> m_parcels = new List<IParcel>(m_los.Count);
193
194 foreach (ILandObject landObject in m_los)
195 {
196 m_parcels.Add(new LOParcel(m_internalScene, landObject.LandData.LocalID));
197 }
198
199 return m_parcels.ToArray();
200 }
201 }
202
203
204 public IAvatar[] Avatars
205 {
206 get
207 {
208 EntityBase[] ents = m_internalScene.Entities.GetAllByType<ScenePresence>();
209 IAvatar[] rets = new IAvatar[ents.Length];
210
211 for (int i = 0; i < ents.Length; i++)
212 {
213 EntityBase ent = ents[i];
214 rets[i] = new SPAvatar(m_internalScene, ent.UUID, m_security);
215 }
216
217 return rets;
218 }
219 }
220
221 public IHeightmap Terrain
222 {
223 get { return m_heights; }
224 }
225
226 #region Implementation of IWorldAudio
227
228 public void PlaySound(UUID audio, Vector3 position, double volume)
229 {
230 ISoundModule soundModule = m_internalScene.RequestModuleInterface<ISoundModule>();
231 if (soundModule != null)
232 {
233 soundModule.TriggerSound(audio, UUID.Zero, UUID.Zero, UUID.Zero, volume, position,
234 m_internalScene.RegionInfo.RegionHandle, 0);
235 }
236 }
237
238 public void PlaySound(UUID audio, Vector3 position)
239 {
240 ISoundModule soundModule = m_internalScene.RequestModuleInterface<ISoundModule>();
241 if (soundModule != null)
242 {
243 soundModule.TriggerSound(audio, UUID.Zero, UUID.Zero, UUID.Zero, 1.0, position,
244 m_internalScene.RegionInfo.RegionHandle, 0);
245 }
246 }
247
248 #endregion
249 }
250}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/WorldX/IWorldAudio.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/WorldX/IWorldAudio.cs
new file mode 100644
index 0000000..712a676
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/WorldX/IWorldAudio.cs
@@ -0,0 +1,40 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Text;
31using OpenMetaverse;
32
33namespace OpenSim.Region.OptionalModules.Scripting.Minimodule.WorldX
34{
35 public interface IWorldAudio
36 {
37 void PlaySound(UUID audio, Vector3 position, double volume);
38 void PlaySound(UUID audio, Vector3 position);
39 }
40}