From 47c6d8ae8f85f07a16390f0130180a1b0521b6a1 Mon Sep 17 00:00:00 2001 From: MW Date: Wed, 22 Aug 2007 18:36:47 +0000 Subject: [PATCH] Added OnRemoveScript(uint localID, LLUUID itemID) event , trigged when a script in a primitive is deleted. --- .../General/Interfaces/IClientAPI.cs | 2 ++ OpenSim/Framework/General/NullClientAPI.cs | 1 + OpenSim/Region/ClientStack/ClientView.API.cs | 1 + .../ClientStack/ClientView.ProcessPackets.cs | 7 ++++++ .../Environment/Scenes/Scene.Inventory.cs | 20 +++++++++++++++++ OpenSim/Region/Environment/Scenes/Scene.cs | 1 + .../Region/Environment/Scenes/SceneEvents.cs | 10 +++++++++ .../Environment/Scenes/SceneObjectGroup.cs | 10 +++++++++ .../Environment/Scenes/SceneObjectPart.cs | 22 +++++++++++++++++-- .../Examples/SimpleApp/MyNpcCharacter.cs | 1 + 10 files changed, 73 insertions(+), 2 deletions(-) diff --git a/OpenSim/Framework/General/Interfaces/IClientAPI.cs b/OpenSim/Framework/General/Interfaces/IClientAPI.cs index 3c41eb56f2..4dbe4e777b 100644 --- a/OpenSim/Framework/General/Interfaces/IClientAPI.cs +++ b/OpenSim/Framework/General/Interfaces/IClientAPI.cs @@ -90,6 +90,7 @@ namespace OpenSim.Framework.Interfaces public delegate void UpdateInventoryItemTransaction(IClientAPI remoteClient, LLUUID transactionID, LLUUID assetID, LLUUID itemID); public delegate void RezScript(IClientAPI remoteClient, LLUUID itemID, uint localID); public delegate void UpdateTaskInventory(IClientAPI remoteClient, LLUUID itemID, LLUUID folderID, uint localID); + public delegate void RemoveTaskInventory(IClientAPI remoteClient, LLUUID itemID, uint localID); public delegate void UDPAssetUploadRequest(IClientAPI remoteClient, LLUUID assetID, LLUUID transaction, sbyte type, byte[] data); public delegate void XferReceive(IClientAPI remoteClient, ulong xferID, uint packetID, byte[] data); @@ -152,6 +153,7 @@ namespace OpenSim.Framework.Interfaces event ConfirmXfer OnConfirmXfer; event RezScript OnRezScript; event UpdateTaskInventory OnUpdateTaskInventory; + event RemoveTaskInventory OnRemoveTaskItem; event UUIDNameRequest OnNameFromUUIDRequest; diff --git a/OpenSim/Framework/General/NullClientAPI.cs b/OpenSim/Framework/General/NullClientAPI.cs index 6692fde201..679438471c 100644 --- a/OpenSim/Framework/General/NullClientAPI.cs +++ b/OpenSim/Framework/General/NullClientAPI.cs @@ -65,6 +65,7 @@ namespace OpenSim.Framework public event ConfirmXfer OnConfirmXfer; public event RezScript OnRezScript; public event UpdateTaskInventory OnUpdateTaskInventory; + public event RemoveTaskInventory OnRemoveTaskItem; public event UUIDNameRequest OnNameFromUUIDRequest; diff --git a/OpenSim/Region/ClientStack/ClientView.API.cs b/OpenSim/Region/ClientStack/ClientView.API.cs index 6570a82422..6209bebefc 100644 --- a/OpenSim/Region/ClientStack/ClientView.API.cs +++ b/OpenSim/Region/ClientStack/ClientView.API.cs @@ -94,6 +94,7 @@ namespace OpenSim.Region.ClientStack public event ConfirmXfer OnConfirmXfer; public event RezScript OnRezScript; public event UpdateTaskInventory OnUpdateTaskInventory; + public event RemoveTaskInventory OnRemoveTaskItem; public event UUIDNameRequest OnNameFromUUIDRequest; diff --git a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs index 383c7a9e0a..0163528cbb 100644 --- a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs +++ b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs @@ -484,6 +484,13 @@ namespace OpenSim.Region.ClientStack } } break; + case PacketType.RemoveTaskInventory: + RemoveTaskInventoryPacket removeTask = (RemoveTaskInventoryPacket)Pack; + if (OnRemoveTaskItem != null) + { + OnRemoveTaskItem(this, removeTask.InventoryData.ItemID, removeTask.InventoryData.LocalID); + } + break; case PacketType.MoveTaskInventory: //Console.WriteLine(Pack.ToString()); break; diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index fa1b86532d..9cbd65bd1f 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -208,6 +208,26 @@ namespace OpenSim.Region.Environment.Scenes } } + public void RemoveTaskInventory(IClientAPI remoteClient, LLUUID itemID, uint localID) + { + bool hasPrim = false; + foreach (EntityBase ent in Entities.Values) + { + if (ent is SceneObjectGroup) + { + hasPrim = ((SceneObjectGroup)ent).HasChildPrim(localID); + if (hasPrim != false) + { + int type = ((SceneObjectGroup)ent).RemoveInventoryItem(remoteClient, localID, itemID); + if (type == 10) + { + this.EventManager.TriggerRemoveScript(localID, itemID); + } + } + } + } + } + public void RezScript(IClientAPI remoteClient, LLUUID itemID, uint localID) { CachedUserInfo userInfo = commsManager.UserProfiles.GetUserDetails(remoteClient.AgentId); diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 62eb54709b..91ff0a897b 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -716,6 +716,7 @@ namespace OpenSim.Region.Environment.Scenes client.OnRequestXfer += xferManager.RequestXfer; client.OnConfirmXfer += xferManager.AckPacket; client.OnRezScript += RezScript; + client.OnRemoveTaskItem += RemoveTaskInventory; client.OnRequestAvatarProperties += RequestAvatarProperty; diff --git a/OpenSim/Region/Environment/Scenes/SceneEvents.cs b/OpenSim/Region/Environment/Scenes/SceneEvents.cs index 09a7f21330..3c6b277a79 100644 --- a/OpenSim/Region/Environment/Scenes/SceneEvents.cs +++ b/OpenSim/Region/Environment/Scenes/SceneEvents.cs @@ -40,6 +40,8 @@ namespace OpenSim.Region.Environment.Scenes public delegate void NewRezScript(uint localID, LLUUID itemID, string script); public event NewRezScript OnRezScript; + public delegate void RemoveScript(uint localID, LLUUID itemID); + public event RemoveScript OnRemoveScript; public void TriggerPermissionError(LLUUID user, string reason) { @@ -117,5 +119,13 @@ namespace OpenSim.Region.Environment.Scenes OnRezScript(localID, itemID, script); } } + + public void TriggerRemoveScript(uint localID, LLUUID itemID) + { + if (OnRemoveScript != null) + { + OnRemoveScript(localID, itemID); + } + } } } diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index c50809f7ff..c3d70ea237 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -643,6 +643,16 @@ namespace OpenSim.Region.Environment.Scenes } + public int RemoveInventoryItem(IClientAPI remoteClient, uint localID, LLUUID itemID) + { + SceneObjectPart part = this.GetChildPart(localID); + if (part != null) + { + return part.RemoveInventoryItem(remoteClient, localID, itemID); + } + return -1; + } + /// /// /// diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index 8a59d88a0b..567681a011 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs @@ -422,10 +422,28 @@ namespace OpenSim.Region.Environment.Scenes this.m_inventorySerial++; } - public void RemoveInventoryItem() + public int RemoveInventoryItem(IClientAPI remoteClient, uint localID, LLUUID itemID) { - + if (localID == this.LocalID) + { + if (this.TaskInventory.ContainsKey(itemID)) + { + string type = TaskInventory[itemID].inv_type; + this.TaskInventory.Remove(itemID); + this.m_inventorySerial++; + if (type == "lsltext") + { + return 10; + } + else + { + return 0; + } + } + } + return -1; } + /// /// /// diff --git a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs index 0e898a2d51..003d3d43e0 100644 --- a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs @@ -79,6 +79,7 @@ namespace SimpleApp public event ConfirmXfer OnConfirmXfer; public event RezScript OnRezScript; public event UpdateTaskInventory OnUpdateTaskInventory; + public event RemoveTaskInventory OnRemoveTaskItem; public event UUIDNameRequest OnNameFromUUIDRequest;