diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 67 |
1 files changed, 46 insertions, 21 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index fbe56f6..755b1e6 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -166,7 +166,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
166 | protected IConfigSource m_config; | 166 | protected IConfigSource m_config; |
167 | protected IRegionSerialiserModule m_serialiser; | 167 | protected IRegionSerialiserModule m_serialiser; |
168 | protected IDialogModule m_dialogModule; | 168 | protected IDialogModule m_dialogModule; |
169 | protected IEntityTransferModule m_teleportModule; | ||
170 | protected ICapabilitiesModule m_capsModule; | 169 | protected ICapabilitiesModule m_capsModule; |
171 | protected IGroupsModule m_groupsModule; | 170 | protected IGroupsModule m_groupsModule; |
172 | 171 | ||
@@ -498,6 +497,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
498 | } | 497 | } |
499 | 498 | ||
500 | public IAttachmentsModule AttachmentsModule { get; set; } | 499 | public IAttachmentsModule AttachmentsModule { get; set; } |
500 | public IEntityTransferModule EntityTransferModule { get; private set; } | ||
501 | 501 | ||
502 | public IAvatarFactoryModule AvatarFactory | 502 | public IAvatarFactoryModule AvatarFactory |
503 | { | 503 | { |
@@ -924,8 +924,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
924 | List<ulong> old = new List<ulong>(); | 924 | List<ulong> old = new List<ulong>(); |
925 | old.Add(otherRegion.RegionHandle); | 925 | old.Add(otherRegion.RegionHandle); |
926 | agent.DropOldNeighbours(old); | 926 | agent.DropOldNeighbours(old); |
927 | if (m_teleportModule != null && agent.PresenceType != PresenceType.Npc) | 927 | if (EntityTransferModule != null && agent.PresenceType != PresenceType.Npc) |
928 | m_teleportModule.EnableChildAgent(agent, otherRegion); | 928 | EntityTransferModule.EnableChildAgent(agent, otherRegion); |
929 | }); | 929 | }); |
930 | } | 930 | } |
931 | catch (NullReferenceException) | 931 | catch (NullReferenceException) |
@@ -1062,8 +1062,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1062 | { | 1062 | { |
1063 | ForEachRootScenePresence(delegate(ScenePresence agent) | 1063 | ForEachRootScenePresence(delegate(ScenePresence agent) |
1064 | { | 1064 | { |
1065 | if (m_teleportModule != null && agent.PresenceType != PresenceType.Npc) | 1065 | if (EntityTransferModule != null && agent.PresenceType != PresenceType.Npc) |
1066 | m_teleportModule.EnableChildAgent(agent, r); | 1066 | EntityTransferModule.EnableChildAgent(agent, r); |
1067 | }); | 1067 | }); |
1068 | } | 1068 | } |
1069 | catch (NullReferenceException) | 1069 | catch (NullReferenceException) |
@@ -1238,7 +1238,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1238 | m_serialiser = RequestModuleInterface<IRegionSerialiserModule>(); | 1238 | m_serialiser = RequestModuleInterface<IRegionSerialiserModule>(); |
1239 | m_dialogModule = RequestModuleInterface<IDialogModule>(); | 1239 | m_dialogModule = RequestModuleInterface<IDialogModule>(); |
1240 | m_capsModule = RequestModuleInterface<ICapabilitiesModule>(); | 1240 | m_capsModule = RequestModuleInterface<ICapabilitiesModule>(); |
1241 | m_teleportModule = RequestModuleInterface<IEntityTransferModule>(); | 1241 | EntityTransferModule = RequestModuleInterface<IEntityTransferModule>(); |
1242 | m_groupsModule = RequestModuleInterface<IGroupsModule>(); | 1242 | m_groupsModule = RequestModuleInterface<IGroupsModule>(); |
1243 | } | 1243 | } |
1244 | 1244 | ||
@@ -2275,8 +2275,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2275 | return; | 2275 | return; |
2276 | } | 2276 | } |
2277 | 2277 | ||
2278 | if (m_teleportModule != null) | 2278 | if (EntityTransferModule != null) |
2279 | m_teleportModule.Cross(grp, attemptedPosition, silent); | 2279 | EntityTransferModule.Cross(grp, attemptedPosition, silent); |
2280 | } | 2280 | } |
2281 | 2281 | ||
2282 | public Border GetCrossedBorder(Vector3 position, Cardinals gridline) | 2282 | public Border GetCrossedBorder(Vector3 position, Cardinals gridline) |
@@ -3078,8 +3078,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
3078 | /// <param name="client">The IClientAPI for the client</param> | 3078 | /// <param name="client">The IClientAPI for the client</param> |
3079 | public virtual void TeleportClientHome(UUID agentId, IClientAPI client) | 3079 | public virtual void TeleportClientHome(UUID agentId, IClientAPI client) |
3080 | { | 3080 | { |
3081 | if (m_teleportModule != null) | 3081 | if (EntityTransferModule != null) |
3082 | m_teleportModule.TeleportHome(agentId, client); | 3082 | { |
3083 | EntityTransferModule.TeleportHome(agentId, client); | ||
3084 | } | ||
3083 | else | 3085 | else |
3084 | { | 3086 | { |
3085 | m_log.DebugFormat("[SCENE]: Unable to teleport user home: no AgentTransferModule is active"); | 3087 | m_log.DebugFormat("[SCENE]: Unable to teleport user home: no AgentTransferModule is active"); |
@@ -3638,7 +3640,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3638 | 3640 | ||
3639 | private bool TestLandRestrictions(AgentCircuitData agent, ILandObject land, out string reason) | 3641 | private bool TestLandRestrictions(AgentCircuitData agent, ILandObject land, out string reason) |
3640 | { | 3642 | { |
3641 | |||
3642 | bool banned = land.IsBannedFromLand(agent.AgentID); | 3643 | bool banned = land.IsBannedFromLand(agent.AgentID); |
3643 | bool restricted = land.IsRestrictedFromLand(agent.AgentID); | 3644 | bool restricted = land.IsRestrictedFromLand(agent.AgentID); |
3644 | 3645 | ||
@@ -4131,8 +4132,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
4131 | position.Y -= shifty; | 4132 | position.Y -= shifty; |
4132 | } | 4133 | } |
4133 | 4134 | ||
4134 | if (m_teleportModule != null) | 4135 | if (EntityTransferModule != null) |
4135 | m_teleportModule.Teleport(sp, regionHandle, position, lookAt, teleportFlags); | 4136 | { |
4137 | EntityTransferModule.Teleport(sp, regionHandle, position, lookAt, teleportFlags); | ||
4138 | } | ||
4136 | else | 4139 | else |
4137 | { | 4140 | { |
4138 | m_log.DebugFormat("[SCENE]: Unable to perform teleports: no AgentTransferModule is active"); | 4141 | m_log.DebugFormat("[SCENE]: Unable to perform teleports: no AgentTransferModule is active"); |
@@ -4143,8 +4146,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
4143 | 4146 | ||
4144 | public bool CrossAgentToNewRegion(ScenePresence agent, bool isFlying) | 4147 | public bool CrossAgentToNewRegion(ScenePresence agent, bool isFlying) |
4145 | { | 4148 | { |
4146 | if (m_teleportModule != null) | 4149 | if (EntityTransferModule != null) |
4147 | return m_teleportModule.Cross(agent, isFlying); | 4150 | { |
4151 | return EntityTransferModule.Cross(agent, isFlying); | ||
4152 | } | ||
4148 | else | 4153 | else |
4149 | { | 4154 | { |
4150 | m_log.DebugFormat("[SCENE]: Unable to cross agent to neighbouring region, because there is no AgentTransferModule"); | 4155 | m_log.DebugFormat("[SCENE]: Unable to cross agent to neighbouring region, because there is no AgentTransferModule"); |
@@ -5188,14 +5193,34 @@ namespace OpenSim.Region.Framework.Scenes | |||
5188 | throw new Exception(error); | 5193 | throw new Exception(error); |
5189 | } | 5194 | } |
5190 | 5195 | ||
5191 | // This method is called across the simulation connector to | 5196 | /// <summary> |
5192 | // determine if a given agent is allowed in this region | 5197 | /// This method is called across the simulation connector to |
5193 | // AS A ROOT AGENT. Returning false here will prevent them | 5198 | /// determine if a given agent is allowed in this region |
5194 | // from logging into the region, teleporting into the region | 5199 | /// AS A ROOT AGENT |
5195 | // or corssing the broder walking, but will NOT prevent | 5200 | /// </summary> |
5196 | // child agent creation, thereby emulating the SL behavior. | 5201 | /// <remarks> |
5202 | /// Returning false here will prevent them | ||
5203 | /// from logging into the region, teleporting into the region | ||
5204 | /// or corssing the broder walking, but will NOT prevent | ||
5205 | /// child agent creation, thereby emulating the SL behavior. | ||
5206 | /// </remarks> | ||
5207 | /// <param name='agentID'></param> | ||
5208 | /// <param name='position'></param> | ||
5209 | /// <param name='reason'></param> | ||
5210 | /// <returns></returns> | ||
5197 | public bool QueryAccess(UUID agentID, Vector3 position, out string reason) | 5211 | public bool QueryAccess(UUID agentID, Vector3 position, out string reason) |
5198 | { | 5212 | { |
5213 | if (EntityTransferModule.IsInTransit(agentID)) | ||
5214 | { | ||
5215 | reason = "Agent is already in transit on this region"; | ||
5216 | |||
5217 | m_log.DebugFormat( | ||
5218 | "[SCENE]: Denying agent {0} entry into {1} since region already has them registered as in transit", | ||
5219 | agentID, RegionInfo.RegionName); | ||
5220 | |||
5221 | return false; | ||
5222 | } | ||
5223 | |||
5199 | // FIXME: Root agent count is currently known to be inaccurate. This forces a recount before we check. | 5224 | // FIXME: Root agent count is currently known to be inaccurate. This forces a recount before we check. |
5200 | // However, the long term fix is to make sure root agent count is always accurate. | 5225 | // However, the long term fix is to make sure root agent count is always accurate. |
5201 | m_sceneGraph.RecalculateStats(); | 5226 | m_sceneGraph.RecalculateStats(); |