diff options
-rw-r--r-- | OpenSim/Tools/pCampBot/BotManager.cs | 123 |
1 files changed, 78 insertions, 45 deletions
diff --git a/OpenSim/Tools/pCampBot/BotManager.cs b/OpenSim/Tools/pCampBot/BotManager.cs index 6433c2e..3c1b11e 100644 --- a/OpenSim/Tools/pCampBot/BotManager.cs +++ b/OpenSim/Tools/pCampBot/BotManager.cs | |||
@@ -195,15 +195,17 @@ namespace pCampBot | |||
195 | HandleDisconnect); | 195 | HandleDisconnect); |
196 | 196 | ||
197 | m_console.Commands.AddCommand( | 197 | m_console.Commands.AddCommand( |
198 | "bot", false, "add behaviour", "add behaviour <abbreviated-name> <bot-number>", | 198 | "bot", false, "add behaviour", "add behaviour <abbreviated-name> [<bot-number>]", |
199 | "Add a behaviour to a bot", | 199 | "Add a behaviour to a bot", |
200 | "Can be performed on connected or disconnected bots.", | 200 | "If no bot number is specified then behaviour is added to all bots.\n" |
201 | + "Can be performed on connected or disconnected bots.", | ||
201 | HandleAddBehaviour); | 202 | HandleAddBehaviour); |
202 | 203 | ||
203 | m_console.Commands.AddCommand( | 204 | m_console.Commands.AddCommand( |
204 | "bot", false, "remove behaviour", "remove behaviour <abbreviated-name> <bot-number>", | 205 | "bot", false, "remove behaviour", "remove behaviour <abbreviated-name> [<bot-number>]", |
205 | "Remove a behaviour from a bot", | 206 | "Remove a behaviour from a bot", |
206 | "Can be performed on connected or disconnected bots.", | 207 | "If no bot number is specified then behaviour is added to all bots.\n" |
208 | + "Can be performed on connected or disconnected bots.", | ||
207 | HandleRemoveBehaviour); | 209 | HandleRemoveBehaviour); |
208 | 210 | ||
209 | m_console.Commands.AddCommand( | 211 | m_console.Commands.AddCommand( |
@@ -224,7 +226,7 @@ namespace pCampBot | |||
224 | "bot", false, "show bots", "show bots", "Shows the status of all bots", HandleShowBotsStatus); | 226 | "bot", false, "show bots", "show bots", "Shows the status of all bots", HandleShowBotsStatus); |
225 | 227 | ||
226 | m_console.Commands.AddCommand( | 228 | m_console.Commands.AddCommand( |
227 | "bot", false, "show bot", "show bot <n>", | 229 | "bot", false, "show bot", "show bot <bot-number>", |
228 | "Shows the detailed status and settings of a particular bot.", HandleShowBotStatus); | 230 | "Shows the detailed status and settings of a particular bot.", HandleShowBotStatus); |
229 | 231 | ||
230 | m_bots = new List<Bot>(); | 232 | m_bots = new List<Bot>(); |
@@ -489,83 +491,114 @@ namespace pCampBot | |||
489 | 491 | ||
490 | private void HandleAddBehaviour(string module, string[] cmd) | 492 | private void HandleAddBehaviour(string module, string[] cmd) |
491 | { | 493 | { |
492 | if (cmd.Length != 4) | 494 | if (cmd.Length < 3 || cmd.Length > 4) |
493 | { | 495 | { |
494 | MainConsole.Instance.OutputFormat("Usage: add behaviour <abbreviated-behaviour> <bot-number>"); | 496 | MainConsole.Instance.OutputFormat("Usage: add behaviour <abbreviated-behaviour> [<bot-number>]"); |
495 | return; | 497 | return; |
496 | } | 498 | } |
497 | 499 | ||
498 | string rawBehaviours = cmd[2]; | 500 | string rawBehaviours = cmd[2]; |
499 | int botNumber; | ||
500 | |||
501 | if (!ConsoleUtil.TryParseConsoleNaturalInt(MainConsole.Instance, cmd[3], out botNumber)) | ||
502 | return; | ||
503 | 501 | ||
504 | Bot bot = GetBotFromNumber(botNumber); | 502 | List<Bot> botsToEffect = new List<Bot>(); |
505 | 503 | ||
506 | if (bot == null) | 504 | if (cmd.Length == 3) |
507 | { | 505 | { |
508 | MainConsole.Instance.OutputFormat("Error: No bot found with number {0}", botNumber); | 506 | lock (m_bots) |
509 | return; | 507 | botsToEffect.AddRange(m_bots); |
510 | } | 508 | } |
509 | else | ||
510 | { | ||
511 | int botNumber; | ||
512 | if (!ConsoleUtil.TryParseConsoleNaturalInt(MainConsole.Instance, cmd[3], out botNumber)) | ||
513 | return; | ||
514 | |||
515 | Bot bot = GetBotFromNumber(botNumber); | ||
516 | |||
517 | if (bot == null) | ||
518 | { | ||
519 | MainConsole.Instance.OutputFormat("Error: No bot found with number {0}", botNumber); | ||
520 | return; | ||
521 | } | ||
522 | |||
523 | botsToEffect.Add(bot); | ||
524 | } | ||
525 | |||
511 | 526 | ||
512 | HashSet<string> rawAbbreviatedSwitchesToAdd = new HashSet<string>(); | 527 | HashSet<string> rawAbbreviatedSwitchesToAdd = new HashSet<string>(); |
513 | Array.ForEach<string>(rawBehaviours.Split(new char[] { ',' }), b => rawAbbreviatedSwitchesToAdd.Add(b)); | 528 | Array.ForEach<string>(rawBehaviours.Split(new char[] { ',' }), b => rawAbbreviatedSwitchesToAdd.Add(b)); |
514 | 529 | ||
515 | List<IBehaviour> behavioursAdded = new List<IBehaviour>(); | 530 | foreach (Bot bot in botsToEffect) |
516 | |||
517 | foreach (IBehaviour behaviour in CreateBehavioursFromAbbreviatedNames(rawAbbreviatedSwitchesToAdd)) | ||
518 | { | 531 | { |
519 | if (bot.AddBehaviour(behaviour)) | 532 | List<IBehaviour> behavioursAdded = new List<IBehaviour>(); |
520 | behavioursAdded.Add(behaviour); | ||
521 | } | ||
522 | 533 | ||
523 | MainConsole.Instance.OutputFormat( | 534 | foreach (IBehaviour behaviour in CreateBehavioursFromAbbreviatedNames(rawAbbreviatedSwitchesToAdd)) |
524 | "Added behaviours {0} to bot {1}", | 535 | { |
525 | string.Join(", ", behavioursAdded.ConvertAll<string>(b => b.Name).ToArray()), bot.Name); | 536 | if (bot.AddBehaviour(behaviour)) |
537 | behavioursAdded.Add(behaviour); | ||
538 | } | ||
539 | |||
540 | MainConsole.Instance.OutputFormat( | ||
541 | "Added behaviours {0} to bot {1}", | ||
542 | string.Join(", ", behavioursAdded.ConvertAll<string>(b => b.Name).ToArray()), bot.Name); | ||
543 | } | ||
526 | } | 544 | } |
527 | 545 | ||
528 | private void HandleRemoveBehaviour(string module, string[] cmd) | 546 | private void HandleRemoveBehaviour(string module, string[] cmd) |
529 | { | 547 | { |
530 | if (cmd.Length != 4) | 548 | if (cmd.Length < 3 || cmd.Length > 4) |
531 | { | 549 | { |
532 | MainConsole.Instance.OutputFormat("Usage: remove behaviour <abbreviated-behaviour> <bot-number>"); | 550 | MainConsole.Instance.OutputFormat("Usage: remove behaviour <abbreviated-behaviour> [<bot-number>]"); |
533 | return; | 551 | return; |
534 | } | 552 | } |
535 | 553 | ||
536 | string rawBehaviours = cmd[2]; | 554 | string rawBehaviours = cmd[2]; |
537 | int botNumber; | ||
538 | |||
539 | if (!ConsoleUtil.TryParseConsoleNaturalInt(MainConsole.Instance, cmd[3], out botNumber)) | ||
540 | return; | ||
541 | 555 | ||
542 | Bot bot = GetBotFromNumber(botNumber); | 556 | List<Bot> botsToEffect = new List<Bot>(); |
543 | 557 | ||
544 | if (bot == null) | 558 | if (cmd.Length == 3) |
545 | { | 559 | { |
546 | MainConsole.Instance.OutputFormat("Error: No bot found with number {0}", botNumber); | 560 | lock (m_bots) |
547 | return; | 561 | botsToEffect.AddRange(m_bots); |
548 | } | 562 | } |
563 | else | ||
564 | { | ||
565 | int botNumber; | ||
566 | if (!ConsoleUtil.TryParseConsoleNaturalInt(MainConsole.Instance, cmd[3], out botNumber)) | ||
567 | return; | ||
549 | 568 | ||
550 | HashSet<string> abbreviatedBehavioursToRemove = new HashSet<string>(); | 569 | Bot bot = GetBotFromNumber(botNumber); |
551 | List<IBehaviour> behavioursRemoved = new List<IBehaviour>(); | 570 | |
571 | if (bot == null) | ||
572 | { | ||
573 | MainConsole.Instance.OutputFormat("Error: No bot found with number {0}", botNumber); | ||
574 | return; | ||
575 | } | ||
552 | 576 | ||
577 | botsToEffect.Add(bot); | ||
578 | } | ||
579 | |||
580 | HashSet<string> abbreviatedBehavioursToRemove = new HashSet<string>(); | ||
553 | Array.ForEach<string>(rawBehaviours.Split(new char[] { ',' }), b => abbreviatedBehavioursToRemove.Add(b)); | 581 | Array.ForEach<string>(rawBehaviours.Split(new char[] { ',' }), b => abbreviatedBehavioursToRemove.Add(b)); |
554 | 582 | ||
555 | foreach (string b in abbreviatedBehavioursToRemove) | 583 | foreach (Bot bot in botsToEffect) |
556 | { | 584 | { |
557 | IBehaviour behaviour; | 585 | List<IBehaviour> behavioursRemoved = new List<IBehaviour>(); |
558 | 586 | ||
559 | if (bot.TryGetBehaviour(b, out behaviour)) | 587 | foreach (string b in abbreviatedBehavioursToRemove) |
560 | { | 588 | { |
561 | bot.RemoveBehaviour(b); | 589 | IBehaviour behaviour; |
562 | behavioursRemoved.Add(behaviour); | 590 | |
591 | if (bot.TryGetBehaviour(b, out behaviour)) | ||
592 | { | ||
593 | bot.RemoveBehaviour(b); | ||
594 | behavioursRemoved.Add(behaviour); | ||
595 | } | ||
563 | } | 596 | } |
564 | } | ||
565 | 597 | ||
566 | MainConsole.Instance.OutputFormat( | 598 | MainConsole.Instance.OutputFormat( |
567 | "Removed behaviours {0} to bot {1}", | 599 | "Removed behaviours {0} to bot {1}", |
568 | string.Join(", ", behavioursRemoved.ConvertAll<string>(b => b.Name).ToArray()), bot.Name); | 600 | string.Join(", ", behavioursRemoved.ConvertAll<string>(b => b.Name).ToArray()), bot.Name); |
601 | } | ||
569 | } | 602 | } |
570 | 603 | ||
571 | private void HandleDisconnect(string module, string[] cmd) | 604 | private void HandleDisconnect(string module, string[] cmd) |