/// <summary> /// Send the message from the prim to the avatars in the regions /// </summary> /// <param name="sender"></param> /// <param name="c"></param> public virtual void OnChatFromWorld(Object sender, OSChatMessage c) { // early return if not on public or debug channel if (c.Channel != 0 && c.Channel != DEBUG_CHANNEL) return; bool Sent = false; if(c.Range > m_maxChatDistance) //Check for max distance c.Range = m_maxChatDistance; //Send the message into neighboring regions if possible if (c.Type == ChatTypeEnum.Say || c.Type == ChatTypeEnum.Whisper || c.Type == ChatTypeEnum.Shout || c.Type == ChatTypeEnum.Custom) { int distance = c.Type == ChatTypeEnum.Say ? m_saydistance : (c.Type == ChatTypeEnum.Whisper) ? m_whisperdistance : (c.Type == ChatTypeEnum.Custom) ? (int)c.Range : m_shoutdistance; if (((Scene)c.Scene).TestBorderCross(new Vector3(c.Position.X + distance, c.Position.Y, c.Position.Z), Cardinals.E)) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (((Scene)c.Scene).TestBorderCross(new Vector3(c.Position.X, c.Position.Y + distance, c.Position.Z), Cardinals.N)) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (((Scene)c.Scene).TestBorderCross(new Vector3(c.Position.X + distance, c.Position.Y + distance, c.Position.Z), Cardinals.E) && ((Scene)c.Scene).TestBorderCross(new Vector3(c.Position.X + distance, c.Position.Y + distance, c.Position.Z), Cardinals.N)) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (((Scene)c.Scene).TestBorderCross(new Vector3(c.Position.X + distance, c.Position.Y, c.Position.Z), Cardinals.E) && c.Position.Y - distance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.Y - distance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - distance < 0 && c.Position.Y - distance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - distance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - distance < 0 && ((Scene)c.Scene).TestBorderCross(new Vector3(c.Position.X, c.Position.Y + distance, c.Position.Z), Cardinals.N)) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } } if(!Sent) DeliverChatToAvatars(ChatSourceType.Object, c); }
public virtual void OnChatFromWorld(Object sender, OSChatMessage c) { // early return if not on public or debug channel if (c.Channel != 0 && c.Channel != DEBUG_CHANNEL) return; bool Sent = false; if(c.Range > m_maxChatDistance) c.Range = m_maxChatDistance; if (c.Type == ChatTypeEnum.Say) { if (c.Position.X + m_saydistance > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.Y + m_saydistance > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X + m_saydistance > 256 && c.Position.Y + m_saydistance > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X + m_saydistance > 256 && c.Position.Y - m_saydistance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.Y - m_saydistance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - m_saydistance < 0 && c.Position.Y - m_saydistance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - m_saydistance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - m_saydistance < 0 && c.Position.Y + m_saydistance > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } } if (c.Type == ChatTypeEnum.Whisper) { if (c.Position.X + m_whisperdistance > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.Y + m_whisperdistance > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X + m_whisperdistance > 256 && c.Position.Y + m_whisperdistance > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X + m_whisperdistance > 256 && c.Position.Y - m_whisperdistance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.Y - m_whisperdistance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - m_whisperdistance < 0 && c.Position.Y - m_whisperdistance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - m_whisperdistance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - m_whisperdistance < 0 && c.Position.Y + m_whisperdistance > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } } if (c.Type == ChatTypeEnum.Shout) { if (c.Position.X + m_shoutdistance > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.Y + m_shoutdistance > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X + m_shoutdistance > 256 && c.Position.Y + m_shoutdistance > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X + m_shoutdistance > 256 && c.Position.Y - m_shoutdistance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.Y - m_shoutdistance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - m_shoutdistance < 0 && c.Position.Y - m_shoutdistance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - m_shoutdistance < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - m_shoutdistance < 0 && c.Position.Y + m_shoutdistance > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } } if (c.Type == ChatTypeEnum.Custom) { if (c.Position.X + c.Range > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.Y + c.Range > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X + c.Range > 256 && c.Position.Y + c.Range > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X + c.Range > 256 && c.Position.Y - c.Range < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX + 1, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X -= Constants.RegionSize; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.Y - c.Range < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - c.Range < 0 && c.Position.Y - c.Range < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY - 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; Position.Y += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - c.Range < 0) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } if (c.Position.X - c.Range < 0 && c.Position.Y + c.Range > 256) { Scene scene = FindScene(c.Scene.RegionInfo.RegionLocX - 1, c.Scene.RegionInfo.RegionLocY + 1); if (scene != null) { OSChatMessage newC = c.Copy(); newC.Scene = scene; Vector3 Position = newC.Position; Position.X += Constants.RegionSize; Position.Y -= Constants.RegionSize; newC.Position = Position; DeliverChatToAvatars(ChatSourceType.Object, newC); Sent = true; } } } if(!Sent) DeliverChatToAvatars(ChatSourceType.Object, c); }