From 0a38585d4a15100183acb293edcb9c69190c61db Mon Sep 17 00:00:00 2001 From: onefang Date: Thu, 25 Jul 2019 20:20:21 +1000 Subject: Merge LureModule into HGLureModule. --- .../Region/CoreModules/Avatar/Lure/HGLureModule.cs | 88 ++------ .../Region/CoreModules/Avatar/Lure/LureModule.cs | 234 --------------------- 2 files changed, 18 insertions(+), 304 deletions(-) delete mode 100644 OpenSim/Region/CoreModules/Avatar/Lure/LureModule.cs (limited to 'OpenSim') 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 private readonly List m_scenes = new List(); private IMessageTransferModule m_TransferModule = null; - private bool m_Enabled = false; private string m_ThisGridURL; @@ -59,24 +58,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure { if (config.Configs["Messaging"] != null) { - if (config.Configs["Messaging"].GetString("LureModule", string.Empty) == "HGLureModule") - { - m_Enabled = true; - - m_ThisGridURL = Util.GetConfigVarFromSections(config, "GatekeeperURI", - new string[] { "Startup", "Hypergrid", "Messaging" }, String.Empty); - m_log.DebugFormat("[LURE MODULE]: {0} enabled", Name); - } + m_ThisGridURL = Util.GetConfigVarFromSections(config, "GatekeeperURI", new string[] { "Startup", "Hypergrid", "Messaging" }, String.Empty); // Legacy. Remove soon! //// m_ThisGridURL = config.Configs["Messaging"].GetString("Gatekeeper", m_ThisGridURL); + m_log.DebugFormat("[HG LURE MODULE]: {0} enabled", Name); } } public void AddRegion(Scene scene) { - if (!m_Enabled) - return; - lock (m_scenes) { m_scenes.Add(scene); @@ -87,9 +77,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure public void RegionLoaded(Scene scene) { - if (!m_Enabled) - return; - if (m_TransferModule == null) { m_TransferModule = @@ -97,9 +84,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure if (m_TransferModule == null) { - m_log.Error("[LURE MODULE]: No message transfer module, lures will not work!"); - - m_Enabled = false; + m_log.Error("[HG LURE MODULE]: No message transfer module, lures will not work!"); m_scenes.Clear(); scene.EventManager.OnNewClient -= OnNewClient; scene.EventManager.OnIncomingInstantMessage -= OnIncomingInstantMessage; @@ -110,9 +95,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure public void RemoveRegion(Scene scene) { - if (!m_Enabled) - return; - lock (m_scenes) { m_scenes.Remove(scene); @@ -154,17 +136,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure { if (im.dialog == (byte)InstantMessageDialog.RequestTeleport || im.dialog == (byte)InstantMessageDialog.GodLikeRequestTeleport) { - if (1 == im.binaryBucket[0]) + UUID sessionID = new UUID(im.imSessionID); + if (!m_PendingLures.Contains(sessionID)) { - UUID sessionID = new UUID(im.imSessionID); - - if (!m_PendingLures.Contains(sessionID)) - { - m_log.DebugFormat("[HG LURE MODULE]: RequestTeleport sessionID={0}, regionID={1}, message={2}", im.imSessionID, im.RegionID, im.message); - m_PendingLures.Add(sessionID, im, 7200); // 2 hours - } + m_log.DebugFormat("[HG LURE MODULE]: RequestTeleport sessionID={0}, regionID={1}, message={2}", im.imSessionID, im.RegionID, im.message); + m_PendingLures.Add(sessionID, im, 7200); // 2 hours } - // Forward. We do this, because the IM module explicitly rejects IMs of this type if (m_TransferModule != null) m_TransferModule.SendInstantMessage(im, delegate(bool success) { }); @@ -180,45 +157,31 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure ScenePresence presence = scene.GetScenePresence(client.AgentId); ScenePresence target = scene.GetScenePresence(targetid); Guid start = client.Scene.RegionInfo.RegionID.Guid; - UUID dest; + UUID dest = UUID.Random(); byte reqType = (byte)InstantMessageDialog.RequestTeleport; - byte[] bucket = new Byte[1]; - - 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))); - GridInstantMessage m; GridRegion region = scene.GridService.GetRegionByUUID(scene.RegionInfo.ScopeID, new UUID(start)); if (region != null) { - bucket[0] = 0; - dest = Util.BuildFakeParcelID(scene.RegionInfo.RegionHandle, - (uint)presence.AbsolutePosition.X, (uint)presence.AbsolutePosition.Y, (uint)presence.AbsolutePosition.Z); if (scene.Permissions.IsAdministrator(client.AgentId) && presence.IsViewerUIGod && (!scene.Permissions.IsAdministrator(targetid))) { reqType = (byte)InstantMessageDialog.GodLikeRequestTeleport; - m_log.DebugFormat("[LURE MODULE]: TP FORCE GOD LURE with message {0}, type {1}", message, lureType); + m_log.DebugFormat("[HG LURE MODULE]: TP FORCE GOD LURE with message {0}, type {1}", message, lureType); } else - m_log.DebugFormat("[LURE MODULE]: TP lure with message {0}, type {1}", message, lureType); + m_log.DebugFormat("[HG LURE MODULE]: TP lure with message {0}, type {1}", message, lureType); } else { - m_log.DebugFormat("[LURE MODULE]: HG lure with message {0}, type {1}", message, lureType); - bucket[0] = 1; + m_log.DebugFormat("[HG LURE MODULE]: hypergrid TP lure with message {0}, type {1}", message, lureType); message += "@" + m_ThisGridURL; - dest = UUID.Random(); } m = new GridInstantMessage(scene, client.AgentId, client.FirstName+" "+client.LastName, targetid, - reqType, false, message, dest, false, presence.AbsolutePosition, bucket, true); - - if (region == null) - { - m.RegionID = start; - m_log.DebugFormat("[LURE MODULE]: Hypergrid RequestTeleport sessionID={0}, regionID={1}, message={2}", m.imSessionID, m.RegionID, m.message); - m_PendingLures.Add(dest, m, 7200); // 2 hours - } + reqType, false, message, dest, false, presence.AbsolutePosition, new Byte[0], true); + m.RegionID = start; + m_PendingLures.Add(dest, m, 7200); // 2 hours if (m_TransferModule != null) { @@ -237,10 +200,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure if (m_PendingLures.TryGetValue(lureID, out im)) { + im.Position = im.Position + new Vector3(0.5f, 0.5f, 2f); m_PendingLures.Remove(lureID); GridRegion region = scene.GridService.GetRegionByUUID(scene.RegionInfo.ScopeID, new UUID(im.RegionID)); if (region != null) - scene.RequestTeleportLocation(client, region.RegionHandle, im.Position + new Vector3(0.5f, 0.5f, 2f), Vector3.UnitX, teleportFlags); + scene.RequestTeleportLocation(client, region.RegionHandle, im.Position, Vector3.UnitX, teleportFlags); else // we don't have that region here. Check if it's HG { string[] parts = im.message.Split(new char[] { '@' }); @@ -267,7 +231,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure if (message != null) sp.ControllingClient.SendAgentAlertMessage(message, true); - transferMod.DoTeleport(sp, gatekeeper, finalDestination, im.Position + new Vector3(0.5f, 0.5f, 2f), Vector3.UnitX, teleportFlags); + transferMod.DoTeleport(sp, gatekeeper, finalDestination, im.Position, Vector3.UnitX, teleportFlags); } } else @@ -280,23 +244,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure } } else - { - ulong handle = 0; - uint x = 128; - uint y = 128; - uint z = 70; - - Util.ParseFakeParcelID(lureID, out handle, out x, out y, out z); - - Vector3 position = new Vector3(); - position.X = (float)x; - position.Y = (float)y; - position.Z = (float)z; - - m_log.DebugFormat("[LURE MODULE]: Luring agent to local region {0}, position {1}", scene.Name, position); - scene.RequestTeleportLocation(client, handle, position + new Vector3(0.5f, 0.5f, 2f), Vector3.Zero, teleportFlags); - } - + m_log.DebugFormat("[HG LURE MODULE]: pending lure {0} not found", lureID); } } } diff --git a/OpenSim/Region/CoreModules/Avatar/Lure/LureModule.cs b/OpenSim/Region/CoreModules/Avatar/Lure/LureModule.cs deleted file mode 100644 index 6f79676..0000000 --- a/OpenSim/Region/CoreModules/Avatar/Lure/LureModule.cs +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSimulator Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections.Generic; -using System.Reflection; -using log4net; -using Mono.Addins; -using Nini.Config; -using OpenMetaverse; -using OpenSim.Framework; -using OpenSim.Region.Framework.Interfaces; -using OpenSim.Region.Framework.Scenes; - -namespace OpenSim.Region.CoreModules.Avatar.Lure -{ - [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "LureModule")] - public class LureModule : ISharedRegionModule - { - private static readonly ILog m_log = LogManager.GetLogger( - MethodBase.GetCurrentMethod().DeclaringType); - - private readonly List m_scenes = new List(); - - private IMessageTransferModule m_TransferModule = null; - private bool m_Enabled = false; - - public void Initialise(IConfigSource config) - { - if (config.Configs["Messaging"] != null) - { - if (config.Configs["Messaging"].GetString( - "LureModule", "LureModule") == - "LureModule") - { - m_Enabled = true; - m_log.DebugFormat("[LURE MODULE]: {0} enabled", Name); - } - } - } - - public void AddRegion(Scene scene) - { - if (!m_Enabled) - return; - - lock (m_scenes) - { - m_scenes.Add(scene); - scene.EventManager.OnNewClient += OnNewClient; - scene.EventManager.OnIncomingInstantMessage += - OnGridInstantMessage; - } - } - - public void RegionLoaded(Scene scene) - { - if (!m_Enabled) - return; - - if (m_TransferModule == null) - { - m_TransferModule = - scene.RequestModuleInterface(); - - if (m_TransferModule == null) - { - m_log.Error("[INSTANT MESSAGE]: No message transfer module, "+ - "lures will not work!"); - - m_Enabled = false; - m_scenes.Clear(); - scene.EventManager.OnNewClient -= OnNewClient; - scene.EventManager.OnIncomingInstantMessage -= - OnGridInstantMessage; - } - } - - } - - public void RemoveRegion(Scene scene) - { - if (!m_Enabled) - return; - - lock (m_scenes) - { - m_scenes.Remove(scene); - scene.EventManager.OnNewClient -= OnNewClient; - scene.EventManager.OnIncomingInstantMessage -= - OnGridInstantMessage; - } - } - - void OnNewClient(IClientAPI client) - { - client.OnInstantMessage += OnInstantMessage; - client.OnStartLure += OnStartLure; - client.OnTeleportLureRequest += OnTeleportLureRequest; - } - - public void PostInitialise() - { - } - - public void Close() - { - } - - public string Name - { - get { return "LureModule"; } - } - - public Type ReplaceableInterface - { - get { return null; } - } - - public void OnInstantMessage(IClientAPI client, GridInstantMessage im) - { - } - - public void OnStartLure(byte lureType, string message, UUID targetid, IClientAPI client) - { - if (!(client.Scene is Scene)) - return; - - Scene scene = (Scene)(client.Scene); - ScenePresence presence = scene.GetScenePresence(client.AgentId); - - // Round up Z co-ordinate rather than round-down by casting. This stops tall avatars from being given - // a teleport Z co-ordinate by short avatars that drops them through or embeds them in thin floors on - // arrival. - // - // Ideally we would give the exact float position adjusting for the relative height of the two avatars - // but it looks like a float component isn't possible with a parcel ID. - UUID dest = Util.BuildFakeParcelID( - scene.RegionInfo.RegionHandle, - (uint)presence.AbsolutePosition.X, - (uint)presence.AbsolutePosition.Y, - (uint)presence.AbsolutePosition.Z + 2); - - m_log.DebugFormat("[LURE MODULE]: TP invite with message {0}, type {1}", message, lureType); - - GridInstantMessage m; - - if (scene.Permissions.IsAdministrator(client.AgentId) && presence.IsViewerUIGod && (!scene.Permissions.IsAdministrator(targetid))) - { - m = new GridInstantMessage(scene, client.AgentId, - client.FirstName+" "+client.LastName, targetid, - (byte)InstantMessageDialog.GodLikeRequestTeleport, false, - message, dest, false, presence.AbsolutePosition, - new Byte[0], true); - } - else - { - m = new GridInstantMessage(scene, client.AgentId, - client.FirstName+" "+client.LastName, targetid, - (byte)InstantMessageDialog.RequestTeleport, false, - message, dest, false, presence.AbsolutePosition, - new Byte[0], true); - } - - if (m_TransferModule != null) - { - m_TransferModule.SendInstantMessage(m, - delegate(bool success) { }); - } - } - - public void OnTeleportLureRequest(UUID lureID, uint teleportFlags, IClientAPI client) - { - if (!(client.Scene is Scene)) - return; - - Scene scene = (Scene)(client.Scene); - - ulong handle = 0; - uint x = 128; - uint y = 128; - uint z = 70; - - Util.ParseFakeParcelID(lureID, out handle, out x, out y, out z); - - Vector3 position = new Vector3(); - position.X = (float)x; - position.Y = (float)y; - position.Z = (float)z; - - scene.RequestTeleportLocation(client, handle, position, - Vector3.Zero, teleportFlags); - } - - private void OnGridInstantMessage(GridInstantMessage msg) - { - // Forward remote teleport requests - // - if (msg.dialog != (byte)InstantMessageDialog.RequestTeleport && - msg.dialog != (byte)InstantMessageDialog.GodLikeRequestTeleport) - return; - - if (m_TransferModule != null) - { - m_TransferModule.SendInstantMessage(msg, - delegate(bool success) { }); - } - } - } -} -- cgit v1.1