Make pCampbot "add behaviour" and "remove behaviour" console commands work for all bots if no bot number is given

0.7.6-extended
Justin Clark-Casey (justincc) 2013-09-03 19:57:34 +01:00
parent cfdb2700bc
commit 514c58bc96
1 changed files with 79 additions and 46 deletions

View File

@ -195,15 +195,17 @@ namespace pCampBot
HandleDisconnect); HandleDisconnect);
m_console.Commands.AddCommand( m_console.Commands.AddCommand(
"bot", false, "add behaviour", "add behaviour <abbreviated-name> <bot-number>", "bot", false, "add behaviour", "add behaviour <abbreviated-name> [<bot-number>]",
"Add a behaviour to a bot", "Add a behaviour to a bot",
"Can be performed on connected or disconnected bots.", "If no bot number is specified then behaviour is added to all bots.\n"
+ "Can be performed on connected or disconnected bots.",
HandleAddBehaviour); HandleAddBehaviour);
m_console.Commands.AddCommand( m_console.Commands.AddCommand(
"bot", false, "remove behaviour", "remove behaviour <abbreviated-name> <bot-number>", "bot", false, "remove behaviour", "remove behaviour <abbreviated-name> [<bot-number>]",
"Remove a behaviour from a bot", "Remove a behaviour from a bot",
"Can be performed on connected or disconnected bots.", "If no bot number is specified then behaviour is added to all bots.\n"
+ "Can be performed on connected or disconnected bots.",
HandleRemoveBehaviour); HandleRemoveBehaviour);
m_console.Commands.AddCommand( m_console.Commands.AddCommand(
@ -224,7 +226,7 @@ namespace pCampBot
"bot", false, "show bots", "show bots", "Shows the status of all bots", HandleShowBotsStatus); "bot", false, "show bots", "show bots", "Shows the status of all bots", HandleShowBotsStatus);
m_console.Commands.AddCommand( m_console.Commands.AddCommand(
"bot", false, "show bot", "show bot <n>", "bot", false, "show bot", "show bot <bot-number>",
"Shows the detailed status and settings of a particular bot.", HandleShowBotStatus); "Shows the detailed status and settings of a particular bot.", HandleShowBotStatus);
m_bots = new List<Bot>(); m_bots = new List<Bot>();
@ -489,83 +491,114 @@ namespace pCampBot
private void HandleAddBehaviour(string module, string[] cmd) private void HandleAddBehaviour(string module, string[] cmd)
{ {
if (cmd.Length != 4) if (cmd.Length < 3 || cmd.Length > 4)
{ {
MainConsole.Instance.OutputFormat("Usage: add behaviour <abbreviated-behaviour> <bot-number>"); MainConsole.Instance.OutputFormat("Usage: add behaviour <abbreviated-behaviour> [<bot-number>]");
return; return;
} }
string rawBehaviours = cmd[2]; string rawBehaviours = cmd[2];
int botNumber;
if (!ConsoleUtil.TryParseConsoleNaturalInt(MainConsole.Instance, cmd[3], out botNumber)) List<Bot> botsToEffect = new List<Bot>();
return;
Bot bot = GetBotFromNumber(botNumber); if (cmd.Length == 3)
if (bot == null)
{ {
MainConsole.Instance.OutputFormat("Error: No bot found with number {0}", botNumber); lock (m_bots)
return; botsToEffect.AddRange(m_bots);
} }
else
{
int botNumber;
if (!ConsoleUtil.TryParseConsoleNaturalInt(MainConsole.Instance, cmd[3], out botNumber))
return;
Bot bot = GetBotFromNumber(botNumber);
if (bot == null)
{
MainConsole.Instance.OutputFormat("Error: No bot found with number {0}", botNumber);
return;
}
botsToEffect.Add(bot);
}
HashSet<string> rawAbbreviatedSwitchesToAdd = new HashSet<string>(); HashSet<string> rawAbbreviatedSwitchesToAdd = new HashSet<string>();
Array.ForEach<string>(rawBehaviours.Split(new char[] { ',' }), b => rawAbbreviatedSwitchesToAdd.Add(b)); Array.ForEach<string>(rawBehaviours.Split(new char[] { ',' }), b => rawAbbreviatedSwitchesToAdd.Add(b));
List<IBehaviour> behavioursAdded = new List<IBehaviour>(); foreach (Bot bot in botsToEffect)
foreach (IBehaviour behaviour in CreateBehavioursFromAbbreviatedNames(rawAbbreviatedSwitchesToAdd))
{ {
if (bot.AddBehaviour(behaviour)) List<IBehaviour> behavioursAdded = new List<IBehaviour>();
behavioursAdded.Add(behaviour);
}
MainConsole.Instance.OutputFormat( foreach (IBehaviour behaviour in CreateBehavioursFromAbbreviatedNames(rawAbbreviatedSwitchesToAdd))
"Added behaviours {0} to bot {1}", {
string.Join(", ", behavioursAdded.ConvertAll<string>(b => b.Name).ToArray()), bot.Name); if (bot.AddBehaviour(behaviour))
behavioursAdded.Add(behaviour);
}
MainConsole.Instance.OutputFormat(
"Added behaviours {0} to bot {1}",
string.Join(", ", behavioursAdded.ConvertAll<string>(b => b.Name).ToArray()), bot.Name);
}
} }
private void HandleRemoveBehaviour(string module, string[] cmd) private void HandleRemoveBehaviour(string module, string[] cmd)
{ {
if (cmd.Length != 4) if (cmd.Length < 3 || cmd.Length > 4)
{ {
MainConsole.Instance.OutputFormat("Usage: remove behaviour <abbreviated-behaviour> <bot-number>"); MainConsole.Instance.OutputFormat("Usage: remove behaviour <abbreviated-behaviour> [<bot-number>]");
return; return;
} }
string rawBehaviours = cmd[2]; string rawBehaviours = cmd[2];
int botNumber;
if (!ConsoleUtil.TryParseConsoleNaturalInt(MainConsole.Instance, cmd[3], out botNumber)) List<Bot> botsToEffect = new List<Bot>();
return;
Bot bot = GetBotFromNumber(botNumber); if (cmd.Length == 3)
if (bot == null)
{ {
MainConsole.Instance.OutputFormat("Error: No bot found with number {0}", botNumber); lock (m_bots)
return; botsToEffect.AddRange(m_bots);
}
else
{
int botNumber;
if (!ConsoleUtil.TryParseConsoleNaturalInt(MainConsole.Instance, cmd[3], out botNumber))
return;
Bot bot = GetBotFromNumber(botNumber);
if (bot == null)
{
MainConsole.Instance.OutputFormat("Error: No bot found with number {0}", botNumber);
return;
}
botsToEffect.Add(bot);
} }
HashSet<string> abbreviatedBehavioursToRemove = new HashSet<string>(); HashSet<string> abbreviatedBehavioursToRemove = new HashSet<string>();
List<IBehaviour> behavioursRemoved = new List<IBehaviour>();
Array.ForEach<string>(rawBehaviours.Split(new char[] { ',' }), b => abbreviatedBehavioursToRemove.Add(b)); Array.ForEach<string>(rawBehaviours.Split(new char[] { ',' }), b => abbreviatedBehavioursToRemove.Add(b));
foreach (string b in abbreviatedBehavioursToRemove) foreach (Bot bot in botsToEffect)
{ {
IBehaviour behaviour; List<IBehaviour> behavioursRemoved = new List<IBehaviour>();
if (bot.TryGetBehaviour(b, out behaviour)) foreach (string b in abbreviatedBehavioursToRemove)
{ {
bot.RemoveBehaviour(b); IBehaviour behaviour;
behavioursRemoved.Add(behaviour);
}
}
MainConsole.Instance.OutputFormat( if (bot.TryGetBehaviour(b, out behaviour))
"Removed behaviours {0} to bot {1}", {
string.Join(", ", behavioursRemoved.ConvertAll<string>(b => b.Name).ToArray()), bot.Name); bot.RemoveBehaviour(b);
behavioursRemoved.Add(behaviour);
}
}
MainConsole.Instance.OutputFormat(
"Removed behaviours {0} to bot {1}",
string.Join(", ", behavioursRemoved.ConvertAll<string>(b => b.Name).ToArray()), bot.Name);
}
} }
private void HandleDisconnect(string module, string[] cmd) private void HandleDisconnect(string module, string[] cmd)