update bot player and collect recoverable errors

This commit is contained in:
2026-03-18 10:37:43 -07:00
parent 8d2da1b053
commit a2caa1e7d3
3 changed files with 28 additions and 9 deletions

5
Cargo.lock generated
View File

@@ -968,14 +968,15 @@ dependencies = [
[[package]] [[package]]
name = "strafesnet_roblox_bot_player" name = "strafesnet_roblox_bot_player"
version = "0.3.0" version = "0.4.0"
source = "sparse+https://git.itzana.me/api/packages/strafesnet/cargo/" source = "sparse+https://git.itzana.me/api/packages/strafesnet/cargo/"
checksum = "6268924ff0421cfa17ad6a74d74d308ca3ad442773e86e61f00f014e7759b6fb" checksum = "735daf9d81e5ff19fea11256b5e70f644bcff44cc04bd2b648823b11e3915d0f"
dependencies = [ dependencies = [
"glam", "glam",
"strafesnet_common", "strafesnet_common",
"strafesnet_graphics", "strafesnet_graphics",
"strafesnet_roblox_bot_file", "strafesnet_roblox_bot_file",
"thiserror",
"wgpu", "wgpu",
] ]

View File

@@ -7,6 +7,6 @@ edition = "2024"
futures = "0.3.31" futures = "0.3.31"
strafesnet_common = { version = "0.8.7", registry = "strafesnet" } strafesnet_common = { version = "0.8.7", registry = "strafesnet" }
strafesnet_roblox_bot_file = { version = "0.9.4", registry = "strafesnet" } strafesnet_roblox_bot_file = { version = "0.9.4", registry = "strafesnet" }
strafesnet_roblox_bot_player = { version = "0.3.0", registry = "strafesnet" } strafesnet_roblox_bot_player = { version = "0.4.0", registry = "strafesnet" }
tokio = { version = "1.48.0", features = ["macros", "rt-multi-thread", "fs"] } tokio = { version = "1.48.0", features = ["macros", "rt-multi-thread", "fs"] }
tokio-stream = { version = "0.1.17", features = ["fs"] } tokio-stream = { version = "0.1.17", features = ["fs"] }

View File

@@ -38,6 +38,12 @@ async fn main()->Result<(),Error>{
return Err(Error::InvalidArgs); return Err(Error::InvalidArgs);
}; };
#[derive(Default)]
struct State{
count:usize,
errors:Vec<(PathBuf,strafesnet_roblox_bot_player::bot::Error)>,
}
let available_parallelism=std::thread::available_parallelism()?.get(); let available_parallelism=std::thread::available_parallelism()?.get();
let read_dir=tokio::fs::read_dir(dir).await?; let read_dir=tokio::fs::read_dir(dir).await?;
let tally=tokio_stream::wrappers::ReadDirStream::new(read_dir).map(|dir_entry|async move{ let tally=tokio_stream::wrappers::ReadDirStream::new(read_dir).map(|dir_entry|async move{
@@ -51,7 +57,10 @@ async fn main()->Result<(),Error>{
let (path,file)=result?; let (path,file)=result?;
let result=tokio::task::spawn_blocking(move||{ let result=tokio::task::spawn_blocking(move||{
let block=v0::read_all_to_block(std::io::Cursor::new(file.as_slice())).map_err(PlaybackError::Decode)?; let block=v0::read_all_to_block(std::io::Cursor::new(file.as_slice())).map_err(PlaybackError::Decode)?;
let bot=strafesnet_roblox_bot_player::bot::CompleteBot::new(block); let bot=match strafesnet_roblox_bot_player::bot::CompleteBot::new(block){
Ok(bot)=>bot,
Err(e)=>return Ok(Some(e)),
};
let mut head=strafesnet_roblox_bot_player::head::PlaybackHead::new(&bot,strafesnet_common::session::Time::ZERO); let mut head=strafesnet_roblox_bot_player::head::PlaybackHead::new(&bot,strafesnet_common::session::Time::ZERO);
if let Err(e)=std::panic::catch_unwind(move||{ if let Err(e)=std::panic::catch_unwind(move||{
head.get_position_angles(&bot,strafesnet_common::session::Time::ZERO); head.get_position_angles(&bot,strafesnet_common::session::Time::ZERO);
@@ -61,7 +70,7 @@ async fn main()->Result<(),Error>{
println!("{e:?}"); println!("{e:?}");
return Err(PlaybackError::Panic); return Err(PlaybackError::Panic);
} }
Ok(()) Ok(None)
}).await?; }).await?;
match result{ match result{
Err(err)=>Err(Error::BotFile{path,err}), Err(err)=>Err(Error::BotFile{path,err}),
@@ -69,12 +78,21 @@ async fn main()->Result<(),Error>{
} }
}) })
.buffer_unordered(available_parallelism) .buffer_unordered(available_parallelism)
.try_fold(0usize,async|mut state,(path,())|{ .try_fold(State::default(),async|mut state,(path,bot_error)|{
state+=1; state.count+=1;
// state.accumulate(&path,&block); // state.accumulate(&path,&block);
println!("{:07} {:?}",state,path.file_name()); match bot_error{
None=>println!("{:07} {:?}",state.count,path.file_name()),
Some(e)=>{
println!("{:07} {:?} {}",state.count,path.file_name(),e);
state.errors.push((path,e));
},
};
Ok(state) Ok(state)
}).await?; }).await?;
println!("{}",tally); println!("{}",tally.count);
for (path,e) in tally.errors{
println!("error: {:?} {}",path.file_name(),e);
}
Ok(()) Ok(())
} }