diff --git a/OpenSim/Tools/pCampBot/Bot.cs b/OpenSim/Tools/pCampBot/Bot.cs
index c56d29b975..79344e89de 100644
--- a/OpenSim/Tools/pCampBot/Bot.cs
+++ b/OpenSim/Tools/pCampBot/Bot.cs
@@ -97,6 +97,8 @@ namespace pCampBot
public string Name { get; private set; }
public string Password { get; private set; }
public string LoginUri { get; private set; }
+ public string StartLocation { get; private set; }
+
public string saveDir;
public string wear;
@@ -132,7 +134,7 @@ namespace pCampBot
///
public Bot(
BotManager bm, List behaviours,
- string firstName, string lastName, string password, string loginUri)
+ string firstName, string lastName, string password, string startLocation, string loginUri)
{
ConnectionState = ConnectionState.Disconnected;
@@ -146,6 +148,7 @@ namespace pCampBot
Name = string.Format("{0} {1}", FirstName, LastName);
Password = password;
LoginUri = loginUri;
+ StartLocation = startLocation;
Manager = bm;
Behaviours = behaviours;
@@ -209,7 +212,7 @@ namespace pCampBot
ConnectionState = ConnectionState.Connecting;
- if (Client.Network.Login(FirstName, LastName, Password, "pCampBot", "Your name"))
+ if (Client.Network.Login(FirstName, LastName, Password, "pCampBot", StartLocation, "Your name"))
{
ConnectionState = ConnectionState.Connected;
diff --git a/OpenSim/Tools/pCampBot/BotManager.cs b/OpenSim/Tools/pCampBot/BotManager.cs
index 16b02b9c1b..57bd737527 100644
--- a/OpenSim/Tools/pCampBot/BotManager.cs
+++ b/OpenSim/Tools/pCampBot/BotManager.cs
@@ -65,7 +65,7 @@ namespace pCampBot
///
/// Controls whether bots start out sending agent updates on connection.
///
- public bool BotsInitSendAgentUpdates { get; set; }
+ public bool InitBotSendAgentUpdates { get; set; }
///
/// Created bots, whether active or inactive.
@@ -92,7 +92,7 @@ namespace pCampBot
///
public BotManager()
{
- BotsInitSendAgentUpdates = true;
+ InitBotSendAgentUpdates = true;
LoginDelay = DefaultLoginDelay;
@@ -156,21 +156,25 @@ namespace pCampBot
string lastNameStem = startupConfig.GetString("lastname");
string password = startupConfig.GetString("password");
string loginUri = startupConfig.GetString("loginuri");
+ string startLocation = startupConfig.GetString("start", "last");
string wearSetting = startupConfig.GetString("wear", "no");
+ string startUri = ParseInputStartLocationToUri(startLocation);
+
HashSet behaviourSwitches = new HashSet();
Array.ForEach(
startupConfig.GetString("behaviours", "p").Split(new char[] { ',' }), b => behaviourSwitches.Add(b));
MainConsole.Instance.OutputFormat(
- "[BOT MANAGER]: Starting {0} bots connecting to {1}, named {2} {3}_",
+ "[BOT MANAGER]: Starting {0} bots connecting to {1}, location {2}, named {3} {4}_",
botcount,
loginUri,
+ startUri,
firstName,
lastNameStem);
MainConsole.Instance.OutputFormat("[BOT MANAGER]: Delay between logins is {0}ms", LoginDelay);
- MainConsole.Instance.OutputFormat("[BOT MANAGER]: BotsSendAgentUpdates is {0}", BotsInitSendAgentUpdates);
+ MainConsole.Instance.OutputFormat("[BOT MANAGER]: BotsSendAgentUpdates is {0}", InitBotSendAgentUpdates);
for (int i = 0; i < botcount; i++)
{
@@ -195,10 +199,49 @@ namespace pCampBot
if (behaviourSwitches.Contains("t"))
behaviours.Add(new TeleportBehaviour());
- StartBot(this, behaviours, firstName, lastName, password, loginUri, wearSetting);
+ StartBot(this, behaviours, firstName, lastName, password, loginUri, startUri, wearSetting);
}
}
+ ///
+ /// Parses the command line start location to a start string/uri that the login mechanism will recognize.
+ ///
+ ///
+ /// The input start location to URI.
+ ///
+ ///
+ /// Start location.
+ ///
+ private string ParseInputStartLocationToUri(string startLocation)
+ {
+ if (startLocation == "home" || startLocation == "last")
+ return startLocation;
+
+ string regionName;
+
+ // Just a region name or only one (!) extra component. Like a viewer, we will stick 128/128/0 on the end
+ Vector3 startPos = new Vector3(128, 128, 0);
+
+ string[] startLocationComponents = startLocation.Split('/');
+
+ regionName = startLocationComponents[0];
+
+ if (startLocationComponents.Length >= 2)
+ {
+ float.TryParse(startLocationComponents[1], out startPos.X);
+
+ if (startLocationComponents.Length >= 3)
+ {
+ float.TryParse(startLocationComponents[2], out startPos.Y);
+
+ if (startLocationComponents.Length >= 4)
+ float.TryParse(startLocationComponents[3], out startPos.Z);
+ }
+ }
+
+ return string.Format("uri:{0}&{1}&{2}&{3}", regionName, startPos.X, startPos.Y, startPos.Z);
+ }
+
// ///
// /// Add additional bots (and threads) to our bot pool
// ///
@@ -228,18 +271,19 @@ namespace pCampBot
/// Last name
/// Password
/// Login URI
+ /// Location to start the bot. Can be "last", "home" or a specific sim name.
///
public void StartBot(
BotManager bm, List behaviours,
- string firstName, string lastName, string password, string loginUri, string wearSetting)
+ string firstName, string lastName, string password, string loginUri, string startLocation, string wearSetting)
{
MainConsole.Instance.OutputFormat(
"[BOT MANAGER]: Starting bot {0} {1}, behaviours are {2}",
firstName, lastName, string.Join(",", behaviours.ConvertAll(b => b.Name).ToArray()));
- Bot pb = new Bot(bm, behaviours, firstName, lastName, password, loginUri);
+ Bot pb = new Bot(bm, behaviours, firstName, lastName, password, startLocation, loginUri);
pb.wear = wearSetting;
- pb.Client.Settings.SEND_AGENT_UPDATES = BotsInitSendAgentUpdates;
+ pb.Client.Settings.SEND_AGENT_UPDATES = InitBotSendAgentUpdates;
pb.OnConnected += handlebotEvent;
pb.OnDisconnected += handlebotEvent;
diff --git a/OpenSim/Tools/pCampBot/pCampBot.cs b/OpenSim/Tools/pCampBot/pCampBot.cs
index e43037d9cb..9c9ed3b232 100644
--- a/OpenSim/Tools/pCampBot/pCampBot.cs
+++ b/OpenSim/Tools/pCampBot/pCampBot.cs
@@ -86,8 +86,8 @@ namespace pCampBot
if (botConfig != null)
{
- bm.BotsInitSendAgentUpdates
- = botConfig.GetBoolean("SendAgentUpdates", bm.BotsInitSendAgentUpdates);
+ bm.InitBotSendAgentUpdates
+ = botConfig.GetBoolean("SendAgentUpdates", bm.InitBotSendAgentUpdates);
}
}
@@ -119,6 +119,7 @@ namespace pCampBot
cs.AddSwitch("Startup", "botcount", "n");
cs.AddSwitch("Startup", "loginuri", "l");
+ cs.AddSwitch("Startup", "start", "s");
cs.AddSwitch("Startup", "firstname");
cs.AddSwitch("Startup", "lastname");
cs.AddSwitch("Startup", "password");
@@ -137,22 +138,23 @@ namespace pCampBot
// name, to load an specific folder, or save, to save an avatar with some already existing wearables
// worn to the folder MyAppearance/FirstName_LastName, and the load it.
Console.WriteLine(
- "usage: pCampBot <-loginuri loginuri> [OPTIONS]\n" +
- "Spawns a set of bots to test an OpenSim region\n\n" +
- " -l, -loginuri loginuri for sim to log into (required)\n" +
- " -n, -botcount number of bots to start (default: 1)\n" +
- " -firstname first name for the bots\n" +
- " -lastname lastname for the bots. Each lastname will have _ appended, e.g. Ima Bot_0\n" +
- " -password password for the bots\n" +
- " -b, behaviours behaviours for bots. Comma separated, e.g. p,g. Default is p\n" +
- " current options are:\n" +
- " p (physics - bots constantly move and jump around)\n" +
- " g (grab - bots randomly click prims whether set clickable or not)\n" +
- " n (none - bots do nothing)\n" +
- " t (teleport - bots regularly teleport between regions on the grid)\n" +
+ "usage: pCampBot <-loginuri loginuri> [OPTIONS]\n"
+ + "Spawns a set of bots to test an OpenSim region\n\n"
+ + " -l, -loginuri loginuri for grid/standalone (required)\n"
+ + " -s, -start start location for bots. Can be \"last\", \"home\" or a specific location with or without co-ords (e.g. \"region1\" or \"region2/50/30/90\"\n"
+ + " -n, -botcount number of bots to start (default: 1)\n"
+ + " -firstname first name for the bots\n"
+ + " -lastname lastname for the bots. Each lastname will have _ appended, e.g. Ima Bot_0\n"
+ + " -password password for the bots\n"
+ + " -b, behaviours behaviours for bots. Comma separated, e.g. p,g. Default is p\n"
+ + " current options are:\n"
+ + " p (physics - bots constantly move and jump around)\n"
+ + " g (grab - bots randomly click prims whether set clickable or not)\n"
+ + " n (none - bots do nothing)\n"
+ + " t (teleport - bots regularly teleport between regions on the grid)\n"
// " c (cross)" +
- " -wear set appearance folder to load from (default: no)\n" +
- " -h, -help show this message");
+ + " -wear set appearance folder to load from (default: no)\n"
+ + " -h, -help show this message.\n");
}
}
}