diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs | 83 |
1 files changed, 72 insertions, 11 deletions
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs index 0e6d663..5fd1bce 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs | |||
@@ -32,6 +32,7 @@ using System.IO; | |||
32 | using System.Linq; | 32 | using System.Linq; |
33 | using System.Reflection; | 33 | using System.Reflection; |
34 | using System.Security; | 34 | using System.Security; |
35 | using System.Timers; | ||
35 | using log4net; | 36 | using log4net; |
36 | using Mono.Addins; | 37 | using Mono.Addins; |
37 | using Nini.Config; | 38 | using Nini.Config; |
@@ -48,6 +49,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
48 | { | 49 | { |
49 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 50 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
50 | 51 | ||
52 | private Timer m_regionChangeTimer = new Timer(); | ||
51 | public Scene Scene { get; private set; } | 53 | public Scene Scene { get; private set; } |
52 | public IUserManagement UserManager { get; private set; } | 54 | public IUserManagement UserManager { get; private set; } |
53 | 55 | ||
@@ -60,8 +62,16 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
60 | public event ChangeDelegate OnEstateInfoChange; | 62 | public event ChangeDelegate OnEstateInfoChange; |
61 | public event MessageDelegate OnEstateMessage; | 63 | public event MessageDelegate OnEstateMessage; |
62 | 64 | ||
65 | private int m_delayCount = 0; | ||
66 | |||
63 | #region Packet Data Responders | 67 | #region Packet Data Responders |
64 | 68 | ||
69 | private void clientSendDetailedEstateData(IClientAPI remote_client, UUID invoice) | ||
70 | { | ||
71 | sendDetailedEstateData(remote_client, invoice); | ||
72 | sendEstateLists(remote_client, invoice); | ||
73 | } | ||
74 | |||
65 | private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice) | 75 | private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice) |
66 | { | 76 | { |
67 | uint sun = 0; | 77 | uint sun = 0; |
@@ -84,7 +94,10 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
84 | (uint) Scene.RegionInfo.RegionSettings.CovenantChangedDateTime, | 94 | (uint) Scene.RegionInfo.RegionSettings.CovenantChangedDateTime, |
85 | Scene.RegionInfo.EstateSettings.AbuseEmail, | 95 | Scene.RegionInfo.EstateSettings.AbuseEmail, |
86 | estateOwner); | 96 | estateOwner); |
97 | } | ||
87 | 98 | ||
99 | private void sendEstateLists(IClientAPI remote_client, UUID invoice) | ||
100 | { | ||
88 | remote_client.SendEstateList(invoice, | 101 | remote_client.SendEstateList(invoice, |
89 | (int)Constants.EstateAccessCodex.EstateManagers, | 102 | (int)Constants.EstateAccessCodex.EstateManagers, |
90 | Scene.RegionInfo.EstateSettings.EstateManagers, | 103 | Scene.RegionInfo.EstateSettings.EstateManagers, |
@@ -258,6 +271,16 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
258 | IRestartModule restartModule = Scene.RequestModuleInterface<IRestartModule>(); | 271 | IRestartModule restartModule = Scene.RequestModuleInterface<IRestartModule>(); |
259 | if (restartModule != null) | 272 | if (restartModule != null) |
260 | { | 273 | { |
274 | if (timeInSeconds == -1) | ||
275 | { | ||
276 | m_delayCount++; | ||
277 | if (m_delayCount > 3) | ||
278 | return; | ||
279 | |||
280 | restartModule.DelayRestart(3600, "Restart delayed by region manager"); | ||
281 | return; | ||
282 | } | ||
283 | |||
261 | List<int> times = new List<int>(); | 284 | List<int> times = new List<int>(); |
262 | while (timeInSeconds > 0) | 285 | while (timeInSeconds > 0) |
263 | { | 286 | { |
@@ -270,7 +293,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
270 | timeInSeconds -= 15; | 293 | timeInSeconds -= 15; |
271 | } | 294 | } |
272 | 295 | ||
273 | restartModule.ScheduleRestart(UUID.Zero, "Region will restart in {0}", times.ToArray(), true); | 296 | restartModule.ScheduleRestart(UUID.Zero, "Region will restart in {0}", times.ToArray(), false); |
274 | } | 297 | } |
275 | } | 298 | } |
276 | 299 | ||
@@ -478,7 +501,11 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
478 | { | 501 | { |
479 | if (!s.IsChildAgent) | 502 | if (!s.IsChildAgent) |
480 | { | 503 | { |
481 | Scene.TeleportClientHome(user, s.ControllingClient); | 504 | if (!Scene.TeleportClientHome(user, s.ControllingClient)) |
505 | { | ||
506 | s.ControllingClient.Kick("Your access to the region was revoked and TP home failed - you have been logged out."); | ||
507 | s.ControllingClient.Close(); | ||
508 | } | ||
482 | } | 509 | } |
483 | } | 510 | } |
484 | 511 | ||
@@ -487,7 +514,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
487 | { | 514 | { |
488 | remote_client.SendAlertMessage("User is already on the region ban list"); | 515 | remote_client.SendAlertMessage("User is already on the region ban list"); |
489 | } | 516 | } |
490 | //m_scene.RegionInfo.regionBanlist.Add(Manager(user); | 517 | //Scene.RegionInfo.regionBanlist.Add(Manager(user); |
491 | remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); | 518 | remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); |
492 | } | 519 | } |
493 | else | 520 | else |
@@ -542,7 +569,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
542 | remote_client.SendAlertMessage("User is not on the region ban list"); | 569 | remote_client.SendAlertMessage("User is not on the region ban list"); |
543 | } | 570 | } |
544 | 571 | ||
545 | //m_scene.RegionInfo.regionBanlist.Add(Manager(user); | 572 | //Scene.RegionInfo.regionBanlist.Add(Manager(user); |
546 | remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); | 573 | remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); |
547 | } | 574 | } |
548 | else | 575 | else |
@@ -701,7 +728,11 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
701 | ScenePresence s = Scene.GetScenePresence(prey); | 728 | ScenePresence s = Scene.GetScenePresence(prey); |
702 | if (s != null) | 729 | if (s != null) |
703 | { | 730 | { |
704 | Scene.TeleportClientHome(prey, s.ControllingClient); | 731 | if (!Scene.TeleportClientHome(prey, s.ControllingClient)) |
732 | { | ||
733 | s.ControllingClient.Kick("You were teleported home by the region owner, but the TP failed - you have been logged out."); | ||
734 | s.ControllingClient.Close(); | ||
735 | } | ||
705 | } | 736 | } |
706 | } | 737 | } |
707 | } | 738 | } |
@@ -719,7 +750,13 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
719 | // Also make sure they are actually in the region | 750 | // Also make sure they are actually in the region |
720 | ScenePresence p; | 751 | ScenePresence p; |
721 | if(Scene.TryGetScenePresence(client.AgentId, out p)) | 752 | if(Scene.TryGetScenePresence(client.AgentId, out p)) |
722 | Scene.TeleportClientHome(p.UUID, p.ControllingClient); | 753 | { |
754 | if (!Scene.TeleportClientHome(p.UUID, p.ControllingClient)) | ||
755 | { | ||
756 | p.ControllingClient.Kick("You were teleported home by the region owner, but the TP failed - you have been logged out."); | ||
757 | p.ControllingClient.Close(); | ||
758 | } | ||
759 | } | ||
723 | } | 760 | } |
724 | }); | 761 | }); |
725 | } | 762 | } |
@@ -1082,6 +1119,10 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1082 | 1119 | ||
1083 | public void AddRegion(Scene scene) | 1120 | public void AddRegion(Scene scene) |
1084 | { | 1121 | { |
1122 | m_regionChangeTimer.AutoReset = false; | ||
1123 | m_regionChangeTimer.Interval = 2000; | ||
1124 | m_regionChangeTimer.Elapsed += RaiseRegionInfoChange; | ||
1125 | |||
1085 | Scene = scene; | 1126 | Scene = scene; |
1086 | Scene.RegisterModuleInterface<IEstateModule>(this); | 1127 | Scene.RegisterModuleInterface<IEstateModule>(this); |
1087 | Scene.EventManager.OnNewClient += EventManager_OnNewClient; | 1128 | Scene.EventManager.OnNewClient += EventManager_OnNewClient; |
@@ -1132,7 +1173,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1132 | 1173 | ||
1133 | private void EventManager_OnNewClient(IClientAPI client) | 1174 | private void EventManager_OnNewClient(IClientAPI client) |
1134 | { | 1175 | { |
1135 | client.OnDetailedEstateDataRequest += sendDetailedEstateData; | 1176 | client.OnDetailedEstateDataRequest += clientSendDetailedEstateData; |
1136 | client.OnSetEstateFlagsRequest += estateSetRegionInfoHandler; | 1177 | client.OnSetEstateFlagsRequest += estateSetRegionInfoHandler; |
1137 | // client.OnSetEstateTerrainBaseTexture += setEstateTerrainBaseTexture; | 1178 | // client.OnSetEstateTerrainBaseTexture += setEstateTerrainBaseTexture; |
1138 | client.OnSetEstateTerrainDetailTexture += setEstateTerrainBaseTexture; | 1179 | client.OnSetEstateTerrainDetailTexture += setEstateTerrainBaseTexture; |
@@ -1184,6 +1225,10 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1184 | flags |= RegionFlags.AllowParcelChanges; | 1225 | flags |= RegionFlags.AllowParcelChanges; |
1185 | if (Scene.RegionInfo.RegionSettings.BlockShowInSearch) | 1226 | if (Scene.RegionInfo.RegionSettings.BlockShowInSearch) |
1186 | flags |= RegionFlags.BlockParcelSearch; | 1227 | flags |= RegionFlags.BlockParcelSearch; |
1228 | if (Scene.RegionInfo.RegionSettings.GodBlockSearch) | ||
1229 | flags |= (RegionFlags)(1 << 11); | ||
1230 | if (Scene.RegionInfo.RegionSettings.Casino) | ||
1231 | flags |= (RegionFlags)(1 << 10); | ||
1187 | 1232 | ||
1188 | if (Scene.RegionInfo.RegionSettings.FixedSun) | 1233 | if (Scene.RegionInfo.RegionSettings.FixedSun) |
1189 | flags |= RegionFlags.SunFixed; | 1234 | flags |= RegionFlags.SunFixed; |
@@ -1191,11 +1236,15 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1191 | flags |= RegionFlags.Sandbox; | 1236 | flags |= RegionFlags.Sandbox; |
1192 | if (Scene.RegionInfo.EstateSettings.AllowVoice) | 1237 | if (Scene.RegionInfo.EstateSettings.AllowVoice) |
1193 | flags |= RegionFlags.AllowVoice; | 1238 | flags |= RegionFlags.AllowVoice; |
1239 | if (Scene.RegionInfo.EstateSettings.AllowLandmark) | ||
1240 | flags |= RegionFlags.AllowLandmark; | ||
1241 | if (Scene.RegionInfo.EstateSettings.AllowSetHome) | ||
1242 | flags |= RegionFlags.AllowSetHome; | ||
1243 | if (Scene.RegionInfo.EstateSettings.BlockDwell) | ||
1244 | flags |= RegionFlags.BlockDwell; | ||
1245 | if (Scene.RegionInfo.EstateSettings.ResetHomeOnTeleport) | ||
1246 | flags |= RegionFlags.ResetHomeOnTeleport; | ||
1194 | 1247 | ||
1195 | // Fudge these to always on, so the menu options activate | ||
1196 | // | ||
1197 | flags |= RegionFlags.AllowLandmark; | ||
1198 | flags |= RegionFlags.AllowSetHome; | ||
1199 | 1248 | ||
1200 | // TODO: SkipUpdateInterestList | 1249 | // TODO: SkipUpdateInterestList |
1201 | 1250 | ||
@@ -1236,6 +1285,12 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1236 | flags |= RegionFlags.ResetHomeOnTeleport; | 1285 | flags |= RegionFlags.ResetHomeOnTeleport; |
1237 | if (Scene.RegionInfo.EstateSettings.TaxFree) | 1286 | if (Scene.RegionInfo.EstateSettings.TaxFree) |
1238 | flags |= RegionFlags.TaxFree; | 1287 | flags |= RegionFlags.TaxFree; |
1288 | if (Scene.RegionInfo.EstateSettings.AllowLandmark) | ||
1289 | flags |= RegionFlags.AllowLandmark; | ||
1290 | if (Scene.RegionInfo.EstateSettings.AllowParcelChanges) | ||
1291 | flags |= RegionFlags.AllowParcelChanges; | ||
1292 | if (Scene.RegionInfo.EstateSettings.AllowSetHome) | ||
1293 | flags |= RegionFlags.AllowSetHome; | ||
1239 | if (Scene.RegionInfo.EstateSettings.DenyMinors) | 1294 | if (Scene.RegionInfo.EstateSettings.DenyMinors) |
1240 | flags |= (RegionFlags)(1 << 30); | 1295 | flags |= (RegionFlags)(1 << 30); |
1241 | 1296 | ||
@@ -1256,6 +1311,12 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1256 | 1311 | ||
1257 | public void TriggerRegionInfoChange() | 1312 | public void TriggerRegionInfoChange() |
1258 | { | 1313 | { |
1314 | m_regionChangeTimer.Stop(); | ||
1315 | m_regionChangeTimer.Start(); | ||
1316 | } | ||
1317 | |||
1318 | protected void RaiseRegionInfoChange(object sender, ElapsedEventArgs e) | ||
1319 | { | ||
1259 | ChangeDelegate change = OnRegionInfoChange; | 1320 | ChangeDelegate change = OnRegionInfoChange; |
1260 | 1321 | ||
1261 | if (change != null) | 1322 | if (change != null) |