diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 1789d6d223..73c4d6ce38 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs @@ -42,7 +42,6 @@ using OpenSim.Framework.Capabilities; using OpenSim.Framework.Console; using OpenSim.Framework.Servers; using OpenSim.Framework.Servers.HttpServer; -using OpenSim.Region.CoreModules.Framework.InterfaceCommander; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Physics.Manager; @@ -70,7 +69,6 @@ namespace OpenSim.Region.CoreModules.World.Land private LandChannel landChannel; private Scene m_scene; - protected Commander m_commander = new Commander("land"); protected IUserManagement m_userManager; protected IPrimCountModule m_primCountModule; @@ -140,14 +138,13 @@ namespace OpenSim.Region.CoreModules.World.Land m_scene.EventManager.OnIncomingLandDataFromStorage += EventManagerOnIncomingLandDataFromStorage; m_scene.EventManager.OnSetAllowForcefulBan += EventManagerOnSetAllowedForcefulBan; m_scene.EventManager.OnRegisterCaps += EventManagerOnRegisterCaps; - m_scene.EventManager.OnPluginConsole += EventManagerOnPluginConsole; lock (m_scene) { m_scene.LandChannel = (ILandChannel)landChannel; } - InstallInterfaces(); + RegisterCommands(); } public void RegionLoaded(Scene scene) @@ -159,10 +156,7 @@ namespace OpenSim.Region.CoreModules.World.Land public void RemoveRegion(Scene scene) { - // TODO: Also release other event manager listeners here - - m_scene.EventManager.OnPluginConsole -= EventManagerOnPluginConsole; - m_scene.UnregisterModuleCommander(m_commander.Name); + // TODO: Release event manager listeners here } // private bool OnVerifyUserConnection(ScenePresence scenePresence, out string reason) @@ -170,30 +164,7 @@ namespace OpenSim.Region.CoreModules.World.Land // ILandObject nearestParcel = m_scene.GetNearestAllowedParcel(scenePresence.UUID, scenePresence.AbsolutePosition.X, scenePresence.AbsolutePosition.Y); // reason = "You are not allowed to enter this sim."; // return nearestParcel != null; -// } - - /// - /// Processes commandline input. Do not call directly. - /// - /// Commandline arguments - protected void EventManagerOnPluginConsole(string[] args) - { - if (args[0] == "land") - { - if (args.Length == 1) - { - m_commander.ProcessConsoleCommand("help", new string[0]); - return; - } - - string[] tmpArgs = new string[args.Length - 2]; - int i; - for (i = 2; i < args.Length; i++) - tmpArgs[i - 2] = args[i]; - - m_commander.ProcessConsoleCommand(args[1], tmpArgs); - } - } +// } void EventManagerOnNewClient(IClientAPI client) { @@ -1872,44 +1843,84 @@ namespace OpenSim.Region.CoreModules.World.Land m_Dialog.SendAlertToUser(remoteClient, "You are not allowed to set your home location in this parcel."); } - - protected void InstallInterfaces() + protected void RegisterCommands() { - Command clearCommand - = new Command("clear", CommandIntentions.COMMAND_HAZARDOUS, ClearCommand, "Clears all the parcels from the region."); - Command showCommand - = new Command("show", CommandIntentions.COMMAND_STATISTICAL, ShowParcelsCommand, "Shows all parcels on the region."); + ICommands commands = MainConsole.Instance.Commands; - m_commander.RegisterCommand("clear", clearCommand); - m_commander.RegisterCommand("show", showCommand); + commands.AddCommand( + "Land", false, "land clear", + "land clear", + "Clear all the parcels from the region.", + "Command will ask for confirmation before proceeding.", + HandleClearCommand); - // Add this to our scene so scripts can call these functions - m_scene.RegisterModuleCommander(m_commander); + commands.AddCommand( + "Land", false, "land show", + "land show []", + "Show information about the parcels on the region.", + "If no local land ID is given, then summary information about all the parcels is shown.\n" + + "If a local land ID is given then full information about that parcel is shown.", + HandleShowCommand); } - protected void ClearCommand(Object[] args) + protected void HandleClearCommand(string module, string[] args) { + if (!(MainConsole.Instance.ConsoleScene == null || MainConsole.Instance.ConsoleScene == m_scene)) + return; + string response = MainConsole.Instance.CmdPrompt( string.Format( - "Are you sure that you want to clear all land parcels from {0} (y or n)", - m_scene.RegionInfo.RegionName), + "Are you sure that you want to clear all land parcels from {0} (y or n)", m_scene.Name), "n"); if (response.ToLower() == "y") { Clear(true); - MainConsole.Instance.OutputFormat("Cleared all parcels from {0}", m_scene.RegionInfo.RegionName); + MainConsole.Instance.OutputFormat("Cleared all parcels from {0}", m_scene.Name); } else { - MainConsole.Instance.OutputFormat("Aborting clear of all parcels from {0}", m_scene.RegionInfo.RegionName); + MainConsole.Instance.OutputFormat("Aborting clear of all parcels from {0}", m_scene.Name); } } - protected void ShowParcelsCommand(Object[] args) + protected void HandleShowCommand(string module, string[] args) { - StringBuilder report = new StringBuilder(); - + if (!(MainConsole.Instance.ConsoleScene == null || MainConsole.Instance.ConsoleScene == m_scene)) + return; + + StringBuilder report = new StringBuilder(); + + if (args.Length <= 2) + { + AppendParcelsSummaryReport(report); + } + else + { + int landLocalId; + + if (!ConsoleUtil.TryParseConsoleInt(MainConsole.Instance, args[2], out landLocalId)) + return; + + ILandObject lo; + + lock (m_landList) + { + if (!m_landList.TryGetValue(landLocalId, out lo)) + { + MainConsole.Instance.OutputFormat("No parcel found with local ID {0}", landLocalId); + return; + } + } + + AppendParcelReport(report, lo); + } + + MainConsole.Instance.Output(report.ToString()); + } + + private void AppendParcelsSummaryReport(StringBuilder report) + { report.AppendFormat("Land information for {0}\n", m_scene.RegionInfo.RegionName); report.AppendFormat( "{0,-20} {1,-10} {2,-9} {3,-18} {4,-18} {5,-20}\n", @@ -1931,8 +1942,69 @@ namespace OpenSim.Region.CoreModules.World.Land ld.Name, ld.LocalID, ld.Area, lo.StartPoint, lo.EndPoint, m_userManager.GetUserName(ld.OwnerID)); } } - - MainConsole.Instance.Output(report.ToString()); - } + } + + private void AppendParcelReport(StringBuilder report, ILandObject lo) + { + LandData ld = lo.LandData; + + ConsoleDisplayList cdl = new ConsoleDisplayList(); + cdl.AddRow("Parcel name", ld.Name); + cdl.AddRow("Local ID", ld.LocalID); + cdl.AddRow("Description", ld.Description); + cdl.AddRow("Snapshot ID", ld.SnapshotID); + cdl.AddRow("Area", ld.Area); + cdl.AddRow("Starts", lo.StartPoint); + cdl.AddRow("Ends", lo.EndPoint); + cdl.AddRow("AABB Min", ld.AABBMin); + cdl.AddRow("AABB Max", ld.AABBMax); + + cdl.AddRow("Owner", m_userManager.GetUserName(ld.OwnerID)); + cdl.AddRow("Is group owned?", ld.IsGroupOwned); + cdl.AddRow("GroupID", ld.GroupID); + + cdl.AddRow("Status", ld.Status); + cdl.AddRow("Flags", (ParcelFlags)ld.Flags); + + cdl.AddRow("Landing Type", (LandingType)ld.LandingType); + cdl.AddRow("User Location", ld.UserLocation); + cdl.AddRow("User look at", ld.UserLookAt); + + cdl.AddRow("Other clean time", ld.OtherCleanTime); + + cdl.AddRow("Max Prims", lo.GetParcelMaxPrimCount()); + IPrimCounts pc = lo.PrimCounts; + cdl.AddRow("Owner Prims", pc.Owner); + cdl.AddRow("Group Prims", pc.Group); + cdl.AddRow("Other Prims", pc.Others); + cdl.AddRow("Selected Prims", pc.Selected); + cdl.AddRow("Total Prims", pc.Total); + + cdl.AddRow("Music URL", ld.MusicURL); + cdl.AddRow("Obscure Music", ld.ObscureMusic); + + cdl.AddRow("Media ID", ld.MediaID); + cdl.AddRow("Media Autoscale", Convert.ToBoolean(ld.MediaAutoScale)); + cdl.AddRow("Media URL", ld.MediaURL); + cdl.AddRow("Media Type", ld.MediaType); + cdl.AddRow("Media Description", ld.MediaDescription); + cdl.AddRow("Media Width", ld.MediaWidth); + cdl.AddRow("Media Height", ld.MediaHeight); + cdl.AddRow("Media Loop", ld.MediaLoop); + cdl.AddRow("Obscure Media", ld.ObscureMedia); + + cdl.AddRow("Parcel Category", ld.Category); + + cdl.AddRow("Claim Date", ld.ClaimDate); + cdl.AddRow("Claim Price", ld.ClaimPrice); + cdl.AddRow("Pass Hours", ld.PassHours); + cdl.AddRow("Pass Price", ld.PassPrice); + + cdl.AddRow("Auction ID", ld.AuctionID); + cdl.AddRow("Authorized Buyer ID", ld.AuthBuyerID); + cdl.AddRow("Sale Price", ld.SalePrice); + + cdl.AddToStringBuilder(report); + } } -} +} \ No newline at end of file