aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Framework/Monitoring/StatsLogger.cs2
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs4
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs8
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs21
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs34
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs5
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs13
-rw-r--r--OpenSim/Services/GridService/GridService.cs53
-rw-r--r--OpenSim/Tools/pCampBot/BotManager.cs63
-rw-r--r--OpenSim/Tools/pCampBot/pCampBot.cs7
11 files changed, 128 insertions, 84 deletions
diff --git a/OpenSim/Framework/Monitoring/StatsLogger.cs b/OpenSim/Framework/Monitoring/StatsLogger.cs
index fa2e1b6..1e4fa11 100644
--- a/OpenSim/Framework/Monitoring/StatsLogger.cs
+++ b/OpenSim/Framework/Monitoring/StatsLogger.cs
@@ -67,7 +67,7 @@ namespace OpenSim.Framework.Monitoring
67 if (cmd[3] == "start") 67 if (cmd[3] == "start")
68 { 68 {
69 Start(); 69 Start();
70 con.OutputFormat("Now recording all stats very {0}ms to file", m_statsLogIntervalMs); 70 con.OutputFormat("Now recording all stats to file every {0}ms", m_statsLogIntervalMs);
71 } 71 }
72 else if (cmd[3] == "stop") 72 else if (cmd[3] == "stop")
73 { 73 {
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 8c51077..1b091bf 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -12602,7 +12602,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
12602 { 12602 {
12603 if (p is ScenePresence) 12603 if (p is ScenePresence)
12604 { 12604 {
12605 ScenePresence presence = p as ScenePresence;
12606 // It turns out to get the agent to stop flying, you have to feed it stop flying velocities 12605 // It turns out to get the agent to stop flying, you have to feed it stop flying velocities
12607 // There's no explicit message to send the client to tell it to stop flying.. it relies on the 12606 // There's no explicit message to send the client to tell it to stop flying.. it relies on the
12608 // velocity, collision plane and avatar height 12607 // velocity, collision plane and avatar height
@@ -12610,15 +12609,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
12610 // Add 1/6 the avatar's height to it's position so it doesn't shoot into the air 12609 // Add 1/6 the avatar's height to it's position so it doesn't shoot into the air
12611 // when the avatar stands up 12610 // when the avatar stands up
12612 12611
12613 Vector3 pos = presence.AbsolutePosition;
12614
12615 ImprovedTerseObjectUpdatePacket.ObjectDataBlock block = 12612 ImprovedTerseObjectUpdatePacket.ObjectDataBlock block =
12616 CreateImprovedTerseBlock(p, false); 12613 CreateImprovedTerseBlock(p, false);
12617 12614
12618 const float TIME_DILATION = 1.0f; 12615 const float TIME_DILATION = 1.0f;
12619 ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f); 12616 ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f);
12620 12617
12621
12622 ImprovedTerseObjectUpdatePacket packet 12618 ImprovedTerseObjectUpdatePacket packet
12623 = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket( 12619 = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(
12624 PacketType.ImprovedTerseObjectUpdate); 12620 PacketType.ImprovedTerseObjectUpdate);
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
index 797097f..5854428 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
@@ -536,7 +536,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
536 } 536 }
537 catch (Exception e) 537 catch (Exception e)
538 { 538 {
539 m_log.ErrorFormat("[INVENTORY ARCHIVER]: Could not authenticate password, {0}", e.Message); 539 m_log.ErrorFormat("[INVENTORY ARCHIVER]: Could not authenticate password, {0}", e);
540 return null; 540 return null;
541 } 541 }
542 } 542 }
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 17ebc83..8950516 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -832,8 +832,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
832 } 832 }
833 833
834 m_log.WarnFormat( 834 m_log.WarnFormat(
835 "[ENTITY TRANSFER MODULE]: UpdateAgent failed on teleport of {0} to {1} from {2}. Keeping avatar in source region.", 835 "[ENTITY TRANSFER MODULE]: UpdateAgent failed on teleport of {0} to {1}. Keeping avatar in {2}",
836 sp.Name, finalDestination.RegionName, sp.Scene.RegionInfo.RegionName); 836 sp.Name, finalDestination.RegionName, sp.Scene.Name);
837 837
838 Fail(sp, finalDestination, logout, currentAgentCircuit.SessionID.ToString(), "Connection between viewer and destination region could not be established."); 838 Fail(sp, finalDestination, logout, currentAgentCircuit.SessionID.ToString(), "Connection between viewer and destination region could not be established.");
839 return; 839 return;
@@ -1053,8 +1053,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1053 } 1053 }
1054 1054
1055 m_log.WarnFormat( 1055 m_log.WarnFormat(
1056 "[ENTITY TRANSFER MODULE]: UpdateAgent failed on teleport of {0} to {1} from {2}. Keeping avatar in source region.", 1056 "[ENTITY TRANSFER MODULE]: UpdateAgent failed on teleport of {0} to {1}. Keeping avatar in {2}",
1057 sp.Name, finalDestination.RegionName, sp.Scene.RegionInfo.RegionName); 1057 sp.Name, finalDestination.RegionName, sp.Scene.Name);
1058 1058
1059 Fail(sp, finalDestination, logout, currentAgentCircuit.SessionID.ToString(), "Connection between viewer and destination region could not be established."); 1059 Fail(sp, finalDestination, logout, currentAgentCircuit.SessionID.ToString(), "Connection between viewer and destination region could not be established.");
1060 return; 1060 return;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index b58e7c4..cb12d65 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -4416,10 +4416,27 @@ namespace OpenSim.Region.Framework.Scenes
4416 4416
4417 // Check that the auth_token is valid 4417 // Check that the auth_token is valid
4418 AgentCircuitData acd = AuthenticateHandler.GetAgentCircuitData(agentID); 4418 AgentCircuitData acd = AuthenticateHandler.GetAgentCircuitData(agentID);
4419 if (acd != null && acd.SessionID.ToString() == auth_token) 4419
4420 if (acd == null)
4421 {
4422 m_log.DebugFormat(
4423 "[SCENE]: Request to close agent {0} but no such agent in scene {1}. May have been closed previously.",
4424 agentID, Name);
4425
4426 return false;
4427 }
4428
4429 if (acd.SessionID.ToString() == auth_token)
4430 {
4420 return IncomingCloseAgent(agentID, force); 4431 return IncomingCloseAgent(agentID, force);
4432 }
4421 else 4433 else
4422 m_log.ErrorFormat("[SCENE]: Request to close agent {0} with invalid authorization token {1}", agentID, auth_token); 4434 {
4435 m_log.WarnFormat(
4436 "[SCENE]: Request to close agent {0} with invalid authorization token {1} in {2}",
4437 agentID, auth_token, Name);
4438 }
4439
4423 return false; 4440 return false;
4424 } 4441 }
4425 4442
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index bb7ae7f..0a5bfd2 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -561,39 +561,15 @@ namespace OpenSim.Region.Framework.Scenes
561 protected internal ScenePresence CreateAndAddChildScenePresence( 561 protected internal ScenePresence CreateAndAddChildScenePresence(
562 IClientAPI client, AvatarAppearance appearance, PresenceType type) 562 IClientAPI client, AvatarAppearance appearance, PresenceType type)
563 { 563 {
564 ScenePresence newAvatar = null;
565
566 // ScenePresence always defaults to child agent 564 // ScenePresence always defaults to child agent
567 newAvatar = new ScenePresence(client, m_parentScene, appearance, type); 565 ScenePresence presence = new ScenePresence(client, m_parentScene, appearance, type);
568
569 AddScenePresence(newAvatar);
570
571 return newAvatar;
572 }
573
574 /// <summary>
575 /// Add a presence to the scene
576 /// </summary>
577 /// <param name="presence"></param>
578 protected internal void AddScenePresence(ScenePresence presence)
579 {
580 // Always a child when added to the scene
581 bool child = presence.IsChildAgent;
582
583 if (child)
584 {
585 m_numChildAgents++;
586 }
587 else
588 {
589 m_numRootAgents++;
590 presence.AddToPhysicalScene(false);
591 }
592 566
593 Entities[presence.UUID] = presence; 567 Entities[presence.UUID] = presence;
594 568
595 lock (m_presenceLock) 569 lock (m_presenceLock)
596 { 570 {
571 m_numChildAgents++;
572
597 Dictionary<UUID, ScenePresence> newmap = new Dictionary<UUID, ScenePresence>(m_scenePresenceMap); 573 Dictionary<UUID, ScenePresence> newmap = new Dictionary<UUID, ScenePresence>(m_scenePresenceMap);
598 List<ScenePresence> newlist = new List<ScenePresence>(m_scenePresenceArray); 574 List<ScenePresence> newlist = new List<ScenePresence>(m_scenePresenceArray);
599 575
@@ -604,7 +580,7 @@ namespace OpenSim.Region.Framework.Scenes
604 } 580 }
605 else 581 else
606 { 582 {
607 // Remember the old presene reference from the dictionary 583 // Remember the old presence reference from the dictionary
608 ScenePresence oldref = newmap[presence.UUID]; 584 ScenePresence oldref = newmap[presence.UUID];
609 // Replace the presence reference in the dictionary with the new value 585 // Replace the presence reference in the dictionary with the new value
610 newmap[presence.UUID] = presence; 586 newmap[presence.UUID] = presence;
@@ -616,6 +592,8 @@ namespace OpenSim.Region.Framework.Scenes
616 m_scenePresenceMap = newmap; 592 m_scenePresenceMap = newmap;
617 m_scenePresenceArray = newlist; 593 m_scenePresenceArray = newlist;
618 } 594 }
595
596 return presence;
619 } 597 }
620 598
621 /// <summary> 599 /// <summary>
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 4fc207a..b4e8f09 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -3243,11 +3243,6 @@ namespace OpenSim.Region.Framework.Scenes
3243 } 3243 }
3244 } 3244 }
3245 3245
3246 public void RestoreInCurrentScene()
3247 {
3248 AddToPhysicalScene(false); // not exactly false
3249 }
3250
3251 public void Reset() 3246 public void Reset()
3252 { 3247 {
3253// m_log.DebugFormat("[SCENE PRESENCE]: Resetting {0} in {1}", Name, Scene.RegionInfo.RegionName); 3248// m_log.DebugFormat("[SCENE PRESENCE]: Resetting {0} in {1}", Name, Scene.RegionInfo.RegionName);
diff --git a/OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs b/OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs
index e9cb213..5a6b284 100644
--- a/OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs
@@ -119,11 +119,17 @@ namespace OpenSim.Region.OptionalModules.Avatar.SitStand
119 119
120 foreach (ScenePresence sp in scenePresences) 120 foreach (ScenePresence sp in scenePresences)
121 { 121 {
122 if (sp.SitGround || sp.IsSatOnObject)
123 continue;
124
122 SceneObjectPart sitPart = null; 125 SceneObjectPart sitPart = null;
123 List<SceneObjectGroup> sceneObjects = m_scene.GetSceneObjectGroups(); 126 List<SceneObjectGroup> sceneObjects = m_scene.GetSceneObjectGroups();
124 127
125 foreach (SceneObjectGroup sceneObject in sceneObjects) 128 foreach (SceneObjectGroup sceneObject in sceneObjects)
126 { 129 {
130 if (sceneObject.IsAttachment)
131 continue;
132
127 foreach (SceneObjectPart part in sceneObject.Parts) 133 foreach (SceneObjectPart part in sceneObject.Parts)
128 { 134 {
129 if (part.IsSitTargetSet && part.SitTargetAvatar == UUID.Zero) 135 if (part.IsSitTargetSet && part.SitTargetAvatar == UUID.Zero)
@@ -169,8 +175,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.SitStand
169 175
170 foreach (ScenePresence sp in scenePresences) 176 foreach (ScenePresence sp in scenePresences)
171 { 177 {
172 MainConsole.Instance.OutputFormat("Standing {0} in {1}", sp.Name, m_scene.Name); 178 if (sp.SitGround || sp.IsSatOnObject)
173 sp.StandUp(); 179 {
180 MainConsole.Instance.OutputFormat("Standing {0} in {1}", sp.Name, m_scene.Name);
181 sp.StandUp();
182 }
174 } 183 }
175 } 184 }
176 185
diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs
index daebf8b..a1485c8 100644
--- a/OpenSim/Services/GridService/GridService.cs
+++ b/OpenSim/Services/GridService/GridService.cs
@@ -86,7 +86,7 @@ namespace OpenSim.Services.GridService
86 { 86 {
87 MainConsole.Instance.Commands.AddCommand("Regions", true, 87 MainConsole.Instance.Commands.AddCommand("Regions", true,
88 "deregister region id", 88 "deregister region id",
89 "deregister region id <Region UUID>", 89 "deregister region id <region-id>+",
90 "Deregister a region manually.", 90 "Deregister a region manually.",
91 String.Empty, 91 String.Empty,
92 HandleDeregisterRegion); 92 HandleDeregisterRegion);
@@ -526,40 +526,41 @@ namespace OpenSim.Services.GridService
526 526
527 private void HandleDeregisterRegion(string module, string[] cmd) 527 private void HandleDeregisterRegion(string module, string[] cmd)
528 { 528 {
529 if (cmd.Length != 4) 529 if (cmd.Length < 4)
530 { 530 {
531 MainConsole.Instance.Output("Syntax: degregister region id <Region UUID>"); 531 MainConsole.Instance.Output("Usage: degregister region id <region-id>+");
532 return; 532 return;
533 } 533 }
534 534
535 string rawRegionUuid = cmd[3]; 535 for (int i = 3; i < cmd.Length; i++)
536 UUID regionUuid;
537
538 if (!UUID.TryParse(rawRegionUuid, out regionUuid))
539 { 536 {
540 MainConsole.Instance.OutputFormat("{0} is not a valid region uuid", rawRegionUuid); 537 string rawRegionUuid = cmd[i];
541 return; 538 UUID regionUuid;
542 }
543 539
544 GridRegion region = GetRegionByUUID(UUID.Zero, regionUuid); 540 if (!UUID.TryParse(rawRegionUuid, out regionUuid))
541 {
542 MainConsole.Instance.OutputFormat("{0} is not a valid region uuid", rawRegionUuid);
543 return;
544 }
545 545
546 if (region == null) 546 GridRegion region = GetRegionByUUID(UUID.Zero, regionUuid);
547 {
548 MainConsole.Instance.OutputFormat("No region with UUID {0}", regionUuid);
549 return;
550 }
551 547
552 if (DeregisterRegion(regionUuid)) 548 if (region == null)
553 { 549 {
554 MainConsole.Instance.OutputFormat("Deregistered {0} {1}", region.RegionName, regionUuid); 550 MainConsole.Instance.OutputFormat("No region with UUID {0}", regionUuid);
555 } 551 return;
556 else 552 }
557 {
558 // I don't think this can ever occur if we know that the region exists.
559 MainConsole.Instance.OutputFormat("Error deregistering {0} {1}", region.RegionName, regionUuid);
560 }
561 553
562 return; 554 if (DeregisterRegion(regionUuid))
555 {
556 MainConsole.Instance.OutputFormat("Deregistered {0} {1}", region.RegionName, regionUuid);
557 }
558 else
559 {
560 // I don't think this can ever occur if we know that the region exists.
561 MainConsole.Instance.OutputFormat("Error deregistering {0} {1}", region.RegionName, regionUuid);
562 }
563 }
563 } 564 }
564 565
565 private void HandleShowRegions(string module, string[] cmd) 566 private void HandleShowRegions(string module, string[] cmd)
diff --git a/OpenSim/Tools/pCampBot/BotManager.cs b/OpenSim/Tools/pCampBot/BotManager.cs
index 13912ae..5c3835b 100644
--- a/OpenSim/Tools/pCampBot/BotManager.cs
+++ b/OpenSim/Tools/pCampBot/BotManager.cs
@@ -203,13 +203,16 @@ namespace pCampBot
203 HandleStand); 203 HandleStand);
204 204
205 m_console.Commands.AddCommand( 205 m_console.Commands.AddCommand(
206 "bot", false, "set bots", "set bots <key> <value>", "Set a setting for all bots.", HandleSetBots);
207
208 m_console.Commands.AddCommand(
206 "bot", false, "show regions", "show regions", "Show regions known to bots", HandleShowRegions); 209 "bot", false, "show regions", "show regions", "Show regions known to bots", HandleShowRegions);
207 210
208 m_console.Commands.AddCommand( 211 m_console.Commands.AddCommand(
209 "bot", false, "show bots", "show bots", "Shows the status of all bots", HandleShowBotsStatus); 212 "bot", false, "show bots", "show bots", "Shows the status of all bots", HandleShowBotsStatus);
210 213
211 m_console.Commands.AddCommand( 214 m_console.Commands.AddCommand(
212 "bot", false, "show bot", "show bot <first-name> <last-name>", 215 "bot", false, "show bot", "show bot <n>",
213 "Shows the detailed status and settings of a particular bot.", HandleShowBotStatus); 216 "Shows the detailed status and settings of a particular bot.", HandleShowBotStatus);
214 217
215 m_bots = new List<Bot>(); 218 m_bots = new List<Bot>();
@@ -274,11 +277,11 @@ namespace pCampBot
274 connectBotThread.Start(); 277 connectBotThread.Start();
275 } 278 }
276 279
277 private void ConnectBotsInternal(int botcount) 280 private void ConnectBotsInternal(int botCount)
278 { 281 {
279 MainConsole.Instance.OutputFormat( 282 MainConsole.Instance.OutputFormat(
280 "[BOT MANAGER]: Starting {0} bots connecting to {1}, location {2}, named {3} {4}_<n>", 283 "[BOT MANAGER]: Starting {0} bots connecting to {1}, location {2}, named {3} {4}_<n>",
281 botcount, 284 botCount,
282 m_loginUri, 285 m_loginUri,
283 m_startUri, 286 m_startUri,
284 m_firstName, 287 m_firstName,
@@ -288,7 +291,9 @@ namespace pCampBot
288 MainConsole.Instance.OutputFormat("[BOT MANAGER]: BotsSendAgentUpdates is {0}", InitBotSendAgentUpdates); 291 MainConsole.Instance.OutputFormat("[BOT MANAGER]: BotsSendAgentUpdates is {0}", InitBotSendAgentUpdates);
289 MainConsole.Instance.OutputFormat("[BOT MANAGER]: InitBotRequestObjectTextures is {0}", InitBotRequestObjectTextures); 292 MainConsole.Instance.OutputFormat("[BOT MANAGER]: InitBotRequestObjectTextures is {0}", InitBotRequestObjectTextures);
290 293
291 for (int i = 0; i < botcount; i++) 294 int connectedBots = 0;
295
296 for (int i = 0; i < m_bots.Count; i++)
292 { 297 {
293 lock (m_bots) 298 lock (m_bots)
294 { 299 {
@@ -299,11 +304,18 @@ namespace pCampBot
299 break; 304 break;
300 } 305 }
301 306
302 m_bots[i].Connect(); 307 if (m_bots[i].ConnectionState == ConnectionState.Disconnected)
303 } 308 {
309 m_bots[i].Connect();
310 connectedBots++;
304 311
305 // Stagger logins 312 if (connectedBots >= botCount)
306 Thread.Sleep(LoginDelay); 313 break;
314
315 // Stagger logins
316 Thread.Sleep(LoginDelay);
317 }
318 }
307 } 319 }
308 320
309 ConnectingBots = false; 321 ConnectingBots = false;
@@ -518,6 +530,30 @@ namespace pCampBot
518 Environment.Exit(0); 530 Environment.Exit(0);
519 } 531 }
520 532
533 private void HandleSetBots(string module, string[] cmd)
534 {
535 string key = cmd[2];
536 string rawValue = cmd[3];
537
538 if (key == "SEND_AGENT_UPDATES")
539 {
540 bool newSendAgentUpdatesSetting;
541
542 if (!ConsoleUtil.TryParseConsoleBool(MainConsole.Instance, rawValue, out newSendAgentUpdatesSetting))
543 return;
544
545 MainConsole.Instance.OutputFormat(
546 "Setting SEND_AGENT_UPDATES to {0} for all bots", newSendAgentUpdatesSetting);
547
548 lock (m_bots)
549 m_bots.ForEach(b => b.Client.Settings.SEND_AGENT_UPDATES = newSendAgentUpdatesSetting);
550 }
551 else
552 {
553 MainConsole.Instance.Output("Error: Only setting currently available is SEND_AGENT_UPDATES");
554 }
555 }
556
521 private void HandleShowRegions(string module, string[] cmd) 557 private void HandleShowRegions(string module, string[] cmd)
522 { 558 {
523 string outputFormat = "{0,-30} {1, -20} {2, -5} {3, -5}"; 559 string outputFormat = "{0,-30} {1, -20} {2, -5} {3, -5}";
@@ -569,13 +605,18 @@ namespace pCampBot
569 605
570 private void HandleShowBotStatus(string module, string[] cmd) 606 private void HandleShowBotStatus(string module, string[] cmd)
571 { 607 {
572 if (cmd.Length != 4) 608 if (cmd.Length != 3)
573 { 609 {
574 MainConsole.Instance.Output("Usage: show bot <first-name> <last-name>"); 610 MainConsole.Instance.Output("Usage: show bot <n>");
575 return; 611 return;
576 } 612 }
577 613
578 string name = string.Format("{0} {1}", cmd[2], cmd[3]); 614 int botNumber;
615
616 if (!ConsoleUtil.TryParseConsoleInt(MainConsole.Instance, cmd[2], out botNumber))
617 return;
618
619 string name = string.Format("{0} {1}_{2}", m_firstName, m_lastNameStem, botNumber);
579 620
580 Bot bot; 621 Bot bot;
581 622
diff --git a/OpenSim/Tools/pCampBot/pCampBot.cs b/OpenSim/Tools/pCampBot/pCampBot.cs
index fc67398..aee5864 100644
--- a/OpenSim/Tools/pCampBot/pCampBot.cs
+++ b/OpenSim/Tools/pCampBot/pCampBot.cs
@@ -82,6 +82,13 @@ namespace pCampBot
82 82
83 IConfigSource configSource = new IniConfigSource(iniFilePath); 83 IConfigSource configSource = new IniConfigSource(iniFilePath);
84 84
85 IConfig botManagerConfig = configSource.Configs["BotManager"];
86
87 if (botManagerConfig != null)
88 {
89 bm.LoginDelay = botManagerConfig.GetInt("LoginDelay", bm.LoginDelay);
90 }
91
85 IConfig botConfig = configSource.Configs["Bot"]; 92 IConfig botConfig = configSource.Configs["Bot"];
86 93
87 if (botConfig != null) 94 if (botConfig != null)