From e07548d703798bfd661c1ab89cc3b48c936d0a77 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 4 Mar 2010 20:08:25 +0000 Subject: move linden notecard parsing from LSL_Api.cs to SLUtil so that region modules can use it --- OpenSim/Region/Framework/Scenes/EventManager.cs | 30 +++++++++++----------- .../Framework/Scenes/SceneObjectPartInventory.cs | 1 - 2 files changed, 15 insertions(+), 16 deletions(-) (limited to 'OpenSim/Region/Framework') diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index ac04462..f0d346f 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs @@ -110,21 +110,24 @@ namespace OpenSim.Region.Framework.Scenes public event OnSetRootAgentSceneDelegate OnSetRootAgentScene; /// - /// Called when an object is touched/grabbed. + /// Fired when an object is touched/grabbed. /// /// The originalID is the local ID of the part that was actually touched. The localID itself is always that of - /// the root part. - public delegate void ObjectGrabDelegate(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs); + /// the root part. public event ObjectGrabDelegate OnObjectGrab; + public delegate void ObjectGrabDelegate(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs); public event ObjectGrabDelegate OnObjectGrabbing; public event ObjectDeGrabDelegate OnObjectDeGrab; public event ScriptResetDelegate OnScriptReset; - public event OnPermissionErrorDelegate OnPermissionError; + public event OnPermissionErrorDelegate OnPermissionError; - public delegate void NewRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource); + /// + /// Fired when a new script is created. + /// public event NewRezScript OnRezScript; + public delegate void NewRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource); public delegate void RemoveScript(uint localID, UUID itemID); public event RemoveScript OnRemoveScript; @@ -166,38 +169,35 @@ namespace OpenSim.Region.Framework.Scenes public delegate void ClientClosed(UUID clientID, Scene scene); - public event ClientClosed OnClientClosed; - - public delegate void ScriptChangedEvent(uint localID, uint change); + public event ClientClosed OnClientClosed; + /// + /// This is fired when a scene object property that a script might be interested in (such as color, scale or + /// inventory) changes. Only enough information is sent for the LSL changed event + /// (see http://lslwiki.net/lslwiki/wakka.php?wakka=changed) + /// public event ScriptChangedEvent OnScriptChangedEvent; + public delegate void ScriptChangedEvent(uint localID, uint change); public delegate void ScriptControlEvent(uint localID, UUID item, UUID avatarID, uint held, uint changed); - public event ScriptControlEvent OnScriptControlEvent; public delegate void ScriptAtTargetEvent(uint localID, uint handle, Vector3 targetpos, Vector3 atpos); - public event ScriptAtTargetEvent OnScriptAtTargetEvent; public delegate void ScriptNotAtTargetEvent(uint localID); - public event ScriptNotAtTargetEvent OnScriptNotAtTargetEvent; public delegate void ScriptAtRotTargetEvent(uint localID, uint handle, Quaternion targetrot, Quaternion atrot); - public event ScriptAtRotTargetEvent OnScriptAtRotTargetEvent; public delegate void ScriptNotAtRotTargetEvent(uint localID); - public event ScriptNotAtRotTargetEvent OnScriptNotAtRotTargetEvent; public delegate void ScriptColliding(uint localID, ColliderArgs colliders); - public event ScriptColliding OnScriptColliderStart; public event ScriptColliding OnScriptColliding; public event ScriptColliding OnScriptCollidingEnd; - public event ScriptColliding OnScriptLandColliderStart; public event ScriptColliding OnScriptLandColliding; public event ScriptColliding OnScriptLandColliderEnd; diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index 04e3221..77bf6fe 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs @@ -637,7 +637,6 @@ namespace OpenSim.Region.Framework.Scenes m_items[item.ItemID] = item; m_inventorySerial++; m_part.TriggerScriptChangedEvent(Changed.INVENTORY); - HasInventoryChanged = true; m_part.ParentGroup.HasGroupChanged = true; -- cgit v1.1 From 60553e62a3f576b8bf6ab88a83b2d4550bd69d2b Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 5 Mar 2010 23:18:47 +0000 Subject: refactor: begin to move attachments code into a region module --- .../Framework/Interfaces/IAttachmentsModule.cs | 49 ++++++++++++ OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 15 ---- OpenSim/Region/Framework/Scenes/Scene.cs | 8 +- OpenSim/Region/Framework/Scenes/SceneGraph.cs | 86 +--------------------- 4 files changed, 59 insertions(+), 99 deletions(-) create mode 100644 OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs (limited to 'OpenSim/Region/Framework') diff --git a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs new file mode 100644 index 0000000..c965bcf --- /dev/null +++ b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs @@ -0,0 +1,49 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using OpenMetaverse; +using OpenSim.Framework; + +namespace OpenSim.Region.Framework.Interfaces +{ + public interface IAttachmentsModule + { + /// + /// Attach an object to an avatar. + /// + /// + /// + /// + /// + /// + /// + /// true if the object was successfully attached, false otherwise + bool AttachObject( + IClientAPI controllingClient, uint localID, uint attachPoint, Quaternion rot, Vector3 pos, bool silent); + } +} \ No newline at end of file diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 5f3cd8c..474fba9 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -1903,21 +1903,6 @@ namespace OpenSim.Region.Framework.Scenes } /// - /// Attach an object. - /// - /// - /// - /// - /// - /// - /// - /// true if the object was successfully attached, false otherwise - public bool AttachObject(IClientAPI controllingClient, uint localID, uint attachPoint, Quaternion rot, Vector3 pos, bool silent) - { - return m_sceneGraph.AttachObject(controllingClient, localID, attachPoint, rot, pos, silent); - } - - /// /// This registers the item as attached in a user's inventory /// /// diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index a880fe7..c83132f 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -307,6 +307,7 @@ namespace OpenSim.Region.Framework.Scenes protected IXMLRPC m_xmlrpcModule; protected IWorldComm m_worldCommModule; + public IAttachmentsModule AttachmentsModule { get; set; } protected IAvatarFactory m_AvatarFactory; public IAvatarFactory AvatarFactory { @@ -1215,6 +1216,7 @@ namespace OpenSim.Region.Framework.Scenes m_worldCommModule = RequestModuleInterface(); XferManager = RequestModuleInterface(); m_AvatarFactory = RequestModuleInterface(); + AttachmentsModule = RequestModuleInterface(); m_serialiser = RequestModuleInterface(); m_dialogModule = RequestModuleInterface(); m_capsModule = RequestModuleInterface(); @@ -2405,9 +2407,11 @@ namespace OpenSim.Region.Framework.Scenes //grp.SetFromAssetID(grp.RootPart.LastOwnerID); m_log.DebugFormat( "[ATTACHMENT]: Attach to avatar {0} at position {1}", sp.UUID, grp.AbsolutePosition); + + if (AttachmentsModule != null) + AttachmentsModule.AttachObject( + sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false); - AttachObject( - sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false); RootPrim.RemFlag(PrimFlags.TemporaryOnRez); grp.SendGroupFullUpdate(); } diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 22613e9..48744d7 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -504,7 +504,7 @@ namespace OpenSim.Region.Framework.Scenes return; // Calls attach with a Zero position - if (AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, Vector3.Zero, false)) + if (m_parentScene.AttachmentsModule.AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, Vector3.Zero, false)) { m_parentScene.SendAttachEvent(objectLocalID, part.ParentGroup.GetFromItemID(), remoteClient.AgentId); @@ -547,8 +547,10 @@ namespace OpenSim.Region.Framework.Scenes if (AttachmentPt != 0 && AttachmentPt != objatt.GetAttachmentPoint()) tainted = true; - AttachObject(remoteClient, objatt.LocalId, AttachmentPt, Quaternion.Identity, objatt.AbsolutePosition, false); + m_parentScene.AttachmentsModule.AttachObject( + remoteClient, objatt.LocalId, AttachmentPt, Quaternion.Identity, objatt.AbsolutePosition, false); //objatt.ScheduleGroupForFullUpdate(); + if (tainted) objatt.HasGroupChanged = true; @@ -605,86 +607,6 @@ namespace OpenSim.Region.Framework.Scenes } } - /// - /// Attach a scene object to an avatar. - /// - /// - /// - /// - /// - /// - /// - /// true if the attachment was successful, false otherwise - protected internal bool AttachObject( - IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, Quaternion rot, Vector3 attachPos, bool silent) - { - SceneObjectGroup group = GetGroupByPrim(objectLocalID); - if (group != null) - { - if (m_parentScene.Permissions.CanTakeObject(group.UUID, remoteClient.AgentId)) - { - // If the attachment point isn't the same as the one previously used - // set it's offset position = 0 so that it appears on the attachment point - // and not in a weird location somewhere unknown. - if (AttachmentPt != 0 && AttachmentPt != (uint)group.GetAttachmentPoint()) - { - attachPos = Vector3.Zero; - } - - // AttachmentPt 0 means the client chose to 'wear' the attachment. - if (AttachmentPt == 0) - { - // Check object for stored attachment point - AttachmentPt = (uint)group.GetAttachmentPoint(); - } - - // if we still didn't find a suitable attachment point....... - if (AttachmentPt == 0) - { - // Stick it on left hand with Zero Offset from the attachment point. - AttachmentPt = (uint)AttachmentPoint.LeftHand; - attachPos = Vector3.Zero; - } - - group.SetAttachmentPoint((byte)AttachmentPt); - group.AbsolutePosition = attachPos; - - // Saves and gets itemID - UUID itemId; - - if (group.GetFromItemID() == UUID.Zero) - { - m_parentScene.attachObjectAssetStore(remoteClient, group, remoteClient.AgentId, out itemId); - } - else - { - itemId = group.GetFromItemID(); - } - - m_parentScene.AttachObject(remoteClient, AttachmentPt, itemId, group); - - group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos, silent); - // In case it is later dropped again, don't let - // it get cleaned up - // - group.RootPart.RemFlag(PrimFlags.TemporaryOnRez); - group.HasGroupChanged = false; - } - else - { - remoteClient.SendAgentAlertMessage("You don't have sufficient permissions to attach this object", false); - return false; - } - } - else - { - m_log.DebugFormat("[SCENE GRAPH]: AttachObject found no such scene object {0}", objectLocalID); - return false; - } - - return true; - } - protected internal ScenePresence CreateAndAddChildScenePresence(IClientAPI client, AvatarAppearance appearance) { ScenePresence newAvatar = null; -- cgit v1.1 From b72c2dc6e88fa2ea6bb97e0b32d0cdbb2ea78c4a Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 5 Mar 2010 23:29:24 +0000 Subject: refactor: move user inventory side of RezSingleAttachment to module --- .../Framework/Interfaces/IAttachmentsModule.cs | 12 +++++++++ OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 30 +--------------------- 2 files changed, 13 insertions(+), 29 deletions(-) (limited to 'OpenSim/Region/Framework') diff --git a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs index c965bcf..5e5df4b 100644 --- a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs @@ -28,6 +28,7 @@ using System; using OpenMetaverse; using OpenSim.Framework; +using OpenSim.Region.Framework.Scenes; namespace OpenSim.Region.Framework.Interfaces { @@ -45,5 +46,16 @@ namespace OpenSim.Region.Framework.Interfaces /// true if the object was successfully attached, false otherwise bool AttachObject( IClientAPI controllingClient, uint localID, uint attachPoint, Quaternion rot, Vector3 pos, bool silent); + + /// + /// Update the user inventory to the attachment of an item + /// + /// + /// + /// + /// + /// + UUID SetAttachmentInventoryStatus( + SceneObjectGroup att, IClientAPI remoteClient, UUID itemID, uint AttachmentPt); } } \ No newline at end of file diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 474fba9..6a5dc56 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -1862,35 +1862,7 @@ namespace OpenSim.Region.Framework.Scenes return UUID.Zero; } - return RezSingleAttachment(att, remoteClient, itemID, AttachmentPt); - } - - /// - /// Update the user inventory to reflect an attachment - /// - /// - /// - /// - /// - /// - public UUID RezSingleAttachment(SceneObjectGroup att, IClientAPI remoteClient, UUID itemID, uint AttachmentPt) - { - m_log.DebugFormat( - "[USER INVENTORY]: Updating inventory of {0} to show attachment of {1} (item ID {2})", - remoteClient.Name, att.Name, itemID); - - if (!att.IsDeleted) - AttachmentPt = att.RootPart.AttachmentPoint; - - ScenePresence presence; - if (TryGetAvatar(remoteClient.AgentId, out presence)) - { - InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId); - item = InventoryService.GetItem(item); - - presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/); - } - return att.UUID; + return AttachmentsModule.SetAttachmentInventoryStatus(att, remoteClient, itemID, AttachmentPt); } public void RezMultipleAttachments(IClientAPI remoteClient, RezMultipleAttachmentsFromInvPacket.HeaderDataBlock header, -- cgit v1.1 From 71797af540bfa1ccb1ccfe856b42350844531607 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 5 Mar 2010 23:35:49 +0000 Subject: refactor: move another AttachObject method --- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 44 ---------------------- 1 file changed, 44 deletions(-) (limited to 'OpenSim/Region/Framework') diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 6a5dc56..bd3b433 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -1874,50 +1874,6 @@ namespace OpenSim.Region.Framework.Scenes } } - /// - /// This registers the item as attached in a user's inventory - /// - /// - /// - /// - /// - public void AttachObject(IClientAPI remoteClient, uint AttachmentPt, UUID itemID, SceneObjectGroup att) - { -// m_log.DebugFormat( -// "[USER INVENTORY]: Updating attachment {0} for {1} at {2} using item ID {3}", -// att.Name, remoteClient.Name, AttachmentPt, itemID); - - if (UUID.Zero == itemID) - { - m_log.Error("[SCENE INVENTORY]: Unable to save attachment. Error inventory item ID."); - return; - } - - if (0 == AttachmentPt) - { - m_log.Error("[SCENE INVENTORY]: Unable to save attachment. Error attachment point."); - return; - } - - if (null == att.RootPart) - { - m_log.Error("[SCENE INVENTORY]: Unable to save attachment for a prim without the rootpart!"); - return; - } - - ScenePresence presence; - if (TryGetAvatar(remoteClient.AgentId, out presence)) - { - // XXYY!! - InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId); - item = InventoryService.GetItem(item); - presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /* att.UUID */); - - if (m_AvatarFactory != null) - m_AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); - } - } - public void DetachSingleAttachmentToGround(UUID itemID, IClientAPI remoteClient) { SceneObjectPart part = GetSceneObjectPart(itemID); -- cgit v1.1 From 395f343498bc429c0360201991147c6e089b0730 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Sat, 6 Mar 2010 00:07:47 +0000 Subject: refactor: Move DetachSingleAttachmentToInv to region module need to rationalize method names later --- .../Framework/Interfaces/IAttachmentsModule.cs | 11 +++++++ OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 20 +------------ OpenSim/Region/Framework/Scenes/Scene.cs | 18 ++++++----- OpenSim/Region/Framework/Scenes/SceneGraph.cs | 35 +--------------------- 4 files changed, 23 insertions(+), 61 deletions(-) (limited to 'OpenSim/Region/Framework') diff --git a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs index 5e5df4b..367ff3d 100644 --- a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs @@ -57,5 +57,16 @@ namespace OpenSim.Region.Framework.Interfaces /// UUID SetAttachmentInventoryStatus( SceneObjectGroup att, IClientAPI remoteClient, UUID itemID, uint AttachmentPt); + + /// + /// Update the user inventory to show a detach. + /// + /// + /// A + /// + /// + /// A + /// + void ShowDetachInUserInventory(UUID itemID, IClientAPI remoteClient); } } \ No newline at end of file diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index bd3b433..dad0efd 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -1858,7 +1858,7 @@ namespace OpenSim.Region.Framework.Scenes if (att == null) { - DetachSingleAttachmentToInv(itemID, remoteClient); + AttachmentsModule.ShowDetachInUserInventory(itemID, remoteClient); return UUID.Zero; } @@ -1904,24 +1904,6 @@ namespace OpenSim.Region.Framework.Scenes SendAttachEvent(part.ParentGroup.LocalId, itemID, UUID.Zero); } - public void DetachSingleAttachmentToInv(UUID itemID, IClientAPI remoteClient) - { - ScenePresence presence; - if (TryGetAvatar(remoteClient.AgentId, out presence)) - { - presence.Appearance.DetachAttachment(itemID); - - // Save avatar attachment information - if (m_AvatarFactory != null) - { - m_log.Info("[SCENE]: Saving avatar attachment. AgentID: " + remoteClient.AgentId + ", ItemID: " + itemID); - m_AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); - } - } - - m_sceneGraph.DetachSingleAttachmentToInv(itemID, remoteClient); - } - public void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID) { EventManager.TriggerGetScriptRunning(controllingClient, objectID, itemID); diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index c83132f..7c0375e 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -2646,10 +2646,12 @@ namespace OpenSim.Region.Framework.Scenes public virtual void SubscribeToClientAttachmentEvents(IClientAPI client) { client.OnRezSingleAttachmentFromInv += RezSingleAttachment; - client.OnRezMultipleAttachmentsFromInv += RezMultipleAttachments; - client.OnDetachAttachmentIntoInv += DetachSingleAttachmentToInv; + client.OnRezMultipleAttachmentsFromInv += RezMultipleAttachments; client.OnObjectAttach += m_sceneGraph.AttachObject; client.OnObjectDetach += m_sceneGraph.DetachObject; + + if (AttachmentsModule != null) + client.OnDetachAttachmentIntoInv += AttachmentsModule.ShowDetachInUserInventory; } public virtual void SubscribeToClientTeleportEvents(IClientAPI client) @@ -2696,8 +2698,7 @@ namespace OpenSim.Region.Framework.Scenes } protected virtual void UnsubscribeToClientEvents(IClientAPI client) - { - + { } /// @@ -2719,7 +2720,6 @@ namespace OpenSim.Region.Framework.Scenes UnSubscribeToClientNetworkEvents(client); - // EventManager.TriggerOnNewClient(client); } @@ -2799,12 +2799,14 @@ namespace OpenSim.Region.Framework.Scenes } public virtual void UnSubscribeToClientAttachmentEvents(IClientAPI client) - { - client.OnRezSingleAttachmentFromInv -= RezSingleAttachment; + { client.OnRezMultipleAttachmentsFromInv -= RezMultipleAttachments; - client.OnDetachAttachmentIntoInv -= DetachSingleAttachmentToInv; + client.OnRezSingleAttachmentFromInv -= RezSingleAttachment; client.OnObjectAttach -= m_sceneGraph.AttachObject; client.OnObjectDetach -= m_sceneGraph.DetachObject; + + if (AttachmentsModule != null) + client.OnDetachAttachmentIntoInv -= AttachmentsModule.ShowDetachInUserInventory; } public virtual void UnSubscribeToClientTeleportEvents(IClientAPI client) diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 48744d7..380722d 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -452,7 +452,7 @@ namespace OpenSim.Region.Framework.Scenes if (group != null) { //group.DetachToGround(); - m_parentScene.DetachSingleAttachmentToInv(group.GetFromItemID(), remoteClient); + m_parentScene.AttachmentsModule.ShowDetachInUserInventory(group.GetFromItemID(), remoteClient); } } @@ -574,39 +574,6 @@ namespace OpenSim.Region.Framework.Scenes return null; } - // What makes this method odd and unique is it tries to detach using an UUID.... Yay for standards. - // To LocalId or UUID, *THAT* is the question. How now Brown UUID?? - public void DetachSingleAttachmentToInv(UUID itemID, IClientAPI remoteClient) - { - if (itemID == UUID.Zero) // If this happened, someone made a mistake.... - return; - - // We can NOT use the dictionries here, as we are looking - // for an entity by the fromAssetID, which is NOT the prim UUID - // - List detachEntities = GetEntities(); - SceneObjectGroup group; - - foreach (EntityBase entity in detachEntities) - { - if (entity is SceneObjectGroup) - { - group = (SceneObjectGroup)entity; - if (group.GetFromItemID() == itemID) - { - m_parentScene.SendAttachEvent(group.LocalId, itemID, UUID.Zero); - group.DetachToInventoryPrep(); - m_log.Debug("[DETACH]: Saving attachpoint: " + - ((uint)group.GetAttachmentPoint()).ToString()); - m_parentScene.UpdateKnownItem(remoteClient, group, - group.GetFromItemID(), group.OwnerID); - m_parentScene.DeleteSceneObject(group, false); - return; - } - } - } - } - protected internal ScenePresence CreateAndAddChildScenePresence(IClientAPI client, AvatarAppearance appearance) { ScenePresence newAvatar = null; -- cgit v1.1 From cde3c20ba3f4f506fc69d3db54171f88223219aa Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Fri, 5 Mar 2010 17:01:31 -0800 Subject: * Fixed an order of operations bug in CheckForSignificantMovement() that was causing a flood of child updates to neighbors on login * Removed an unnecessary call to the presence service --- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'OpenSim/Region/Framework') diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 465e916..4256be9 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -2675,6 +2675,9 @@ namespace OpenSim.Region.Framework.Scenes if (Util.GetDistanceTo(AbsolutePosition, m_lastChildAgentUpdatePosition) >= Scene.ChildReprioritizationDistance || Util.GetDistanceTo(CameraPosition, m_lastChildAgentUpdateCamPosition) >= Scene.ChildReprioritizationDistance) { + m_lastChildAgentUpdatePosition = AbsolutePosition; + m_lastChildAgentUpdateCamPosition = CameraPosition; + ChildAgentDataUpdate cadu = new ChildAgentDataUpdate(); cadu.ActiveGroupID = UUID.Zero.Guid; cadu.AgentID = UUID.Guid; @@ -2683,8 +2686,6 @@ namespace OpenSim.Region.Framework.Scenes Vector3 tempCameraCenter = m_CameraCenter; cadu.cameraPosition = tempCameraCenter; cadu.drawdistance = m_DrawDistance; - if (m_scene.Permissions.IsGod(new UUID(cadu.AgentID))) - cadu.godlevel = m_godlevel; cadu.GroupAccess = 0; cadu.Position = AbsolutePosition; cadu.regionHandle = m_rootRegionHandle; @@ -2707,9 +2708,6 @@ namespace OpenSim.Region.Framework.Scenes agentpos.CopyFrom(cadu); m_scene.SendOutChildAgentUpdates(agentpos, this); - - m_lastChildAgentUpdatePosition = AbsolutePosition; - m_lastChildAgentUpdateCamPosition = CameraPosition; } } -- cgit v1.1 From 36afd0bfd1f80131a9f8dd72cc8b3eb71f060e02 Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Fri, 5 Mar 2010 17:04:20 -0800 Subject: * Cache packed throttle data to avoid repeated allocations in CheckForSignificantMovement() * Removed a lock on "return m_neighbours.Count" in GetInaccurateNeighborCount(). Dictionary<>.Count by itself does not benefit from locking --- OpenSim/Region/Framework/Scenes/Scene.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'OpenSim/Region/Framework') diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index a880fe7..8f9663c 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -1132,10 +1132,7 @@ namespace OpenSim.Region.Framework.Scenes public int GetInaccurateNeighborCount() { - lock (m_neighbours) - { - return m_neighbours.Count; - } + return m_neighbours.Count; } // This is the method that shuts down the scene. -- cgit v1.1 From c0bc25059c932bbef41b2fbe2f319163407aed1b Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 6 Mar 2010 00:56:55 -0600 Subject: - implementing server 1.38 functions Signed-off-by: Melanie --- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'OpenSim/Region/Framework') diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 10a186e..4729382 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -4707,5 +4707,10 @@ namespace OpenSim.Region.Framework.Scenes m_log.Error("[Physics] " + ex); } } + + public Color4 GetTextColor() + { + return new Color4((byte)Color.R, (byte)Color.G, (byte)Color.B, (byte)(0xFF - Color.A)); + } } } -- cgit v1.1