From 9a0ef22ed979433f4d017a252173f38fe5e56892 Mon Sep 17 00:00:00 2001 From: Charles Krinke Date: Sat, 28 Jun 2008 16:08:12 +0000 Subject: Mantis#1616. Applied Melanie's patch. This may or may not break trunk. --- .../Scenes/SceneObjectPart.Inventory.cs | 70 ++++++++++++---------- 1 file changed, 38 insertions(+), 32 deletions(-) (limited to 'OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs') diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs index fbf2794..dc195f8 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs @@ -137,7 +137,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// Start all the scripts contained in this prim's inventory /// - public void StartScripts() + public void CreateScriptInstances(int startParam, bool postOnRez) { lock (m_taskInventory) { @@ -146,25 +146,7 @@ namespace OpenSim.Region.Environment.Scenes // XXX more hardcoding badness. Should be an enum in TaskInventoryItem if (10 == item.Type) { - StartScript(item); - } - } - } - } - - /// - /// Start all the scripts contained in this prim's inventory - /// - public void StartScripts(int param) - { - lock (m_taskInventory) - { - foreach (TaskInventoryItem item in m_taskInventory.Values) - { - // XXX more hardcoding badness. Should be an enum in TaskInventoryItem - if (10 == item.Type) - { - StartScript(item, param); + CreateScriptInstance(item, startParam, postOnRez); } } } @@ -173,7 +155,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// Stop all the scripts in this prim. /// - public void StopScripts() + public void RemoveScriptInstances() { lock (m_taskInventory) { @@ -181,7 +163,7 @@ namespace OpenSim.Region.Environment.Scenes { if (10 == item.Type) { - StopScript(item.ItemID); + RemoveScriptInstance(item.ItemID); RemoveScriptEvents(item.ItemID); } } @@ -193,13 +175,8 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public void StartScript(TaskInventoryItem item, int param) - { - StartScript(item); - m_parentGroup.Scene.EventManager.TriggerOnRezEvent(LocalId, item.ItemID, param); - } - public void StartScript(TaskInventoryItem item) + public void CreateScriptInstance(TaskInventoryItem item, int startParam, bool postOnRez) { // m_log.InfoFormat( // "[PRIM INVENTORY]: " + @@ -223,7 +200,7 @@ namespace OpenSim.Region.Environment.Scenes else { string script = Helpers.FieldToUTF8String(asset.Data); - m_parentGroup.Scene.EventManager.TriggerRezScript(LocalId,item.ItemID,script); + m_parentGroup.Scene.EventManager.TriggerRezScript(LocalId,item.ItemID,script, startParam, postOnRez); m_parentGroup.AddActiveScriptCount(1); ScheduleFullUpdate(); } @@ -237,13 +214,13 @@ namespace OpenSim.Region.Environment.Scenes /// /// A /// - public void StartScript(LLUUID itemId) + public void CreateScriptInstance(LLUUID itemId, int startParam, bool postOnRez) { lock (m_taskInventory) { if (m_taskInventory.ContainsKey(itemId)) { - StartScript(m_taskInventory[itemId]); + CreateScriptInstance(m_taskInventory[itemId], startParam, postOnRez); } else @@ -260,7 +237,7 @@ namespace OpenSim.Region.Environment.Scenes /// Stop a script which is in this prim's inventory. /// /// - public void StopScript(LLUUID itemId) + public void RemoveScriptInstance(LLUUID itemId) { if (m_taskInventory.ContainsKey(itemId)) { @@ -330,6 +307,35 @@ namespace OpenSim.Region.Environment.Scenes ParentGroup.HasGroupChanged = true; } + public void AddInventoryItemExclusive(TaskInventoryItem item) + { + item.ParentID = UUID; + item.ParentPartID = UUID; + + List il = new List(m_taskInventory.Values); + foreach(TaskInventoryItem i in il) + { + if(i.Name == item.Name) + { + if(i.Type == 10) + RemoveScriptInstance(i.ItemID); + RemoveInventoryItem(i.ItemID); + break; + } + } + + lock (m_taskInventory) + { + m_taskInventory.Add(item.ItemID, item); + TriggerScriptChangedEvent(Changed.INVENTORY); + } + + m_inventorySerial++; + //m_inventorySerial += 2; + HasInventoryChanged = true; + ParentGroup.HasGroupChanged = true; + } + /// /// Restore a whole collection of items to the prim's inventory at once. /// We assume that the items already have all their fields correctly filled out. -- cgit v1.1