diff options
author | Diva Canto | 2013-08-24 03:42:39 -0700 |
---|---|---|
committer | Diva Canto | 2013-08-24 03:42:39 -0700 |
commit | 5cd7bc2848a35c16321dea4cf174ed5497b5f62f (patch) | |
tree | 9e33467ac1e7135149a45e5f7cba61ba163d28e2 | |
parent | Make HG logins fall back to fallback regions if the desired region fails. (diff) | |
parent | Fix a printing of exception error in InventoryArchiveModule that only (diff) | |
download | opensim-SC_OLD-5cd7bc2848a35c16321dea4cf174ed5497b5f62f.zip opensim-SC_OLD-5cd7bc2848a35c16321dea4cf174ed5497b5f62f.tar.gz opensim-SC_OLD-5cd7bc2848a35c16321dea4cf174ed5497b5f62f.tar.bz2 opensim-SC_OLD-5cd7bc2848a35c16321dea4cf174ed5497b5f62f.tar.xz |
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
-rw-r--r-- | OpenSim/Framework/Monitoring/StatsLogger.cs | 2 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 4 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs | 2 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | 8 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 21 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneGraph.cs | 34 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 5 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Avatar/SitStand/SitStandCommandsModule.cs | 13 | ||||
-rw-r--r-- | OpenSim/Services/GridService/GridService.cs | 53 | ||||
-rw-r--r-- | OpenSim/Tools/pCampBot/BotManager.cs | 63 | ||||
-rw-r--r-- | OpenSim/Tools/pCampBot/pCampBot.cs | 7 | ||||
-rw-r--r-- | bin/pCampbot.ini.example | 4 |
12 files changed, 132 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) |
diff --git a/bin/pCampbot.ini.example b/bin/pCampbot.ini.example index f44feae..2952bb0 100644 --- a/bin/pCampbot.ini.example +++ b/bin/pCampbot.ini.example | |||
@@ -1,6 +1,10 @@ | |||
1 | ; This is the example config file for pCampbot | 1 | ; This is the example config file for pCampbot |
2 | ; To use it, copy this file to pCampbot.ini and change settings if required | 2 | ; To use it, copy this file to pCampbot.ini and change settings if required |
3 | 3 | ||
4 | [BotManager] | ||
5 | ; Number of milliseconds to wait between bot logins | ||
6 | LoginDelay = 5000 | ||
7 | |||
4 | [Bot] | 8 | [Bot] |
5 | ; Control whether bots should regularly send agent updates | 9 | ; Control whether bots should regularly send agent updates |
6 | ; Not doing this will reduce CPU requirements for pCampbot but greatly | 10 | ; Not doing this will reduce CPU requirements for pCampbot but greatly |