From 0b6e332e16cd7df588d3502318a722706d78928c Mon Sep 17 00:00:00 2001 From: MW Date: Thu, 19 Jul 2007 10:44:19 +0000 Subject: Added some Alert methods to Scene , and a console command handler. So from the console to send alerts use : alert general , for a instance wide message , or use alert firstname secondname to send a alert to one user. (TODO: add region wide messages). --- OpenSim/Framework/General/Interfaces/IClientAPI.cs | 3 +- OpenSim/Framework/General/NullClientAPI.cs | 5 +- OpenSim/Region/Application/OpenSimMain.cs | 7 + OpenSim/Region/ClientStack/ClientView.API.cs | 26 +++ .../Environment/Scenes/AllNewSceneObjectGroup.cs | 244 ------------------- .../Environment/Scenes/AllNewSceneObjectGroup2.cs | 6 +- .../Environment/Scenes/AllNewSceneObjectPart.cs | 258 --------------------- OpenSim/Region/Environment/Scenes/Primitive.cs | 2 +- OpenSim/Region/Environment/Scenes/Scene.cs | 54 +++++ .../Region/Examples/SimpleApp/MyNpcCharacter.cs | 3 + 10 files changed, 100 insertions(+), 508 deletions(-) delete mode 100644 OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup.cs delete mode 100644 OpenSim/Region/Environment/Scenes/AllNewSceneObjectPart.cs (limited to 'OpenSim') diff --git a/OpenSim/Framework/General/Interfaces/IClientAPI.cs b/OpenSim/Framework/General/Interfaces/IClientAPI.cs index abde0ab..808a857 100644 --- a/OpenSim/Framework/General/Interfaces/IClientAPI.cs +++ b/OpenSim/Framework/General/Interfaces/IClientAPI.cs @@ -190,6 +190,7 @@ namespace OpenSim.Framework.Interfaces void SendInventoryItemDetails(LLUUID ownerID, LLUUID folderID, InventoryItemBase item); void SendNameReply(LLUUID profileId, string firstname, string lastname); - + void SendAlertMessage(string message); + void SendAgentAlertMessage(string message, bool modal); } } diff --git a/OpenSim/Framework/General/NullClientAPI.cs b/OpenSim/Framework/General/NullClientAPI.cs index f753d05..cfba228 100644 --- a/OpenSim/Framework/General/NullClientAPI.cs +++ b/OpenSim/Framework/General/NullClientAPI.cs @@ -125,5 +125,8 @@ namespace OpenSim.Framework public virtual void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List items){} public virtual void SendInventoryItemDetails(LLUUID ownerID, LLUUID folderID, InventoryItemBase item){} public virtual void SendNameReply(LLUUID profileId, string firstname, string lastname){} - } + + public void SendAlertMessage(string message) { } + public void SendAgentAlertMessage(string message, bool modal) { } + } } diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs index 81523e0..8a1e0f1 100644 --- a/OpenSim/Region/Application/OpenSimMain.cs +++ b/OpenSim/Region/Application/OpenSimMain.cs @@ -361,6 +361,13 @@ namespace OpenSim } break; + case "alert": + for (int i = 0; i < m_localWorld.Count; i++) + { + ((Scene)m_localWorld[i]).HandleAlertCommand(cmdparams); + } + break; + case "quit": case "shutdown": Shutdown(); diff --git a/OpenSim/Region/ClientStack/ClientView.API.cs b/OpenSim/Region/ClientStack/ClientView.API.cs index 81fa58b..8a5e631 100644 --- a/OpenSim/Region/ClientStack/ClientView.API.cs +++ b/OpenSim/Region/ClientStack/ClientView.API.cs @@ -36,6 +36,7 @@ using OpenSim.Framework.Console; using OpenSim.Framework.Interfaces; using OpenSim.Framework.Types; using OpenSim.Framework.Data; +using OpenSim.Framework.Utilities; namespace OpenSim.Region.ClientStack { @@ -576,6 +577,31 @@ namespace OpenSim.Region.ClientStack this.OutPacket(inventoryReply); } + /// + /// + /// + /// + public void SendAlertMessage(string message) + { + AlertMessagePacket alertPack = new AlertMessagePacket(); + alertPack.AlertData.Message = Helpers.StringToField(message); + OutPacket(alertPack); + } + + /// + /// + /// + /// + /// + public void SendAgentAlertMessage(string message, bool modal) + { + AgentAlertMessagePacket alertPack = new AgentAlertMessagePacket(); + alertPack.AgentData.AgentID = this.AgentID; + alertPack.AlertData.Message = Helpers.StringToField(message); + alertPack.AlertData.Modal = modal; + OutPacket(alertPack); + } + #region Appearance/ Wearables Methods /// diff --git a/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup.cs deleted file mode 100644 index 93fbe74..0000000 --- a/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup.cs +++ /dev/null @@ -1,244 +0,0 @@ -using System.Collections.Generic; -using System.Text; -using Axiom.Math; -using libsecondlife; -using libsecondlife.Packets; -using OpenSim.Framework.Interfaces; -using OpenSim.Framework.Types; -using OpenSim.Physics.Manager; - -namespace OpenSim.Region.Environment.Scenes -{ - public delegate void PrimCountTaintedDelegate(); - - public class AllNewSceneObjectGroup : EntityBase - { - private Encoding enc = Encoding.ASCII; - - protected AllNewSceneObjectPart m_rootPart; - protected Dictionary m_parts = new Dictionary(); - - public event PrimCountTaintedDelegate OnPrimCountTainted; - - /// - /// - /// - public int primCount - { - get - { - return 1; - } - } - - /// - /// - /// - public LLVector3 GroupCentrePoint - { - get - { - return new LLVector3(0, 0, 0); - } - } - - /// - /// - /// - public AllNewSceneObjectGroup() - { - - } - - /// - /// - /// - public void FlagGroupForFullUpdate() - { - - } - - /// - /// - /// - public void FlagGroupForTerseUpdate() - { - - } - - /// - /// - /// - /// - public void LinkToGroup(AllNewSceneObjectGroup objectGroup) - { - - } - - /// - /// - /// - /// - /// - public AllNewSceneObjectPart HasChildPrim(LLUUID primID) - { - AllNewSceneObjectPart childPart = null; - if (this.m_parts.ContainsKey(primID)) - { - childPart = this.m_parts[primID]; - } - return childPart; - } - - /// - /// - /// - /// - /// - public AllNewSceneObjectPart HasChildPrim(uint localID) - { - foreach (AllNewSceneObjectPart part in this.m_parts.Values) - { - if (part.m_localID == localID) - { - return part; - } - } - return null; - } - - public void TriggerTainted() - { - if (OnPrimCountTainted != null) - { - this.OnPrimCountTainted(); - } - } - - /// - /// - /// - /// - /// - /// - public void GrapMovement(LLVector3 offset, LLVector3 pos, IClientAPI remoteClient) - { - this.Pos = pos; - } - - /// - /// - /// - /// - public void GetProperites(IClientAPI client) - { - ObjectPropertiesPacket proper = new ObjectPropertiesPacket(); - proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1]; - proper.ObjectData[0] = new ObjectPropertiesPacket.ObjectDataBlock(); - proper.ObjectData[0].ItemID = LLUUID.Zero; - proper.ObjectData[0].CreationDate = (ulong)this.m_rootPart.CreationDate; - proper.ObjectData[0].CreatorID = this.m_rootPart.CreatorID; - proper.ObjectData[0].FolderID = LLUUID.Zero; - proper.ObjectData[0].FromTaskID = LLUUID.Zero; - proper.ObjectData[0].GroupID = LLUUID.Zero; - proper.ObjectData[0].InventorySerial = 0; - proper.ObjectData[0].LastOwnerID = this.m_rootPart.LastOwnerID; - proper.ObjectData[0].ObjectID = this.m_uuid; - proper.ObjectData[0].OwnerID = this.m_rootPart.OwnerID; - proper.ObjectData[0].TouchName = enc.GetBytes(this.m_rootPart.TouchName + "\0"); - proper.ObjectData[0].TextureID = new byte[0]; - proper.ObjectData[0].SitName = enc.GetBytes(this.m_rootPart.SitName + "\0"); - proper.ObjectData[0].Name = enc.GetBytes(this.m_rootPart.Name + "\0"); - proper.ObjectData[0].Description = enc.GetBytes(this.m_rootPart.Description + "\0"); - proper.ObjectData[0].OwnerMask = this.m_rootPart.OwnerMask; - proper.ObjectData[0].NextOwnerMask = this.m_rootPart.NextOwnerMask; - proper.ObjectData[0].GroupMask = this.m_rootPart.GroupMask; - proper.ObjectData[0].EveryoneMask = this.m_rootPart.EveryoneMask; - proper.ObjectData[0].BaseMask = this.m_rootPart.BaseMask; - - client.OutPacket(proper); - } - - /// - /// - /// - /// - private void SetPartAsRoot(AllNewSceneObjectPart part) - { - this.m_rootPart = part; - this.m_uuid = part.uuid; - this.m_localId = part.m_localID; - part.ParentID = 0; - part.UpdateHandler = delegate(ref LLVector3 pos, UpdateType direction, AllNewSceneObjectPart objectPart) - { - switch (direction) - { - case UpdateType.GroupPositionEdit: - this.m_pos = new LLVector3(pos.X, pos.Y, pos.Z); - pos.X = 0; - pos.Y = 0; - pos.Z = 0; - break; - - case UpdateType.SinglePositionEdit: - LLVector3 newPos = new LLVector3(pos.X, pos.Y, pos.Z); - LLVector3 oldPos = new LLVector3(this.Pos.X + objectPart.OffsetPosition.X, this.Pos.Y + objectPart.OffsetPosition.Y, this.Pos.Z + objectPart.OffsetPosition.Z); - LLVector3 diff = oldPos - newPos; - Axiom.Math.Vector3 axDiff = new Vector3(diff.X, diff.Y, diff.Z); - Axiom.Math.Quaternion partRotation = new Quaternion(objectPart.RotationOffset.W, objectPart.RotationOffset.X, objectPart.RotationOffset.Y, objectPart.RotationOffset.Z); - axDiff = partRotation.Inverse() * axDiff; - diff.X = axDiff.x; - diff.Y = axDiff.y; - diff.Z = axDiff.z; - - foreach (AllNewSceneObjectPart obPart in this.m_parts.Values) - { - if (obPart.uuid == objectPart.uuid) - { - obPart.OffsetPosition = obPart.OffsetPosition + diff; - } - } - this.Pos = newPos; - pos.X = newPos.X; - pos.Y = newPos.Y; - pos.Z = newPos.Z; - break; - - case UpdateType.ResizeOffset: - this.Pos += pos; - LLVector3 offset = new LLVector3(-pos.X, -pos.Y, -pos.Z); - foreach (AllNewSceneObjectPart obPart2 in this.m_parts.Values) - { - if (obPart2.uuid == objectPart.uuid) - { - obPart2.OffsetPosition = obPart2.OffsetPosition + offset; - } - } - pos.X = 0; - pos.Y = 0; - pos.Z = 0; - break; - - case UpdateType.SingleRotationEdit: - break; - } - - - return pos; - }; - } - - /// - /// - /// - /// - private void SetPartAsNonRoot(AllNewSceneObjectPart part) - { - part.ParentID = this.m_rootPart.m_localID; - part.UpdateHandler = delegate(ref LLVector3 pos, UpdateType direction, AllNewSceneObjectPart objectPart) - { - return pos; - }; - } - } -} diff --git a/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup2.cs b/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup2.cs index 5d3a406..4f48217 100644 --- a/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup2.cs +++ b/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup2.cs @@ -225,7 +225,7 @@ namespace OpenSim.Region.Environment.Scenes #region Roation public void UpdateGroupRotation(LLQuaternion rot) { - this.m_rootPart.RotationOffset = new LLQuaternion(rot.X, rot.Y, rot.Z, rot.W); + this.m_rootPart.UpdateRotation(rot); } /// @@ -233,9 +233,9 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void UpdateGroupMouseRotation(LLVector3 pos, LLQuaternion rot) + public void UpdateGroupRotation(LLVector3 pos, LLQuaternion rot) { - this.m_rootPart.RotationOffset = new LLQuaternion(rot.X, rot.Y, rot.Z, rot.W); + this.m_rootPart.UpdateRotation(rot); this.m_pos = pos; } diff --git a/OpenSim/Region/Environment/Scenes/AllNewSceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/AllNewSceneObjectPart.cs deleted file mode 100644 index 4b05e31..0000000 --- a/OpenSim/Region/Environment/Scenes/AllNewSceneObjectPart.cs +++ /dev/null @@ -1,258 +0,0 @@ -using System.Collections.Generic; -using System.Text; -using System; -using Axiom.Math; -using libsecondlife; -using libsecondlife.Packets; -using OpenSim.Framework.Interfaces; -using OpenSim.Framework.Types; - -namespace OpenSim.Region.Environment.Scenes -{ - public enum UpdateType - { - OutGoingOffset, - GroupPositionEdit, - SinglePositionEdit, - ResizeOffset, - SingleRotationEdit - } - - public delegate LLVector3 HandleUpdate(ref LLVector3 pos, UpdateType updateType, AllNewSceneObjectPart objectPart); - - public class AllNewSceneObjectPart - { - private const uint FULL_MASK_PERMISSIONS = 2147483647; - - private ulong m_regionHandle; - private uint m_flags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456 + 128; // HOUSEKEEPING : Do we really need this? - //private Dictionary inventoryItems; - - public string SitName = ""; - public string TouchName = ""; - public string Text = ""; - - public LLUUID CreatorID; - public LLUUID OwnerID; - public LLUUID LastOwnerID; - public Int32 CreationDate; - - public LLUUID uuid; - public uint m_localID; - - public uint ParentID = 0; - - public uint OwnerMask = FULL_MASK_PERMISSIONS; - public uint NextOwnerMask = FULL_MASK_PERMISSIONS; - public uint GroupMask = FULL_MASK_PERMISSIONS; - public uint EveryoneMask = FULL_MASK_PERMISSIONS; - public uint BaseMask = FULL_MASK_PERMISSIONS; - - protected PrimitiveBaseShape m_Shape; - - protected AllNewSceneObjectGroup m_parentGroup; - - public HandleUpdate UpdateHandler; - - #region Properties - protected string m_name; - /// - /// - /// - public virtual string Name - { - get { return m_name; } - set { m_name = value; } - } - - protected LLVector3 m_offset; - public LLVector3 OffsetPosition - { - get - { - return m_offset; - } - set - { - m_offset = value; - } - } - - protected LLQuaternion m_rotationOffset; - public LLQuaternion RotationOffset - { - get - { - return m_rotationOffset; - } - set - { - m_rotationOffset = value; - } - } - - private string m_description = ""; - public string Description - { - get - { - return this.m_description; - } - set - { - this.m_description = value; - } - } - - public PrimitiveBaseShape Shape - { - get - { - return this.m_Shape; - } - } - - public LLVector3 Scale - { - set - { - this.m_Shape.Scale = value; - } - get - { - return this.m_Shape.Scale; - } - } - #endregion - - #region Constructors - public AllNewSceneObjectPart(ulong regionHandle, AllNewSceneObjectGroup parent, LLUUID ownerID, uint localID, PrimitiveBaseShape shape, LLVector3 position) - { - this.m_regionHandle = regionHandle; - this.m_parentGroup = parent; - - this.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; - this.OwnerID = ownerID; - this.CreatorID = this.OwnerID; - this.LastOwnerID = LLUUID.Zero; - this.uuid = LLUUID.Random(); - this.m_localID = (uint)(localID); - this.m_Shape = shape; - - this.UpdateHandler(ref position, UpdateType.GroupPositionEdit, this); - this.OffsetPosition = position; - } - #endregion - - #region Shape - /// - /// - /// - /// - public void UpdateShape(ObjectShapePacket.ObjectDataBlock shapeBlock) - { - this.m_Shape.PathBegin = shapeBlock.PathBegin; - this.m_Shape.PathEnd = shapeBlock.PathEnd; - this.m_Shape.PathScaleX = shapeBlock.PathScaleX; - this.m_Shape.PathScaleY = shapeBlock.PathScaleY; - this.m_Shape.PathShearX = shapeBlock.PathShearX; - this.m_Shape.PathShearY = shapeBlock.PathShearY; - this.m_Shape.PathSkew = shapeBlock.PathSkew; - this.m_Shape.ProfileBegin = shapeBlock.ProfileBegin; - this.m_Shape.ProfileEnd = shapeBlock.ProfileEnd; - this.m_Shape.PathCurve = shapeBlock.PathCurve; - this.m_Shape.ProfileCurve = shapeBlock.ProfileCurve; - this.m_Shape.ProfileHollow = shapeBlock.ProfileHollow; - this.m_Shape.PathRadiusOffset = shapeBlock.PathRadiusOffset; - this.m_Shape.PathRevolutions = shapeBlock.PathRevolutions; - this.m_Shape.PathTaperX = shapeBlock.PathTaperX; - this.m_Shape.PathTaperY = shapeBlock.PathTaperY; - this.m_Shape.PathTwist = shapeBlock.PathTwist; - this.m_Shape.PathTwistBegin = shapeBlock.PathTwistBegin; - } - #endregion - - #region Texture - /// - /// - /// - /// - public void UpdateTextureEntry(byte[] textureEntry) - { - this.m_Shape.TextureEntry = textureEntry; - } - #endregion - - #region Position - /// - /// - /// - /// - public void UpdateGroupPosition(LLVector3 pos) - { - LLVector3 newPos = new LLVector3(pos.X, pos.Y, pos.Z); - this.UpdateHandler(ref newPos, UpdateType.GroupPositionEdit, this); - this.OffsetPosition = newPos; - } - - public void UpdateSinglePosition(LLVector3 pos) - { - LLVector3 newPos = new LLVector3(pos.X, pos.Y, pos.Z); - this.UpdateHandler(ref newPos, UpdateType.SinglePositionEdit, this); - this.OffsetPosition = newPos; - } - #endregion - - #region rotation - public void UpdateGroupRotation(LLQuaternion rot) - { - this.RotationOffset = new LLQuaternion(rot.X, rot.Y, rot.Z, rot.W); - } - - /// - /// - /// - /// - /// - public void UpdateGroupMouseRotation(LLVector3 pos, LLQuaternion rot) - { - this.RotationOffset = new LLQuaternion(rot.X, rot.Y, rot.Z, rot.W); - this.UpdateHandler(ref pos, UpdateType.GroupPositionEdit, this); - this.OffsetPosition = pos; - } - - /// - /// - /// - /// - public void UpdateSingleRotation(LLQuaternion rot) - { - //Console.WriteLine("updating single prim rotation"); - Axiom.Math.Quaternion axRot = new Quaternion(rot.W, rot.X, rot.Y, rot.Z); - Axiom.Math.Quaternion oldParentRot = new Quaternion(this.RotationOffset.W, this.RotationOffset.X, this.RotationOffset.Y, this.RotationOffset.Z); - this.RotationOffset = new LLQuaternion(axRot.x, axRot.y, axRot.z, axRot.w); - - LLVector3 offset = this.OffsetPosition; - this.UpdateHandler(ref offset, UpdateType.SingleRotationEdit, this); - } - #endregion - - #region Resizing/Scale - /// - /// - /// - /// - public void ResizeGoup(LLVector3 scale) - { - LLVector3 offset = (scale - this.m_Shape.Scale); - offset.X /= 2; - offset.Y /= 2; - offset.Z /= 2; - - this.UpdateHandler(ref offset, UpdateType.ResizeOffset, this); - this.OffsetPosition += offset; - this.m_Shape.Scale = scale; - } - #endregion - } -} diff --git a/OpenSim/Region/Environment/Scenes/Primitive.cs b/OpenSim/Region/Environment/Scenes/Primitive.cs index 67ba500..f421529 100644 --- a/OpenSim/Region/Environment/Scenes/Primitive.cs +++ b/OpenSim/Region/Environment/Scenes/Primitive.cs @@ -9,7 +9,7 @@ using OpenSim.Framework.Types; namespace OpenSim.Region.Environment.Scenes { - // public delegate void PrimCountTaintedDelegate(); + public delegate void PrimCountTaintedDelegate(); public class Primitive : EntityBase { diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 7ed4c96..f435681 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -910,5 +910,59 @@ namespace OpenSim.Region.Environment.Scenes } #endregion + + #region Alert Methods + public void SendGeneralAlert(string message) + { + foreach (ScenePresence presence in this.Avatars.Values) + { + presence.ControllingClient.SendAlertMessage(message); + } + } + + public void SendAlertToUser(LLUUID agentID, string message, bool modal) + { + if (this.Avatars.ContainsKey(agentID)) + { + this.Avatars[agentID].ControllingClient.SendAgentAlertMessage(message, modal); + } + } + + public void SendAlertToUser(string firstName, string lastName, string message, bool modal) + { + foreach (ScenePresence presence in this.Avatars.Values) + { + if ((presence.firstname == firstName) && (presence.lastname == lastName)) + { + presence.ControllingClient.SendAgentAlertMessage(message, modal); + break; + } + } + } + + public void HandleAlertCommand(string[] commandParams) + { + if (commandParams[0] == "general") + { + string message = this.CombineParams(commandParams, 1); + this.SendGeneralAlert(message); + } + else + { + string message = this.CombineParams(commandParams, 2); + this.SendAlertToUser(commandParams[0], commandParams[1], message, false); + } + } + + private string CombineParams(string[] commandParams, int pos) + { + string result = ""; + for (int i = pos; i < commandParams.Length; i++) + { + result += commandParams[i]+ " "; + } + return result; + } + #endregion } } \ No newline at end of file diff --git a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs index 8274912..7acef97 100644 --- a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs @@ -141,6 +141,9 @@ namespace SimpleApp public virtual void SendInventoryItemDetails(LLUUID ownerID, LLUUID folderID, InventoryItemBase item) { } public virtual void SendNameReply(LLUUID profileId, string firstname, string lastname) { } + public void SendAlertMessage(string message) { } + public void SendAgentAlertMessage(string message, bool modal) { } + public virtual void SendRegionHandshake(RegionInfo regionInfo) { this.OnRegionHandShakeReply(this); -- cgit v1.1