D2-Stampede
Dota 2 replay parser written in Rust.
Quick Start
use d2_stampede::prelude::*;
use d2_stampede::proto::*;
#[derive(Default)]
struct Chat;
impl Observer for Chat {
fn on_dota_user_message(
&mut self,
ctx: &Context,
msg_type: EDotaUserMessages,
msg: &[u8],
) -> ObserverResult {
if msg_type == EDotaUserMessages::DotaUmChatMessage {
if let Ok(pr) = ctx.entities().get_by_class_name("CDOTA_PlayerResource") {
let message = CDotaUserMsgChatMessage::decode(msg)?;
let name: String = property!(
pr,
"m_vecPlayerData.{:04}.m_iszPlayerName",
message.source_player_id()
);
println!("{}: {}", name, message.message_text());
}
}
Ok(())
}
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let replay = unsafe { memmap2::Mmap::map(&std::fs::File::open("replay.dem")?)? };
let mut parser = Parser::new(&replay)?;
parser.register_observer::<Chat>();
parser.run_to_end()?;
parser.jump_to_tick(10000)?;
parser.run_to_tick(11000)?;
Ok(())
}
Examples
d2-stampede-examples
Download and Build
git clone https://github.com/Rupas1k/d2-stampede.git
cd d2-stampede
cargo build --release
odota-rust - copy of OpenDota parser in
Rust
d2wm-parser - wards parser with bindings for Python