diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index 02fd38762a..f6aea89366 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -95,6 +95,44 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
client.OnDetachAttachmentIntoInv -= DetachSingleAttachmentToInv;
client.OnObjectDrop -= DetachSingleAttachmentToGround;
}
+
+ ///
+ /// RezAttachments. This should only be called upon login on the first region.
+ /// Attachment rezzings on crossings and TPs are done in a different way.
+ ///
+ public void RezAttachments(IScenePresence sp)
+ {
+ if (null == sp.Appearance)
+ {
+ m_log.WarnFormat("[ATTACHMENTS MODULE]: Appearance has not been initialized for agent {0}", sp.UUID);
+ return;
+ }
+
+ List attachments = sp.Appearance.GetAttachments();
+ foreach (AvatarAttachment attach in attachments)
+ {
+ int p = attach.AttachPoint;
+ UUID itemID = attach.ItemID;
+
+ //UUID assetID = attach.AssetID;
+ // For some reason assetIDs are being written as Zero's in the DB -- need to track tat down
+ // But they're not used anyway, the item is being looked up for now, so let's proceed.
+ //if (UUID.Zero == assetID)
+ //{
+ // m_log.DebugFormat("[ATTACHMENT]: Cannot rez attachment in point {0} with itemID {1}", p, itemID);
+ // continue;
+ //}
+
+ try
+ {
+ RezSingleAttachmentFromInventory(sp.ControllingClient, itemID, (uint)p);
+ }
+ catch (Exception e)
+ {
+ m_log.ErrorFormat("[ATTACHMENTS MODULE]: Unable to rez attachment: {0}{1}", e.Message, e.StackTrace);
+ }
+ }
+ }
///
/// Called by client
diff --git a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs
index c910289eb9..1833dce626 100644
--- a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs
@@ -35,6 +35,12 @@ namespace OpenSim.Region.Framework.Interfaces
{
public interface IAttachmentsModule
{
+ ///
+ /// RezAttachments. This should only be called upon login on the first region.
+ /// Attachment rezzings on crossings and TPs are done in a different way.
+ ///
+ void RezAttachments(IScenePresence sp);
+
///
/// Attach an object to an avatar from the world.
///
diff --git a/OpenSim/Region/Framework/Interfaces/IScenePresence.cs b/OpenSim/Region/Framework/Interfaces/IScenePresence.cs
new file mode 100644
index 0000000000..d700d791c5
--- /dev/null
+++ b/OpenSim/Region/Framework/Interfaces/IScenePresence.cs
@@ -0,0 +1,56 @@
+/*
+ * 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 OpenSimulator 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 OpenSim.Framework;
+
+namespace OpenSim.Region.Framework.Interfaces
+{
+ ///
+ /// An agent in the scene.
+ ///
+ ///
+ /// Interface is a work in progress. Please feel free to add other required properties and methods.
+ ///
+ public interface IScenePresence : ISceneEntity
+ {
+ ///
+ /// The client controlling this presence
+ ///
+ IClientAPI ControllingClient { get; }
+
+ ///
+ /// Avatar appearance data.
+ ///
+ ///
+ // Because appearance setting is in a module, we actually need
+ // to give it access to our appearance directly, otherwise we
+ // get a synchronization issue.
+ ///
+ AvatarAppearance Appearance { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index e0250de426..e7fe8df518 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2578,7 +2578,7 @@ namespace OpenSim.Region.Framework.Scenes
if (aCircuit.child == false)
{
sp.IsChildAgent = false;
- Util.FireAndForget(delegate(object o) { sp.RezAttachments(); });
+ Util.FireAndForget(delegate(object o) { AttachmentsModule.RezAttachments(sp); });
}
}
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 4143d443d4..040e80125c 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -66,7 +66,7 @@ namespace OpenSim.Region.Framework.Scenes
public delegate void SendCourseLocationsMethod(UUID scene, ScenePresence presence, List coarseLocations, List avatarUUIDs);
- public class ScenePresence : EntityBase, ISceneEntity
+ public class ScenePresence : EntityBase, IScenePresence
{
// ~ScenePresence()
// {
@@ -444,9 +444,6 @@ namespace OpenSim.Region.Framework.Scenes
protected PhysicsActor m_physicsActor;
- ///
- /// The client controlling this presence
- ///
public IClientAPI ControllingClient
{
get { return m_controllingClient; }
@@ -2689,9 +2686,6 @@ namespace OpenSim.Region.Framework.Scenes
UUID, m_appearance.VisualParams, m_appearance.Texture.GetBytes());
}
- // Because appearance setting is in a module, we actually need
- // to give it access to our appearance directly, otherwise we
- // get a synchronization issue.
public AvatarAppearance Appearance
{
get { return m_appearance; }
@@ -3813,44 +3807,6 @@ namespace OpenSim.Region.Framework.Scenes
return flags;
}
- ///
- /// RezAttachments. This should only be called upon login on the first region.
- /// Attachment rezzings on crossings and TPs are done in a different way.
- ///
- public void RezAttachments()
- {
- if (null == m_appearance)
- {
- m_log.WarnFormat("[ATTACHMENT]: Appearance has not been initialized for agent {0}", UUID);
- return;
- }
-
- List attachments = m_appearance.GetAttachments();
- foreach (AvatarAttachment attach in attachments)
- {
- int p = attach.AttachPoint;
- UUID itemID = attach.ItemID;
-
- //UUID assetID = attach.AssetID;
- // For some reason assetIDs are being written as Zero's in the DB -- need to track tat down
- // But they're not used anyway, the item is being looked up for now, so let's proceed.
- //if (UUID.Zero == assetID)
- //{
- // m_log.DebugFormat("[ATTACHMENT]: Cannot rez attachment in point {0} with itemID {1}", p, itemID);
- // continue;
- //}
-
- try
- {
- m_scene.AttachmentsModule.RezSingleAttachmentFromInventory(ControllingClient, itemID, (uint)p);
- }
- catch (Exception e)
- {
- m_log.ErrorFormat("[ATTACHMENT]: Unable to rez attachment: {0}{1}", e.Message, e.StackTrace);
- }
- }
- }
-
private void ReprioritizeUpdates()
{
if (Scene.IsReprioritizationEnabled && Scene.UpdatePrioritizationScheme != UpdatePrioritizationSchemes.Time)
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
index c1da803a40..79c79e4b9d 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
@@ -155,7 +155,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true);
sp.Appearance = npcAppearance;
- sp.RezAttachments();
+ scene.AttachmentsModule.RezAttachments(sp);
IAvatarFactory module = scene.RequestModuleInterface();
module.SendAppearance(sp.UUID);