public void Replace(string name, ObjectPartInventoryItem newItem, bool onlyIfExists = false) { ObjectPartInventoryItem oldItem; ScriptInstance script = null; newItem.Name = name; lock (m_DataLock) { if (TryGetValue(name, out oldItem)) { script = oldItem.RemoveScriptInstance; Remove(name); } else if (onlyIfExists) { throw new KeyNotFoundException(); } if (ContainsKey(newItem.ID)) { newItem.SetNewID(UUID.Random); } Add(newItem, false); } script?.Remove(); Interlocked.Increment(ref InventorySerial); if (oldItem != null) { oldItem.UpdateInfo.SetRemovedItem(); OnInventoryUpdate?.Invoke(oldItem.UpdateInfo); } OnInventoryUpdate?.Invoke(newItem.UpdateInfo); OnChange?.Invoke(ChangeAction.Add, PartID, newItem.ID, newItem.Name); }
public new bool Remove(string key2, out ObjectPartInventoryItem item) { if (base.Remove(key2, out item)) { ScriptInstance script = item.RemoveScriptInstance; script?.Remove(); Interlocked.Increment(ref InventorySerial); item.UpdateInfo.SetRemovedItem(); OnInventoryUpdate?.Invoke(item.UpdateInfo); OnChange?.Invoke(ChangeAction.Remove, PartID, item.ID, item.Name); return(true); } return(false); }
protected void RemoveAllScripts(ScriptInstance instance, ObjectPart part) { foreach (ObjectPartInventoryItem item in part.Inventory.Values) { if (item.AssetType == AssetType.LSLText) { ScriptInstance script = item.ScriptInstance; if (script != instance && script != null) { script = item.RemoveScriptInstance; if (script != null) { ScriptThreadPool.AbortScript(script); script.Abort(); script.Remove(); ScriptLoader.Remove(item.AssetID, script); } } } } }
public override bool Remove(IObject obj, ScriptInstance instance = null) { if (!m_Objects.ContainsValue(obj)) { return(false); } var objgroup = obj as ObjectGroup; IAgent agent; if (objgroup != null) { foreach (ObjectPart objpart in objgroup.Values) { Interlocked.Decrement(ref m_PrimitiveCount); foreach (ObjectPartInventoryItem item in objpart.Inventory.Values) { ScriptInstance removeinstance = item.ScriptInstance; if (removeinstance != instance) { removeinstance = item.RemoveScriptInstance; if (removeinstance != null) { ScriptThreadPool.AbortScript(removeinstance); removeinstance.Abort(); removeinstance.Remove(); ScriptLoader.Remove(item.AssetID, removeinstance); } } } m_Primitives.Remove(objpart.ID); objpart.SendKillObject(); RemoveLocalID(objpart); } if (m_Objects.Remove(objgroup.ID)) { Interlocked.Decrement(ref m_ObjectCount); } } else if ((agent = obj as IAgent) != null) { foreach (IAgentListener aglistener in AgentListeners) { try { aglistener.RemovedAgent(agent); } catch (Exception e) { m_Log.DebugFormat("Exception {0}\n{1}", e.Message, e.StackTrace); } } if (agent.IsInScene(this)) { /* only detach if agent is at our scene */ agent.DetachAllAttachments(); } m_Objects.Remove(agent.ID); if (m_Agents.Remove(agent.ID)) { Interlocked.Decrement(ref m_AgentCount); } agent.SendKillObject(ID); RemoveLocalID(agent); } else { agent.SendKillObject(ID); m_Objects.Remove(obj.ID); RemoveLocalID(obj); } return(true); }