diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 193 |
1 files changed, 0 insertions, 193 deletions
diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 5480765..0000000 --- a/src/main.rs +++ /dev/null @@ -1,193 +0,0 @@ -extern crate byteorder; -extern crate evtclib; -use byteorder::{ReadBytesExt, BE, LE}; -use std::env; -use std::fs::File; - -use std::collections::HashMap; -use std::io::BufReader; - -// My addr: 5480786193115521456 -// My instid: 624 -// Samarog: 18003064748228432752 - -pub fn main() -> Result<(), evtclib::raw::parser::ParseError> { - println!("Hello World!"); - let mut f = BufReader::new(File::open(env::args().skip(1).next().unwrap())?); - - let result = evtclib::raw::parse_zip(&mut f)?; - /* - for agent in result.agents.iter().filter(|a| a.is_player()) { - println!("Agent: {:?}", agent); - } - - let mut damage: HashMap<u16, u64> = HashMap::new(); - let mut count = 0; - for event in result.events.iter() { - if event.is_statechange == evtclib::raw::CbtStateChange::None { - if (event.dst_agent != 0 && event.dst_instid == 0) || (event.dst_instid != 0 && event.dst_agent == 0) { - println!("{:#?}", event); - } - } - let must_take = if event.src_instid == 624 && event.skillid == 19426 && (event.value == 287 || event.buff_dmg == 287) { - println!("Event in question: {:#?}", event); - true - } else { false }; - let mut taken = false; - if event.src_instid == 624 || event.src_master_instid == 624 { - //for target in result.agents.iter().filter(|a| a.is_character()) { - if event.iff == evtclib::raw::IFF::Foe && event.dst_agent != 0 { - if event.is_statechange == evtclib::raw::CbtStateChange::None && event.is_buffremove == evtclib::raw::CbtBuffRemove::None { - let dmg = if event.buff == 1 && event.buff_dmg != 0 { - event.buff_dmg - } else if event.buff == 0 && event.value != 0 { - event.value - } else if [5, 6, 7].contains(&(event.result as u32)) { event.value } - else { - if must_take && !taken { - panic!("Failing event: {:#?}", event); - }; - continue; - }; - println!("{} {} {}", event.src_agent, event.skillid, dmg); - *damage.entry(event.skillid).or_insert(0) += dmg as u64; - count += 1; - taken = true; - } - } - //} - } - if must_take && !taken { - panic!("Failing event: {:#?}", event); - } - } - println!("Damage: {:#?}, Total: {}, Count: {}", damage, damage.values().sum::<u64>(), count); - println!("Event count: {}", result.events.len()); - println!("Events for me: {}", result.events.iter().filter(|e| e.src_instid == 624).count()); -*/ - //let processed = evtclib::process(&result); - use evtclib::EventKind; - let mut count = 0; - let mut damage = 0; - let mut failed = 0; - let mut boonq = - evtclib::statistics::boon::BoonQueue::new(5, evtclib::statistics::boon::BoonType::Duration); - let mut last_time = 0; - let mut uptime = 0; - for event in &result.events { - let shiny = if let Some(c) = evtclib::Event::from_raw(event) { - c - } else { - println!("Failed: {:#?}", event); - failed += 1; - continue; - }; - uptime += boonq.current_stacks() as u64 * (event.time - last_time); - boonq.simulate(event.time - last_time); - match shiny.kind { - EventKind::Physical { - source_agent_addr: src, - damage: dmg, - .. - } if src == 17963907008649399712 => - { - count += 1; - damage += dmg as u64; - } - EventKind::ConditionTick { - source_agent_addr: src, - damage: dmg, - .. - } if src == 17963907008649399712 => - { - count += 1; - damage += dmg as u64; - } - - EventKind::BuffApplication { - buff_id: 1187, - destination_agent_addr: 5480786193115521456, - duration, - .. - } => { - //println!("{:10} I got might for {}!", shiny.time, duration); - boonq.add_stack(duration as u64); - } - - EventKind::BuffRemove { - source_agent_addr: 5480786193115521456, - buff_id: 736, - removal, - total_duration, - longest_stack, - .. - } => { - println!( - "{:10} Buffremove, removal {:?} dur {:?} longest {:?}", - shiny.time, removal, total_duration, longest_stack - ); - } - - _ => (), - } - last_time = event.time; - } - println!("Count: {}, Damage: {}", count, damage); - println!("Failed events: {}", failed); - - let processed = evtclib::process(&result).expect("Failed processing"); - //println!("Me: {:#?}", processed.agent_by_addr(5480786193115521456)); - println!("Players: {:#?}", processed.players().collect::<Vec<_>>()); - let stats = evtclib::statistics::calculate(&processed).unwrap(); - //println!("{:#?}", stats); - let my_addr = me(&processed); - let mine = stats.agent_stats.get(&my_addr).expect("My stats not found"); - - let my_damage = stats - .damage_log - .damage(|m| m.source == my_addr && processed.is_boss(m.target)); - - let combat_time = (mine.exit_combat - mine.enter_combat) as f32 / 1000.; - println!("Damages: {:?}", stats.damage_log); - println!( - "Combat time: {} ({} till {})", - combat_time, mine.enter_combat, mine.exit_combat - ); - println!("My boss dps: {:?}", my_damage.0 as f32 / combat_time); - - for boon in evtclib::statistics::gamedata::BOONS { - let avg = mine - .boon_log - .average_stacks(mine.enter_combat, mine.exit_combat, boon.0); - println!("{}: {}", boon.1, avg); - } - - for agent in processed.players() { - println!("{}", agent.name()); - for mechanic in evtclib::statistics::gamedata::get_mechanics(processed.boss_id()) { - println!( - " {}: {}", - mechanic.name(), - stats - .mechanic_log - .count(|m, a| m == mechanic && a == *agent.addr()) - ); - } - } - - //println!("NPCs: {:#?}", processed.npcs().collect::<Vec<_>>()); - println!("Bosses: {:#?}", processed.boss_agents()); - - Ok(()) -} - -fn me(log: &evtclib::Log) -> u64 { - for agent in log.players() { - if let evtclib::AgentName::Player { account_name, .. } = agent.name() { - if account_name == ":Dunje.4863" { - return *agent.addr(); - } - } - } - 0 -} |