aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Avatar/Chat
diff options
context:
space:
mode:
authorMelanie2012-04-23 20:44:41 +0100
committerMelanie2012-04-23 20:44:41 +0100
commite9037098475202c02d3327d2dff877d0fd108c93 (patch)
treecd52623e1f12ffe0ca98609f270d27d30afc35af /OpenSim/Region/CoreModules/Avatar/Chat
parentMerge branch 'master' into careminster (diff)
parentMantis 5977 Corrections to llRegionSayTo (diff)
downloadopensim-SC_OLD-e9037098475202c02d3327d2dff877d0fd108c93.zip
opensim-SC_OLD-e9037098475202c02d3327d2dff877d0fd108c93.tar.gz
opensim-SC_OLD-e9037098475202c02d3327d2dff877d0fd108c93.tar.bz2
opensim-SC_OLD-e9037098475202c02d3327d2dff877d0fd108c93.tar.xz
Merge branch 'master' into careminster
Conflicts: OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs OpenSim/Region/Framework/Scenes/Scene.cs OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Chat')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs51
1 files changed, 34 insertions, 17 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
index 4d8fb90..6ffc7e6 100644
--- a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
@@ -197,6 +197,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
197 string fromName = c.From; 197 string fromName = c.From;
198 string fromNamePrefix = ""; 198 string fromNamePrefix = "";
199 UUID fromID = UUID.Zero; 199 UUID fromID = UUID.Zero;
200 UUID targetID = c.TargetUUID;
200 string message = c.Message; 201 string message = c.Message;
201 IScene scene = c.Scene; 202 IScene scene = c.Scene;
202 Vector3 fromPos = c.Position; 203 Vector3 fromPos = c.Position;
@@ -235,17 +236,31 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
235 message = message.Substring(0, 1000); 236 message = message.Substring(0, 1000);
236 237
237// m_log.DebugFormat( 238// m_log.DebugFormat(
238// "[CHAT]: DCTA: fromID {0} fromName {1}, region{2}, cType {3}, sType {4}", 239// "[CHAT]: DCTA: fromID {0} fromName {1}, region{2}, cType {3}, sType {4}, targetID {5}",
239// fromID, fromName, scene.RegionInfo.RegionName, c.Type, sourceType); 240// fromID, fromName, scene.RegionInfo.RegionName, c.Type, sourceType, targetID);
240 241
241 HashSet<UUID> receiverIDs = new HashSet<UUID>(); 242 HashSet<UUID> receiverIDs = new HashSet<UUID>();
242 243
243 foreach (Scene s in m_scenes) 244 foreach (Scene s in m_scenes)
244 { 245 {
245 // This should use ForEachClient, but clients don't have a position. 246 if (targetID == UUID.Zero)
246 // If camera is moved into client, then camera position can be used 247 {
247 s.ForEachRootScenePresence( 248 // This should use ForEachClient, but clients don't have a position.
248 delegate(ScenePresence presence) 249 // If camera is moved into client, then camera position can be used
250 s.ForEachRootScenePresence(
251 delegate(ScenePresence presence)
252 {
253 if (TrySendChatMessage(presence, fromPos, regionPos, fromID, fromName, c.Type, message, sourceType, false))
254 receiverIDs.Add(presence.UUID);
255 }
256 );
257 }
258 else
259 {
260 // This is a send to a specific client eg from llRegionSayTo
261 // no need to check distance etc, jand send is as say
262 ScenePresence presence = s.GetScenePresence(targetID);
263 if (presence != null && !presence.IsChildAgent)
249 { 264 {
250 ILandObject Presencecheck = s.LandChannel.GetLandObject(presence.AbsolutePosition.X, presence.AbsolutePosition.Y); 265 ILandObject Presencecheck = s.LandChannel.GetLandObject(presence.AbsolutePosition.X, presence.AbsolutePosition.Y);
251 if (Presencecheck != null) 266 if (Presencecheck != null)
@@ -256,15 +271,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
256 // objects on a parcel with access restrictions 271 // objects on a parcel with access restrictions
257 if (c.Sender == null || Presencecheck.IsEitherBannedOrRestricted(c.Sender.AgentId) != true) 272 if (c.Sender == null || Presencecheck.IsEitherBannedOrRestricted(c.Sender.AgentId) != true)
258 { 273 {
259 if (TrySendChatMessage(presence, fromPos, regionPos, fromID, fromNamePrefix + fromName, c.Type, message, sourceType)) 274 if (TrySendChatMessage(presence, fromPos, regionPos, fromID, fromNamePrefix + fromName, c.Type, message, sourceType, false))
260 receiverIDs.Add(presence.UUID); 275 receiverIDs.Add(presence.UUID);
261 } 276 }
262 } 277 }
263
264 } 278 }
265 ); 279 }
266 } 280 }
267 281
268 (scene as Scene).EventManager.TriggerOnChatToClients( 282 (scene as Scene).EventManager.TriggerOnChatToClients(
269 fromID, receiverIDs, message, c.Type, fromPos, fromName, sourceType, ChatAudibleLevel.Fully); 283 fromID, receiverIDs, message, c.Type, fromPos, fromName, sourceType, ChatAudibleLevel.Fully);
270 } 284 }
@@ -344,7 +358,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
344 /// precondition</returns> 358 /// precondition</returns>
345 protected virtual bool TrySendChatMessage(ScenePresence presence, Vector3 fromPos, Vector3 regionPos, 359 protected virtual bool TrySendChatMessage(ScenePresence presence, Vector3 fromPos, Vector3 regionPos,
346 UUID fromAgentID, string fromName, ChatTypeEnum type, 360 UUID fromAgentID, string fromName, ChatTypeEnum type,
347 string message, ChatSourceType src) 361 string message, ChatSourceType src, bool ignoreDistance)
348 { 362 {
349 // don't send stuff to child agents 363 // don't send stuff to child agents
350 if (presence.IsChildAgent) return false; 364 if (presence.IsChildAgent) return false;
@@ -355,12 +369,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
355 presence.Scene.RegionInfo.RegionLocY * Constants.RegionSize, 0); 369 presence.Scene.RegionInfo.RegionLocY * Constants.RegionSize, 0);
356 370
357 int dis = (int)Util.GetDistanceTo(toRegionPos, fromRegionPos); 371 int dis = (int)Util.GetDistanceTo(toRegionPos, fromRegionPos);
358 372
359 if (type == ChatTypeEnum.Whisper && dis > m_whisperdistance || 373 if (!ignoreDistance)
360 type == ChatTypeEnum.Say && dis > m_saydistance ||
361 type == ChatTypeEnum.Shout && dis > m_shoutdistance)
362 { 374 {
363 return false; 375 if (type == ChatTypeEnum.Whisper && dis > m_whisperdistance ||
376 type == ChatTypeEnum.Say && dis > m_saydistance ||
377 type == ChatTypeEnum.Shout && dis > m_shoutdistance)
378 {
379 return false;
380 }
364 } 381 }
365 382
366 // TODO: should change so the message is sent through the avatar rather than direct to the ClientView 383 // TODO: should change so the message is sent through the avatar rather than direct to the ClientView