diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs | 58 |
1 files changed, 44 insertions, 14 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index e010864..3a9a146 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs | |||
@@ -97,6 +97,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
97 | QueryScriptStates(); | 97 | QueryScriptStates(); |
98 | } | 98 | } |
99 | } | 99 | } |
100 | |||
101 | public int Count | ||
102 | { | ||
103 | get | ||
104 | { | ||
105 | lock (m_items) | ||
106 | return m_items.Count; | ||
107 | } | ||
108 | } | ||
100 | 109 | ||
101 | /// <summary> | 110 | /// <summary> |
102 | /// Constructor | 111 | /// Constructor |
@@ -235,31 +244,52 @@ namespace OpenSim.Region.Framework.Scenes | |||
235 | if (m_part == null || m_part.ParentGroup == null || m_part.ParentGroup.Scene == null) | 244 | if (m_part == null || m_part.ParentGroup == null || m_part.ParentGroup.Scene == null) |
236 | return; | 245 | return; |
237 | 246 | ||
238 | IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>(); | ||
239 | if (engines == null) // No engine at all | ||
240 | return; | ||
241 | |||
242 | Items.LockItemsForRead(true); | 247 | Items.LockItemsForRead(true); |
243 | foreach (TaskInventoryItem item in Items.Values) | 248 | foreach (TaskInventoryItem item in Items.Values) |
244 | { | 249 | { |
245 | if (item.InvType == (int)InventoryType.LSL) | 250 | if (item.InvType == (int)InventoryType.LSL) |
246 | { | 251 | { |
247 | foreach (IScriptModule e in engines) | 252 | bool running; |
248 | { | 253 | if (TryGetScriptInstanceRunning(m_part.ParentGroup.Scene, item, out running)) |
249 | bool running; | 254 | item.ScriptRunning = running; |
250 | |||
251 | if (e.HasScript(item.ItemID, out running)) | ||
252 | { | ||
253 | item.ScriptRunning = running; | ||
254 | break; | ||
255 | } | ||
256 | } | ||
257 | } | 255 | } |
258 | } | 256 | } |
259 | 257 | ||
260 | Items.LockItemsForRead(false); | 258 | Items.LockItemsForRead(false); |
261 | } | 259 | } |
262 | 260 | ||
261 | public bool TryGetScriptInstanceRunning(UUID itemId, out bool running) | ||
262 | { | ||
263 | running = false; | ||
264 | |||
265 | TaskInventoryItem item = GetInventoryItem(itemId); | ||
266 | |||
267 | if (item == null) | ||
268 | return false; | ||
269 | |||
270 | return TryGetScriptInstanceRunning(m_part.ParentGroup.Scene, item, out running); | ||
271 | } | ||
272 | |||
273 | public static bool TryGetScriptInstanceRunning(Scene scene, TaskInventoryItem item, out bool running) | ||
274 | { | ||
275 | running = false; | ||
276 | |||
277 | if (item.InvType != (int)InventoryType.LSL) | ||
278 | return false; | ||
279 | |||
280 | IScriptModule[] engines = scene.RequestModuleInterfaces<IScriptModule>(); | ||
281 | if (engines == null) // No engine at all | ||
282 | return false; | ||
283 | |||
284 | foreach (IScriptModule e in engines) | ||
285 | { | ||
286 | if (e.HasScript(item.ItemID, out running)) | ||
287 | return true; | ||
288 | } | ||
289 | |||
290 | return false; | ||
291 | } | ||
292 | |||
263 | public int CreateScriptInstances(int startParam, bool postOnRez, string engine, int stateSource) | 293 | public int CreateScriptInstances(int startParam, bool postOnRez, string engine, int stateSource) |
264 | { | 294 | { |
265 | int scriptsValidForStarting = 0; | 295 | int scriptsValidForStarting = 0; |