diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/IAvatar.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/IAvatar.cs
index a500154b2c..fef85dd9e5 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/IAvatar.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/IAvatar.cs
@@ -32,10 +32,8 @@ using OpenMetaverse;
namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
{
- public interface IAvatar
+ public interface IAvatar : IEntity
{
- string Name { get; }
- UUID GlobalID { get; }
- Vector3 Position { get; }
+
}
}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/IObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/IObject.cs
index fd62328f0c..dc2e3fa290 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/IObject.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/IObject.cs
@@ -48,7 +48,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
public delegate void OnTouchDelegate(IObject sender, TouchEventArgs e);
- public interface IObject
+ public interface IObject : IEntity
{
#region Events
@@ -91,17 +91,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
///
uint LocalID { get; }
- ///
- /// The global 'world-unique' ID for this object.
- /// (Note, may not actually be world unique)
- ///
- UUID GlobalID { get; }
-
- ///
- /// The name of this Object.
- ///
- String Name { get; set; }
-
///
/// The description assigned to this object.
///
@@ -140,11 +129,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
///
Quaternion OffsetRotation { get; set; }
- ///
- /// The position of the object relative to the Scene
- ///
- Vector3 WorldPosition { get; set; }
-
///
/// The position of the object relative to a parent object
/// If root, works the same as WorldPosition
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/IWorld.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/IWorld.cs
index b35b57d5a4..e7d902482f 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/IWorld.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/IWorld.cs
@@ -25,13 +25,25 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+using System;
+
namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
{
+ public class ChatEventArgs : EventArgs
+ {
+ public string Text;
+ public IEntity Sender;
+ }
+
+ public delegate void OnChatDelegate(IWorld sender, ChatEventArgs e);
+
public interface IWorld
{
IObjectAccessor Objects { get; }
IAvatar[] Avatars { get; }
IParcel[] Parcels { get; }
IHeightmap Terrain { get; }
+
+ event OnChatDelegate OnChat;
}
}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs
index 25b547cb01..41074c3f10 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SPAvatar.cs
@@ -25,6 +25,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+using System;
using OpenMetaverse;
using OpenSim.Region.Framework.Scenes;
@@ -49,6 +50,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
public string Name
{
get { return GetSP().Name; }
+ set { throw new InvalidOperationException("Avatar Names are a read-only property."); }
}
public UUID GlobalID
@@ -56,9 +58,10 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
get { return m_ID; }
}
- public Vector3 Position
+ public Vector3 WorldPosition
{
get { return GetSP().AbsolutePosition; }
+ set { GetSP().AbsolutePosition = value; }
}
}
}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
index 05a6a84e28..e3553bf3d4 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
@@ -26,6 +26,7 @@
*/
using System.Collections.Generic;
+using OpenSim.Framework;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
@@ -45,6 +46,84 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
m_objs = new ObjectAccessor(m_internalScene);
}
+ #region Events
+
+ #region OnChat
+ private event OnChatDelegate _OnChat;
+ private bool _OnChatActive;
+
+ public event OnChatDelegate OnChat
+ {
+ add
+ {
+ if (!_OnChatActive)
+ {
+ _OnChatActive = true;
+ m_internalScene.EventManager.OnChatFromClient += EventManager_OnChatFromClient;
+ m_internalScene.EventManager.OnChatFromWorld += EventManager_OnChatFromWorld;
+ }
+
+ _OnChat += value;
+ }
+ remove
+ {
+ _OnChat -= value;
+
+ if (_OnChat == null)
+ {
+ _OnChatActive = false;
+ m_internalScene.EventManager.OnChatFromClient -= EventManager_OnChatFromClient;
+ m_internalScene.EventManager.OnChatFromWorld -= EventManager_OnChatFromWorld;
+ }
+ }
+ }
+
+ void EventManager_OnChatFromWorld(object sender, OpenSim.Framework.OSChatMessage chat)
+ {
+ if (_OnChat != null)
+ {
+ HandleChatPacket(chat);
+ return;
+ }
+ }
+
+ private void HandleChatPacket(OSChatMessage chat)
+ {
+ // Object?
+ if (chat.Sender == null && chat.SenderObject != null)
+ {
+ ChatEventArgs e = new ChatEventArgs();
+ e.Sender = new SOPObject(m_internalScene, ((SceneObjectPart) chat.SenderObject).LocalId);
+ e.Text = chat.Message;
+
+ _OnChat(this, e);
+ return;
+ }
+ // Avatar?
+ if (chat.SenderObject != null && chat.SenderObject == null)
+ {
+ ChatEventArgs e = new ChatEventArgs();
+ e.Sender = new SPAvatar(m_internalScene, chat.SenderUUID);
+ e.Text = chat.Message;
+
+ _OnChat(this, e);
+ return;
+ }
+ // Skip if other
+ }
+
+ void EventManager_OnChatFromClient(object sender, OpenSim.Framework.OSChatMessage chat)
+ {
+ if (_OnChat != null)
+ {
+ HandleChatPacket(chat);
+ return;
+ }
+ }
+ #endregion
+
+ #endregion
+
public IObjectAccessor Objects
{
get { return m_objs; }