diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs | 88 |
1 files changed, 18 insertions, 70 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs b/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs index dfcf925..3dc9bf5 100644 --- a/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs | |||
@@ -49,7 +49,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure | |||
49 | private readonly List<Scene> m_scenes = new List<Scene>(); | 49 | private readonly List<Scene> m_scenes = new List<Scene>(); |
50 | 50 | ||
51 | private IMessageTransferModule m_TransferModule = null; | 51 | private IMessageTransferModule m_TransferModule = null; |
52 | private bool m_Enabled = false; | ||
53 | 52 | ||
54 | private string m_ThisGridURL; | 53 | private string m_ThisGridURL; |
55 | 54 | ||
@@ -59,24 +58,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure | |||
59 | { | 58 | { |
60 | if (config.Configs["Messaging"] != null) | 59 | if (config.Configs["Messaging"] != null) |
61 | { | 60 | { |
62 | if (config.Configs["Messaging"].GetString("LureModule", string.Empty) == "HGLureModule") | 61 | m_ThisGridURL = Util.GetConfigVarFromSections<string>(config, "GatekeeperURI", new string[] { "Startup", "Hypergrid", "Messaging" }, String.Empty); |
63 | { | ||
64 | m_Enabled = true; | ||
65 | |||
66 | m_ThisGridURL = Util.GetConfigVarFromSections<string>(config, "GatekeeperURI", | ||
67 | new string[] { "Startup", "Hypergrid", "Messaging" }, String.Empty); | ||
68 | m_log.DebugFormat("[LURE MODULE]: {0} enabled", Name); | ||
69 | } | ||
70 | // Legacy. Remove soon! | 62 | // Legacy. Remove soon! |
71 | //// m_ThisGridURL = config.Configs["Messaging"].GetString("Gatekeeper", m_ThisGridURL); | 63 | //// m_ThisGridURL = config.Configs["Messaging"].GetString("Gatekeeper", m_ThisGridURL); |
64 | m_log.DebugFormat("[HG LURE MODULE]: {0} enabled", Name); | ||
72 | } | 65 | } |
73 | } | 66 | } |
74 | 67 | ||
75 | public void AddRegion(Scene scene) | 68 | public void AddRegion(Scene scene) |
76 | { | 69 | { |
77 | if (!m_Enabled) | ||
78 | return; | ||
79 | |||
80 | lock (m_scenes) | 70 | lock (m_scenes) |
81 | { | 71 | { |
82 | m_scenes.Add(scene); | 72 | m_scenes.Add(scene); |
@@ -87,9 +77,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure | |||
87 | 77 | ||
88 | public void RegionLoaded(Scene scene) | 78 | public void RegionLoaded(Scene scene) |
89 | { | 79 | { |
90 | if (!m_Enabled) | ||
91 | return; | ||
92 | |||
93 | if (m_TransferModule == null) | 80 | if (m_TransferModule == null) |
94 | { | 81 | { |
95 | m_TransferModule = | 82 | m_TransferModule = |
@@ -97,9 +84,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure | |||
97 | 84 | ||
98 | if (m_TransferModule == null) | 85 | if (m_TransferModule == null) |
99 | { | 86 | { |
100 | m_log.Error("[LURE MODULE]: No message transfer module, lures will not work!"); | 87 | m_log.Error("[HG LURE MODULE]: No message transfer module, lures will not work!"); |
101 | |||
102 | m_Enabled = false; | ||
103 | m_scenes.Clear(); | 88 | m_scenes.Clear(); |
104 | scene.EventManager.OnNewClient -= OnNewClient; | 89 | scene.EventManager.OnNewClient -= OnNewClient; |
105 | scene.EventManager.OnIncomingInstantMessage -= OnIncomingInstantMessage; | 90 | scene.EventManager.OnIncomingInstantMessage -= OnIncomingInstantMessage; |
@@ -110,9 +95,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure | |||
110 | 95 | ||
111 | public void RemoveRegion(Scene scene) | 96 | public void RemoveRegion(Scene scene) |
112 | { | 97 | { |
113 | if (!m_Enabled) | ||
114 | return; | ||
115 | |||
116 | lock (m_scenes) | 98 | lock (m_scenes) |
117 | { | 99 | { |
118 | m_scenes.Remove(scene); | 100 | m_scenes.Remove(scene); |
@@ -154,17 +136,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure | |||
154 | { | 136 | { |
155 | if (im.dialog == (byte)InstantMessageDialog.RequestTeleport || im.dialog == (byte)InstantMessageDialog.GodLikeRequestTeleport) | 137 | if (im.dialog == (byte)InstantMessageDialog.RequestTeleport || im.dialog == (byte)InstantMessageDialog.GodLikeRequestTeleport) |
156 | { | 138 | { |
157 | if (1 == im.binaryBucket[0]) | 139 | UUID sessionID = new UUID(im.imSessionID); |
140 | if (!m_PendingLures.Contains(sessionID)) | ||
158 | { | 141 | { |
159 | UUID sessionID = new UUID(im.imSessionID); | 142 | m_log.DebugFormat("[HG LURE MODULE]: RequestTeleport sessionID={0}, regionID={1}, message={2}", im.imSessionID, im.RegionID, im.message); |
160 | 143 | m_PendingLures.Add(sessionID, im, 7200); // 2 hours | |
161 | if (!m_PendingLures.Contains(sessionID)) | ||
162 | { | ||
163 | m_log.DebugFormat("[HG LURE MODULE]: RequestTeleport sessionID={0}, regionID={1}, message={2}", im.imSessionID, im.RegionID, im.message); | ||
164 | m_PendingLures.Add(sessionID, im, 7200); // 2 hours | ||
165 | } | ||
166 | } | 144 | } |
167 | |||
168 | // Forward. We do this, because the IM module explicitly rejects IMs of this type | 145 | // Forward. We do this, because the IM module explicitly rejects IMs of this type |
169 | if (m_TransferModule != null) | 146 | if (m_TransferModule != null) |
170 | m_TransferModule.SendInstantMessage(im, delegate(bool success) { }); | 147 | m_TransferModule.SendInstantMessage(im, delegate(bool success) { }); |
@@ -180,45 +157,31 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure | |||
180 | ScenePresence presence = scene.GetScenePresence(client.AgentId); | 157 | ScenePresence presence = scene.GetScenePresence(client.AgentId); |
181 | ScenePresence target = scene.GetScenePresence(targetid); | 158 | ScenePresence target = scene.GetScenePresence(targetid); |
182 | Guid start = client.Scene.RegionInfo.RegionID.Guid; | 159 | Guid start = client.Scene.RegionInfo.RegionID.Guid; |
183 | UUID dest; | 160 | UUID dest = UUID.Random(); |
184 | byte reqType = (byte)InstantMessageDialog.RequestTeleport; | 161 | byte reqType = (byte)InstantMessageDialog.RequestTeleport; |
185 | byte[] bucket = new Byte[1]; | ||
186 | |||
187 | m_log.DebugFormat("[LURE MODULE]: TP invite with message {0}, type {1} {2} {3} {4}", message, lureType, scene.Permissions.IsAdministrator(client.AgentId), presence.IsViewerUIGod, (!scene.Permissions.IsAdministrator(targetid))); | ||
188 | |||
189 | GridInstantMessage m; | 162 | GridInstantMessage m; |
190 | 163 | ||
191 | GridRegion region = scene.GridService.GetRegionByUUID(scene.RegionInfo.ScopeID, new UUID(start)); | 164 | GridRegion region = scene.GridService.GetRegionByUUID(scene.RegionInfo.ScopeID, new UUID(start)); |
192 | if (region != null) | 165 | if (region != null) |
193 | { | 166 | { |
194 | bucket[0] = 0; | ||
195 | dest = Util.BuildFakeParcelID(scene.RegionInfo.RegionHandle, | ||
196 | (uint)presence.AbsolutePosition.X, (uint)presence.AbsolutePosition.Y, (uint)presence.AbsolutePosition.Z); | ||
197 | if (scene.Permissions.IsAdministrator(client.AgentId) && presence.IsViewerUIGod && (!scene.Permissions.IsAdministrator(targetid))) | 167 | if (scene.Permissions.IsAdministrator(client.AgentId) && presence.IsViewerUIGod && (!scene.Permissions.IsAdministrator(targetid))) |
198 | { | 168 | { |
199 | reqType = (byte)InstantMessageDialog.GodLikeRequestTeleport; | 169 | reqType = (byte)InstantMessageDialog.GodLikeRequestTeleport; |
200 | m_log.DebugFormat("[LURE MODULE]: TP FORCE GOD LURE with message {0}, type {1}", message, lureType); | 170 | m_log.DebugFormat("[HG LURE MODULE]: TP FORCE GOD LURE with message {0}, type {1}", message, lureType); |
201 | } | 171 | } |
202 | else | 172 | else |
203 | m_log.DebugFormat("[LURE MODULE]: TP lure with message {0}, type {1}", message, lureType); | 173 | m_log.DebugFormat("[HG LURE MODULE]: TP lure with message {0}, type {1}", message, lureType); |
204 | } | 174 | } |
205 | else | 175 | else |
206 | { | 176 | { |
207 | m_log.DebugFormat("[LURE MODULE]: HG lure with message {0}, type {1}", message, lureType); | 177 | m_log.DebugFormat("[HG LURE MODULE]: hypergrid TP lure with message {0}, type {1}", message, lureType); |
208 | bucket[0] = 1; | ||
209 | message += "@" + m_ThisGridURL; | 178 | message += "@" + m_ThisGridURL; |
210 | dest = UUID.Random(); | ||
211 | } | 179 | } |
212 | 180 | ||
213 | m = new GridInstantMessage(scene, client.AgentId, client.FirstName+" "+client.LastName, targetid, | 181 | m = new GridInstantMessage(scene, client.AgentId, client.FirstName+" "+client.LastName, targetid, |
214 | reqType, false, message, dest, false, presence.AbsolutePosition, bucket, true); | 182 | reqType, false, message, dest, false, presence.AbsolutePosition, new Byte[0], true); |
215 | 183 | m.RegionID = start; | |
216 | if (region == null) | 184 | m_PendingLures.Add(dest, m, 7200); // 2 hours |
217 | { | ||
218 | m.RegionID = start; | ||
219 | m_log.DebugFormat("[LURE MODULE]: Hypergrid RequestTeleport sessionID={0}, regionID={1}, message={2}", m.imSessionID, m.RegionID, m.message); | ||
220 | m_PendingLures.Add(dest, m, 7200); // 2 hours | ||
221 | } | ||
222 | 185 | ||
223 | if (m_TransferModule != null) | 186 | if (m_TransferModule != null) |
224 | { | 187 | { |
@@ -237,10 +200,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure | |||
237 | 200 | ||
238 | if (m_PendingLures.TryGetValue(lureID, out im)) | 201 | if (m_PendingLures.TryGetValue(lureID, out im)) |
239 | { | 202 | { |
203 | im.Position = im.Position + new Vector3(0.5f, 0.5f, 2f); | ||
240 | m_PendingLures.Remove(lureID); | 204 | m_PendingLures.Remove(lureID); |
241 | GridRegion region = scene.GridService.GetRegionByUUID(scene.RegionInfo.ScopeID, new UUID(im.RegionID)); | 205 | GridRegion region = scene.GridService.GetRegionByUUID(scene.RegionInfo.ScopeID, new UUID(im.RegionID)); |
242 | if (region != null) | 206 | if (region != null) |
243 | scene.RequestTeleportLocation(client, region.RegionHandle, im.Position + new Vector3(0.5f, 0.5f, 2f), Vector3.UnitX, teleportFlags); | 207 | scene.RequestTeleportLocation(client, region.RegionHandle, im.Position, Vector3.UnitX, teleportFlags); |
244 | else // we don't have that region here. Check if it's HG | 208 | else // we don't have that region here. Check if it's HG |
245 | { | 209 | { |
246 | string[] parts = im.message.Split(new char[] { '@' }); | 210 | string[] parts = im.message.Split(new char[] { '@' }); |
@@ -267,7 +231,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure | |||
267 | if (message != null) | 231 | if (message != null) |
268 | sp.ControllingClient.SendAgentAlertMessage(message, true); | 232 | sp.ControllingClient.SendAgentAlertMessage(message, true); |
269 | 233 | ||
270 | transferMod.DoTeleport(sp, gatekeeper, finalDestination, im.Position + new Vector3(0.5f, 0.5f, 2f), Vector3.UnitX, teleportFlags); | 234 | transferMod.DoTeleport(sp, gatekeeper, finalDestination, im.Position, Vector3.UnitX, teleportFlags); |
271 | } | 235 | } |
272 | } | 236 | } |
273 | else | 237 | else |
@@ -280,23 +244,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure | |||
280 | } | 244 | } |
281 | } | 245 | } |
282 | else | 246 | else |
283 | { | 247 | m_log.DebugFormat("[HG LURE MODULE]: pending lure {0} not found", lureID); |
284 | ulong handle = 0; | ||
285 | uint x = 128; | ||
286 | uint y = 128; | ||
287 | uint z = 70; | ||
288 | |||
289 | Util.ParseFakeParcelID(lureID, out handle, out x, out y, out z); | ||
290 | |||
291 | Vector3 position = new Vector3(); | ||
292 | position.X = (float)x; | ||
293 | position.Y = (float)y; | ||
294 | position.Z = (float)z; | ||
295 | |||
296 | m_log.DebugFormat("[LURE MODULE]: Luring agent to local region {0}, position {1}", scene.Name, position); | ||
297 | scene.RequestTeleportLocation(client, handle, position + new Vector3(0.5f, 0.5f, 2f), Vector3.Zero, teleportFlags); | ||
298 | } | ||
299 | |||
300 | } | 248 | } |
301 | } | 249 | } |
302 | } | 250 | } |