From 4bbdcfb5ee81f459df9ff9a2ac477f6419cfc279 Mon Sep 17 00:00:00 2001 From: Melanie Date: Tue, 14 Aug 2012 01:45:02 +0100 Subject: Implement the temp attachments. UNTESTED --- .../Avatar/Attachments/TempAttachmentsModule.cs | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'OpenSim/Region/OptionalModules/Avatar') diff --git a/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs b/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs index c1efd7c..e659ec0 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Attachments/TempAttachmentsModule.cs @@ -49,12 +49,28 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "TempAttachmentsModule")] public class TempAttachmentsModule : INonSharedRegionModule { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private Scene m_scene; + public void Initialise(IConfigSource configSource) { } public void AddRegion(Scene scene) { + m_scene = scene; + + IScriptModuleComms comms = scene.RequestModuleInterface(); + if (comms != null) + { + comms.RegisterScriptInvocation( this, "llAttachToAvatarTemp"); + m_log.DebugFormat("[TEMP ATTACHS]: Registered script functions"); + } + else + { + m_log.ErrorFormat("[TEMP ATTACHS]: Failed to register script functions"); + } } public void RemoveRegion(Scene scene) @@ -78,5 +94,33 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments { get { return "TempAttachmentsModule"; } } + + private void llAttachToAvatarTemp(UUID host, UUID script, int attachmentPoint) + { + SceneObjectPart hostPart = m_scene.GetSceneObjectPart(host); + + if (hostPart == null) + return; + + if (hostPart.ParentGroup.IsAttachment) + return; + + IAttachmentsModule attachmentsModule = m_scene.RequestModuleInterface(); + if (attachmentsModule == null) + return; + + TaskInventoryItem item = hostPart.Inventory.GetInventoryItem(script); + if (item == null) + return; + + if ((item.PermsMask & 32) == 0) // PERMISSION_ATTACH + return; + + ScenePresence target; + if (!m_scene.TryGetScenePresence(item.PermsGranter, out target)) + return; + + attachmentsModule.AttachObject(target, hostPart.ParentGroup, (uint)attachmentPoint, false, true); + } } } -- cgit v1.1