From f6bf4c39be634bb8d1a03de5fd048edc54b7df50 Mon Sep 17 00:00:00 2001 From: Charles Krinke Date: Tue, 24 Jun 2008 23:55:33 +0000 Subject: Mantis#1587. Thank you kindly, Melanie for a patch that: Add permissions magling to llGiveInventoryItem, correct some corner case functionality --- .../Shared/Api/Implementation/LSL_Api.cs | 39 +++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'OpenSim/Region/ScriptEngine/Shared/Api') diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 7832633..7c6bcf7 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -36,6 +36,7 @@ using Axiom.Math; using libsecondlife; using OpenSim; using OpenSim.Framework; +using OpenSim.Framework.Communications.Cache; using OpenSim.Region.Environment; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney; @@ -2549,7 +2550,43 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llGiveInventory(string destination, string inventory) { m_host.AddScriptLPS(1); - NotImplemented("llGiveInventory"); + bool found = false; + LLUUID destId = LLUUID.Zero; + LLUUID objId = LLUUID.Zero; + + if(!LLUUID.TryParse(destination, out destId)) + { + llSay(0, "Could not parse key " + destination); + return; + } + + // move the first object found with this inventory name + foreach (KeyValuePair<LLUUID, TaskInventoryItem> inv in m_host.TaskInventory) + { + if (inv.Value.Name == inventory) + { + found = true; + objId = inv.Key; + break; + } + } + + // check if destination is an avatar + if (World.GetScenePresence(destId) != null) + { + // destination is an avatar + CachedUserInfo userInfo = + World.CommsManager.UserProfileCacheService.GetUserDetails(destId); + World.MoveTaskInventoryItem(destId,userInfo.RootFolder.ID, m_host, objId); + } + else + { + // destination is an object + World.MoveTaskInventoryItem(destId, m_host, objId); + } + + if (!found) + llSay(0, "Could not find object " + inventory); } public void llRemoveInventory(string item) -- cgit v1.1