From c8af20f966e005fb512869299d80be6b83cb70bf Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 9 Jul 2012 23:08:41 +0100
Subject: This script allows an object to be attached directly from prim
inventory to another avatar in the scene. Very useful in serious
game/environment scenarios where its only allowed for trusted creators.
Threat level Severe
---
.../Shared/Api/Implementation/OSSL_Api.cs | 25 +++++++++++++++++++---
.../ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs | 18 ++++++++++++++--
.../ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs | 5 +++++
3 files changed, 43 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Region/ScriptEngine/Shared/Api')
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 61394af..e90f577 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -3190,13 +3190,32 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{
CheckThreatLevel(ThreatLevel.High, "osForceAttachToAvatarFromInventory");
+ m_host.AddScriptLPS(1);
+
+ ForceAttachToAvatarFromInventory(m_host.OwnerID, itemName, attachmentPoint);
+ }
+
+ public void osForceAttachToOtherAvatarFromInventory(string rawAvatarId, string itemName, int attachmentPoint)
+ {
+ CheckThreatLevel(ThreatLevel.Severe, "osForceAttachToOtherAvatarFromInventory");
+
+ m_host.AddScriptLPS(1);
+
+ UUID avatarId;
+
+ if (!UUID.TryParse(rawAvatarId, out avatarId))
+ return;
+
+ ForceAttachToAvatarFromInventory(avatarId, itemName, attachmentPoint);
+ }
+
+ public void ForceAttachToAvatarFromInventory(UUID avatarId, string itemName, int attachmentPoint)
+ {
IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule;
if (attachmentsModule == null)
return;
- m_host.AddScriptLPS(1);
-
InitLSL();
TaskInventoryItem item = m_host.Inventory.GetInventoryItem(itemName);
@@ -3219,7 +3238,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return;
}
- ScenePresence sp = World.GetScenePresence(m_host.OwnerID);
+ ScenePresence sp = World.GetScenePresence(avatarId);
if (sp == null)
return;
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
index d38709e..b5416c8 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
@@ -101,19 +101,33 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
// Attachment commands
///
- /// Attach the object containing this script to the avatar that owns it without checking for PERMISSION_ATTACH
+ /// Attach the object containing this script to the avatar that owns it without asking for PERMISSION_ATTACH
///
/// The attachment point. For example, ATTACH_CHEST
void osForceAttachToAvatar(int attachment);
///
- /// Attach the inventory item in the object containing this script to the avatar that owns it without checking for PERMISSION_ATTACH
+ /// Attach an inventory item in the object containing this script to the avatar that owns it without asking for PERMISSION_ATTACH
///
+ ///
+ /// Nothing happens if the owner is not in the region.
+ ///
/// Tha name of the item. If this is not found then a warning is said to the owner
/// The attachment point. For example, ATTACH_CHEST
void osForceAttachToAvatarFromInventory(string itemName, int attachment);
///
+ /// Attach an inventory item in the object containing this script to any avatar in the region without asking for PERMISSION_ATTACH
+ ///
+ ///
+ /// Nothing happens if the avatar is not in the region.
+ ///
+ /// The UUID of the avatar to which to attach. Nothing happens if this is not a UUID
+ /// The name of the item. If this is not found then a warning is said to the owner
+ /// The attachment point. For example, ATTACH_CHEST
+ void osForceAttachToOtherAvatarFromInventory(string rawAvatarId, string itemName, int attachmentPoint);
+
+ ///
/// Detach the object containing this script from the avatar it is attached to without checking for PERMISSION_ATTACH
///
/// Nothing happens if the object is not attached.
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
index 692bb0a..b40bdf0 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
@@ -301,6 +301,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
m_OSSL_Functions.osForceAttachToAvatarFromInventory(itemName, attachmentPoint);
}
+ public void osForceAttachToOtherAvatarFromInventory(string rawAvatarId, string itemName, int attachmentPoint)
+ {
+ m_OSSL_Functions.osForceAttachToOtherAvatarFromInventory(rawAvatarId, itemName, attachmentPoint);
+ }
+
public void osForceDetachFromAvatar()
{
m_OSSL_Functions.osForceDetachFromAvatar();
--
cgit v1.1