aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorSnoopy Pfeffer2011-08-15 17:46:51 +0200
committerSnoopy Pfeffer2011-08-15 17:46:51 +0200
commit9a6ad1535e83a4d1b216ae879173ab8c524da60b (patch)
treebcdba14d476b77d9326e274c9be921a8d032804b /OpenSim/Region
parentAdded optional Login Service parameter "Currency" to be able to change the cu... (diff)
downloadopensim-SC-9a6ad1535e83a4d1b216ae879173ab8c524da60b.zip
opensim-SC-9a6ad1535e83a4d1b216ae879173ab8c524da60b.tar.gz
opensim-SC-9a6ad1535e83a4d1b216ae879173ab8c524da60b.tar.bz2
opensim-SC-9a6ad1535e83a4d1b216ae879173ab8c524da60b.tar.xz
Added console command "delete object outside" to delete all objects outside region boundaries. This is especiyll useful in cases where physical objects outside regions boundaries cause much physics engine lag.
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs39
1 files changed, 37 insertions, 2 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 9aa9bf5..13b4cbc 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -611,6 +611,10 @@ namespace OpenSim.Region.Framework.Scenes
611 "delete object name <name>", 611 "delete object name <name>",
612 "Delete object by name", HandleDeleteObject); 612 "Delete object by name", HandleDeleteObject);
613 613
614 MainConsole.Instance.Commands.AddCommand("region", false, "delete object outside",
615 "delete object outside",
616 "Delete all objects outside boundaries", HandleDeleteObject);
617
614 //Bind Storage Manager functions to some land manager functions for this scene 618 //Bind Storage Manager functions to some land manager functions for this scene
615 EventManager.OnLandObjectAdded += 619 EventManager.OnLandObjectAdded +=
616 new EventManager.LandObjectAdded(simDataService.StoreLandObject); 620 new EventManager.LandObjectAdded(simDataService.StoreLandObject);
@@ -4941,11 +4945,19 @@ namespace OpenSim.Region.Framework.Scenes
4941 4945
4942 private void HandleDeleteObject(string module, string[] cmd) 4946 private void HandleDeleteObject(string module, string[] cmd)
4943 { 4947 {
4944 if (cmd.Length < 4) 4948 if (cmd.Length < 3)
4945 return; 4949 return;
4946 4950
4947 string mode = cmd[2]; 4951 string mode = cmd[2];
4948 string o = cmd[3]; 4952 string o = "";
4953
4954 if (mode != "outside")
4955 {
4956 if (cmd.Length < 4)
4957 return;
4958
4959 o = cmd[3];
4960 }
4949 4961
4950 List<SceneObjectGroup> deletes = new List<SceneObjectGroup>(); 4962 List<SceneObjectGroup> deletes = new List<SceneObjectGroup>();
4951 4963
@@ -4987,10 +4999,33 @@ namespace OpenSim.Region.Framework.Scenes
4987 deletes.Add(g); 4999 deletes.Add(g);
4988 }); 5000 });
4989 break; 5001 break;
5002 case "outside":
5003 ForEachSOG(delegate (SceneObjectGroup g)
5004 {
5005 SceneObjectPart rootPart = g.RootPart;
5006 bool delete = false;
5007
5008 if (rootPart.GroupPosition.Z < 0.0 || rootPart.GroupPosition.Z > 10000.0)
5009 {
5010 delete = true;
5011 } else {
5012 ILandObject parcel = LandChannel.GetLandObject(rootPart.GroupPosition.X, rootPart.GroupPosition.Y);
5013
5014 if (parcel == null || parcel.LandData.Name == "NO LAND")
5015 delete = true;
5016 }
5017
5018 if (delete && !rootPart.IsAttachment && !deletes.Contains(g))
5019 deletes.Add(g);
5020 });
5021 break;
4990 } 5022 }
4991 5023
4992 foreach (SceneObjectGroup g in deletes) 5024 foreach (SceneObjectGroup g in deletes)
5025 {
5026 m_log.InfoFormat("[SCENE]: Deleting object {0}", g.UUID);
4993 DeleteSceneObject(g, false); 5027 DeleteSceneObject(g, false);
5028 }
4994 } 5029 }
4995 5030
4996 private void HandleReloadEstate(string module, string[] cmd) 5031 private void HandleReloadEstate(string module, string[] cmd)