From c87f0ac2261d1aa5226957aff63bfc8ac0efaffd Mon Sep 17 00:00:00 2001 From: Melanie Date: Thu, 28 Jun 2012 21:23:42 +0200 Subject: Fix llRegionSayTo the right way --- OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'OpenSim/Region/CoreModules/Avatar/Chat') diff --git a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs index 4d8fb90..357c2af 100644 --- a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs @@ -199,6 +199,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat UUID fromID = UUID.Zero; string message = c.Message; IScene scene = c.Scene; + UUID destination = c.Destination; Vector3 fromPos = c.Position; Vector3 regionPos = new Vector3(scene.RegionInfo.RegionLocX * Constants.RegionSize, scene.RegionInfo.RegionLocY * Constants.RegionSize, 0); @@ -222,6 +223,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat { fromNamePrefix = m_adminPrefix; } + destination = UUID.Zero; // Avatars cant "SayTo" break; case ChatSourceType.Object: @@ -244,9 +246,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat { // This should use ForEachClient, but clients don't have a position. // If camera is moved into client, then camera position can be used + // MT: No, it can't, as chat is heard from the avatar position, not + // the camera position. s.ForEachRootScenePresence( delegate(ScenePresence presence) { + if (destination != UUID.Zero && presence.UUID != destination) + return; ILandObject Presencecheck = s.LandChannel.GetLandObject(presence.AbsolutePosition.X, presence.AbsolutePosition.Y); if (Presencecheck != null) { @@ -346,8 +352,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat UUID fromAgentID, string fromName, ChatTypeEnum type, string message, ChatSourceType src) { - // don't send stuff to child agents - if (presence.IsChildAgent) return false; + // don't send llRegionSay to child agents. Send normal chat because you + // can't talk across sim borders if it's not done + if (type == ChatTypeEnum.Broadcast && presence.IsChildAgent) return false; Vector3 fromRegionPos = fromPos + regionPos; Vector3 toRegionPos = presence.AbsolutePosition + -- cgit v1.1