diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs | 79 |
1 files changed, 68 insertions, 11 deletions
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs index 60f6739..a5f5749 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 | ||
@@ -65,6 +67,8 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
65 | public event ChangeDelegate OnEstateInfoChange; | 67 | public event ChangeDelegate OnEstateInfoChange; |
66 | public event MessageDelegate OnEstateMessage; | 68 | public event MessageDelegate OnEstateMessage; |
67 | 69 | ||
70 | private int m_delayCount = 0; | ||
71 | |||
68 | #region Region Module interface | 72 | #region Region Module interface |
69 | 73 | ||
70 | public string Name { get { return "EstateManagementModule"; } } | 74 | public string Name { get { return "EstateManagementModule"; } } |
@@ -114,6 +118,12 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
114 | 118 | ||
115 | #region Packet Data Responders | 119 | #region Packet Data Responders |
116 | 120 | ||
121 | private void clientSendDetailedEstateData(IClientAPI remote_client, UUID invoice) | ||
122 | { | ||
123 | sendDetailedEstateData(remote_client, invoice); | ||
124 | sendEstateLists(remote_client, invoice); | ||
125 | } | ||
126 | |||
117 | private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice) | 127 | private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice) |
118 | { | 128 | { |
119 | uint sun = 0; | 129 | uint sun = 0; |
@@ -136,7 +146,10 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
136 | (uint) Scene.RegionInfo.RegionSettings.CovenantChangedDateTime, | 146 | (uint) Scene.RegionInfo.RegionSettings.CovenantChangedDateTime, |
137 | Scene.RegionInfo.EstateSettings.AbuseEmail, | 147 | Scene.RegionInfo.EstateSettings.AbuseEmail, |
138 | estateOwner); | 148 | estateOwner); |
149 | } | ||
139 | 150 | ||
151 | private void sendEstateLists(IClientAPI remote_client, UUID invoice) | ||
152 | { | ||
140 | remote_client.SendEstateList(invoice, | 153 | remote_client.SendEstateList(invoice, |
141 | (int)Constants.EstateAccessCodex.EstateManagers, | 154 | (int)Constants.EstateAccessCodex.EstateManagers, |
142 | Scene.RegionInfo.EstateSettings.EstateManagers, | 155 | Scene.RegionInfo.EstateSettings.EstateManagers, |
@@ -318,6 +331,16 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
318 | IRestartModule restartModule = Scene.RequestModuleInterface<IRestartModule>(); | 331 | IRestartModule restartModule = Scene.RequestModuleInterface<IRestartModule>(); |
319 | if (restartModule != null) | 332 | if (restartModule != null) |
320 | { | 333 | { |
334 | if (timeInSeconds == -1) | ||
335 | { | ||
336 | m_delayCount++; | ||
337 | if (m_delayCount > 3) | ||
338 | return; | ||
339 | |||
340 | restartModule.DelayRestart(3600, "Restart delayed by region manager"); | ||
341 | return; | ||
342 | } | ||
343 | |||
321 | List<int> times = new List<int>(); | 344 | List<int> times = new List<int>(); |
322 | while (timeInSeconds > 0) | 345 | while (timeInSeconds > 0) |
323 | { | 346 | { |
@@ -330,7 +353,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
330 | timeInSeconds -= 15; | 353 | timeInSeconds -= 15; |
331 | } | 354 | } |
332 | 355 | ||
333 | restartModule.ScheduleRestart(UUID.Zero, "Region will restart in {0}", times.ToArray(), true); | 356 | restartModule.ScheduleRestart(UUID.Zero, "Region will restart in {0}", times.ToArray(), false); |
334 | 357 | ||
335 | m_log.InfoFormat( | 358 | m_log.InfoFormat( |
336 | "User {0} requested restart of region {1} in {2} seconds", | 359 | "User {0} requested restart of region {1} in {2} seconds", |
@@ -546,7 +569,11 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
546 | { | 569 | { |
547 | if (!s.IsChildAgent) | 570 | if (!s.IsChildAgent) |
548 | { | 571 | { |
549 | Scene.TeleportClientHome(user, s.ControllingClient); | 572 | if (!Scene.TeleportClientHome(user, s.ControllingClient)) |
573 | { | ||
574 | s.ControllingClient.Kick("Your access to the region was revoked and TP home failed - you have been logged out."); | ||
575 | s.ControllingClient.Close(); | ||
576 | } | ||
550 | } | 577 | } |
551 | } | 578 | } |
552 | 579 | ||
@@ -555,7 +582,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
555 | { | 582 | { |
556 | remote_client.SendAlertMessage("User is already on the region ban list"); | 583 | remote_client.SendAlertMessage("User is already on the region ban list"); |
557 | } | 584 | } |
558 | //m_scene.RegionInfo.regionBanlist.Add(Manager(user); | 585 | //Scene.RegionInfo.regionBanlist.Add(Manager(user); |
559 | remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); | 586 | remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); |
560 | } | 587 | } |
561 | else | 588 | else |
@@ -611,7 +638,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
611 | remote_client.SendAlertMessage("User is not on the region ban list"); | 638 | remote_client.SendAlertMessage("User is not on the region ban list"); |
612 | } | 639 | } |
613 | 640 | ||
614 | //m_scene.RegionInfo.regionBanlist.Add(Manager(user); | 641 | //Scene.RegionInfo.regionBanlist.Add(Manager(user); |
615 | remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); | 642 | remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); |
616 | } | 643 | } |
617 | else | 644 | else |
@@ -777,7 +804,11 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
777 | ScenePresence s = Scene.GetScenePresence(prey); | 804 | ScenePresence s = Scene.GetScenePresence(prey); |
778 | if (s != null) | 805 | if (s != null) |
779 | { | 806 | { |
780 | Scene.TeleportClientHome(prey, s.ControllingClient); | 807 | if (!Scene.TeleportClientHome(prey, s.ControllingClient)) |
808 | { | ||
809 | s.ControllingClient.Kick("You were teleported home by the region owner, but the TP failed - you have been logged out."); | ||
810 | s.ControllingClient.Close(); | ||
811 | } | ||
781 | } | 812 | } |
782 | } | 813 | } |
783 | } | 814 | } |
@@ -795,7 +826,13 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
795 | // Also make sure they are actually in the region | 826 | // Also make sure they are actually in the region |
796 | ScenePresence p; | 827 | ScenePresence p; |
797 | if(Scene.TryGetScenePresence(client.AgentId, out p)) | 828 | if(Scene.TryGetScenePresence(client.AgentId, out p)) |
798 | Scene.TeleportClientHome(p.UUID, p.ControllingClient); | 829 | { |
830 | if (!Scene.TeleportClientHome(p.UUID, p.ControllingClient)) | ||
831 | { | ||
832 | p.ControllingClient.Kick("You were teleported home by the region owner, but the TP failed - you have been logged out."); | ||
833 | p.ControllingClient.Close(); | ||
834 | } | ||
835 | } | ||
799 | } | 836 | } |
800 | }); | 837 | }); |
801 | } | 838 | } |
@@ -1170,7 +1207,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1170 | 1207 | ||
1171 | private void EventManager_OnNewClient(IClientAPI client) | 1208 | private void EventManager_OnNewClient(IClientAPI client) |
1172 | { | 1209 | { |
1173 | client.OnDetailedEstateDataRequest += sendDetailedEstateData; | 1210 | client.OnDetailedEstateDataRequest += clientSendDetailedEstateData; |
1174 | client.OnSetEstateFlagsRequest += estateSetRegionInfoHandler; | 1211 | client.OnSetEstateFlagsRequest += estateSetRegionInfoHandler; |
1175 | // client.OnSetEstateTerrainBaseTexture += setEstateTerrainBaseTexture; | 1212 | // client.OnSetEstateTerrainBaseTexture += setEstateTerrainBaseTexture; |
1176 | client.OnSetEstateTerrainDetailTexture += setEstateTerrainBaseTexture; | 1213 | client.OnSetEstateTerrainDetailTexture += setEstateTerrainBaseTexture; |
@@ -1222,6 +1259,10 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1222 | flags |= RegionFlags.AllowParcelChanges; | 1259 | flags |= RegionFlags.AllowParcelChanges; |
1223 | if (Scene.RegionInfo.RegionSettings.BlockShowInSearch) | 1260 | if (Scene.RegionInfo.RegionSettings.BlockShowInSearch) |
1224 | flags |= RegionFlags.BlockParcelSearch; | 1261 | flags |= RegionFlags.BlockParcelSearch; |
1262 | if (Scene.RegionInfo.RegionSettings.GodBlockSearch) | ||
1263 | flags |= (RegionFlags)(1 << 11); | ||
1264 | if (Scene.RegionInfo.RegionSettings.Casino) | ||
1265 | flags |= (RegionFlags)(1 << 10); | ||
1225 | 1266 | ||
1226 | if (Scene.RegionInfo.RegionSettings.FixedSun) | 1267 | if (Scene.RegionInfo.RegionSettings.FixedSun) |
1227 | flags |= RegionFlags.SunFixed; | 1268 | flags |= RegionFlags.SunFixed; |
@@ -1229,11 +1270,15 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1229 | flags |= RegionFlags.Sandbox; | 1270 | flags |= RegionFlags.Sandbox; |
1230 | if (Scene.RegionInfo.EstateSettings.AllowVoice) | 1271 | if (Scene.RegionInfo.EstateSettings.AllowVoice) |
1231 | flags |= RegionFlags.AllowVoice; | 1272 | flags |= RegionFlags.AllowVoice; |
1273 | if (Scene.RegionInfo.EstateSettings.AllowLandmark) | ||
1274 | flags |= RegionFlags.AllowLandmark; | ||
1275 | if (Scene.RegionInfo.EstateSettings.AllowSetHome) | ||
1276 | flags |= RegionFlags.AllowSetHome; | ||
1277 | if (Scene.RegionInfo.EstateSettings.BlockDwell) | ||
1278 | flags |= RegionFlags.BlockDwell; | ||
1279 | if (Scene.RegionInfo.EstateSettings.ResetHomeOnTeleport) | ||
1280 | flags |= RegionFlags.ResetHomeOnTeleport; | ||
1232 | 1281 | ||
1233 | // Fudge these to always on, so the menu options activate | ||
1234 | // | ||
1235 | flags |= RegionFlags.AllowLandmark; | ||
1236 | flags |= RegionFlags.AllowSetHome; | ||
1237 | 1282 | ||
1238 | // TODO: SkipUpdateInterestList | 1283 | // TODO: SkipUpdateInterestList |
1239 | 1284 | ||
@@ -1274,6 +1319,12 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1274 | flags |= RegionFlags.ResetHomeOnTeleport; | 1319 | flags |= RegionFlags.ResetHomeOnTeleport; |
1275 | if (Scene.RegionInfo.EstateSettings.TaxFree) | 1320 | if (Scene.RegionInfo.EstateSettings.TaxFree) |
1276 | flags |= RegionFlags.TaxFree; | 1321 | flags |= RegionFlags.TaxFree; |
1322 | if (Scene.RegionInfo.EstateSettings.AllowLandmark) | ||
1323 | flags |= RegionFlags.AllowLandmark; | ||
1324 | if (Scene.RegionInfo.EstateSettings.AllowParcelChanges) | ||
1325 | flags |= RegionFlags.AllowParcelChanges; | ||
1326 | if (Scene.RegionInfo.EstateSettings.AllowSetHome) | ||
1327 | flags |= RegionFlags.AllowSetHome; | ||
1277 | if (Scene.RegionInfo.EstateSettings.DenyMinors) | 1328 | if (Scene.RegionInfo.EstateSettings.DenyMinors) |
1278 | flags |= (RegionFlags)(1 << 30); | 1329 | flags |= (RegionFlags)(1 << 30); |
1279 | 1330 | ||
@@ -1294,6 +1345,12 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1294 | 1345 | ||
1295 | public void TriggerRegionInfoChange() | 1346 | public void TriggerRegionInfoChange() |
1296 | { | 1347 | { |
1348 | m_regionChangeTimer.Stop(); | ||
1349 | m_regionChangeTimer.Start(); | ||
1350 | } | ||
1351 | |||
1352 | protected void RaiseRegionInfoChange(object sender, ElapsedEventArgs e) | ||
1353 | { | ||
1297 | ChangeDelegate change = OnRegionInfoChange; | 1354 | ChangeDelegate change = OnRegionInfoChange; |
1298 | 1355 | ||
1299 | if (change != null) | 1356 | if (change != null) |