aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs83
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;
32using System.Linq; 32using System.Linq;
33using System.Reflection; 33using System.Reflection;
34using System.Security; 34using System.Security;
35using System.Timers;
35using log4net; 36using log4net;
36using Mono.Addins; 37using Mono.Addins;
37using Nini.Config; 38using 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)