diff options
author | Melanie | 2012-10-07 02:48:28 +0100 |
---|---|---|
committer | Melanie | 2012-10-07 02:48:28 +0100 |
commit | f7df68d922758c0a78664abe82d631579f6aa63f (patch) | |
tree | 85daa41ff4b35653b4fbb987cbc852ad853decef /OpenSim/Region/CoreModules | |
parent | Merge branch 'master' into careminster (diff) | |
parent | refactor: Rename UserSessioNID -> UserSession in WebStatsModule since this is... (diff) | |
download | opensim-SC-f7df68d922758c0a78664abe82d631579f6aa63f.zip opensim-SC-f7df68d922758c0a78664abe82d631579f6aa63f.tar.gz opensim-SC-f7df68d922758c0a78664abe82d631579f6aa63f.tar.bz2 opensim-SC-f7df68d922758c0a78664abe82d631579f6aa63f.tar.xz |
Merge branch 'master' into careminster
Conflicts:
OpenSim/Region/CoreModules/Avatar/Lure/LureModule.cs
OpenSim/Region/Framework/Scenes/Scene.cs
OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs
Diffstat (limited to 'OpenSim/Region/CoreModules')
6 files changed, 203 insertions, 41 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs index d942e87..5ec0ea9 100644 --- a/OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Friends/CallingCardModule.cs | |||
@@ -141,7 +141,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
141 | client.FirstName+" "+client.LastName, | 141 | client.FirstName+" "+client.LastName, |
142 | destID, (byte)211, false, | 142 | destID, (byte)211, false, |
143 | String.Empty, | 143 | String.Empty, |
144 | transactionID, false, new Vector3(), new byte[0]), | 144 | transactionID, false, new Vector3(), new byte[0], true), |
145 | delegate(bool success) {} ); | 145 | delegate(bool success) {} ); |
146 | } | 146 | } |
147 | } | 147 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs index c14cb17..21dff4b 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs | |||
@@ -313,6 +313,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
313 | m_TransferModule.SendInstantMessage(im, delegate(bool success) {}); | 313 | m_TransferModule.SendInstantMessage(im, delegate(bool success) {}); |
314 | } | 314 | } |
315 | } | 315 | } |
316 | |||
317 | // XXX: This code was placed here to try and accomdate RLV which moves given folders named #RLV/~<name> | ||
318 | // to a folder called name in #RLV. However, this approach may not be ultimately correct - from analysis | ||
319 | // of Firestorm 4.2.2 on sending an InventoryOffered instead of TaskInventoryOffered (as was previously | ||
320 | // done), the viewer itself would appear to move and rename the folder, rather than the simulator doing it here. | ||
316 | else if (im.dialog == (byte) InstantMessageDialog.TaskInventoryAccepted) | 321 | else if (im.dialog == (byte) InstantMessageDialog.TaskInventoryAccepted) |
317 | { | 322 | { |
318 | UUID destinationFolderID = UUID.Zero; | 323 | UUID destinationFolderID = UUID.Zero; |
@@ -324,6 +329,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
324 | 329 | ||
325 | if (destinationFolderID != UUID.Zero) | 330 | if (destinationFolderID != UUID.Zero) |
326 | { | 331 | { |
332 | InventoryFolderBase destinationFolder = new InventoryFolderBase(destinationFolderID, client.AgentId); | ||
333 | if (destinationFolder == null) | ||
334 | { | ||
335 | m_log.WarnFormat( | ||
336 | "[INVENTORY TRANSFER]: TaskInventoryAccepted message from {0} in {1} specified folder {2} which does not exist", | ||
337 | client.Name, scene.Name, destinationFolderID); | ||
338 | |||
339 | return; | ||
340 | } | ||
341 | |||
327 | IInventoryService invService = scene.InventoryService; | 342 | IInventoryService invService = scene.InventoryService; |
328 | 343 | ||
329 | UUID inventoryID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip | 344 | UUID inventoryID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip |
@@ -331,9 +346,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
331 | InventoryItemBase item = new InventoryItemBase(inventoryID, client.AgentId); | 346 | InventoryItemBase item = new InventoryItemBase(inventoryID, client.AgentId); |
332 | item = invService.GetItem(item); | 347 | item = invService.GetItem(item); |
333 | InventoryFolderBase folder = null; | 348 | InventoryFolderBase folder = null; |
349 | UUID? previousParentFolderID = null; | ||
334 | 350 | ||
335 | if (item != null) // It's an item | 351 | if (item != null) // It's an item |
336 | { | 352 | { |
353 | previousParentFolderID = item.Folder; | ||
337 | item.Folder = destinationFolderID; | 354 | item.Folder = destinationFolderID; |
338 | 355 | ||
339 | invService.DeleteItems(item.Owner, new List<UUID>() { item.ID }); | 356 | invService.DeleteItems(item.Owner, new List<UUID>() { item.ID }); |
@@ -346,10 +363,22 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
346 | 363 | ||
347 | if (folder != null) // It's a folder | 364 | if (folder != null) // It's a folder |
348 | { | 365 | { |
366 | previousParentFolderID = folder.ParentID; | ||
349 | folder.ParentID = destinationFolderID; | 367 | folder.ParentID = destinationFolderID; |
350 | invService.MoveFolder(folder); | 368 | invService.MoveFolder(folder); |
351 | } | 369 | } |
352 | } | 370 | } |
371 | |||
372 | // Tell client about updates to original parent and new parent (this should probably be factored with existing move item/folder code). | ||
373 | if (previousParentFolderID != null) | ||
374 | { | ||
375 | InventoryFolderBase previousParentFolder | ||
376 | = new InventoryFolderBase((UUID)previousParentFolderID, client.AgentId); | ||
377 | previousParentFolder = invService.GetFolder(previousParentFolder); | ||
378 | scene.SendInventoryUpdate(client, previousParentFolder, true, true); | ||
379 | |||
380 | scene.SendInventoryUpdate(client, destinationFolder, true, true); | ||
381 | } | ||
353 | } | 382 | } |
354 | } | 383 | } |
355 | else if ( | 384 | else if ( |
@@ -370,9 +399,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
370 | InventoryItemBase item = new InventoryItemBase(inventoryID, client.AgentId); | 399 | InventoryItemBase item = new InventoryItemBase(inventoryID, client.AgentId); |
371 | item = invService.GetItem(item); | 400 | item = invService.GetItem(item); |
372 | InventoryFolderBase folder = null; | 401 | InventoryFolderBase folder = null; |
402 | UUID? previousParentFolderID = null; | ||
373 | 403 | ||
374 | if (item != null && trashFolder != null) | 404 | if (item != null && trashFolder != null) |
375 | { | 405 | { |
406 | previousParentFolderID = item.Folder; | ||
376 | item.Folder = trashFolder.ID; | 407 | item.Folder = trashFolder.ID; |
377 | 408 | ||
378 | // Diva comment: can't we just update this item??? | 409 | // Diva comment: can't we just update this item??? |
@@ -388,6 +419,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
388 | 419 | ||
389 | if (folder != null & trashFolder != null) | 420 | if (folder != null & trashFolder != null) |
390 | { | 421 | { |
422 | previousParentFolderID = folder.ParentID; | ||
391 | folder.ParentID = trashFolder.ID; | 423 | folder.ParentID = trashFolder.ID; |
392 | invService.MoveFolder(folder); | 424 | invService.MoveFolder(folder); |
393 | client.SendBulkUpdateInventory(folder); | 425 | client.SendBulkUpdateInventory(folder); |
@@ -408,6 +440,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
408 | client.SendAgentAlertMessage("Unable to delete "+ | 440 | client.SendAgentAlertMessage("Unable to delete "+ |
409 | "received inventory" + reason, false); | 441 | "received inventory" + reason, false); |
410 | } | 442 | } |
443 | // Tell client about updates to original parent and new parent (this should probably be factored with existing move item/folder code). | ||
444 | else if (previousParentFolderID != null) | ||
445 | { | ||
446 | InventoryFolderBase previousParentFolder | ||
447 | = new InventoryFolderBase((UUID)previousParentFolderID, client.AgentId); | ||
448 | previousParentFolder = invService.GetFolder(previousParentFolder); | ||
449 | scene.SendInventoryUpdate(client, previousParentFolder, true, true); | ||
450 | |||
451 | scene.SendInventoryUpdate(client, trashFolder, true, true); | ||
452 | } | ||
411 | 453 | ||
412 | ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID)); | 454 | ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID)); |
413 | 455 | ||
diff --git a/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs b/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs index 92cf9d1..9c369f6 100644 --- a/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs | |||
@@ -186,7 +186,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure | |||
186 | client.FirstName+" "+client.LastName, targetid, | 186 | client.FirstName+" "+client.LastName, targetid, |
187 | (byte)InstantMessageDialog.RequestTeleport, false, | 187 | (byte)InstantMessageDialog.RequestTeleport, false, |
188 | message, sessionID, false, presence.AbsolutePosition, | 188 | message, sessionID, false, presence.AbsolutePosition, |
189 | new Byte[0]); | 189 | new Byte[0], true); |
190 | m.RegionID = client.Scene.RegionInfo.RegionID.Guid; | 190 | m.RegionID = client.Scene.RegionInfo.RegionID.Guid; |
191 | 191 | ||
192 | m_log.DebugFormat("[HG LURE MODULE]: RequestTeleport sessionID={0}, regionID={1}, message={2}", m.imSessionID, m.RegionID, m.message); | 192 | m_log.DebugFormat("[HG LURE MODULE]: RequestTeleport sessionID={0}, regionID={1}, message={2}", m.imSessionID, m.RegionID, m.message); |
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index c5bb9a5..e355ebf 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -1028,6 +1028,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1028 | Scene initiatingScene) | 1028 | Scene initiatingScene) |
1029 | { | 1029 | { |
1030 | Thread.Sleep(10000); | 1030 | Thread.Sleep(10000); |
1031 | |||
1031 | IMessageTransferModule im = initiatingScene.RequestModuleInterface<IMessageTransferModule>(); | 1032 | IMessageTransferModule im = initiatingScene.RequestModuleInterface<IMessageTransferModule>(); |
1032 | if (im != null) | 1033 | if (im != null) |
1033 | { | 1034 | { |
@@ -1040,11 +1041,22 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1040 | (uint)(int)position.X, | 1041 | (uint)(int)position.X, |
1041 | (uint)(int)position.Y, | 1042 | (uint)(int)position.Y, |
1042 | (uint)(int)position.Z); | 1043 | (uint)(int)position.Z); |
1043 | GridInstantMessage m = new GridInstantMessage(initiatingScene, UUID.Zero, | 1044 | |
1044 | "Region", agent.UUID, | 1045 | GridInstantMessage m |
1045 | (byte)InstantMessageDialog.GodLikeRequestTeleport, false, | 1046 | = new GridInstantMessage( |
1046 | "", gotoLocation, false, new Vector3(127, 0, 0), | 1047 | initiatingScene, |
1047 | new Byte[0]); | 1048 | UUID.Zero, |
1049 | "Region", | ||
1050 | agent.UUID, | ||
1051 | (byte)InstantMessageDialog.GodLikeRequestTeleport, | ||
1052 | false, | ||
1053 | "", | ||
1054 | gotoLocation, | ||
1055 | false, | ||
1056 | new Vector3(127, 0, 0), | ||
1057 | new Byte[0], | ||
1058 | false); | ||
1059 | |||
1048 | im.SendInstantMessage(m, delegate(bool success) | 1060 | im.SendInstantMessage(m, delegate(bool success) |
1049 | { | 1061 | { |
1050 | m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Client Initiating Teleport sending IM success = {0}", success); | 1062 | m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Client Initiating Teleport sending IM success = {0}", success); |
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index 36c84c7..b4811da 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs | |||
@@ -31,6 +31,7 @@ using System.Reflection; | |||
31 | 31 | ||
32 | using OpenSim.Framework; | 32 | using OpenSim.Framework; |
33 | using OpenSim.Framework.Console; | 33 | using OpenSim.Framework.Console; |
34 | using OpenSim.Region.ClientStack.LindenUDP; | ||
34 | using OpenSim.Region.Framework; | 35 | using OpenSim.Region.Framework; |
35 | using OpenSim.Region.Framework.Interfaces; | 36 | using OpenSim.Region.Framework.Interfaces; |
36 | using OpenSim.Region.Framework.Scenes; | 37 | using OpenSim.Region.Framework.Scenes; |
diff --git a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs index 09f6758..6e39e9a 100644 --- a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs | |||
@@ -126,6 +126,25 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands | |||
126 | m_console.Commands.AddCommand( | 126 | m_console.Commands.AddCommand( |
127 | "Objects", | 127 | "Objects", |
128 | false, | 128 | false, |
129 | "show object pos", | ||
130 | "show object pos <start-coord> to <end-coord>", | ||
131 | "Show details of scene objects within the given area.", | ||
132 | "Each component of the coord is comma separated. There must be no spaces between the commas.\n" | ||
133 | + "If you don't care about the z component you can simply omit it.\n" | ||
134 | + "If you don't care about the x or y components then you can leave them blank (though a comma is still required)\n" | ||
135 | + "If you want to specify the maxmimum value of a component then you can use ~ instead of a number\n" | ||
136 | + "If you want to specify the minimum value of a component then you can use -~ instead of a number\n" | ||
137 | + "e.g.\n" | ||
138 | + "show object pos 20,20,20 to 40,40,40\n" | ||
139 | + "show object pos 20,20 to 40,40\n" | ||
140 | + "show object pos ,20,20 to ,40,40\n" | ||
141 | + "show object pos ,,30 to ,,~\n" | ||
142 | + "show object pos ,,-~ to ,,30", | ||
143 | HandleShowObjectByPos); | ||
144 | |||
145 | m_console.Commands.AddCommand( | ||
146 | "Objects", | ||
147 | false, | ||
129 | "show part uuid", | 148 | "show part uuid", |
130 | "show part uuid <UUID>", | 149 | "show part uuid <UUID>", |
131 | "Show details of a scene object parts with the given UUID", HandleShowPartByUuid); | 150 | "Show details of a scene object parts with the given UUID", HandleShowPartByUuid); |
@@ -138,6 +157,25 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands | |||
138 | "Show details of scene object parts with the given name.", | 157 | "Show details of scene object parts with the given name.", |
139 | "If --regex is specified then the name is treatead as a regular expression", | 158 | "If --regex is specified then the name is treatead as a regular expression", |
140 | HandleShowPartByName); | 159 | HandleShowPartByName); |
160 | |||
161 | m_console.Commands.AddCommand( | ||
162 | "Objects", | ||
163 | false, | ||
164 | "show part pos", | ||
165 | "show part pos <start-coord> to <end-coord>", | ||
166 | "Show details of scene object parts within the given area.", | ||
167 | "Each component of the coord is comma separated. There must be no spaces between the commas.\n" | ||
168 | + "If you don't care about the z component you can simply omit it.\n" | ||
169 | + "If you don't care about the x or y components then you can leave them blank (though a comma is still required)\n" | ||
170 | + "If you want to specify the maxmimum value of a component then you can use ~ instead of a number\n" | ||
171 | + "If you want to specify the minimum value of a component then you can use -~ instead of a number\n" | ||
172 | + "e.g.\n" | ||
173 | + "show object pos 20,20,20 to 40,40,40\n" | ||
174 | + "show object pos 20,20 to 40,40\n" | ||
175 | + "show object pos ,20,20 to ,40,40\n" | ||
176 | + "show object pos ,,30 to ,,~\n" | ||
177 | + "show object pos ,,-~ to ,,30", | ||
178 | HandleShowPartByPos); | ||
141 | } | 179 | } |
142 | 180 | ||
143 | public void RemoveRegion(Scene scene) | 181 | public void RemoveRegion(Scene scene) |
@@ -150,6 +188,43 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands | |||
150 | // m_log.DebugFormat("[OBJECTS COMMANDS MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName); | 188 | // m_log.DebugFormat("[OBJECTS COMMANDS MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName); |
151 | } | 189 | } |
152 | 190 | ||
191 | private void OutputSogsToConsole(Predicate<SceneObjectGroup> searchPredicate) | ||
192 | { | ||
193 | List<SceneObjectGroup> sceneObjects = m_scene.GetSceneObjectGroups().FindAll(searchPredicate); | ||
194 | |||
195 | StringBuilder sb = new StringBuilder(); | ||
196 | |||
197 | foreach (SceneObjectGroup so in sceneObjects) | ||
198 | { | ||
199 | AddSceneObjectReport(sb, so); | ||
200 | sb.Append("\n"); | ||
201 | } | ||
202 | |||
203 | sb.AppendFormat("{0} object(s) found in {1}\n", sceneObjects.Count, m_scene.Name); | ||
204 | |||
205 | m_console.OutputFormat(sb.ToString()); | ||
206 | } | ||
207 | |||
208 | private void OutputSopsToConsole(Predicate<SceneObjectPart> searchPredicate) | ||
209 | { | ||
210 | List<SceneObjectGroup> sceneObjects = m_scene.GetSceneObjectGroups(); | ||
211 | List<SceneObjectPart> parts = new List<SceneObjectPart>(); | ||
212 | |||
213 | sceneObjects.ForEach(so => parts.AddRange(Array.FindAll<SceneObjectPart>(so.Parts, searchPredicate))); | ||
214 | |||
215 | StringBuilder sb = new StringBuilder(); | ||
216 | |||
217 | foreach (SceneObjectPart part in parts) | ||
218 | { | ||
219 | AddScenePartReport(sb, part); | ||
220 | sb.Append("\n"); | ||
221 | } | ||
222 | |||
223 | sb.AppendFormat("{0} parts found in {1}\n", parts.Count, m_scene.Name); | ||
224 | |||
225 | m_console.OutputFormat(sb.ToString()); | ||
226 | } | ||
227 | |||
153 | private void HandleShowObjectByUuid(string module, string[] cmd) | 228 | private void HandleShowObjectByUuid(string module, string[] cmd) |
154 | { | 229 | { |
155 | if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) | 230 | if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) |
@@ -200,36 +275,54 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands | |||
200 | 275 | ||
201 | string name = mainParams[3]; | 276 | string name = mainParams[3]; |
202 | 277 | ||
203 | List<SceneObjectGroup> sceneObjects = new List<SceneObjectGroup>(); | 278 | Predicate<SceneObjectGroup> searchPredicate; |
204 | Action<SceneObjectGroup> searchAction; | ||
205 | 279 | ||
206 | if (useRegex) | 280 | if (useRegex) |
207 | { | 281 | { |
208 | Regex nameRegex = new Regex(name); | 282 | Regex nameRegex = new Regex(name); |
209 | searchAction = so => { if (nameRegex.IsMatch(so.Name)) { sceneObjects.Add(so); }}; | 283 | searchPredicate = so => nameRegex.IsMatch(so.Name); |
210 | } | 284 | } |
211 | else | 285 | else |
212 | { | 286 | { |
213 | searchAction = so => { if (so.Name == name) { sceneObjects.Add(so); }}; | 287 | searchPredicate = so => so.Name == name; |
214 | } | 288 | } |
215 | 289 | ||
216 | m_scene.ForEachSOG(searchAction); | 290 | OutputSogsToConsole(searchPredicate); |
291 | } | ||
217 | 292 | ||
218 | if (sceneObjects.Count == 0) | 293 | private void HandleShowObjectByPos(string module, string[] cmdparams) |
294 | { | ||
295 | if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) | ||
296 | return; | ||
297 | |||
298 | if (cmdparams.Length < 5) | ||
219 | { | 299 | { |
220 | m_console.OutputFormat("No objects with name {0} found in {1}", name, m_scene.RegionInfo.RegionName); | 300 | m_console.OutputFormat("Usage: show object pos <start-coord> to <end-coord>"); |
221 | return; | 301 | return; |
222 | } | 302 | } |
223 | 303 | ||
224 | StringBuilder sb = new StringBuilder(); | 304 | string rawConsoleStartVector = cmdparams[3]; |
305 | Vector3 startVector; | ||
225 | 306 | ||
226 | foreach (SceneObjectGroup so in sceneObjects) | 307 | if (!ConsoleUtil.TryParseConsoleMinVector(rawConsoleStartVector, out startVector)) |
227 | { | 308 | { |
228 | AddSceneObjectReport(sb, so); | 309 | m_console.OutputFormat("Error: Start vector {0} does not have a valid format", rawConsoleStartVector); |
229 | sb.Append("\n"); | 310 | return; |
230 | } | 311 | } |
231 | 312 | ||
232 | m_console.OutputFormat(sb.ToString()); | 313 | string rawConsoleEndVector = cmdparams[5]; |
314 | Vector3 endVector; | ||
315 | |||
316 | if (!ConsoleUtil.TryParseConsoleMaxVector(rawConsoleEndVector, out endVector)) | ||
317 | { | ||
318 | m_console.OutputFormat("Error: End vector {0} does not have a valid format", rawConsoleEndVector); | ||
319 | return; | ||
320 | } | ||
321 | |||
322 | Predicate<SceneObjectGroup> searchPredicate | ||
323 | = so => Util.IsInsideBox(so.AbsolutePosition, startVector, endVector); | ||
324 | |||
325 | OutputSogsToConsole(searchPredicate); | ||
233 | } | 326 | } |
234 | 327 | ||
235 | private void HandleShowPartByUuid(string module, string[] cmd) | 328 | private void HandleShowPartByUuid(string module, string[] cmd) |
@@ -264,6 +357,38 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands | |||
264 | m_console.OutputFormat(sb.ToString()); | 357 | m_console.OutputFormat(sb.ToString()); |
265 | } | 358 | } |
266 | 359 | ||
360 | private void HandleShowPartByPos(string module, string[] cmdparams) | ||
361 | { | ||
362 | if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) | ||
363 | return; | ||
364 | |||
365 | if (cmdparams.Length < 5) | ||
366 | { | ||
367 | m_console.OutputFormat("Usage: show part pos <start-coord> to <end-coord>"); | ||
368 | return; | ||
369 | } | ||
370 | |||
371 | string rawConsoleStartVector = cmdparams[3]; | ||
372 | Vector3 startVector; | ||
373 | |||
374 | if (!ConsoleUtil.TryParseConsoleMinVector(rawConsoleStartVector, out startVector)) | ||
375 | { | ||
376 | m_console.OutputFormat("Error: Start vector {0} does not have a valid format", rawConsoleStartVector); | ||
377 | return; | ||
378 | } | ||
379 | |||
380 | string rawConsoleEndVector = cmdparams[5]; | ||
381 | Vector3 endVector; | ||
382 | |||
383 | if (!ConsoleUtil.TryParseConsoleMaxVector(rawConsoleEndVector, out endVector)) | ||
384 | { | ||
385 | m_console.OutputFormat("Error: End vector {0} does not have a valid format", rawConsoleEndVector); | ||
386 | return; | ||
387 | } | ||
388 | |||
389 | OutputSopsToConsole(sop => Util.IsInsideBox(sop.AbsolutePosition, startVector, endVector)); | ||
390 | } | ||
391 | |||
267 | private void HandleShowPartByName(string module, string[] cmdparams) | 392 | private void HandleShowPartByName(string module, string[] cmdparams) |
268 | { | 393 | { |
269 | if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) | 394 | if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) |
@@ -282,37 +407,19 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands | |||
282 | 407 | ||
283 | string name = mainParams[3]; | 408 | string name = mainParams[3]; |
284 | 409 | ||
285 | List<SceneObjectPart> parts = new List<SceneObjectPart>(); | 410 | Predicate<SceneObjectPart> searchPredicate; |
286 | |||
287 | Action<SceneObjectGroup> searchAction; | ||
288 | 411 | ||
289 | if (useRegex) | 412 | if (useRegex) |
290 | { | 413 | { |
291 | Regex nameRegex = new Regex(name); | 414 | Regex nameRegex = new Regex(name); |
292 | searchAction = so => so.ForEachPart(sop => { if (nameRegex.IsMatch(sop.Name)) { parts.Add(sop); } }); | 415 | searchPredicate = sop => nameRegex.IsMatch(sop.Name); |
293 | } | 416 | } |
294 | else | 417 | else |
295 | { | 418 | { |
296 | searchAction = so => so.ForEachPart(sop => { if (sop.Name == name) { parts.Add(sop); } }); | 419 | searchPredicate = sop => sop.Name == name; |
297 | } | 420 | } |
298 | 421 | ||
299 | m_scene.ForEachSOG(searchAction); | 422 | OutputSopsToConsole(searchPredicate); |
300 | |||
301 | if (parts.Count == 0) | ||
302 | { | ||
303 | m_console.OutputFormat("No parts with name {0} found in {1}", name, m_scene.RegionInfo.RegionName); | ||
304 | return; | ||
305 | } | ||
306 | |||
307 | StringBuilder sb = new StringBuilder(); | ||
308 | |||
309 | foreach (SceneObjectPart part in parts) | ||
310 | { | ||
311 | AddScenePartReport(sb, part); | ||
312 | sb.Append("\n"); | ||
313 | } | ||
314 | |||
315 | m_console.OutputFormat(sb.ToString()); | ||
316 | } | 423 | } |
317 | 424 | ||
318 | private StringBuilder AddSceneObjectReport(StringBuilder sb, SceneObjectGroup so) | 425 | private StringBuilder AddSceneObjectReport(StringBuilder sb, SceneObjectGroup so) |