4 Commits

Author SHA1 Message Date
638be9a256 check if absolute sens is on 2026-02-06 08:04:52 -08:00
8ea487a72a print absolute sens 2026-02-06 07:55:28 -08:00
6775e4122b approximate round trip test 2025-12-15 15:16:57 -08:00
a34ecc4537 update roblox_bot_file 2025-12-15 15:14:03 -08:00
3 changed files with 21 additions and 9 deletions

5
Cargo.lock generated
View File

@@ -42,7 +42,6 @@ checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
name = "bot-cruncher"
version = "0.1.0"
dependencies = [
"binrw",
"futures",
"strafesnet_roblox_bot_file",
"tokio",
@@ -209,9 +208,9 @@ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
[[package]]
name = "strafesnet_roblox_bot_file"
version = "0.7.1-pre1"
version = "0.8.1"
source = "sparse+https://git.itzana.me/api/packages/strafesnet/cargo/"
checksum = "c308e2ddb87eb19dc1e888b5cd957e3979c47126d2c531b39caa851d709b50cd"
checksum = "33d0fa524476d8b6cf23269b0c9cff6334b70585546b807cb8ec193858defecd"
dependencies = [
"binrw",
"bitflags",

View File

@@ -4,8 +4,7 @@ version = "0.1.0"
edition = "2024"
[dependencies]
binrw = "0.15.0"
futures = "0.3.31"
strafesnet_roblox_bot_file = { version = "0.7.1-pre1", registry = "strafesnet" }
strafesnet_roblox_bot_file = { version = "0.8.1", registry = "strafesnet" }
tokio = { version = "1.48.0", features = ["macros", "rt-multi-thread", "fs"] }
tokio-stream = { version = "0.1.17", features = ["fs"] }

View File

@@ -24,10 +24,11 @@ impl From<tokio::task::JoinError> for Error{
Self::Join(value)
}
}
#[expect(dead_code)]
#[derive(Debug)]
enum RoundTripError{
Decode(v0::Error),
Encode(binrw::Error),
Encode(strafesnet_roblox_bot_file::BinrwError),
RoundTripDecode(v0::Error),
NotEqual,
}
@@ -42,15 +43,16 @@ async fn main()->Result<(),Error>{
const ONE_SECOND:u64=1<<32;
#[derive(Default)]
struct FoldState{
count:usize,
count:u64,
jumps:u64,
duration:u64,
settings:u64,
absolute_sens:u64,
outliers:Vec<PathBuf>,
}
impl std::fmt::Display for FoldState{
fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
write!(f,"count={} jumps={} duration={:.3} settings={}",self.count,self.jumps,self.duration as f64/(ONE_SECOND as f64),self.settings)
write!(f,"count={} jumps={} duration={:.3} settings={} absolute_sens={}",self.count,self.jumps,self.duration as f64/(ONE_SECOND as f64),self.settings,self.absolute_sens)
}
}
impl FoldState{
@@ -75,6 +77,9 @@ async fn main()->Result<(),Error>{
.filter(|event|run_start.time<event.time)
.count() as u64;
}
if let Some(_setting)=block.setting_events.iter().find(|event|matches!(event.event.setting_type,v0::SettingType::AbsoluteSensitivity)&&event.event.value==1.0){
self.absolute_sens+=1;
}
}
}
@@ -94,7 +99,16 @@ async fn main()->Result<(),Error>{
let mut data=Vec::with_capacity(file.len()+1024);
v0::serialize(&block,&mut std::io::Cursor::new(&mut data)).map_err(RoundTripError::Encode)?;
let block_rt=v0::read_all_to_block(std::io::Cursor::new(data)).map_err(RoundTripError::RoundTripDecode)?;
if block_rt!=block{
if !(
block_rt.input_events.len()==block.input_events.len()&&
block_rt.output_events.len()==block.output_events.len()&&
block_rt.sound_events.len()==block.sound_events.len()&&
block_rt.world_events.len()==block.world_events.len()&&
block_rt.gravity_events.len()==block.gravity_events.len()&&
block_rt.run_events.len()==block.run_events.len()&&
block_rt.camera_events.len()==block.camera_events.len()&&
block_rt.setting_events.len()==block.setting_events.len()
){
return Err(RoundTripError::NotEqual);
}
Ok(block)