* Cross-border region chat should now work as long as both regions are part of the same simulator.

afrisby
Adam Frisby 2007-10-19 23:27:54 +00:00
parent f427433c85
commit f364a084f1
1 changed files with 59 additions and 59 deletions

View File

@ -196,7 +196,8 @@ namespace OpenSim.Region.Environment.Modules
scene = m_scenes[0]; scene = m_scenes[0];
// Filled in since it's easier than rewriting right now. // Filled in since it's easier than rewriting right now.
LLVector3 fromPos = e.Position; LLVector3 fromPos = e.Position;
LLVector3 fromRegionPos = e.Position + new LLVector3(e.Scene.RegionInfo.RegionLocX * 256, e.Scene.RegionInfo.RegionLocY * 256, 0);
string fromName = e.From; string fromName = e.From;
string message = e.Message; string message = e.Message;
byte type = (byte)e.Type; byte type = (byte)e.Type;
@ -240,64 +241,63 @@ namespace OpenSim.Region.Environment.Modules
m_ircWriter.WriteLine("PRIVMSG " + m_channel + " :" + "<" + fromName + " in " + scene.RegionInfo.RegionName + ">: " + m_ircWriter.WriteLine("PRIVMSG " + m_channel + " :" + "<" + fromName + " in " + scene.RegionInfo.RegionName + ">: " +
e.Message); e.Message);
m_ircWriter.Flush(); m_ircWriter.Flush();
} }
if (e.Channel == 0) if (e.Channel == 0)
{ {
scene.ForEachScenePresence(delegate(ScenePresence presence) foreach (Scene m_scene in m_scenes)
{ {
int dis = -1000; m_scene.ForEachScenePresence(delegate(ScenePresence presence)
{
//err ??? the following code seems to be request a scenePresence when it already has a ref to it int dis = -100000;
avatar = scene.GetScenePresence(presence.ControllingClient.AgentId);
if (avatar != null) LLVector3 avatarRegionPos = presence.AbsolutePosition + new LLVector3(scene.RegionInfo.RegionLocX * 256, scene.RegionInfo.RegionLocY * 256, 0);
{ dis = (int)avatarRegionPos.GetDistanceTo(fromRegionPos);
dis = (int) avatar.AbsolutePosition.GetDistanceTo(fromPos);
} switch (e.Type)
{
switch (e.Type) case ChatTypeEnum.Whisper:
{ if ((dis < 10) && (dis > -10))
case ChatTypeEnum.Whisper: {
if ((dis < 10) && (dis > -10)) //should change so the message is sent through the avatar rather than direct to the ClientView
{ presence.ControllingClient.SendChatMessage(message,
//should change so the message is sent through the avatar rather than direct to the ClientView type,
presence.ControllingClient.SendChatMessage(message, fromPos,
type, fromName,
fromPos, fromAgentID);
fromName, }
fromAgentID); break;
} case ChatTypeEnum.Say:
break; if ((dis < 30) && (dis > -30))
case ChatTypeEnum.Say: {
if ((dis < 30) && (dis > -30)) //Console.WriteLine("sending chat");
{ presence.ControllingClient.SendChatMessage(message,
//Console.WriteLine("sending chat"); type,
presence.ControllingClient.SendChatMessage(message, fromPos,
type, fromName,
fromPos, fromAgentID);
fromName, }
fromAgentID); break;
} case ChatTypeEnum.Shout:
break; if ((dis < 100) && (dis > -100))
case ChatTypeEnum.Shout: {
if ((dis < 100) && (dis > -100)) presence.ControllingClient.SendChatMessage(message,
{ type,
presence.ControllingClient.SendChatMessage(message, fromPos,
type, fromName,
fromPos, fromAgentID);
fromName, }
fromAgentID); break;
}
break; case ChatTypeEnum.Broadcast:
presence.ControllingClient.SendChatMessage(message, type,
case ChatTypeEnum.Broadcast: fromPos,
presence.ControllingClient.SendChatMessage(message, type, fromName,
fromPos, fromAgentID);
fromName, break;
fromAgentID); }
break; });
} }
});
} }
} }
} }