aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Modules/ChatModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Modules/ChatModule.cs')
-rw-r--r--OpenSim/Region/Environment/Modules/ChatModule.cs134
1 files changed, 46 insertions, 88 deletions
diff --git a/OpenSim/Region/Environment/Modules/ChatModule.cs b/OpenSim/Region/Environment/Modules/ChatModule.cs
index ef46224..081e7ac 100644
--- a/OpenSim/Region/Environment/Modules/ChatModule.cs
+++ b/OpenSim/Region/Environment/Modules/ChatModule.cs
@@ -110,6 +110,43 @@ namespace OpenSim.Region.Environment.Modules
110 client.OnChatFromViewer += SimChat; 110 client.OnChatFromViewer += SimChat;
111 } 111 }
112 112
113 private void TrySendChatMessage(ScenePresence presence, LLVector3 fromPos, LLVector3 regionPos,
114 LLUUID fromAgentID, string fromName, ChatTypeEnum type, string message)
115 {
116 if (!presence.IsChildAgent)
117 {
118 LLVector3 fromRegionPos = fromPos + regionPos;
119 LLVector3 toRegionPos = presence.AbsolutePosition + regionPos;
120 int dis = Math.Abs((int) Util.GetDistanceTo(toRegionPos, fromRegionPos));
121
122 switch (type)
123 {
124 case ChatTypeEnum.Whisper:
125 if (dis < m_whisperdistance)
126 {
127 // TODO: should change so the message is sent through the avatar rather than direct to the ClientView
128 presence.ControllingClient.SendChatMessage(message, (byte) type, fromPos, fromName, fromAgentID);
129 }
130 break;
131 case ChatTypeEnum.Say:
132 if (dis < m_saydistance)
133 {
134 presence.ControllingClient.SendChatMessage(message, (byte) type, fromPos, fromName, fromAgentID);
135 }
136 break;
137 case ChatTypeEnum.Shout:
138 if (dis < m_shoutdistance)
139 {
140 presence.ControllingClient.SendChatMessage(message, (byte) type, fromPos, fromName, fromAgentID);
141 }
142 break;
143 case ChatTypeEnum.Broadcast:
144 presence.ControllingClient.SendChatMessage(message, (byte) type, fromPos, fromName, fromAgentID);
145 break;
146 }
147 }
148 }
149
113 public void SimChat(Object sender, ChatFromViewerArgs e) 150 public void SimChat(Object sender, ChatFromViewerArgs e)
114 { 151 {
115 ScenePresence avatar = null; 152 ScenePresence avatar = null;
@@ -123,12 +160,10 @@ namespace OpenSim.Region.Environment.Modules
123 160
124 // Filled in since it's easier than rewriting right now. 161 // Filled in since it's easier than rewriting right now.
125 LLVector3 fromPos = e.Position; 162 LLVector3 fromPos = e.Position;
126 LLVector3 fromRegionPos = e.Position + 163 LLVector3 regionPos = new LLVector3(scene.RegionInfo.RegionLocX*256, scene.RegionInfo.RegionLocY*256, 0);
127 new LLVector3(scene.RegionInfo.RegionLocX*256, scene.RegionInfo.RegionLocY*256, 164
128 0);
129 string fromName = e.From; 165 string fromName = e.From;
130 string message = e.Message; 166 string message = e.Message;
131 byte type = (byte) e.Type;
132 LLUUID fromAgentID = LLUUID.Zero; 167 LLUUID fromAgentID = LLUUID.Zero;
133 168
134 if (e.Sender != null) 169 if (e.Sender != null)
@@ -139,32 +174,11 @@ namespace OpenSim.Region.Environment.Modules
139 if (avatar != null) 174 if (avatar != null)
140 { 175 {
141 fromPos = avatar.AbsolutePosition; 176 fromPos = avatar.AbsolutePosition;
142 fromRegionPos = fromPos + 177 regionPos = new LLVector3(scene.RegionInfo.RegionLocX*256, scene.RegionInfo.RegionLocY*256, 0);
143 new LLVector3(scene.RegionInfo.RegionLocX*256, scene.RegionInfo.RegionLocY*256, 0);
144 fromName = avatar.Firstname + " " + avatar.Lastname; 178 fromName = avatar.Firstname + " " + avatar.Lastname;
145 fromAgentID = e.Sender.AgentId; 179 fromAgentID = e.Sender.AgentId;
146 } 180 }
147 181
148 string typeName;
149 switch (e.Type)
150 {
151 case ChatTypeEnum.Broadcast:
152 typeName = "broadcasts";
153 break;
154 case ChatTypeEnum.Say:
155 typeName = "says";
156 break;
157 case ChatTypeEnum.Shout:
158 typeName = "shouts";
159 break;
160 case ChatTypeEnum.Whisper:
161 typeName = "whispers";
162 break;
163 default:
164 typeName = "unknown";
165 break;
166 }
167
168 if (e.Message.Length > 0) 182 if (e.Message.Length > 0)
169 { 183 {
170 if (m_irc.Connected) 184 if (m_irc.Connected)
@@ -174,69 +188,13 @@ namespace OpenSim.Region.Environment.Modules
174 188
175 if (e.Channel == 0) 189 if (e.Channel == 0)
176 { 190 {
177 foreach (Scene m_scene in m_scenes) 191 foreach (Scene s in m_scenes)
178 { 192 {
179 m_scene.ForEachScenePresence(delegate(ScenePresence presence) 193 s.ForEachScenePresence(delegate(ScenePresence presence)
180 { 194 {
181 if (!presence.IsChildAgent) 195 TrySendChatMessage(presence, fromPos, regionPos,
182 { 196 fromAgentID, fromName, e.Type, message);
183 int dis = -100000; 197 });
184
185 LLVector3 avatarRegionPos = presence.AbsolutePosition +
186 new LLVector3(
187 scene.RegionInfo.RegionLocX * 256,
188 scene.RegionInfo.RegionLocY * 256,
189 0);
190 dis =
191 Math.Abs((int) Util.GetDistanceTo(avatarRegionPos, fromRegionPos));
192
193 switch (e.Type)
194 {
195 case ChatTypeEnum.Whisper:
196 if (dis < m_whisperdistance)
197 {
198 //should change so the message is sent through the avatar rather than direct to the ClientView
199 presence.ControllingClient.SendChatMessage(message,
200 type,
201 fromPos,
202 fromName,
203 fromAgentID);
204 }
205 break;
206 case ChatTypeEnum.Say:
207 if (dis < m_saydistance)
208 {
209 //Console.WriteLine("sending chat");
210 presence.ControllingClient.SendChatMessage(message,
211 type,
212 fromPos,
213 fromName,
214 fromAgentID);
215 }
216 break;
217 case ChatTypeEnum.Shout:
218 if (dis < m_shoutdistance)
219 {
220 presence.ControllingClient.SendChatMessage(message,
221 type,
222 fromPos,
223 fromName,
224 fromAgentID);
225 }
226 break;
227
228 case ChatTypeEnum.Broadcast:
229 presence.ControllingClient.SendChatMessage(message,
230 type,
231 fromPos,
232 fromName,
233 fromAgentID);
234 break;
235 default:
236 break;
237 }
238 }
239 });
240 } 198 }
241 } 199 }
242 } 200 }