cosmetics

This commit is contained in:
UbitUmarov
2025-10-05 02:36:34 +01:00
parent 41dda4407e
commit 8b96e73938
3 changed files with 69 additions and 81 deletions

View File

@@ -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;
}