diff --git a/CurrentPatches/0001-redirect-inventory-offers-on-npcs-to-their-owners.patch b/CurrentPatches/0001-redirect-inventory-offers-on-npcs-to-their-owners.patch new file mode 100644 index 0000000..ac93cef --- /dev/null +++ b/CurrentPatches/0001-redirect-inventory-offers-on-npcs-to-their-owners.patch @@ -0,0 +1,77 @@ +From 05218150d39869f85e1f93f7da8397226066ef91 Mon Sep 17 00:00:00 2001 +From: Christopher +Date: Sat, 7 Aug 2021 01:17:06 +0200 +Subject: [PATCH] redirect inventory offers on npcs to their owners. + +--- + .../Shared/Api/Implementation/LSL_Api.cs | 32 ++++++++++++++++++- + 1 file changed, 31 insertions(+), 1 deletion(-) + +diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +index 9de2c8ca78..4b971a9882 100644 +--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs ++++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +@@ -246,8 +246,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api + protected static List m_castRayCalls = new List(); + protected bool m_useMeshCacheInCastRay = true; + protected static Dictionary m_cachedMeshes = new Dictionary(); ++ protected bool m_giveNPCInventoryToOwner = true; + +-// protected Timer m_ShoutSayTimer; ++ // protected Timer m_ShoutSayTimer; + protected int m_SayShoutCount = 0; + DateTime m_lastSayShoutCheck; + +@@ -427,6 +428,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api + seConfig.GetBoolean("AutomaticLinkPermission", m_automaticLinkPermission); + m_notecardLineReadCharsMax = + seConfig.GetInt("NotecardLineReadCharsMax", m_notecardLineReadCharsMax); ++ m_giveNPCInventoryToOwner = ++ seConfig.GetBoolean("GiveNPCInventoryToOwner", m_giveNPCInventoryToOwner); + + // Rezzing an object with a velocity can create recoil. This feature seems to have been + // removed from recent versions of SL. The code computes recoil (vel*mass) and scales +@@ -4795,6 +4798,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api + } + } + ++ // destination is an npc ++ if(presence.IsNPC && m_giveNPCInventoryToOwner) ++ { ++ INPCModule npcModule = World.RequestModuleInterface(); ++ UUID NPCOwner = npcModule.GetOwner(UUID.Parse(destination)); ++ ++ if (NPCOwner == UUID.Zero) ++ return; ++ ++ destination = NPCOwner.ToString(); ++ } ++ + // destination is an avatar + InventoryItemBase agentItem = World.MoveTaskInventoryItem(destId, UUID.Zero, m_host, objId, out string message); + +@@ -7739,6 +7754,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api + isNotOwner = sp.UUID != m_host.OwnerID; + } + ++ if (World.TryGetScenePresence(destID, out ScenePresence ncp)) ++ { ++ if(ncp.IsNPC && m_giveNPCInventoryToOwner) ++ { ++ INPCModule npcModule = World.RequestModuleInterface(); ++ UUID owner = npcModule.GetOwner(destID); ++ ++ if (owner != UUID.Zero) ++ { ++ destID = owner; ++ destination = owner.ToString(); ++ } ++ } ++ } ++ + List itemList = new List(inventory.Length); + foreach (object item in inventory.Data) + { +-- +2.30.1.windows.1 +