diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs | 302 |
1 files changed, 178 insertions, 124 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index 959046a..14ef0fb 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs | |||
@@ -176,16 +176,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
176 | /// <param name="ownerId"></param> | 176 | /// <param name="ownerId"></param> |
177 | public void ChangeInventoryOwner(UUID ownerId) | 177 | public void ChangeInventoryOwner(UUID ownerId) |
178 | { | 178 | { |
179 | m_items.LockItemsForWrite(true); | 179 | List<TaskInventoryItem> items = GetInventoryItems(); |
180 | if (0 == Items.Count) | 180 | |
181 | { | 181 | if (items.Count == 0) |
182 | m_items.LockItemsForWrite(false); | ||
183 | return; | 182 | return; |
184 | } | ||
185 | 183 | ||
184 | m_items.LockItemsForWrite(true); | ||
186 | HasInventoryChanged = true; | 185 | HasInventoryChanged = true; |
187 | m_part.ParentGroup.HasGroupChanged = true; | 186 | m_part.ParentGroup.HasGroupChanged = true; |
188 | List<TaskInventoryItem> items = GetInventoryItems(); | ||
189 | foreach (TaskInventoryItem item in items) | 187 | foreach (TaskInventoryItem item in items) |
190 | { | 188 | { |
191 | if (ownerId != item.OwnerID) | 189 | if (ownerId != item.OwnerID) |
@@ -262,19 +260,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
262 | Items.LockItemsForRead(false); | 260 | Items.LockItemsForRead(false); |
263 | } | 261 | } |
264 | 262 | ||
265 | /// <summary> | 263 | public int CreateScriptInstances(int startParam, bool postOnRez, string engine, int stateSource) |
266 | /// Start all the scripts contained in this prim's inventory | ||
267 | /// </summary> | ||
268 | public void CreateScriptInstances(int startParam, bool postOnRez, string engine, int stateSource) | ||
269 | { | 264 | { |
270 | Items.LockItemsForRead(true); | 265 | int scriptsValidForStarting = 0; |
271 | IList<TaskInventoryItem> items = new List<TaskInventoryItem>(Items.Values); | 266 | |
272 | Items.LockItemsForRead(false); | 267 | List<TaskInventoryItem> scripts = GetInventoryItems(InventoryType.LSL); |
273 | foreach (TaskInventoryItem item in items) | 268 | foreach (TaskInventoryItem item in scripts) |
274 | { | 269 | if (CreateScriptInstance(item, startParam, postOnRez, engine, stateSource)) |
275 | if ((int)InventoryType.LSL == item.InvType) | 270 | scriptsValidForStarting++; |
276 | CreateScriptInstance(item, startParam, postOnRez, engine, stateSource); | 271 | |
277 | } | 272 | return scriptsValidForStarting; |
278 | } | 273 | } |
279 | 274 | ||
280 | public ArrayList GetScriptErrors(UUID itemID) | 275 | public ArrayList GetScriptErrors(UUID itemID) |
@@ -305,17 +300,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
305 | /// </param> | 300 | /// </param> |
306 | public void RemoveScriptInstances(bool sceneObjectBeingDeleted) | 301 | public void RemoveScriptInstances(bool sceneObjectBeingDeleted) |
307 | { | 302 | { |
308 | Items.LockItemsForRead(true); | 303 | List<TaskInventoryItem> scripts = GetInventoryItems(InventoryType.LSL); |
309 | IList<TaskInventoryItem> items = new List<TaskInventoryItem>(Items.Values); | 304 | foreach (TaskInventoryItem item in scripts) |
310 | Items.LockItemsForRead(false); | ||
311 | |||
312 | foreach (TaskInventoryItem item in items) | ||
313 | { | 305 | { |
314 | if ((int)InventoryType.LSL == item.InvType) | 306 | RemoveScriptInstance(item.ItemID, sceneObjectBeingDeleted); |
315 | { | 307 | m_part.RemoveScriptEvents(item.ItemID); |
316 | RemoveScriptInstance(item.ItemID, sceneObjectBeingDeleted); | ||
317 | m_part.RemoveScriptEvents(item.ItemID); | ||
318 | } | ||
319 | } | 308 | } |
320 | } | 309 | } |
321 | 310 | ||
@@ -323,8 +312,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
323 | /// Start a script which is in this prim's inventory. | 312 | /// Start a script which is in this prim's inventory. |
324 | /// </summary> | 313 | /// </summary> |
325 | /// <param name="item"></param> | 314 | /// <param name="item"></param> |
326 | /// <returns></returns> | 315 | /// <returns>true if the script instance was created, false otherwise</returns> |
327 | public void CreateScriptInstance(TaskInventoryItem item, int startParam, bool postOnRez, string engine, int stateSource) | 316 | public bool CreateScriptInstance(TaskInventoryItem item, int startParam, bool postOnRez, string engine, int stateSource) |
328 | { | 317 | { |
329 | // m_log.DebugFormat("[PRIM INVENTORY]: Starting script {0} {1} in prim {2} {3} in {4}", | 318 | // m_log.DebugFormat("[PRIM INVENTORY]: Starting script {0} {1} in prim {2} {3} in {4}", |
330 | // item.Name, item.ItemID, m_part.Name, m_part.UUID, m_part.ParentGroup.Scene.RegionInfo.RegionName); | 319 | // item.Name, item.ItemID, m_part.Name, m_part.UUID, m_part.ParentGroup.Scene.RegionInfo.RegionName); |
@@ -332,61 +321,70 @@ namespace OpenSim.Region.Framework.Scenes | |||
332 | if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item.ItemID, m_part.UUID, item.OwnerID)) | 321 | if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item.ItemID, m_part.UUID, item.OwnerID)) |
333 | { | 322 | { |
334 | StoreScriptError(item.ItemID, "no permission"); | 323 | StoreScriptError(item.ItemID, "no permission"); |
335 | return; | 324 | return false; |
336 | } | 325 | } |
337 | 326 | ||
338 | m_part.AddFlag(PrimFlags.Scripted); | 327 | m_part.AddFlag(PrimFlags.Scripted); |
339 | 328 | ||
340 | if (!m_part.ParentGroup.Scene.RegionInfo.RegionSettings.DisableScripts) | 329 | if (m_part.ParentGroup.Scene.RegionInfo.RegionSettings.DisableScripts) |
330 | return false; | ||
331 | |||
332 | if (stateSource == 2 && // Prim crossing | ||
333 | m_part.ParentGroup.Scene.m_trustBinaries) | ||
341 | { | 334 | { |
342 | if (stateSource == 2 && // Prim crossing | 335 | m_items.LockItemsForWrite(true); |
343 | m_part.ParentGroup.Scene.m_trustBinaries) | 336 | m_items[item.ItemID].PermsMask = 0; |
344 | { | 337 | m_items[item.ItemID].PermsGranter = UUID.Zero; |
345 | m_items.LockItemsForWrite(true); | 338 | m_items.LockItemsForWrite(false); |
346 | m_items[item.ItemID].PermsMask = 0; | 339 | m_part.ParentGroup.Scene.EventManager.TriggerRezScript( |
347 | m_items[item.ItemID].PermsGranter = UUID.Zero; | 340 | m_part.LocalId, item.ItemID, String.Empty, startParam, postOnRez, engine, stateSource); |
348 | m_items.LockItemsForWrite(false); | 341 | StoreScriptErrors(item.ItemID, null); |
349 | m_part.ParentGroup.Scene.EventManager.TriggerRezScript( | 342 | m_part.ParentGroup.AddActiveScriptCount(1); |
350 | m_part.LocalId, item.ItemID, String.Empty, startParam, postOnRez, engine, stateSource); | 343 | m_part.ScheduleFullUpdate(); |
351 | StoreScriptErrors(item.ItemID, null); | 344 | return true; |
352 | m_part.ParentGroup.AddActiveScriptCount(1); | 345 | } |
353 | m_part.ScheduleFullUpdate(); | ||
354 | return; | ||
355 | } | ||
356 | 346 | ||
357 | AssetBase asset = m_part.ParentGroup.Scene.AssetService.Get(item.AssetID.ToString()); | 347 | AssetBase asset = m_part.ParentGroup.Scene.AssetService.Get(item.AssetID.ToString()); |
358 | if (null == asset) | 348 | if (null == asset) |
359 | { | 349 | { |
360 | string msg = String.Format("asset ID {0} could not be found", item.AssetID); | 350 | m_log.ErrorFormat( |
361 | StoreScriptError(item.ItemID, msg); | 351 | "[PRIM INVENTORY]: Couldn't start script {0}, {1} at {2} in {3} since asset ID {4} could not be found", |
362 | m_log.ErrorFormat( | 352 | item.Name, item.ItemID, m_part.AbsolutePosition, |
353 | m_part.ParentGroup.Scene.RegionInfo.RegionName, item.AssetID); | ||
354 | |||
355 | return false; | ||
356 | } | ||
357 | else | ||
358 | { | ||
359 | if (m_part.ParentGroup.m_savedScriptState != null) | ||
360 | item.OldItemID = RestoreSavedScriptState(item.LoadedItemID, item.OldItemID, item.ItemID); | ||
361 | |||
362 | string msg = String.Format("asset ID {0} could not be found", item.AssetID); | ||
363 | StoreScriptError(item.ItemID, msg); | ||
364 | m_log.ErrorFormat( | ||
363 | "[PRIM INVENTORY]: Couldn't start script {0}, {1} at {2} in {3} since asset ID {4} could not be found", | 365 | "[PRIM INVENTORY]: Couldn't start script {0}, {1} at {2} in {3} since asset ID {4} could not be found", |
364 | item.Name, item.ItemID, m_part.AbsolutePosition, | 366 | item.Name, item.ItemID, m_part.AbsolutePosition, |
365 | m_part.ParentGroup.Scene.RegionInfo.RegionName, item.AssetID); | 367 | m_part.ParentGroup.Scene.RegionInfo.RegionName, item.AssetID); |
366 | } | ||
367 | else | ||
368 | { | ||
369 | if (m_part.ParentGroup.m_savedScriptState != null) | ||
370 | item.OldItemID = RestoreSavedScriptState(item.LoadedItemID, item.OldItemID, item.ItemID); | ||
371 | 368 | ||
372 | m_items.LockItemsForWrite(true); | 369 | m_items.LockItemsForWrite(true); |
373 | 370 | ||
374 | m_items[item.ItemID].OldItemID = item.OldItemID; | 371 | m_items[item.ItemID].OldItemID = item.OldItemID; |
375 | m_items[item.ItemID].PermsMask = 0; | 372 | m_items[item.ItemID].PermsMask = 0; |
376 | m_items[item.ItemID].PermsGranter = UUID.Zero; | 373 | m_items[item.ItemID].PermsGranter = UUID.Zero; |
377 | 374 | ||
378 | m_items.LockItemsForWrite(false); | 375 | m_items.LockItemsForWrite(false); |
379 | 376 | ||
380 | string script = Utils.BytesToString(asset.Data); | 377 | string script = Utils.BytesToString(asset.Data); |
381 | m_part.ParentGroup.Scene.EventManager.TriggerRezScript( | 378 | m_part.ParentGroup.Scene.EventManager.TriggerRezScript( |
382 | m_part.LocalId, item.ItemID, script, startParam, postOnRez, engine, stateSource); | 379 | m_part.LocalId, item.ItemID, script, startParam, postOnRez, engine, stateSource); |
383 | StoreScriptErrors(item.ItemID, null); | 380 | StoreScriptErrors(item.ItemID, null); |
384 | if (!item.ScriptRunning) | 381 | if (!item.ScriptRunning) |
385 | m_part.ParentGroup.Scene.EventManager.TriggerStopScript( | 382 | m_part.ParentGroup.Scene.EventManager.TriggerStopScript( |
386 | m_part.LocalId, item.ItemID); | 383 | m_part.LocalId, item.ItemID); |
387 | m_part.ParentGroup.AddActiveScriptCount(1); | 384 | m_part.ParentGroup.AddActiveScriptCount(1); |
388 | m_part.ScheduleFullUpdate(); | 385 | m_part.ScheduleFullUpdate(); |
389 | } | 386 | |
387 | return true; | ||
390 | } | 388 | } |
391 | } | 389 | } |
392 | 390 | ||
@@ -459,7 +457,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
459 | /// <param name="itemId"> | 457 | /// <param name="itemId"> |
460 | /// A <see cref="UUID"/> | 458 | /// A <see cref="UUID"/> |
461 | /// </param> | 459 | /// </param> |
462 | public void CreateScriptInstance(UUID itemId, int startParam, bool postOnRez, string engine, int stateSource) | 460 | public bool CreateScriptInstance(UUID itemId, int startParam, bool postOnRez, string engine, int stateSource) |
463 | { | 461 | { |
464 | lock (m_scriptErrors) | 462 | lock (m_scriptErrors) |
465 | { | 463 | { |
@@ -467,6 +465,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
467 | m_scriptErrors.Remove(itemId); | 465 | m_scriptErrors.Remove(itemId); |
468 | } | 466 | } |
469 | CreateScriptInstanceInternal(itemId, startParam, postOnRez, engine, stateSource); | 467 | CreateScriptInstanceInternal(itemId, startParam, postOnRez, engine, stateSource); |
468 | return true; | ||
470 | } | 469 | } |
471 | 470 | ||
472 | private void CreateScriptInstanceInternal(UUID itemId, int startParam, bool postOnRez, string engine, int stateSource) | 471 | private void CreateScriptInstanceInternal(UUID itemId, int startParam, bool postOnRez, string engine, int stateSource) |
@@ -770,14 +769,22 @@ namespace OpenSim.Region.Framework.Scenes | |||
770 | return item; | 769 | return item; |
771 | } | 770 | } |
772 | 771 | ||
773 | /// <summary> | 772 | public TaskInventoryItem GetInventoryItem(string name) |
774 | /// Get inventory items by name. | 773 | { |
775 | /// </summary> | 774 | m_items.LockItemsForRead(true); |
776 | /// <param name="name"></param> | 775 | foreach (TaskInventoryItem item in m_items.Values) |
777 | /// <returns> | 776 | { |
778 | /// A list of inventory items with that name. | 777 | if (item.Name == name) |
779 | /// If no inventory item has that name then an empty list is returned. | 778 | { |
780 | /// </returns> | 779 | m_items.LockItemsForRead(false); |
780 | return item; | ||
781 | } | ||
782 | } | ||
783 | m_items.LockItemsForRead(false); | ||
784 | |||
785 | return null; | ||
786 | } | ||
787 | |||
781 | public List<TaskInventoryItem> GetInventoryItems(string name) | 788 | public List<TaskInventoryItem> GetInventoryItems(string name) |
782 | { | 789 | { |
783 | List<TaskInventoryItem> items = new List<TaskInventoryItem>(); | 790 | List<TaskInventoryItem> items = new List<TaskInventoryItem>(); |
@@ -1247,10 +1254,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
1247 | if ((item.CurrentPermissions & ((uint)PermissionMask.Modify >> 13)) == 0) | 1254 | if ((item.CurrentPermissions & ((uint)PermissionMask.Modify >> 13)) == 0) |
1248 | item.CurrentPermissions &= ~(uint)PermissionMask.Modify; | 1255 | item.CurrentPermissions &= ~(uint)PermissionMask.Modify; |
1249 | } | 1256 | } |
1250 | item.OwnerChanged = true; | ||
1251 | item.CurrentPermissions &= item.NextPermissions; | 1257 | item.CurrentPermissions &= item.NextPermissions; |
1252 | item.BasePermissions &= item.NextPermissions; | 1258 | item.BasePermissions &= item.NextPermissions; |
1253 | item.EveryonePermissions &= item.NextPermissions; | 1259 | item.EveryonePermissions &= item.NextPermissions; |
1260 | item.OwnerChanged = true; | ||
1254 | item.PermsMask = 0; | 1261 | item.PermsMask = 0; |
1255 | item.PermsGranter = UUID.Zero; | 1262 | item.PermsGranter = UUID.Zero; |
1256 | } | 1263 | } |
@@ -1281,9 +1288,57 @@ namespace OpenSim.Region.Framework.Scenes | |||
1281 | return true; | 1288 | return true; |
1282 | } | 1289 | } |
1283 | } | 1290 | } |
1291 | |||
1284 | return false; | 1292 | return false; |
1285 | } | 1293 | } |
1286 | 1294 | ||
1295 | /// <summary> | ||
1296 | /// Returns the count of scripts in this parts inventory. | ||
1297 | /// </summary> | ||
1298 | /// <returns></returns> | ||
1299 | public int ScriptCount() | ||
1300 | { | ||
1301 | int count = 0; | ||
1302 | Items.LockItemsForRead(true); | ||
1303 | foreach (TaskInventoryItem item in m_items.Values) | ||
1304 | { | ||
1305 | if (item.InvType == (int)InventoryType.LSL) | ||
1306 | { | ||
1307 | count++; | ||
1308 | } | ||
1309 | } | ||
1310 | Items.LockItemsForRead(false); | ||
1311 | return count; | ||
1312 | } | ||
1313 | /// <summary> | ||
1314 | /// Returns the count of running scripts in this parts inventory. | ||
1315 | /// </summary> | ||
1316 | /// <returns></returns> | ||
1317 | public int RunningScriptCount() | ||
1318 | { | ||
1319 | IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>(); | ||
1320 | if (engines.Length == 0) | ||
1321 | return 0; | ||
1322 | |||
1323 | int count = 0; | ||
1324 | List<TaskInventoryItem> scripts = GetInventoryItems(InventoryType.LSL); | ||
1325 | |||
1326 | foreach (TaskInventoryItem item in scripts) | ||
1327 | { | ||
1328 | foreach (IScriptModule engine in engines) | ||
1329 | { | ||
1330 | if (engine != null) | ||
1331 | { | ||
1332 | if (engine.GetScriptState(item.ItemID)) | ||
1333 | { | ||
1334 | count++; | ||
1335 | } | ||
1336 | } | ||
1337 | } | ||
1338 | } | ||
1339 | return count; | ||
1340 | } | ||
1341 | |||
1287 | public List<UUID> GetInventoryList() | 1342 | public List<UUID> GetInventoryList() |
1288 | { | 1343 | { |
1289 | List<UUID> ret = new List<UUID>(); | 1344 | List<UUID> ret = new List<UUID>(); |
@@ -1298,22 +1353,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
1298 | { | 1353 | { |
1299 | List<TaskInventoryItem> ret = new List<TaskInventoryItem>(); | 1354 | List<TaskInventoryItem> ret = new List<TaskInventoryItem>(); |
1300 | 1355 | ||
1301 | lock (m_items) | 1356 | Items.LockItemsForRead(true); |
1302 | ret = new List<TaskInventoryItem>(m_items.Values); | 1357 | ret = new List<TaskInventoryItem>(m_items.Values); |
1358 | Items.LockItemsForRead(false); | ||
1303 | 1359 | ||
1304 | return ret; | 1360 | return ret; |
1305 | } | 1361 | } |
1306 | 1362 | ||
1307 | public List<TaskInventoryItem> GetInventoryScripts() | 1363 | public List<TaskInventoryItem> GetInventoryItems(InventoryType type) |
1308 | { | 1364 | { |
1309 | List<TaskInventoryItem> ret = new List<TaskInventoryItem>(); | 1365 | List<TaskInventoryItem> ret = new List<TaskInventoryItem>(); |
1310 | 1366 | ||
1311 | lock (m_items) | 1367 | Items.LockItemsForRead(true); |
1312 | { | 1368 | |
1313 | foreach (TaskInventoryItem item in m_items.Values) | 1369 | foreach (TaskInventoryItem item in m_items.Values) |
1314 | if (item.InvType == (int)InventoryType.LSL) | 1370 | if (item.InvType == (int)type) |
1315 | ret.Add(item); | 1371 | ret.Add(item); |
1316 | } | 1372 | |
1373 | Items.LockItemsForRead(false); | ||
1317 | 1374 | ||
1318 | return ret; | 1375 | return ret; |
1319 | } | 1376 | } |
@@ -1335,35 +1392,32 @@ namespace OpenSim.Region.Framework.Scenes | |||
1335 | if (engines.Length == 0) // No engine at all | 1392 | if (engines.Length == 0) // No engine at all |
1336 | return ret; | 1393 | return ret; |
1337 | 1394 | ||
1338 | Items.LockItemsForRead(true); | 1395 | List<TaskInventoryItem> scripts = GetInventoryItems(InventoryType.LSL); |
1339 | foreach (TaskInventoryItem item in m_items.Values) | 1396 | |
1397 | foreach (TaskInventoryItem item in scripts) | ||
1340 | { | 1398 | { |
1341 | if (item.InvType == (int)InventoryType.LSL) | 1399 | foreach (IScriptModule e in engines) |
1342 | { | 1400 | { |
1343 | foreach (IScriptModule e in engines) | 1401 | if (e != null) |
1344 | { | 1402 | { |
1345 | if (e != null) | 1403 | string n = e.GetXMLState(item.ItemID); |
1404 | if (n != String.Empty) | ||
1346 | { | 1405 | { |
1347 | string n = e.GetXMLState(item.ItemID); | 1406 | if (oldIDs) |
1348 | if (n != String.Empty) | ||
1349 | { | 1407 | { |
1350 | if (oldIDs) | 1408 | if (!ret.ContainsKey(item.OldItemID)) |
1351 | { | 1409 | ret[item.OldItemID] = n; |
1352 | if (!ret.ContainsKey(item.OldItemID)) | ||
1353 | ret[item.OldItemID] = n; | ||
1354 | } | ||
1355 | else | ||
1356 | { | ||
1357 | if (!ret.ContainsKey(item.ItemID)) | ||
1358 | ret[item.ItemID] = n; | ||
1359 | } | ||
1360 | break; | ||
1361 | } | 1410 | } |
1411 | else | ||
1412 | { | ||
1413 | if (!ret.ContainsKey(item.ItemID)) | ||
1414 | ret[item.ItemID] = n; | ||
1415 | } | ||
1416 | break; | ||
1362 | } | 1417 | } |
1363 | } | 1418 | } |
1364 | } | 1419 | } |
1365 | } | 1420 | } |
1366 | Items.LockItemsForRead(false); | ||
1367 | return ret; | 1421 | return ret; |
1368 | } | 1422 | } |
1369 | 1423 | ||
@@ -1373,27 +1427,27 @@ namespace OpenSim.Region.Framework.Scenes | |||
1373 | if (engines.Length == 0) | 1427 | if (engines.Length == 0) |
1374 | return; | 1428 | return; |
1375 | 1429 | ||
1430 | List<TaskInventoryItem> scripts = GetInventoryItems(InventoryType.LSL); | ||
1376 | 1431 | ||
1377 | Items.LockItemsForRead(true); | 1432 | foreach (TaskInventoryItem item in scripts) |
1378 | |||
1379 | foreach (TaskInventoryItem item in m_items.Values) | ||
1380 | { | 1433 | { |
1381 | if (item.InvType == (int)InventoryType.LSL) | 1434 | foreach (IScriptModule engine in engines) |
1382 | { | 1435 | { |
1383 | foreach (IScriptModule engine in engines) | 1436 | if (engine != null) |
1384 | { | 1437 | { |
1385 | if (engine != null) | 1438 | // m_log.DebugFormat( |
1386 | { | 1439 | // "[PRIM INVENTORY]: Resuming script {0} {1} for {2}, OwnerChanged {3}", |
1387 | if (item.OwnerChanged) | 1440 | // item.Name, item.ItemID, item.OwnerID, item.OwnerChanged); |
1388 | engine.PostScriptEvent(item.ItemID, "changed", new Object[] { (int)Changed.OWNER }); | 1441 | |
1389 | item.OwnerChanged = false; | 1442 | engine.ResumeScript(item.ItemID); |
1390 | engine.ResumeScript(item.ItemID); | 1443 | |
1391 | } | 1444 | if (item.OwnerChanged) |
1445 | engine.PostScriptEvent(item.ItemID, "changed", new Object[] { (int)Changed.OWNER }); | ||
1446 | |||
1447 | item.OwnerChanged = false; | ||
1392 | } | 1448 | } |
1393 | } | 1449 | } |
1394 | } | 1450 | } |
1395 | |||
1396 | Items.LockItemsForRead(false); | ||
1397 | } | 1451 | } |
1398 | } | 1452 | } |
1399 | } | 1453 | } |