| 324 | } |
| 325 | |
| 326 | pub fn parse_players(&self, py: Python<'_>) -> PyResult<Py<PyAny>> { |
| 327 | let parser = Demo::new( |
| 328 | self.path.clone(), |
| 329 | true, |
| 330 | vec![], |
| 331 | vec![], |
| 332 | vec!["m_iTeamNum".to_string()], |
| 333 | "".to_string(), |
| 334 | true, |
| 335 | false, |
| 336 | true, |
| 337 | 9999999, |
| 338 | vec![], |
| 339 | ); |
| 340 | match parser { |
| 341 | Err(e) => Err(PyFileNotFoundError::new_err(format!( |
| 342 | "Couldnt read demo file. Error: {}", |
| 343 | e |
| 344 | ))), |
| 345 | Ok(mut parser) => { |
| 346 | let _: Header = parser.parse_demo_header(); |
| 347 | let _ = parser.start_parsing(&vec![]); |
| 348 | let players = parser.players; |
| 349 | let mut py_players = vec![]; |
| 350 | let ent_manager = &parser.entities[parser.manager_id.unwrap() as usize].1; |
| 351 | for (_, player) in players { |
| 352 | let team = get_player_team(&parser.entities[player.entity_id as usize].1); |
| 353 | let mut hm = player.to_hashmap(py); |
| 354 | let team = match team { |
| 355 | 2 => "T", |
| 356 | 3 => "CT", |
| 357 | _ => "Missing", |
| 358 | }; |
| 359 | |
| 360 | let rank_id = |
| 361 | get_manager_i32_prop(ent_manager, &player, "m_iCompetitiveRanking"); |
| 362 | let rank_name = rank_id_to_name(rank_id); |
| 363 | |
| 364 | let crosshair_code = |
| 365 | get_manager_str_prop(ent_manager, &player, "m_szCrosshairCodes"); |
| 366 | |
| 367 | let comp_wins = |
| 368 | get_manager_i32_prop(ent_manager, &player, "m_iCompetitiveWins"); |
| 369 | |
| 370 | hm.insert("starting_side".to_string(), team.to_string().to_object(py)); |
| 371 | hm.insert( |
| 372 | "crosshair_code".to_string(), |
| 373 | crosshair_code.to_string().to_object(py), |
| 374 | ); |
| 375 | hm.insert("rank_name".to_string(), rank_name.to_string().to_object(py)); |
| 376 | hm.insert("rank_id".to_string(), rank_id.to_object(py)); |
| 377 | hm.insert("comp_wins".to_string(), comp_wins.to_object(py)); |
| 378 | |
| 379 | let dict = pyo3::Python::with_gil(|py| hm.to_object(py)); |
| 380 | if player.xuid > 76500000000000000 && player.xuid < 76600000000000000 { |
| 381 | py_players.push(dict); |
| 382 | } |
| 383 | } |