diff options
author | Justin Clarke Casey | 2008-01-16 18:35:34 +0000 |
---|---|---|
committer | Justin Clarke Casey | 2008-01-16 18:35:34 +0000 |
commit | 57519b6dba97d7e7a2de71af9d58c93b4750bde8 (patch) | |
tree | 9597647ee1e70e50215b90bb116fede1ca7f8e27 /OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs | |
parent | First part of changing prim's permission flags to use the correct enum (libsl... (diff) | |
download | opensim-SC-57519b6dba97d7e7a2de71af9d58c93b4750bde8.zip opensim-SC-57519b6dba97d7e7a2de71af9d58c93b4750bde8.tar.gz opensim-SC-57519b6dba97d7e7a2de71af9d58c93b4750bde8.tar.bz2 opensim-SC-57519b6dba97d7e7a2de71af9d58c93b4750bde8.tar.xz |
* Store task inventory when an object is taken into agent inventory
* This means that you can take an object from a region and rez it somewhere else, with its inventory intact.
* As for earlier, at this stage only scripts can be placed in inventory
* This isn't an efficient implementation, a better one will probably need to come along soonish
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs | 90 |
1 files changed, 53 insertions, 37 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs index fc74c4e..5132a6c 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs | |||
@@ -57,30 +57,46 @@ namespace OpenSim.Region.Environment.Scenes | |||
57 | get { return m_folderID; } | 57 | get { return m_folderID; } |
58 | set { m_folderID = value; } | 58 | set { m_folderID = value; } |
59 | } | 59 | } |
60 | |||
61 | /// <summary> | ||
62 | /// Serial count for inventory file , used to tell if inventory has changed | ||
63 | /// no need for this to be part of Database backup | ||
64 | /// </summary> | ||
65 | protected uint m_inventorySerial = 0; | ||
66 | |||
67 | public uint InventorySerial | ||
68 | { | ||
69 | get { return m_inventorySerial; } | ||
70 | set { m_inventorySerial = value; } | ||
71 | } | ||
60 | 72 | ||
61 | /// <summary> | 73 | /// <summary> |
62 | /// Holds in memory prim inventory | 74 | /// Holds in memory prim inventory |
63 | /// </summary> | 75 | /// </summary> |
64 | protected IDictionary<LLUUID, TaskInventoryItem> m_taskInventory | 76 | protected TaskInventoryDictionary m_taskInventory = new TaskInventoryDictionary(); |
65 | = new Dictionary<LLUUID, TaskInventoryItem>(); | ||
66 | 77 | ||
67 | [XmlIgnore] | 78 | public TaskInventoryDictionary TaskInventory |
68 | public IDictionary<LLUUID, TaskInventoryItem> TaskInventory | ||
69 | { | 79 | { |
70 | get { return m_taskInventory; } | 80 | get { return m_taskInventory; } |
81 | set { m_taskInventory = value; } | ||
71 | } | 82 | } |
72 | 83 | ||
73 | /// <summary> | 84 | /// <summary> |
74 | /// Serial count for inventory file , used to tell if inventory has changed | 85 | /// Reset LLUUIDs for all the items in the prim's inventory. This involves either generating |
75 | /// no need for this to be part of Database backup | 86 | /// new ones or setting existing UUIDs to the correct parent UUIDs |
76 | /// </summary> | 87 | /// </summary> |
77 | protected uint m_inventorySerial = 0; | 88 | /// <param name="linkNum'>Link number for the part</param> |
78 | 89 | public void ResetInventoryIDs() | |
79 | public uint InventorySerial | ||
80 | { | 90 | { |
81 | get { return m_inventorySerial; } | 91 | IList<TaskInventoryItem> items = new List<TaskInventoryItem>(TaskInventory.Values); |
82 | } | 92 | TaskInventory.Clear(); |
83 | 93 | ||
94 | foreach (TaskInventoryItem item in items) | ||
95 | { | ||
96 | item.ResetIDs(UUID); | ||
97 | TaskInventory.Add(item.ItemID, item); | ||
98 | } | ||
99 | } | ||
84 | 100 | ||
85 | /// <summary> | 101 | /// <summary> |
86 | /// Start all the scripts contained in this prim's inventory | 102 | /// Start all the scripts contained in this prim's inventory |
@@ -90,7 +106,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
90 | foreach (TaskInventoryItem item in m_taskInventory.Values) | 106 | foreach (TaskInventoryItem item in m_taskInventory.Values) |
91 | { | 107 | { |
92 | // XXX more hardcoding badness. Should be an enum in TaskInventoryItem | 108 | // XXX more hardcoding badness. Should be an enum in TaskInventoryItem |
93 | if (10 == item.type) | 109 | if (10 == item.Type) |
94 | { | 110 | { |
95 | StartScript(item); | 111 | StartScript(item); |
96 | } | 112 | } |
@@ -107,21 +123,21 @@ namespace OpenSim.Region.Environment.Scenes | |||
107 | // MainLog.Instance.Verbose( | 123 | // MainLog.Instance.Verbose( |
108 | // "PRIMINVENTORY", | 124 | // "PRIMINVENTORY", |
109 | // "Starting script {0}, {1} in prim {2}, {3}", | 125 | // "Starting script {0}, {1} in prim {2}, {3}", |
110 | // item.name, item.item_id, Name, UUID); | 126 | // item.Name, item.ItemID, Name, UUID); |
111 | 127 | ||
112 | AssetBase rezAsset = m_parentGroup.Scene.AssetCache.GetAsset(item.asset_id, false); | 128 | AssetBase rezAsset = m_parentGroup.Scene.AssetCache.GetAsset(item.AssetID, false); |
113 | 129 | ||
114 | if (rezAsset != null) | 130 | if (rezAsset != null) |
115 | { | 131 | { |
116 | string script = Helpers.FieldToUTF8String(rezAsset.Data); | 132 | string script = Helpers.FieldToUTF8String(rezAsset.Data); |
117 | m_parentGroup.Scene.EventManager.TriggerRezScript(LocalID, item.item_id, script); | 133 | m_parentGroup.Scene.EventManager.TriggerRezScript(LocalID, item.ItemID, script); |
118 | } | 134 | } |
119 | else | 135 | else |
120 | { | 136 | { |
121 | MainLog.Instance.Error( | 137 | MainLog.Instance.Error( |
122 | "PRIMINVENTORY", | 138 | "PRIMINVENTORY", |
123 | "Couldn't start script {0}, {1} since asset ID {2} could not be found", | 139 | "Couldn't start script {0}, {1} since asset ID {2} could not be found", |
124 | item.name, item.item_id, item.asset_id); | 140 | item.Name, item.ItemID, item.AssetID); |
125 | } | 141 | } |
126 | } | 142 | } |
127 | 143 | ||
@@ -172,10 +188,10 @@ namespace OpenSim.Region.Environment.Scenes | |||
172 | /// <param name="item"></param> | 188 | /// <param name="item"></param> |
173 | public void AddInventoryItem(TaskInventoryItem item) | 189 | public void AddInventoryItem(TaskInventoryItem item) |
174 | { | 190 | { |
175 | item.parent_id = m_folderID; | 191 | item.ParentID = m_folderID; |
176 | item.creation_date = 1000; | 192 | item.CreationDate = 1000; |
177 | item.ParentPartID = UUID; | 193 | item.ParentPartID = UUID; |
178 | m_taskInventory.Add(item.item_id, item); | 194 | m_taskInventory.Add(item.ItemID, item); |
179 | m_inventorySerial++; | 195 | m_inventorySerial++; |
180 | } | 196 | } |
181 | 197 | ||
@@ -188,7 +204,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
188 | { | 204 | { |
189 | foreach (TaskInventoryItem item in items) | 205 | foreach (TaskInventoryItem item in items) |
190 | { | 206 | { |
191 | m_taskInventory.Add(item.item_id, item); | 207 | m_taskInventory.Add(item.ItemID, item); |
192 | } | 208 | } |
193 | 209 | ||
194 | m_inventorySerial++; | 210 | m_inventorySerial++; |
@@ -224,9 +240,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
224 | /// <returns>false if the item did not exist, true if the update occurred succesfully</returns> | 240 | /// <returns>false if the item did not exist, true if the update occurred succesfully</returns> |
225 | public bool UpdateInventoryItem(TaskInventoryItem item) | 241 | public bool UpdateInventoryItem(TaskInventoryItem item) |
226 | { | 242 | { |
227 | if (m_taskInventory.ContainsKey(item.item_id)) | 243 | if (m_taskInventory.ContainsKey(item.ItemID)) |
228 | { | 244 | { |
229 | m_taskInventory[item.item_id] = item; | 245 | m_taskInventory[item.ItemID] = item; |
230 | m_inventorySerial++; | 246 | m_inventorySerial++; |
231 | 247 | ||
232 | return true; | 248 | return true; |
@@ -236,7 +252,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
236 | MainLog.Instance.Error( | 252 | MainLog.Instance.Error( |
237 | "PRIMINVENTORY", | 253 | "PRIMINVENTORY", |
238 | "Tried to retrieve item ID {0} from prim {1}, {2} but the item does not exist in this inventory", | 254 | "Tried to retrieve item ID {0} from prim {1}, {2} but the item does not exist in this inventory", |
239 | item.item_id, Name, UUID); | 255 | item.ItemID, Name, UUID); |
240 | } | 256 | } |
241 | 257 | ||
242 | return false; | 258 | return false; |
@@ -252,7 +268,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
252 | { | 268 | { |
253 | if (m_taskInventory.ContainsKey(itemID)) | 269 | if (m_taskInventory.ContainsKey(itemID)) |
254 | { | 270 | { |
255 | int type = m_taskInventory[itemID].inv_type; | 271 | int type = m_taskInventory[itemID].InvType; |
256 | m_taskInventory.Remove(itemID); | 272 | m_taskInventory.Remove(itemID); |
257 | m_inventorySerial++; | 273 | m_inventorySerial++; |
258 | 274 | ||
@@ -296,8 +312,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
296 | foreach (TaskInventoryItem item in m_taskInventory.Values) | 312 | foreach (TaskInventoryItem item in m_taskInventory.Values) |
297 | { | 313 | { |
298 | invString.AddItemStart(); | 314 | invString.AddItemStart(); |
299 | invString.AddNameValueLine("item_id", item.item_id.ToString()); | 315 | invString.AddNameValueLine("item_id", item.ItemID.ToString()); |
300 | invString.AddNameValueLine("parent_id", item.parent_id.ToString()); | 316 | invString.AddNameValueLine("parent_id", item.ParentID.ToString()); |
301 | 317 | ||
302 | invString.AddPermissionsStart(); | 318 | invString.AddPermissionsStart(); |
303 | invString.AddNameValueLine("base_mask", "0x7FFFFFFF"); | 319 | invString.AddNameValueLine("base_mask", "0x7FFFFFFF"); |
@@ -305,19 +321,19 @@ namespace OpenSim.Region.Environment.Scenes | |||
305 | invString.AddNameValueLine("group_mask", "0x7FFFFFFF"); | 321 | invString.AddNameValueLine("group_mask", "0x7FFFFFFF"); |
306 | invString.AddNameValueLine("everyone_mask", "0x7FFFFFFF"); | 322 | invString.AddNameValueLine("everyone_mask", "0x7FFFFFFF"); |
307 | invString.AddNameValueLine("next_owner_mask", "0x7FFFFFFF"); | 323 | invString.AddNameValueLine("next_owner_mask", "0x7FFFFFFF"); |
308 | invString.AddNameValueLine("creator_id", item.creator_id.ToString()); | 324 | invString.AddNameValueLine("creator_id", item.CreatorID.ToString()); |
309 | invString.AddNameValueLine("owner_id", item.owner_id.ToString()); | 325 | invString.AddNameValueLine("owner_id", item.OwnerID.ToString()); |
310 | invString.AddNameValueLine("last_owner_id", item.last_owner_id.ToString()); | 326 | invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString()); |
311 | invString.AddNameValueLine("group_id", item.group_id.ToString()); | 327 | invString.AddNameValueLine("group_id", item.GroupID.ToString()); |
312 | invString.AddSectionEnd(); | 328 | invString.AddSectionEnd(); |
313 | 329 | ||
314 | invString.AddNameValueLine("asset_id", item.asset_id.ToString()); | 330 | invString.AddNameValueLine("asset_id", item.AssetID.ToString()); |
315 | invString.AddNameValueLine("type", TaskInventoryItem.Types[item.type]); | 331 | invString.AddNameValueLine("type", TaskInventoryItem.Types[item.Type]); |
316 | invString.AddNameValueLine("inv_type", TaskInventoryItem.InvTypes[item.inv_type]); | 332 | invString.AddNameValueLine("inv_type", TaskInventoryItem.InvTypes[item.InvType]); |
317 | invString.AddNameValueLine("flags", "0x00"); | 333 | invString.AddNameValueLine("flags", "0x00"); |
318 | invString.AddNameValueLine("name", item.name + "|"); | 334 | invString.AddNameValueLine("name", item.Name + "|"); |
319 | invString.AddNameValueLine("desc", item.desc + "|"); | 335 | invString.AddNameValueLine("desc", item.Description + "|"); |
320 | invString.AddNameValueLine("creation_date", item.creation_date.ToString()); | 336 | invString.AddNameValueLine("creation_date", item.CreationDate.ToString()); |
321 | invString.AddSectionEnd(); | 337 | invString.AddSectionEnd(); |
322 | } | 338 | } |
323 | 339 | ||