diff options
Diffstat (limited to 'OpenSim/Region/Application/OpenSim.cs')
-rw-r--r-- | OpenSim/Region/Application/OpenSim.cs | 297 |
1 files changed, 182 insertions, 115 deletions
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index a7e7d03..85049c9 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs | |||
@@ -86,6 +86,7 @@ namespace OpenSim | |||
86 | IConfig startupConfig = Config.Configs["Startup"]; | 86 | IConfig startupConfig = Config.Configs["Startup"]; |
87 | IConfig networkConfig = Config.Configs["Network"]; | 87 | IConfig networkConfig = Config.Configs["Network"]; |
88 | 88 | ||
89 | int stpMinThreads = 2; | ||
89 | int stpMaxThreads = 15; | 90 | int stpMaxThreads = 15; |
90 | 91 | ||
91 | if (startupConfig != null) | 92 | if (startupConfig != null) |
@@ -112,12 +113,13 @@ namespace OpenSim | |||
112 | if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod)) | 113 | if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod)) |
113 | Util.FireAndForgetMethod = asyncCallMethod; | 114 | Util.FireAndForgetMethod = asyncCallMethod; |
114 | 115 | ||
116 | stpMinThreads = startupConfig.GetInt("MinPoolThreads", 15); | ||
115 | stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 15); | 117 | stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 15); |
116 | m_consolePrompt = startupConfig.GetString("ConsolePrompt", @"Region (\R) "); | 118 | m_consolePrompt = startupConfig.GetString("ConsolePrompt", @"Region (\R) "); |
117 | } | 119 | } |
118 | 120 | ||
119 | if (Util.FireAndForgetMethod == FireAndForgetMethod.SmartThreadPool) | 121 | if (Util.FireAndForgetMethod == FireAndForgetMethod.SmartThreadPool) |
120 | Util.InitThreadPool(stpMaxThreads); | 122 | Util.InitThreadPool(stpMinThreads, stpMaxThreads); |
121 | 123 | ||
122 | m_log.Info("[OPENSIM MAIN]: Using async_call_method " + Util.FireAndForgetMethod); | 124 | m_log.Info("[OPENSIM MAIN]: Using async_call_method " + Util.FireAndForgetMethod); |
123 | } | 125 | } |
@@ -170,6 +172,13 @@ namespace OpenSim | |||
170 | if (userStatsURI != String.Empty) | 172 | if (userStatsURI != String.Empty) |
171 | MainServer.Instance.AddStreamHandler(new OpenSim.UXSimStatusHandler(this)); | 173 | MainServer.Instance.AddStreamHandler(new OpenSim.UXSimStatusHandler(this)); |
172 | 174 | ||
175 | if (managedStatsURI != String.Empty) | ||
176 | { | ||
177 | string urlBase = String.Format("/{0}/", managedStatsURI); | ||
178 | MainServer.Instance.AddHTTPHandler(urlBase, StatsManager.HandleStatsRequest); | ||
179 | m_log.InfoFormat("[OPENSIM] Enabling remote managed stats fetch. URL = {0}", urlBase); | ||
180 | } | ||
181 | |||
173 | if (m_console is RemoteConsole) | 182 | if (m_console is RemoteConsole) |
174 | { | 183 | { |
175 | if (m_consolePort == 0) | 184 | if (m_consolePort == 0) |
@@ -226,41 +235,35 @@ namespace OpenSim | |||
226 | "Force the update of all objects on clients", | 235 | "Force the update of all objects on clients", |
227 | HandleForceUpdate); | 236 | HandleForceUpdate); |
228 | 237 | ||
229 | m_console.Commands.AddCommand("Debug", false, "debug packet", | ||
230 | "debug packet <level> [<avatar-first-name> <avatar-last-name>]", | ||
231 | "Turn on packet debugging", | ||
232 | "If level > 255 then all incoming and outgoing packets are logged.\n" | ||
233 | + "If level <= 255 then incoming AgentUpdate and outgoing SimStats and SimulatorViewerTimeMessage packets are not logged.\n" | ||
234 | + "If level <= 200 then incoming RequestImage and outgoing ImagePacket, ImageData, LayerData and CoarseLocationUpdate packets are not logged.\n" | ||
235 | + "If level <= 100 then incoming ViewerEffect and AgentAnimation and outgoing ViewerEffect and AvatarAnimation packets are not logged.\n" | ||
236 | + "If level <= 50 then outgoing ImprovedTerseObjectUpdate packets are not logged.\n" | ||
237 | + "If level <= 0 then no packets are logged.\n" | ||
238 | + "If an avatar name is given then only packets from that avatar are logged", | ||
239 | Debug); | ||
240 | |||
241 | m_console.Commands.AddCommand("General", false, "change region", | 238 | m_console.Commands.AddCommand("General", false, "change region", |
242 | "change region <region name>", | 239 | "change region <region name>", |
243 | "Change current console region", ChangeSelectedRegion); | 240 | "Change current console region", |
241 | ChangeSelectedRegion); | ||
244 | 242 | ||
245 | m_console.Commands.AddCommand("Archiving", false, "save xml", | 243 | m_console.Commands.AddCommand("Archiving", false, "save xml", |
246 | "save xml", | 244 | "save xml", |
247 | "Save a region's data in XML format", SaveXml); | 245 | "Save a region's data in XML format", |
246 | SaveXml); | ||
248 | 247 | ||
249 | m_console.Commands.AddCommand("Archiving", false, "save xml2", | 248 | m_console.Commands.AddCommand("Archiving", false, "save xml2", |
250 | "save xml2", | 249 | "save xml2", |
251 | "Save a region's data in XML2 format", SaveXml2); | 250 | "Save a region's data in XML2 format", |
251 | SaveXml2); | ||
252 | 252 | ||
253 | m_console.Commands.AddCommand("Archiving", false, "load xml", | 253 | m_console.Commands.AddCommand("Archiving", false, "load xml", |
254 | "load xml [-newIDs [<x> <y> <z>]]", | 254 | "load xml [-newIDs [<x> <y> <z>]]", |
255 | "Load a region's data from XML format", LoadXml); | 255 | "Load a region's data from XML format", |
256 | LoadXml); | ||
256 | 257 | ||
257 | m_console.Commands.AddCommand("Archiving", false, "load xml2", | 258 | m_console.Commands.AddCommand("Archiving", false, "load xml2", |
258 | "load xml2", | 259 | "load xml2", |
259 | "Load a region's data from XML2 format", LoadXml2); | 260 | "Load a region's data from XML2 format", |
261 | LoadXml2); | ||
260 | 262 | ||
261 | m_console.Commands.AddCommand("Archiving", false, "save prims xml2", | 263 | m_console.Commands.AddCommand("Archiving", false, "save prims xml2", |
262 | "save prims xml2 [<prim name> <file name>]", | 264 | "save prims xml2 [<prim name> <file name>]", |
263 | "Save named prim to XML2", SavePrimsXml2); | 265 | "Save named prim to XML2", |
266 | SavePrimsXml2); | ||
264 | 267 | ||
265 | m_console.Commands.AddCommand("Archiving", false, "load oar", | 268 | m_console.Commands.AddCommand("Archiving", false, "load oar", |
266 | "load oar [--merge] [--skip-assets] [<OAR path>]", | 269 | "load oar [--merge] [--skip-assets] [<OAR path>]", |
@@ -290,7 +293,23 @@ namespace OpenSim | |||
290 | 293 | ||
291 | m_console.Commands.AddCommand("Objects", false, "edit scale", | 294 | m_console.Commands.AddCommand("Objects", false, "edit scale", |
292 | "edit scale <name> <x> <y> <z>", | 295 | "edit scale <name> <x> <y> <z>", |
293 | "Change the scale of a named prim", HandleEditScale); | 296 | "Change the scale of a named prim", |
297 | HandleEditScale); | ||
298 | |||
299 | m_console.Commands.AddCommand("Objects", false, "rotate scene", | ||
300 | "rotate scene <degrees> [centerX, centerY]", | ||
301 | "Rotates all scene objects around centerX, centerY (defailt 128, 128) (please back up your region before using)", | ||
302 | HandleRotateScene); | ||
303 | |||
304 | m_console.Commands.AddCommand("Objects", false, "scale scene", | ||
305 | "scale scene <factor>", | ||
306 | "Scales the scene objects (please back up your region before using)", | ||
307 | HandleScaleScene); | ||
308 | |||
309 | m_console.Commands.AddCommand("Objects", false, "translate scene", | ||
310 | "translate scene xOffset yOffset zOffset", | ||
311 | "translates the scene objects (please back up your region before using)", | ||
312 | HandleTranslateScene); | ||
294 | 313 | ||
295 | m_console.Commands.AddCommand("Users", false, "kick user", | 314 | m_console.Commands.AddCommand("Users", false, "kick user", |
296 | "kick user <first> <last> [--force] [message]", | 315 | "kick user <first> <last> [--force] [message]", |
@@ -308,31 +327,38 @@ namespace OpenSim | |||
308 | 327 | ||
309 | m_console.Commands.AddCommand("Comms", false, "show connections", | 328 | m_console.Commands.AddCommand("Comms", false, "show connections", |
310 | "show connections", | 329 | "show connections", |
311 | "Show connection data", HandleShow); | 330 | "Show connection data", |
331 | HandleShow); | ||
312 | 332 | ||
313 | m_console.Commands.AddCommand("Comms", false, "show circuits", | 333 | m_console.Commands.AddCommand("Comms", false, "show circuits", |
314 | "show circuits", | 334 | "show circuits", |
315 | "Show agent circuit data", HandleShow); | 335 | "Show agent circuit data", |
336 | HandleShow); | ||
316 | 337 | ||
317 | m_console.Commands.AddCommand("Comms", false, "show pending-objects", | 338 | m_console.Commands.AddCommand("Comms", false, "show pending-objects", |
318 | "show pending-objects", | 339 | "show pending-objects", |
319 | "Show # of objects on the pending queues of all scene viewers", HandleShow); | 340 | "Show # of objects on the pending queues of all scene viewers", |
341 | HandleShow); | ||
320 | 342 | ||
321 | m_console.Commands.AddCommand("General", false, "show modules", | 343 | m_console.Commands.AddCommand("General", false, "show modules", |
322 | "show modules", | 344 | "show modules", |
323 | "Show module data", HandleShow); | 345 | "Show module data", |
346 | HandleShow); | ||
324 | 347 | ||
325 | m_console.Commands.AddCommand("Regions", false, "show regions", | 348 | m_console.Commands.AddCommand("Regions", false, "show regions", |
326 | "show regions", | 349 | "show regions", |
327 | "Show region data", HandleShow); | 350 | "Show region data", |
351 | HandleShow); | ||
328 | 352 | ||
329 | m_console.Commands.AddCommand("Regions", false, "show ratings", | 353 | m_console.Commands.AddCommand("Regions", false, "show ratings", |
330 | "show ratings", | 354 | "show ratings", |
331 | "Show rating data", HandleShow); | 355 | "Show rating data", |
356 | HandleShow); | ||
332 | 357 | ||
333 | m_console.Commands.AddCommand("Objects", false, "backup", | 358 | m_console.Commands.AddCommand("Objects", false, "backup", |
334 | "backup", | 359 | "backup", |
335 | "Persist currently unsaved object changes immediately instead of waiting for the normal persistence call.", RunCommand); | 360 | "Persist currently unsaved object changes immediately instead of waiting for the normal persistence call.", |
361 | RunCommand); | ||
336 | 362 | ||
337 | m_console.Commands.AddCommand("Regions", false, "create region", | 363 | m_console.Commands.AddCommand("Regions", false, "create region", |
338 | "create region [\"region name\"] <region_file.ini>", | 364 | "create region [\"region name\"] <region_file.ini>", |
@@ -345,34 +371,26 @@ namespace OpenSim | |||
345 | 371 | ||
346 | m_console.Commands.AddCommand("Regions", false, "restart", | 372 | m_console.Commands.AddCommand("Regions", false, "restart", |
347 | "restart", | 373 | "restart", |
348 | "Restart all sims in this instance", RunCommand); | 374 | "Restart all sims in this instance", |
375 | RunCommand); | ||
349 | 376 | ||
350 | m_console.Commands.AddCommand("General", false, "command-script", | 377 | m_console.Commands.AddCommand("General", false, "command-script", |
351 | "command-script <script>", | 378 | "command-script <script>", |
352 | "Run a command script from file", RunCommand); | 379 | "Run a command script from file", |
380 | RunCommand); | ||
353 | 381 | ||
354 | m_console.Commands.AddCommand("Regions", false, "remove-region", | 382 | m_console.Commands.AddCommand("Regions", false, "remove-region", |
355 | "remove-region <name>", | 383 | "remove-region <name>", |
356 | "Remove a region from this simulator", RunCommand); | 384 | "Remove a region from this simulator", |
385 | RunCommand); | ||
357 | 386 | ||
358 | m_console.Commands.AddCommand("Regions", false, "delete-region", | 387 | m_console.Commands.AddCommand("Regions", false, "delete-region", |
359 | "delete-region <name>", | 388 | "delete-region <name>", |
360 | "Delete a region from disk", RunCommand); | 389 | "Delete a region from disk", |
361 | 390 | RunCommand); | |
362 | m_console.Commands.AddCommand("General", false, "modules list", | ||
363 | "modules list", | ||
364 | "List modules", HandleModules); | ||
365 | |||
366 | m_console.Commands.AddCommand("General", false, "modules load", | ||
367 | "modules load <name>", | ||
368 | "Load a module", HandleModules); | ||
369 | |||
370 | m_console.Commands.AddCommand("General", false, "modules unload", | ||
371 | "modules unload <name>", | ||
372 | "Unload a module", HandleModules); | ||
373 | } | 391 | } |
374 | 392 | ||
375 | public override void ShutdownSpecific() | 393 | protected override void ShutdownSpecific() |
376 | { | 394 | { |
377 | if (m_shutdownCommandsFile != String.Empty) | 395 | if (m_shutdownCommandsFile != String.Empty) |
378 | { | 396 | { |
@@ -435,8 +453,8 @@ namespace OpenSim | |||
435 | { | 453 | { |
436 | RegionInfo regionInfo = presence.Scene.RegionInfo; | 454 | RegionInfo regionInfo = presence.Scene.RegionInfo; |
437 | 455 | ||
438 | if (presence.Firstname.ToLower().Contains(mainParams[2].ToLower()) && | 456 | if (presence.Firstname.ToLower().Equals(mainParams[2].ToLower()) && |
439 | presence.Lastname.ToLower().Contains(mainParams[3].ToLower())) | 457 | presence.Lastname.ToLower().Equals(mainParams[3].ToLower())) |
440 | { | 458 | { |
441 | MainConsole.Instance.Output( | 459 | MainConsole.Instance.Output( |
442 | String.Format( | 460 | String.Format( |
@@ -449,7 +467,8 @@ namespace OpenSim | |||
449 | else | 467 | else |
450 | presence.ControllingClient.Kick("\nYou have been logged out by an administrator.\n"); | 468 | presence.ControllingClient.Kick("\nYou have been logged out by an administrator.\n"); |
451 | 469 | ||
452 | presence.Scene.IncomingCloseAgent(presence.UUID, force); | 470 | presence.Scene.CloseAgent(presence.UUID, force); |
471 | break; | ||
453 | } | 472 | } |
454 | } | 473 | } |
455 | 474 | ||
@@ -501,6 +520,121 @@ namespace OpenSim | |||
501 | } | 520 | } |
502 | } | 521 | } |
503 | 522 | ||
523 | private void HandleRotateScene(string module, string[] args) | ||
524 | { | ||
525 | string usage = "Usage: rotate scene <angle in degrees> [centerX centerY] (centerX and centerY are optional and default to Constants.RegionSize / 2"; | ||
526 | |||
527 | float centerX = Constants.RegionSize * 0.5f; | ||
528 | float centerY = Constants.RegionSize * 0.5f; | ||
529 | |||
530 | if (args.Length < 3 || args.Length == 4) | ||
531 | { | ||
532 | MainConsole.Instance.Output(usage); | ||
533 | return; | ||
534 | } | ||
535 | |||
536 | float angle = (float)(Convert.ToSingle(args[2]) / 180.0 * Math.PI); | ||
537 | OpenMetaverse.Quaternion rot = OpenMetaverse.Quaternion.CreateFromAxisAngle(0, 0, 1, angle); | ||
538 | |||
539 | if (args.Length > 4) | ||
540 | { | ||
541 | centerX = Convert.ToSingle(args[3]); | ||
542 | centerY = Convert.ToSingle(args[4]); | ||
543 | } | ||
544 | |||
545 | Vector3 center = new Vector3(centerX, centerY, 0.0f); | ||
546 | |||
547 | SceneManager.ForEachSelectedScene(delegate(Scene scene) | ||
548 | { | ||
549 | scene.ForEachSOG(delegate(SceneObjectGroup sog) | ||
550 | { | ||
551 | if (sog.AttachmentPoint == 0) | ||
552 | { | ||
553 | sog.RootPart.UpdateRotation(rot * sog.GroupRotation); | ||
554 | Vector3 offset = sog.AbsolutePosition - center; | ||
555 | offset *= rot; | ||
556 | sog.UpdateGroupPosition(center + offset); | ||
557 | } | ||
558 | }); | ||
559 | }); | ||
560 | } | ||
561 | |||
562 | private void HandleScaleScene(string module, string[] args) | ||
563 | { | ||
564 | string usage = "Usage: scale scene <factor>"; | ||
565 | |||
566 | if (args.Length < 3) | ||
567 | { | ||
568 | MainConsole.Instance.Output(usage); | ||
569 | return; | ||
570 | } | ||
571 | |||
572 | float factor = (float)(Convert.ToSingle(args[2])); | ||
573 | |||
574 | float minZ = float.MaxValue; | ||
575 | |||
576 | SceneManager.ForEachSelectedScene(delegate(Scene scene) | ||
577 | { | ||
578 | scene.ForEachSOG(delegate(SceneObjectGroup sog) | ||
579 | { | ||
580 | if (sog.AttachmentPoint == 0) | ||
581 | { | ||
582 | if (sog.RootPart.AbsolutePosition.Z < minZ) | ||
583 | minZ = sog.RootPart.AbsolutePosition.Z; | ||
584 | } | ||
585 | }); | ||
586 | }); | ||
587 | |||
588 | SceneManager.ForEachSelectedScene(delegate(Scene scene) | ||
589 | { | ||
590 | scene.ForEachSOG(delegate(SceneObjectGroup sog) | ||
591 | { | ||
592 | if (sog.AttachmentPoint == 0) | ||
593 | { | ||
594 | Vector3 tmpRootPos = sog.RootPart.AbsolutePosition; | ||
595 | tmpRootPos.Z -= minZ; | ||
596 | tmpRootPos *= factor; | ||
597 | tmpRootPos.Z += minZ; | ||
598 | |||
599 | foreach (SceneObjectPart sop in sog.Parts) | ||
600 | { | ||
601 | if (sop.ParentID != 0) | ||
602 | sop.OffsetPosition *= factor; | ||
603 | sop.Scale *= factor; | ||
604 | } | ||
605 | |||
606 | sog.UpdateGroupPosition(tmpRootPos); | ||
607 | } | ||
608 | }); | ||
609 | }); | ||
610 | } | ||
611 | |||
612 | private void HandleTranslateScene(string module, string[] args) | ||
613 | { | ||
614 | string usage = "Usage: translate scene <xOffset, yOffset, zOffset>"; | ||
615 | |||
616 | if (args.Length < 5) | ||
617 | { | ||
618 | MainConsole.Instance.Output(usage); | ||
619 | return; | ||
620 | } | ||
621 | |||
622 | float xOFfset = (float)Convert.ToSingle(args[2]); | ||
623 | float yOffset = (float)Convert.ToSingle(args[3]); | ||
624 | float zOffset = (float)Convert.ToSingle(args[4]); | ||
625 | |||
626 | Vector3 offset = new Vector3(xOFfset, yOffset, zOffset); | ||
627 | |||
628 | SceneManager.ForEachSelectedScene(delegate(Scene scene) | ||
629 | { | ||
630 | scene.ForEachSOG(delegate(SceneObjectGroup sog) | ||
631 | { | ||
632 | if (sog.AttachmentPoint == 0) | ||
633 | sog.UpdateGroupPosition(sog.AbsolutePosition + offset); | ||
634 | }); | ||
635 | }); | ||
636 | } | ||
637 | |||
504 | /// <summary> | 638 | /// <summary> |
505 | /// Creates a new region based on the parameters specified. This will ask the user questions on the console | 639 | /// Creates a new region based on the parameters specified. This will ask the user questions on the console |
506 | /// </summary> | 640 | /// </summary> |
@@ -566,34 +700,6 @@ namespace OpenSim | |||
566 | } | 700 | } |
567 | 701 | ||
568 | /// <summary> | 702 | /// <summary> |
569 | /// Load, Unload, and list Region modules in use | ||
570 | /// </summary> | ||
571 | /// <param name="module"></param> | ||
572 | /// <param name="cmd"></param> | ||
573 | private void HandleModules(string module, string[] cmd) | ||
574 | { | ||
575 | List<string> args = new List<string>(cmd); | ||
576 | args.RemoveAt(0); | ||
577 | string[] cmdparams = args.ToArray(); | ||
578 | |||
579 | if (cmdparams.Length > 0) | ||
580 | { | ||
581 | switch (cmdparams[0].ToLower()) | ||
582 | { | ||
583 | case "list": | ||
584 | //TODO: Convert to new region modules | ||
585 | break; | ||
586 | case "unload": | ||
587 | //TODO: Convert to new region modules | ||
588 | break; | ||
589 | case "load": | ||
590 | //TODO: Convert to new region modules | ||
591 | break; | ||
592 | } | ||
593 | } | ||
594 | } | ||
595 | |||
596 | /// <summary> | ||
597 | /// Runs commands issued by the server console from the operator | 703 | /// Runs commands issued by the server console from the operator |
598 | /// </summary> | 704 | /// </summary> |
599 | /// <param name="command">The first argument of the parameter (the command)</param> | 705 | /// <param name="command">The first argument of the parameter (the command)</param> |
@@ -701,45 +807,6 @@ namespace OpenSim | |||
701 | RefreshPrompt(); | 807 | RefreshPrompt(); |
702 | } | 808 | } |
703 | 809 | ||
704 | /// <summary> | ||
705 | /// Turn on some debugging values for OpenSim. | ||
706 | /// </summary> | ||
707 | /// <param name="args"></param> | ||
708 | protected void Debug(string module, string[] args) | ||
709 | { | ||
710 | if (args.Length == 1) | ||
711 | return; | ||
712 | |||
713 | switch (args[1]) | ||
714 | { | ||
715 | case "packet": | ||
716 | string name = null; | ||
717 | if (args.Length == 5) | ||
718 | name = string.Format("{0} {1}", args[3], args[4]); | ||
719 | |||
720 | if (args.Length > 2) | ||
721 | { | ||
722 | int newDebug; | ||
723 | if (int.TryParse(args[2], out newDebug)) | ||
724 | { | ||
725 | SceneManager.SetDebugPacketLevelOnCurrentScene(newDebug, name); | ||
726 | // We provide user information elsewhere if any clients had their debug level set. | ||
727 | // MainConsole.Instance.OutputFormat("Debug packet level set to {0}", newDebug); | ||
728 | } | ||
729 | else | ||
730 | { | ||
731 | MainConsole.Instance.Output("Usage: debug packet 0..255"); | ||
732 | } | ||
733 | } | ||
734 | |||
735 | break; | ||
736 | |||
737 | default: | ||
738 | MainConsole.Instance.Output("Unknown debug command"); | ||
739 | break; | ||
740 | } | ||
741 | } | ||
742 | |||
743 | // see BaseOpenSimServer | 810 | // see BaseOpenSimServer |
744 | /// <summary> | 811 | /// <summary> |
745 | /// Many commands list objects for debugging. Some of the types are listed here | 812 | /// Many commands list objects for debugging. Some of the types are listed here |
@@ -829,7 +896,7 @@ namespace OpenSim | |||
829 | foreach (IRegionModuleBase module in sharedModules.OrderBy(m => m.Name)) | 896 | foreach (IRegionModuleBase module in sharedModules.OrderBy(m => m.Name)) |
830 | MainConsole.Instance.OutputFormat("New Region Module (Shared): {0}", module.Name); | 897 | MainConsole.Instance.OutputFormat("New Region Module (Shared): {0}", module.Name); |
831 | 898 | ||
832 | foreach (IRegionModuleBase module in sharedModules.OrderBy(m => m.Name)) | 899 | foreach (IRegionModuleBase module in nonSharedModules.OrderBy(m => m.Name)) |
833 | MainConsole.Instance.OutputFormat("New Region Module (Non-Shared): {0}", module.Name); | 900 | MainConsole.Instance.OutputFormat("New Region Module (Non-Shared): {0}", module.Name); |
834 | } | 901 | } |
835 | ); | 902 | ); |