Merge branch 'xMAC94x/bots' into 'master'

bots: add option to join the world via ingame cmd

See merge request veloren/veloren!1923
This commit is contained in:
Marcel 2021-03-16 22:25:08 +00:00
commit 3fd9d54baf
2 changed files with 50 additions and 1 deletions

View File

@ -103,6 +103,7 @@ impl BotClient {
count,
} => self.handle_register(&prefix, &password, count),
Cmd::Login { prefix } => self.handle_login(&prefix),
Cmd::InGame { prefix } => self.handle_ingame_join(&prefix),
}
}
@ -199,9 +200,47 @@ impl BotClient {
Some("common.items.weapons.sword.starter".to_string()),
body.into(),
);
client.load_character_list();
//client.create_character(cred.username.clone(),
// Some("common.items.debug.admin_stick".to_string()), body.into());
}
info!("login done");
}
pub fn handle_ingame_join(&mut self, prefix: &str) {
let creds: Vec<_> = self
.settings
.bot_logins
.iter()
.filter(|x| x.username.starts_with(prefix))
.cloned()
.collect();
for cred in creds.iter() {
let runtime = Arc::clone(&self.runtime);
let server = self.settings.server.clone();
let client = match self
.bot_clients
.get_mut(&cred.username) {
Some(c) => c,
None => {
tracing::trace!(?cred.username, "skip not logged in client");
continue
},
};
let list = client.character_list();
if list.loading || list.characters.is_empty() {
tracing::trace!(?cred.username, "skip client as it has no character");
continue;
}
let c = list.characters.get(0).unwrap();
if let Some(id) = c.character.id {
client.request_character(id);
}
}
info!("ingame done");
}
}

View File

@ -26,6 +26,9 @@ pub enum Cmd {
Login {
prefix: String,
},
InGame {
prefix: String,
}
}
pub struct Tui {
@ -76,7 +79,11 @@ impl Tui {
.about("Login all registered bots whose username starts with a prefix")
.args(&[Arg::with_name("prefix").required(true)]),
)
.subcommand(SubCommand::with_name("tick").about("Handle ticks for all logged in bots"))
.subcommand(
SubCommand::with_name("ingame")
.about("Join the world with some random character")
.args(&[Arg::with_name("prefix").required(true)]),
)
.get_matches_from_safe(cmd.split(" "));
use clap::ErrorKind::*;
match matches {
@ -92,6 +99,9 @@ impl Tui {
("login", Some(matches)) => command_s.try_send(Cmd::Login {
prefix: matches.value_of("prefix").unwrap().to_string(),
}),
("ingame", Some(matches)) => command_s.try_send(Cmd::InGame {
prefix: matches.value_of("prefix").unwrap().to_string(),
}),
_ => Ok(()),
}
.is_err()