diff --git a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs index 50171a391e..4b30b0d9ee 100644 --- a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs @@ -47,6 +47,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods m_scene = scene; m_dialogModule = m_scene.RequestModuleInterface(); m_scene.RegisterModuleInterface(this); + m_scene.EventManager.OnNewClient += SubscribeToClientEvents; } public void PostInitialise() {} @@ -54,6 +55,18 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods public string Name { get { return "Gods Module"; } } public bool IsSharedModule { get { return false; } } + public void SubscribeToClientEvents(IClientAPI client) + { + client.OnGodKickUser += KickUser; + client.OnRequestGodlikePowers += RequestGodlikePowers; + } + + public void UnsubscribeFromClientEvents(IClientAPI client) + { + client.OnGodKickUser -= KickUser; + client.OnRequestGodlikePowers -= RequestGodlikePowers; + } + public void RequestGodlikePowers( UUID agentID, UUID sessionID, UUID token, bool godLike, IClientAPI controllingClient) { diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 61817f269d..83489e878f 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -2787,7 +2787,6 @@ namespace OpenSim.Region.Framework.Scenes SubscribeToClientScriptEvents(client); SubscribeToClientParcelEvents(client); SubscribeToClientGridEvents(client); - SubscribeToClientGodEvents(client); SubscribeToClientNetworkEvents(client); } @@ -2798,8 +2797,7 @@ namespace OpenSim.Region.Framework.Scenes } public virtual void SubscribeToClientPrimEvents(IClientAPI client) - { - + { client.OnUpdatePrimGroupPosition += m_sceneGraph.UpdatePrimPosition; client.OnUpdatePrimSinglePosition += m_sceneGraph.UpdatePrimSinglePosition; client.OnUpdatePrimGroupRotation += m_sceneGraph.UpdatePrimRotation; @@ -2898,14 +2896,7 @@ namespace OpenSim.Region.Framework.Scenes client.OnSetStartLocationRequest += SetHomeRezPoint; client.OnRegionHandleRequest += RegionHandleRequest; } - - public virtual void SubscribeToClientGodEvents(IClientAPI client) - { - IGodsModule godsModule = RequestModuleInterface(); - client.OnGodKickUser += godsModule.KickUser; - client.OnRequestGodlikePowers += godsModule.RequestGodlikePowers; - } - + public virtual void SubscribeToClientNetworkEvents(IClientAPI client) { client.OnNetworkStatsUpdate += StatsReporter.AddPacketsStats; @@ -2915,6 +2906,7 @@ namespace OpenSim.Region.Framework.Scenes /// /// Unsubscribe the client from events. /// + /// FIXME: Not called anywhere! /// The IClientAPI of the client public virtual void UnSubscribeToClientEvents(IClientAPI client) { @@ -2926,8 +2918,6 @@ namespace OpenSim.Region.Framework.Scenes UnSubscribeToClientScriptEvents(client); UnSubscribeToClientParcelEvents(client); UnSubscribeToClientGridEvents(client); - UnSubscribeToClientGodEvents(client); - UnSubscribeToClientNetworkEvents(client); } @@ -3036,13 +3026,6 @@ namespace OpenSim.Region.Framework.Scenes client.OnRegionHandleRequest -= RegionHandleRequest; } - public virtual void UnSubscribeToClientGodEvents(IClientAPI client) - { - IGodsModule godsModule = RequestModuleInterface(); - client.OnGodKickUser -= godsModule.KickUser; - client.OnRequestGodlikePowers -= godsModule.RequestGodlikePowers; - } - public virtual void UnSubscribeToClientNetworkEvents(IClientAPI client) { client.OnNetworkStatsUpdate -= StatsReporter.AddPacketsStats; @@ -5256,4 +5239,4 @@ namespace OpenSim.Region.Framework.Scenes return offsets.ToArray(); } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/RegionCombinerModule/RegionCombinerIndividualEventForwarder.cs b/OpenSim/Region/RegionCombinerModule/RegionCombinerIndividualEventForwarder.cs index 62410e2d5f..a0d6197004 100644 --- a/OpenSim/Region/RegionCombinerModule/RegionCombinerIndividualEventForwarder.cs +++ b/OpenSim/Region/RegionCombinerModule/RegionCombinerIndividualEventForwarder.cs @@ -29,6 +29,8 @@ using System; using OpenMetaverse; using OpenSim.Framework; using OpenSim.Region.CoreModules.Avatar.Attachments; +using OpenSim.Region.CoreModules.Avatar.Gods; +using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; namespace OpenSim.Region.RegionCombinerModule @@ -47,22 +49,31 @@ namespace OpenSim.Region.RegionCombinerModule public void ClientConnect(IClientAPI client) { m_virtScene.UnSubscribeToClientPrimEvents(client); - m_virtScene.UnSubscribeToClientPrimRezEvents(client); + m_virtScene.UnSubscribeToClientPrimRezEvents(client); m_virtScene.UnSubscribeToClientInventoryEvents(client); ((AttachmentsModule)m_virtScene.AttachmentsModule).UnsubscribeFromClientEvents(client); //m_virtScene.UnSubscribeToClientTeleportEvents(client); m_virtScene.UnSubscribeToClientScriptEvents(client); - m_virtScene.UnSubscribeToClientGodEvents(client); + + IGodsModule virtGodsModule = m_virtScene.RequestModuleInterface(); + if (virtGodsModule != null) + ((GodsModule)virtGodsModule).UnsubscribeFromClientEvents(client); + m_virtScene.UnSubscribeToClientNetworkEvents(client); m_rootScene.SubscribeToClientPrimEvents(client); client.OnAddPrim += LocalAddNewPrim; client.OnRezObject += LocalRezObject; + m_rootScene.SubscribeToClientInventoryEvents(client); - ((AttachmentsModule)m_rootScene.AttachmentsModule).SubscribeToClientEvents(client); + ((AttachmentsModule)m_rootScene.AttachmentsModule).SubscribeToClientEvents(client); //m_rootScene.SubscribeToClientTeleportEvents(client); m_rootScene.SubscribeToClientScriptEvents(client); - m_rootScene.SubscribeToClientGodEvents(client); + + IGodsModule rootGodsModule = m_virtScene.RequestModuleInterface(); + if (rootGodsModule != null) + ((GodsModule)rootGodsModule).UnsubscribeFromClientEvents(client); + m_rootScene.SubscribeToClientNetworkEvents(client); }