mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 00:46:02 +08:00
cosmetics
This commit is contained in:
@@ -66,7 +66,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
/// <summary>
|
||||
/// Holds in memory prim inventory
|
||||
/// </summary>
|
||||
protected TaskInventoryDictionary m_items = new TaskInventoryDictionary();
|
||||
protected TaskInventoryDictionary m_items = [];
|
||||
protected Dictionary<UUID, TaskInventoryItem> m_scripts = null;
|
||||
/// <summary>
|
||||
/// Tracks whether inventory has changed since the last persistent backup
|
||||
@@ -973,7 +973,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
public void AddInventoryItemExclusive(TaskInventoryItem item, bool allowedDrop)
|
||||
{
|
||||
m_items.LockItemsForRead(true);
|
||||
List<TaskInventoryItem> il = new List<TaskInventoryItem>(m_items.Values);
|
||||
List<TaskInventoryItem> il = [.. m_items.Values];
|
||||
m_items.LockItemsForRead(false);
|
||||
foreach (TaskInventoryItem i in il)
|
||||
{
|
||||
@@ -1014,15 +1014,21 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
m_items.LockItemsForWrite(true);
|
||||
|
||||
m_items.Add(item.ItemID, item);
|
||||
if (item.InvType == (int)InventoryType.LSL)
|
||||
{
|
||||
if (m_scripts == null)
|
||||
m_scripts = new Dictionary<UUID, TaskInventoryItem>();
|
||||
m_scripts.Add(item.ItemID, item);
|
||||
}
|
||||
bool added = m_items.TryAdd(item.ItemID, item);
|
||||
if(added)
|
||||
{
|
||||
if (item.InvType == (int)InventoryType.LSL)
|
||||
{
|
||||
m_scripts ??= new Dictionary<UUID, TaskInventoryItem>();
|
||||
m_scripts[item.ItemID] = item;
|
||||
}
|
||||
m_inventorySerial++;
|
||||
HasInventoryChanged = true;
|
||||
}
|
||||
|
||||
m_items.LockItemsForWrite(false);
|
||||
if(!added)
|
||||
return;
|
||||
|
||||
if (allowedDrop)
|
||||
m_part.TriggerScriptChangedEvent(Changed.ALLOWED_DROP, item.ItemID);
|
||||
@@ -1030,8 +1036,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
|
||||
|
||||
m_part.AggregateInnerPerms();
|
||||
m_inventorySerial++;
|
||||
HasInventoryChanged = true;
|
||||
m_part.ParentGroup.HasGroupChanged = true;
|
||||
}
|
||||
|
||||
@@ -1044,21 +1048,29 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
/// <param name="items"></param>
|
||||
public void RestoreInventoryItems(ICollection<TaskInventoryItem> items)
|
||||
{
|
||||
m_items.LockItemsForWrite(true);
|
||||
if (items == null || items.Count == 0)
|
||||
return;
|
||||
|
||||
m_items.LockItemsForWrite(true);
|
||||
int nchanges = 0;
|
||||
foreach (TaskInventoryItem item in items)
|
||||
{
|
||||
m_items.Add(item.ItemID, item);
|
||||
if (item.InvType == (int)InventoryType.LSL)
|
||||
{
|
||||
if (m_scripts == null)
|
||||
m_scripts = new Dictionary<UUID, TaskInventoryItem>();
|
||||
m_scripts.Add(item.ItemID, item);
|
||||
if(m_items.TryAdd(item.ItemID, item))
|
||||
{
|
||||
if (item.InvType == (int)InventoryType.LSL)
|
||||
{
|
||||
m_scripts ??= new Dictionary<UUID, TaskInventoryItem>();
|
||||
m_scripts[item.ItemID] = item;
|
||||
}
|
||||
nchanges++;
|
||||
}
|
||||
}
|
||||
m_items.LockItemsForWrite(false);
|
||||
m_part.AggregateInnerPerms();
|
||||
m_inventorySerial++;
|
||||
if(nchanges > 0)
|
||||
{
|
||||
m_part.AggregateInnerPerms();
|
||||
m_inventorySerial++;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1331,7 +1343,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
m_items.LockItemsForWrite(true);
|
||||
|
||||
if (m_items.ContainsKey(item.ItemID))
|
||||
if (m_items.TryGetValue(item.ItemID, out TaskInventoryItem olditem))
|
||||
{
|
||||
//m_log.DebugFormat("[PRIM INVENTORY]: Updating item {0} in {1}", item.Name, m_part.Name);
|
||||
|
||||
@@ -1347,7 +1359,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
item.OwnerID = item.GroupID;
|
||||
|
||||
if (item.AssetID.IsZero())
|
||||
item.AssetID = m_items[item.ItemID].AssetID;
|
||||
item.AssetID = olditem.AssetID;
|
||||
|
||||
m_items[item.ItemID] = item;
|
||||
if(item.InvType == (int)InventoryType.LSL)
|
||||
@@ -1391,50 +1403,45 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
/// in this prim's inventory.</returns>
|
||||
public int RemoveInventoryItem(UUID itemID)
|
||||
{
|
||||
m_items.LockItemsForRead(true);
|
||||
|
||||
if (m_items.ContainsKey(itemID))
|
||||
m_items.LockItemsForWrite(true);
|
||||
try
|
||||
{
|
||||
int type = m_items[itemID].InvType;
|
||||
m_items.LockItemsForRead(false);
|
||||
if (type == (int)InventoryType.LSL) // Script
|
||||
if (m_items.Remove(itemID, out TaskInventoryItem olditem))
|
||||
{
|
||||
m_part.ParentGroup.Scene.EventManager.TriggerRemoveScript(m_part.LocalId, itemID);
|
||||
}
|
||||
m_items.LockItemsForWrite(true);
|
||||
m_items.Remove(itemID);
|
||||
if(m_scripts != null)
|
||||
{
|
||||
m_scripts.Remove(itemID);
|
||||
if(m_scripts.Count == 0)
|
||||
m_scripts = null;
|
||||
}
|
||||
if (m_scripts == null)
|
||||
{
|
||||
m_part.RemFlag(PrimFlags.Scripted);
|
||||
}
|
||||
int type = olditem.InvType;
|
||||
if(m_scripts != null)
|
||||
{
|
||||
m_scripts.Remove(itemID);
|
||||
if(m_scripts.Count == 0)
|
||||
m_scripts = null;
|
||||
}
|
||||
if (m_scripts == null)
|
||||
m_part.RemFlag(PrimFlags.Scripted);
|
||||
|
||||
m_part.ParentGroup.InvalidateDeepEffectivePerms();
|
||||
m_inventorySerial++;
|
||||
HasInventoryChanged = true;
|
||||
m_part.ParentGroup.InvalidateDeepEffectivePerms();
|
||||
m_inventorySerial++;
|
||||
HasInventoryChanged = true;
|
||||
|
||||
m_part.ParentGroup.HasGroupChanged = true;
|
||||
m_part.ScheduleFullUpdate();
|
||||
|
||||
if (type == (int)InventoryType.LSL) // Script
|
||||
m_part.ParentGroup.Scene.EventManager.TriggerRemoveScript(m_part.LocalId, itemID);
|
||||
if (m_scripts != null)
|
||||
m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
|
||||
return type;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.Error(
|
||||
"[PRIM INVENTORY]: Tried to remove item ID " +
|
||||
$"{itemID} from prim {m_part.Name}, {m_part.UUID} but the item does not exist in this inventory");
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
m_items.LockItemsForWrite(false);
|
||||
|
||||
m_part.ParentGroup.HasGroupChanged = true;
|
||||
m_part.ScheduleFullUpdate();
|
||||
|
||||
m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
|
||||
return type;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_items.LockItemsForRead(false);
|
||||
m_log.ErrorFormat(
|
||||
"[PRIM INVENTORY]: " +
|
||||
"Tried to remove item ID {0} from prim {1}, {2} but the item does not exist in this inventory",
|
||||
itemID, m_part.Name, m_part.UUID);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user