diff options
author | Melanie Thielker | 2014-06-21 00:39:55 +0200 |
---|---|---|
committer | Melanie Thielker | 2014-06-21 00:39:55 +0200 |
commit | 159fcbf150b7da0e229b29aa7b94793484543d12 (patch) | |
tree | b8c0ff3b4c758a3fba8315b556c923ef4c02a185 /OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | |
parent | Merge commit '68c8633ba18f0a11cfc0ed04d1d0c7c59e6cec76' (diff) | |
parent | Merge branch 'master' into careminster (diff) | |
download | opensim-SC_OLD-159fcbf150b7da0e229b29aa7b94793484543d12.zip opensim-SC_OLD-159fcbf150b7da0e229b29aa7b94793484543d12.tar.gz opensim-SC_OLD-159fcbf150b7da0e229b29aa7b94793484543d12.tar.bz2 opensim-SC_OLD-159fcbf150b7da0e229b29aa7b94793484543d12.tar.xz |
Merge branch 'master' of ssh://3dhosting.de/var/git/careminster
Conflicts:
OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | 227 |
1 files changed, 179 insertions, 48 deletions
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 4e21724..0e2aba9 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; | |||
42 | using OpenSim.Framework.Console; | 42 | using OpenSim.Framework.Console; |
43 | using OpenSim.Framework.Servers; | 43 | using OpenSim.Framework.Servers; |
44 | using OpenSim.Framework.Servers.HttpServer; | 44 | using OpenSim.Framework.Servers.HttpServer; |
45 | using OpenSim.Region.CoreModules.Framework.InterfaceCommander; | ||
46 | using OpenSim.Region.Framework.Interfaces; | 45 | using OpenSim.Region.Framework.Interfaces; |
47 | using OpenSim.Region.Framework.Scenes; | 46 | using OpenSim.Region.Framework.Scenes; |
48 | using OpenSim.Region.Physics.Manager; | 47 | using OpenSim.Region.Physics.Manager; |
@@ -70,10 +69,10 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
70 | 69 | ||
71 | private LandChannel landChannel; | 70 | private LandChannel landChannel; |
72 | private Scene m_scene; | 71 | private Scene m_scene; |
73 | protected Commander m_commander = new Commander("land"); | ||
74 | 72 | ||
75 | protected IUserManagement m_userManager; | 73 | protected IUserManagement m_userManager; |
76 | protected IPrimCountModule m_primCountModule; | 74 | protected IPrimCountModule m_primCountModule; |
75 | protected IDialogModule m_Dialog; | ||
77 | 76 | ||
78 | // Minimum for parcels to work is 64m even if we don't actually use them. | 77 | // Minimum for parcels to work is 64m even if we don't actually use them. |
79 | #pragma warning disable 0429 | 78 | #pragma warning disable 0429 |
@@ -147,52 +146,33 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
147 | m_scene.EventManager.OnIncomingLandDataFromStorage += EventManagerOnIncomingLandDataFromStorage; | 146 | m_scene.EventManager.OnIncomingLandDataFromStorage += EventManagerOnIncomingLandDataFromStorage; |
148 | m_scene.EventManager.OnSetAllowForcefulBan += EventManagerOnSetAllowedForcefulBan; | 147 | m_scene.EventManager.OnSetAllowForcefulBan += EventManagerOnSetAllowedForcefulBan; |
149 | m_scene.EventManager.OnRegisterCaps += EventManagerOnRegisterCaps; | 148 | m_scene.EventManager.OnRegisterCaps += EventManagerOnRegisterCaps; |
150 | m_scene.EventManager.OnPluginConsole += EventManagerOnPluginConsole; | ||
151 | 149 | ||
152 | lock (m_scene) | 150 | lock (m_scene) |
153 | { | 151 | { |
154 | m_scene.LandChannel = (ILandChannel)landChannel; | 152 | m_scene.LandChannel = (ILandChannel)landChannel; |
155 | } | 153 | } |
156 | 154 | ||
157 | InstallInterfaces(); | 155 | RegisterCommands(); |
158 | } | 156 | } |
159 | 157 | ||
160 | public void RegionLoaded(Scene scene) | 158 | public void RegionLoaded(Scene scene) |
161 | { | 159 | { |
162 | m_userManager = m_scene.RequestModuleInterface<IUserManagement>(); | 160 | m_userManager = m_scene.RequestModuleInterface<IUserManagement>(); |
163 | m_primCountModule = m_scene.RequestModuleInterface<IPrimCountModule>(); | 161 | m_primCountModule = m_scene.RequestModuleInterface<IPrimCountModule>(); |
162 | m_Dialog = m_scene.RequestModuleInterface<IDialogModule>(); | ||
164 | } | 163 | } |
165 | 164 | ||
166 | public void RemoveRegion(Scene scene) | 165 | public void RemoveRegion(Scene scene) |
167 | { | 166 | { |
168 | // TODO: Also release other event manager listeners here | 167 | // TODO: Release event manager listeners here |
169 | |||
170 | m_scene.EventManager.OnPluginConsole -= EventManagerOnPluginConsole; | ||
171 | m_scene.UnregisterModuleCommander(m_commander.Name); | ||
172 | } | 168 | } |
173 | 169 | ||
174 | /// <summary> | 170 | // private bool OnVerifyUserConnection(ScenePresence scenePresence, out string reason) |
175 | /// Processes commandline input. Do not call directly. | 171 | // { |
176 | /// </summary> | 172 | // ILandObject nearestParcel = m_scene.GetNearestAllowedParcel(scenePresence.UUID, scenePresence.AbsolutePosition.X, scenePresence.AbsolutePosition.Y); |
177 | /// <param name="args">Commandline arguments</param> | 173 | // reason = "You are not allowed to enter this sim."; |
178 | protected void EventManagerOnPluginConsole(string[] args) | 174 | // return nearestParcel != null; |
179 | { | 175 | // } |
180 | if (args[0] == "land") | ||
181 | { | ||
182 | if (args.Length == 1) | ||
183 | { | ||
184 | m_commander.ProcessConsoleCommand("help", new string[0]); | ||
185 | return; | ||
186 | } | ||
187 | |||
188 | string[] tmpArgs = new string[args.Length - 2]; | ||
189 | int i; | ||
190 | for (i = 2; i < args.Length; i++) | ||
191 | tmpArgs[i - 2] = args[i]; | ||
192 | |||
193 | m_commander.ProcessConsoleCommand(args[1], tmpArgs); | ||
194 | } | ||
195 | } | ||
196 | 176 | ||
197 | void EventManagerOnNewClient(IClientAPI client) | 177 | void EventManagerOnNewClient(IClientAPI client) |
198 | { | 178 | { |
@@ -213,6 +193,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
213 | client.OnPreAgentUpdate += ClientOnPreAgentUpdate; | 193 | client.OnPreAgentUpdate += ClientOnPreAgentUpdate; |
214 | client.OnParcelEjectUser += ClientOnParcelEjectUser; | 194 | client.OnParcelEjectUser += ClientOnParcelEjectUser; |
215 | client.OnParcelFreezeUser += ClientOnParcelFreezeUser; | 195 | client.OnParcelFreezeUser += ClientOnParcelFreezeUser; |
196 | client.OnSetStartLocationRequest += ClientOnSetHome; | ||
216 | 197 | ||
217 | EntityBase presenceEntity; | 198 | EntityBase presenceEntity; |
218 | if (m_scene.Entities.TryGetValue(client.AgentId, out presenceEntity) && presenceEntity is ScenePresence) | 199 | if (m_scene.Entities.TryGetValue(client.AgentId, out presenceEntity) && presenceEntity is ScenePresence) |
@@ -1896,44 +1877,131 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1896 | land.LandData.ParcelAccessList.Add(entry); | 1877 | land.LandData.ParcelAccessList.Add(entry); |
1897 | } | 1878 | } |
1898 | } | 1879 | } |
1899 | 1880 | ||
1900 | protected void InstallInterfaces() | 1881 | /// <summary> |
1882 | /// Sets the Home Point. The LoginService uses this to know where to put a user when they log-in | ||
1883 | /// </summary> | ||
1884 | /// <param name="remoteClient"></param> | ||
1885 | /// <param name="regionHandle"></param> | ||
1886 | /// <param name="position"></param> | ||
1887 | /// <param name="lookAt"></param> | ||
1888 | /// <param name="flags"></param> | ||
1889 | public virtual void ClientOnSetHome(IClientAPI remoteClient, ulong regionHandle, Vector3 position, Vector3 lookAt, uint flags) | ||
1890 | { | ||
1891 | // Let's find the parcel in question | ||
1892 | ILandObject land = landChannel.GetLandObject(position); | ||
1893 | if (land == null || m_scene.GridUserService == null) | ||
1894 | { | ||
1895 | m_Dialog.SendAlertToUser(remoteClient, "Set Home request failed."); | ||
1896 | return; | ||
1897 | } | ||
1898 | |||
1899 | // Gather some data | ||
1900 | ulong gpowers = remoteClient.GetGroupPowers(land.LandData.GroupID); | ||
1901 | SceneObjectGroup telehub = null; | ||
1902 | if (m_scene.RegionInfo.RegionSettings.TelehubObject != UUID.Zero) | ||
1903 | // Does the telehub exist in the scene? | ||
1904 | telehub = m_scene.GetSceneObjectGroup(m_scene.RegionInfo.RegionSettings.TelehubObject); | ||
1905 | |||
1906 | // Can the user set home here? | ||
1907 | if (// (a) gods and land managers can set home | ||
1908 | m_scene.Permissions.IsAdministrator(remoteClient.AgentId) || | ||
1909 | m_scene.Permissions.IsGod(remoteClient.AgentId) || | ||
1910 | // (b) land owners can set home | ||
1911 | remoteClient.AgentId == land.LandData.OwnerID || | ||
1912 | // (c) members of the land-associated group in roles that can set home | ||
1913 | ((gpowers & (ulong)GroupPowers.AllowSetHome) == (ulong)GroupPowers.AllowSetHome) || | ||
1914 | // (d) parcels with telehubs can be the home of anyone | ||
1915 | (telehub != null && land.ContainsPoint((int)telehub.AbsolutePosition.X, (int)telehub.AbsolutePosition.Y))) | ||
1916 | { | ||
1917 | if (m_scene.GridUserService.SetHome(remoteClient.AgentId.ToString(), land.RegionUUID, position, lookAt)) | ||
1918 | // FUBAR ALERT: this needs to be "Home position set." so the viewer saves a home-screenshot. | ||
1919 | m_Dialog.SendAlertToUser(remoteClient, "Home position set."); | ||
1920 | else | ||
1921 | m_Dialog.SendAlertToUser(remoteClient, "Set Home request failed."); | ||
1922 | } | ||
1923 | else | ||
1924 | m_Dialog.SendAlertToUser(remoteClient, "You are not allowed to set your home location in this parcel."); | ||
1925 | } | ||
1926 | |||
1927 | protected void RegisterCommands() | ||
1901 | { | 1928 | { |
1902 | Command clearCommand | 1929 | ICommands commands = MainConsole.Instance.Commands; |
1903 | = new Command("clear", CommandIntentions.COMMAND_HAZARDOUS, ClearCommand, "Clears all the parcels from the region."); | ||
1904 | Command showCommand | ||
1905 | = new Command("show", CommandIntentions.COMMAND_STATISTICAL, ShowParcelsCommand, "Shows all parcels on the region."); | ||
1906 | 1930 | ||
1907 | m_commander.RegisterCommand("clear", clearCommand); | 1931 | commands.AddCommand( |
1908 | m_commander.RegisterCommand("show", showCommand); | 1932 | "Land", false, "land clear", |
1933 | "land clear", | ||
1934 | "Clear all the parcels from the region.", | ||
1935 | "Command will ask for confirmation before proceeding.", | ||
1936 | HandleClearCommand); | ||
1909 | 1937 | ||
1910 | // Add this to our scene so scripts can call these functions | 1938 | commands.AddCommand( |
1911 | m_scene.RegisterModuleCommander(m_commander); | 1939 | "Land", false, "land show", |
1940 | "land show [<local-land-id>]", | ||
1941 | "Show information about the parcels on the region.", | ||
1942 | "If no local land ID is given, then summary information about all the parcels is shown.\n" | ||
1943 | + "If a local land ID is given then full information about that parcel is shown.", | ||
1944 | HandleShowCommand); | ||
1912 | } | 1945 | } |
1913 | 1946 | ||
1914 | protected void ClearCommand(Object[] args) | 1947 | protected void HandleClearCommand(string module, string[] args) |
1915 | { | 1948 | { |
1949 | if (!(MainConsole.Instance.ConsoleScene == null || MainConsole.Instance.ConsoleScene == m_scene)) | ||
1950 | return; | ||
1951 | |||
1916 | string response = MainConsole.Instance.CmdPrompt( | 1952 | string response = MainConsole.Instance.CmdPrompt( |
1917 | string.Format( | 1953 | string.Format( |
1918 | "Are you sure that you want to clear all land parcels from {0} (y or n)", | 1954 | "Are you sure that you want to clear all land parcels from {0} (y or n)", m_scene.Name), |
1919 | m_scene.RegionInfo.RegionName), | ||
1920 | "n"); | 1955 | "n"); |
1921 | 1956 | ||
1922 | if (response.ToLower() == "y") | 1957 | if (response.ToLower() == "y") |
1923 | { | 1958 | { |
1924 | Clear(true); | 1959 | Clear(true); |
1925 | MainConsole.Instance.OutputFormat("Cleared all parcels from {0}", m_scene.RegionInfo.RegionName); | 1960 | MainConsole.Instance.OutputFormat("Cleared all parcels from {0}", m_scene.Name); |
1926 | } | 1961 | } |
1927 | else | 1962 | else |
1928 | { | 1963 | { |
1929 | MainConsole.Instance.OutputFormat("Aborting clear of all parcels from {0}", m_scene.RegionInfo.RegionName); | 1964 | MainConsole.Instance.OutputFormat("Aborting clear of all parcels from {0}", m_scene.Name); |
1930 | } | 1965 | } |
1931 | } | 1966 | } |
1932 | 1967 | ||
1933 | protected void ShowParcelsCommand(Object[] args) | 1968 | protected void HandleShowCommand(string module, string[] args) |
1934 | { | 1969 | { |
1935 | StringBuilder report = new StringBuilder(); | 1970 | if (!(MainConsole.Instance.ConsoleScene == null || MainConsole.Instance.ConsoleScene == m_scene)) |
1936 | 1971 | return; | |
1972 | |||
1973 | StringBuilder report = new StringBuilder(); | ||
1974 | |||
1975 | if (args.Length <= 2) | ||
1976 | { | ||
1977 | AppendParcelsSummaryReport(report); | ||
1978 | } | ||
1979 | else | ||
1980 | { | ||
1981 | int landLocalId; | ||
1982 | |||
1983 | if (!ConsoleUtil.TryParseConsoleInt(MainConsole.Instance, args[2], out landLocalId)) | ||
1984 | return; | ||
1985 | |||
1986 | ILandObject lo; | ||
1987 | |||
1988 | lock (m_landList) | ||
1989 | { | ||
1990 | if (!m_landList.TryGetValue(landLocalId, out lo)) | ||
1991 | { | ||
1992 | MainConsole.Instance.OutputFormat("No parcel found with local ID {0}", landLocalId); | ||
1993 | return; | ||
1994 | } | ||
1995 | } | ||
1996 | |||
1997 | AppendParcelReport(report, lo); | ||
1998 | } | ||
1999 | |||
2000 | MainConsole.Instance.Output(report.ToString()); | ||
2001 | } | ||
2002 | |||
2003 | private void AppendParcelsSummaryReport(StringBuilder report) | ||
2004 | { | ||
1937 | report.AppendFormat("Land information for {0}\n", m_scene.RegionInfo.RegionName); | 2005 | report.AppendFormat("Land information for {0}\n", m_scene.RegionInfo.RegionName); |
1938 | report.AppendFormat( | 2006 | report.AppendFormat( |
1939 | "{0,-20} {1,-10} {2,-9} {3,-18} {4,-18} {5,-20}\n", | 2007 | "{0,-20} {1,-10} {2,-9} {3,-18} {4,-18} {5,-20}\n", |
@@ -1979,6 +2047,69 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1979 | ForceAvatarToPosition(avatar, avatar.lastKnownAllowedPosition); | 2047 | ForceAvatarToPosition(avatar, avatar.lastKnownAllowedPosition); |
1980 | } | 2048 | } |
1981 | } | 2049 | } |
2050 | } | ||
2051 | |||
2052 | private void AppendParcelReport(StringBuilder report, ILandObject lo) | ||
2053 | { | ||
2054 | LandData ld = lo.LandData; | ||
2055 | |||
2056 | ConsoleDisplayList cdl = new ConsoleDisplayList(); | ||
2057 | cdl.AddRow("Parcel name", ld.Name); | ||
2058 | cdl.AddRow("Local ID", ld.LocalID); | ||
2059 | cdl.AddRow("Description", ld.Description); | ||
2060 | cdl.AddRow("Snapshot ID", ld.SnapshotID); | ||
2061 | cdl.AddRow("Area", ld.Area); | ||
2062 | cdl.AddRow("Starts", lo.StartPoint); | ||
2063 | cdl.AddRow("Ends", lo.EndPoint); | ||
2064 | cdl.AddRow("AABB Min", ld.AABBMin); | ||
2065 | cdl.AddRow("AABB Max", ld.AABBMax); | ||
2066 | |||
2067 | cdl.AddRow("Owner", m_userManager.GetUserName(ld.OwnerID)); | ||
2068 | cdl.AddRow("Is group owned?", ld.IsGroupOwned); | ||
2069 | cdl.AddRow("GroupID", ld.GroupID); | ||
2070 | |||
2071 | cdl.AddRow("Status", ld.Status); | ||
2072 | cdl.AddRow("Flags", (ParcelFlags)ld.Flags); | ||
2073 | |||
2074 | cdl.AddRow("Landing Type", (LandingType)ld.LandingType); | ||
2075 | cdl.AddRow("User Location", ld.UserLocation); | ||
2076 | cdl.AddRow("User look at", ld.UserLookAt); | ||
2077 | |||
2078 | cdl.AddRow("Other clean time", ld.OtherCleanTime); | ||
2079 | |||
2080 | cdl.AddRow("Max Prims", lo.GetParcelMaxPrimCount()); | ||
2081 | IPrimCounts pc = lo.PrimCounts; | ||
2082 | cdl.AddRow("Owner Prims", pc.Owner); | ||
2083 | cdl.AddRow("Group Prims", pc.Group); | ||
2084 | cdl.AddRow("Other Prims", pc.Others); | ||
2085 | cdl.AddRow("Selected Prims", pc.Selected); | ||
2086 | cdl.AddRow("Total Prims", pc.Total); | ||
2087 | |||
2088 | cdl.AddRow("Music URL", ld.MusicURL); | ||
2089 | cdl.AddRow("Obscure Music", ld.ObscureMusic); | ||
2090 | |||
2091 | cdl.AddRow("Media ID", ld.MediaID); | ||
2092 | cdl.AddRow("Media Autoscale", Convert.ToBoolean(ld.MediaAutoScale)); | ||
2093 | cdl.AddRow("Media URL", ld.MediaURL); | ||
2094 | cdl.AddRow("Media Type", ld.MediaType); | ||
2095 | cdl.AddRow("Media Description", ld.MediaDescription); | ||
2096 | cdl.AddRow("Media Width", ld.MediaWidth); | ||
2097 | cdl.AddRow("Media Height", ld.MediaHeight); | ||
2098 | cdl.AddRow("Media Loop", ld.MediaLoop); | ||
2099 | cdl.AddRow("Obscure Media", ld.ObscureMedia); | ||
2100 | |||
2101 | cdl.AddRow("Parcel Category", ld.Category); | ||
2102 | |||
2103 | cdl.AddRow("Claim Date", ld.ClaimDate); | ||
2104 | cdl.AddRow("Claim Price", ld.ClaimPrice); | ||
2105 | cdl.AddRow("Pass Hours", ld.PassHours); | ||
2106 | cdl.AddRow("Pass Price", ld.PassPrice); | ||
2107 | |||
2108 | cdl.AddRow("Auction ID", ld.AuctionID); | ||
2109 | cdl.AddRow("Authorized Buyer ID", ld.AuthBuyerID); | ||
2110 | cdl.AddRow("Sale Price", ld.SalePrice); | ||
2111 | |||
2112 | cdl.AddToStringBuilder(report); | ||
1982 | } | 2113 | } |
1983 | } | 2114 | } |
1984 | } | 2115 | } |