mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'xMAC94x/ci_bin_features' into 'master'
Add bot tests to CI See merge request veloren/veloren!2326
This commit is contained in:
commit
39ea9d3aa3
@ -6,7 +6,7 @@ code-quality:
|
||||
script:
|
||||
- ln -s /dockercache/target target
|
||||
- rm -r target/debug/incremental/* || echo "all good" # TMP FIX FOR 2021-03-22-nightly
|
||||
- cargo clippy --all-targets --locked -- -D warnings
|
||||
- cargo clippy --all-targets --locked --features="bin_csv,bin_bot" -- -D warnings
|
||||
- cargo fmt --all -- --check
|
||||
|
||||
security:
|
||||
|
@ -45,15 +45,14 @@ fn main() {
|
||||
|
||||
let runtime = Arc::new(Runtime::new().unwrap());
|
||||
let runtime2 = Arc::clone(&runtime);
|
||||
let addr = ConnectionArgs::Tcp {
|
||||
prefer_ipv6: false,
|
||||
hostname: server_addr,
|
||||
};
|
||||
|
||||
// Create a client.
|
||||
let mut client = runtime
|
||||
.block_on(async {
|
||||
let addr = ConnectionArgs::resolve(&server_addr, false)
|
||||
.await
|
||||
.expect("dns resolve failed");
|
||||
Client::new(addr, None, runtime2, &mut None).await
|
||||
})
|
||||
.block_on(Client::new(addr, runtime2, &mut None))
|
||||
.expect("Failed to create client instance");
|
||||
|
||||
println!("Server info: {:?}", client.server_info());
|
||||
|
@ -1,5 +1,3 @@
|
||||
#![feature(str_split_once)]
|
||||
|
||||
#[macro_use] extern crate serde;
|
||||
|
||||
use authc::AuthClient;
|
||||
@ -54,15 +52,13 @@ pub struct BotClient {
|
||||
|
||||
pub fn make_client(runtime: &Arc<Runtime>, server: &str) -> Client {
|
||||
let runtime2 = Arc::clone(&runtime);
|
||||
let view_distance: Option<u32> = None;
|
||||
runtime.block_on(async {
|
||||
let connection_args = ConnectionArgs::resolve(server, false)
|
||||
.await
|
||||
.expect("DNS resolution failed");
|
||||
Client::new(connection_args, view_distance, runtime2, &mut None)
|
||||
.await
|
||||
.expect("Failed to connect to server")
|
||||
})
|
||||
let addr = ConnectionArgs::Tcp {
|
||||
prefer_ipv6: false,
|
||||
hostname: server.to_owned(),
|
||||
};
|
||||
runtime
|
||||
.block_on(Client::new(addr, runtime2, &mut None))
|
||||
.expect("Failed to connect to server")
|
||||
}
|
||||
|
||||
impl BotClient {
|
||||
@ -84,7 +80,7 @@ impl BotClient {
|
||||
for (username, client) in self.bot_clients.iter_mut() {
|
||||
//trace!("cl {:?}: {:?}", username, client.character_list());
|
||||
trace!(?username, "tick");
|
||||
let msgs: Result<Vec<veloren_client::Event>, veloren_client::Error> =
|
||||
let _msgs: Result<Vec<veloren_client::Event>, veloren_client::Error> =
|
||||
client.tick(comp::ControllerInputs::default(), self.clock.dt(), |_| {});
|
||||
/*trace!(
|
||||
"msgs {:?}: {:?} {:?}",
|
||||
@ -131,7 +127,7 @@ impl BotClient {
|
||||
.settings
|
||||
.bot_logins
|
||||
.iter()
|
||||
.any(|x| &*x.username == &*username)
|
||||
.any(|x| *x.username == *username)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@ -216,9 +212,6 @@ impl BotClient {
|
||||
.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 => {
|
||||
|
@ -27,16 +27,11 @@ impl Tui {
|
||||
let handle = thread::spawn(move || {
|
||||
thread::sleep(Duration::from_millis(20));
|
||||
let mut readline = rustyline::Editor::<()>::new();
|
||||
loop {
|
||||
match readline.readline("\n\nbotclient> ") {
|
||||
Ok(cmd) => {
|
||||
let keep_going = Self::process_command(&cmd, &mut commands_s);
|
||||
readline.add_history_entry(cmd);
|
||||
if !keep_going {
|
||||
break;
|
||||
}
|
||||
},
|
||||
Err(_) => break,
|
||||
while let Ok(cmd) = readline.readline("\n\nbotclient> ") {
|
||||
let keep_going = Self::process_command(&cmd, &mut commands_s);
|
||||
readline.add_history_entry(cmd);
|
||||
if !keep_going {
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -69,7 +64,7 @@ impl Tui {
|
||||
.about("Join the world with some random character")
|
||||
.args(&[Arg::with_name("prefix").required(true)]),
|
||||
)
|
||||
.get_matches_from_safe(cmd.split(" "));
|
||||
.get_matches_from_safe(cmd.split(' '));
|
||||
use clap::ErrorKind::*;
|
||||
match matches {
|
||||
Ok(matches) => {
|
||||
|
@ -121,7 +121,6 @@ fn weapon_stats() -> Result<(), Box<dyn Error>> {
|
||||
let poise_strength = tool.base_poise_strength(&msm, &[]).to_string();
|
||||
let speed = tool.base_speed(&msm, &[]).to_string();
|
||||
let crit_chance = tool.base_crit_chance(&msm, &[]).to_string();
|
||||
let crit_mult = tool.base_crit_mult(&msm, &[]).to_string();
|
||||
let equip_time = tool.equip_time(&msm, &[]).as_secs_f32().to_string();
|
||||
let kind = get_tool_kind(&tool.kind);
|
||||
let hands = get_tool_hands(&tool);
|
||||
@ -136,7 +135,6 @@ fn weapon_stats() -> Result<(), Box<dyn Error>> {
|
||||
&poise_strength,
|
||||
&speed,
|
||||
&crit_chance,
|
||||
&crit_mult,
|
||||
&equip_time,
|
||||
item.description(),
|
||||
])?;
|
||||
|
@ -1,4 +1,5 @@
|
||||
#![deny(clippy::clone_on_ref_ptr)]
|
||||
#![allow(clippy::expect_fun_call)]
|
||||
|
||||
use hashbrown::HashMap;
|
||||
use ron::ser::{to_string_pretty, PrettyConfig};
|
||||
@ -68,11 +69,8 @@ fn armor_stats() -> Result<(), Box<dyn Error>> {
|
||||
{
|
||||
match item.kind() {
|
||||
comp::item::ItemKind::Armor(armor) => {
|
||||
match armor.kind {
|
||||
ArmorKind::Bag(_) => {
|
||||
continue;
|
||||
},
|
||||
_ => {},
|
||||
if let ArmorKind::Bag(_) = armor.kind {
|
||||
continue;
|
||||
}
|
||||
|
||||
if let Ok(ref record) = record {
|
||||
@ -217,7 +215,7 @@ fn armor_stats() -> Result<(), Box<dyn Error>> {
|
||||
.with_enumerate_arrays(true);
|
||||
|
||||
let mut path = ASSETS_PATH.clone();
|
||||
for part in item.item_definition_id().split(".") {
|
||||
for part in item.item_definition_id().split('.') {
|
||||
path.push(part);
|
||||
}
|
||||
path.set_extension("ron");
|
||||
@ -329,15 +327,6 @@ fn weapon_stats() -> Result<(), Box<dyn Error>> {
|
||||
.parse()
|
||||
.expect(&format!("Not a f32? {:?}", item.item_definition_id()));
|
||||
|
||||
let crit_mult: f32 = record
|
||||
.get(headers["Crit Mult"])
|
||||
.expect(&format!(
|
||||
"Error unwrapping crit_mult for {:?}",
|
||||
item.item_definition_id()
|
||||
))
|
||||
.parse()
|
||||
.expect(&format!("Not a f32? {:?}", item.item_definition_id()));
|
||||
|
||||
let tool = comp::item::tool::Tool::new(
|
||||
kind,
|
||||
hands,
|
||||
@ -346,7 +335,6 @@ fn weapon_stats() -> Result<(), Box<dyn Error>> {
|
||||
poise_strength,
|
||||
speed,
|
||||
crit_chance,
|
||||
crit_mult,
|
||||
);
|
||||
|
||||
let quality = if let Some(quality_raw) = record.get(headers["Quality"])
|
||||
@ -396,7 +384,7 @@ fn weapon_stats() -> Result<(), Box<dyn Error>> {
|
||||
.with_enumerate_arrays(true);
|
||||
|
||||
let mut path = ASSETS_PATH.clone();
|
||||
for part in item.item_definition_id().split(".") {
|
||||
for part in item.item_definition_id().split('.') {
|
||||
path.push(part);
|
||||
}
|
||||
path.set_extension("ron");
|
||||
@ -432,41 +420,39 @@ fn loot_table(loot_table: &str) -> Result<(), Box<dyn Error>> {
|
||||
|
||||
let mut items = Vec::<(f32, LootSpec)>::new();
|
||||
|
||||
for record in rdr.records() {
|
||||
if let Ok(ref record) = record {
|
||||
let item = match record.get(headers["Kind"]).expect("No loot specifier") {
|
||||
"Item" => {
|
||||
if let (Some(Ok(lower)), Some(Ok(upper))) = (
|
||||
record.get(headers["Lower Amount"]).map(|a| a.parse()),
|
||||
record.get(headers["Upper Amount"]).map(|a| a.parse()),
|
||||
) {
|
||||
LootSpec::ItemQuantity(
|
||||
record.get(headers["Item"]).expect("No item").to_string(),
|
||||
lower,
|
||||
upper,
|
||||
)
|
||||
} else {
|
||||
LootSpec::Item(record.get(headers["Item"]).expect("No item").to_string())
|
||||
}
|
||||
},
|
||||
"LootTable" => LootSpec::LootTable(
|
||||
record
|
||||
.get(headers["Item"])
|
||||
.expect("No loot table")
|
||||
.to_string(),
|
||||
),
|
||||
a => panic!(
|
||||
"Loot specifier kind must be either \"Item\" or \"LootTable\"\n{}",
|
||||
a
|
||||
),
|
||||
};
|
||||
let chance: f32 = record
|
||||
.get(headers["Relative Chance"])
|
||||
.expect("No chance for item in entry")
|
||||
.parse()
|
||||
.expect("Not an f32 for chance in entry");
|
||||
items.push((chance, item));
|
||||
}
|
||||
for ref record in rdr.records().flatten() {
|
||||
let item = match record.get(headers["Kind"]).expect("No loot specifier") {
|
||||
"Item" => {
|
||||
if let (Some(Ok(lower)), Some(Ok(upper))) = (
|
||||
record.get(headers["Lower Amount"]).map(|a| a.parse()),
|
||||
record.get(headers["Upper Amount"]).map(|a| a.parse()),
|
||||
) {
|
||||
LootSpec::ItemQuantity(
|
||||
record.get(headers["Item"]).expect("No item").to_string(),
|
||||
lower,
|
||||
upper,
|
||||
)
|
||||
} else {
|
||||
LootSpec::Item(record.get(headers["Item"]).expect("No item").to_string())
|
||||
}
|
||||
},
|
||||
"LootTable" => LootSpec::LootTable(
|
||||
record
|
||||
.get(headers["Item"])
|
||||
.expect("No loot table")
|
||||
.to_string(),
|
||||
),
|
||||
a => panic!(
|
||||
"Loot specifier kind must be either \"Item\" or \"LootTable\"\n{}",
|
||||
a
|
||||
),
|
||||
};
|
||||
let chance: f32 = record
|
||||
.get(headers["Relative Chance"])
|
||||
.expect("No chance for item in entry")
|
||||
.parse()
|
||||
.expect("Not an f32 for chance in entry");
|
||||
items.push((chance, item));
|
||||
}
|
||||
|
||||
let pretty_config = PrettyConfig::new()
|
||||
@ -476,7 +462,7 @@ fn loot_table(loot_table: &str) -> Result<(), Box<dyn Error>> {
|
||||
let mut path = ASSETS_PATH.clone();
|
||||
path.push("common");
|
||||
path.push("loot_tables");
|
||||
for part in loot_table.split(".") {
|
||||
for part in loot_table.split('.') {
|
||||
path.push(part);
|
||||
}
|
||||
path.set_extension("ron");
|
||||
@ -514,7 +500,7 @@ Would you like to continue? (y/n)
|
||||
> ",
|
||||
)
|
||||
.to_lowercase()
|
||||
== "y".to_string()
|
||||
== *"y"
|
||||
{
|
||||
if let Err(e) = armor_stats() {
|
||||
println!("Error: {}\n", e)
|
||||
@ -544,7 +530,7 @@ Would you like to continue? (y/n)
|
||||
> ",
|
||||
)
|
||||
.to_lowercase()
|
||||
== "y".to_string()
|
||||
== *"y"
|
||||
{
|
||||
if let Err(e) = weapon_stats() {
|
||||
println!("Error: {}\n", e)
|
||||
@ -578,7 +564,7 @@ Would you like to continue? (y/n)
|
||||
> ",
|
||||
)
|
||||
.to_lowercase()
|
||||
== "y".to_string()
|
||||
== *"y"
|
||||
{
|
||||
if let Err(e) = loot_table(&loot_table_name) {
|
||||
println!("Error: {}\n", e)
|
||||
|
Loading…
Reference in New Issue
Block a user