diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Scripting')
-rw-r--r-- | OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs b/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs index 483c25f..e1c0cd7 100644 --- a/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs | |||
@@ -374,9 +374,11 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm | |||
374 | if (channel == DEBUG_CHANNEL) | 374 | if (channel == DEBUG_CHANNEL) |
375 | return; | 375 | return; |
376 | 376 | ||
377 | // Is id an avatar? | 377 | if(target == UUID.Zero) |
378 | ScenePresence sp = m_scene.GetScenePresence(target); | 378 | return; |
379 | 379 | ||
380 | // Is target an avatar? | ||
381 | ScenePresence sp = m_scene.GetScenePresence(target); | ||
380 | if (sp != null) | 382 | if (sp != null) |
381 | { | 383 | { |
382 | // Send message to avatar | 384 | // Send message to avatar |
@@ -401,19 +403,22 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm | |||
401 | foreach (SceneObjectGroup sog in attachments) | 403 | foreach (SceneObjectGroup sog in attachments) |
402 | { | 404 | { |
403 | if (!sog.IsDeleted) | 405 | if (!sog.IsDeleted) |
404 | targets.Add(sog.UUID); | 406 | { |
407 | SceneObjectPart[] parts = sog.Parts; | ||
408 | foreach(SceneObjectPart p in parts) | ||
409 | targets.Add(p.UUID); | ||
410 | } | ||
405 | } | 411 | } |
406 | 412 | ||
407 | // Need to check each attachment | ||
408 | foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg)) | 413 | foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg)) |
409 | { | 414 | { |
410 | if (li.GetHostID().Equals(id)) | 415 | UUID liHostID = li.GetHostID(); |
416 | if (liHostID.Equals(id)) | ||
411 | continue; | 417 | continue; |
412 | 418 | if (m_scene.GetSceneObjectPart(liHostID) == null) | |
413 | if (m_scene.GetSceneObjectPart(li.GetHostID()) == null) | ||
414 | continue; | 419 | continue; |
415 | 420 | ||
416 | if (targets.Contains(li.GetHostID())) | 421 | if (targets.Contains(liHostID)) |
417 | QueueMessage(new ListenerInfo(li, name, id, msg)); | 422 | QueueMessage(new ListenerInfo(li, name, id, msg)); |
418 | } | 423 | } |
419 | 424 | ||
@@ -426,16 +431,15 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm | |||
426 | 431 | ||
427 | foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg)) | 432 | foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg)) |
428 | { | 433 | { |
434 | UUID liHostID = li.GetHostID(); | ||
429 | // Dont process if this message is from yourself! | 435 | // Dont process if this message is from yourself! |
430 | if (li.GetHostID().Equals(id)) | 436 | if (liHostID.Equals(id)) |
431 | continue; | 437 | continue; |
432 | 438 | ||
433 | SceneObjectPart sPart = m_scene.GetSceneObjectPart( | 439 | if (m_scene.GetSceneObjectPart(liHostID) == null) |
434 | li.GetHostID()); | ||
435 | if (sPart == null) | ||
436 | continue; | 440 | continue; |
437 | 441 | ||
438 | if (li.GetHostID().Equals(target)) | 442 | if (liHostID.Equals(target)) |
439 | { | 443 | { |
440 | QueueMessage(new ListenerInfo(li, name, id, msg)); | 444 | QueueMessage(new ListenerInfo(li, name, id, msg)); |
441 | break; | 445 | break; |