From 06a2ceeda9c390ef0ddafc21082588f10a3ea343 Mon Sep 17 00:00:00 2001 From: CosminPerRam Date: Tue, 30 May 2023 16:23:37 +0300 Subject: [PATCH] [Games] Add Quake 3 support and change players frags from u16 to i16 --- CHANGELOG.md | 1 + GAMES.md | 1 + examples/master_querant.rs | 3 ++- src/games/mod.rs | 2 ++ src/games/quake3a.rs | 9 +++++++++ src/protocols/quake/two.rs | 2 +- 6 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 src/games/quake3a.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index c17d3bc..910768d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ Protocols: Games: - [Quake 2](https://store.steampowered.com/app/2320/Quake_II/) support. - [Quake 1](https://store.steampowered.com/app/2310/Quake/) support. +- [Quake 3: Arena](https://store.steampowered.com/app/2200/Quake_III_Arena/) support. ### Breaking: - Every function that used `&str` for the address has been changed to `&IpAddr` (thanks [@Douile](https://github.com/Douile) for the re-re-write). diff --git a/GAMES.md b/GAMES.md index 78901f3..df3f171 100644 --- a/GAMES.md +++ b/GAMES.md @@ -52,6 +52,7 @@ Beware of the `Notes` column, as it contains information about query port offset | Crysis Wars | CW | GameSpy 3 | | | Quake 2 | QUAKE2 | Quake 2 | | | Quake 1 | QUAKE1 | Quake 1 | | +| Quake 3: Arena | QUAKE3A | Quake 3 | | ## Planned to add support: _ diff --git a/examples/master_querant.rs b/examples/master_querant.rs index 4057aa6..8485144 100644 --- a/examples/master_querant.rs +++ b/examples/master_querant.rs @@ -2,7 +2,7 @@ use gamedig::protocols::{gamespy, quake}; use gamedig::protocols::minecraft::LegacyGroup; use gamedig::protocols::valve; use gamedig::protocols::valve::Engine; -use gamedig::{aliens, aoc, arma2oa, ase, asrd, avorion, bat1944, bb2, bf1942, bm, bo, ccure, cosu, cs, cscz, csgo, css, dod, dods, doi, dst, ffow, gm, hl2dm, hldms, ins, insmic, inss, l4d, l4d2, mc, ohd, onset, pz, ror2, rust, sc, sdtd, ss, tf, tf2, tfc, ts, unturned, ut, vr, GDResult, cw, quake2, quake1}; +use gamedig::{aliens, aoc, arma2oa, ase, asrd, avorion, bat1944, bb2, bf1942, bm, bo, ccure, cosu, cs, cscz, csgo, css, dod, dods, doi, dst, ffow, gm, hl2dm, hldms, ins, insmic, inss, l4d, l4d2, mc, ohd, onset, pz, ror2, rust, sc, sdtd, ss, tf, tf2, tfc, ts, unturned, ut, vr, GDResult, cw, quake2, quake1, quake3a}; use std::env; use std::net::IpAddr; @@ -128,6 +128,7 @@ fn main() -> GDResult<()> { "_quake3" => println!("{:#?}", quake::three::query(ip, port.unwrap(), None)), "quake2" => println!("{:#?}", quake2::query(ip, port)?), "quake1" => println!("{:#?}", quake1::query(ip, port)?), + "quake3a" => println!("{:#?}", quake3a::query(ip, port)?), _ => panic!("Undefined game: {}", args[1]), }; diff --git a/src/games/mod.rs b/src/games/mod.rs index d0cf0b5..f3ff752 100644 --- a/src/games/mod.rs +++ b/src/games/mod.rs @@ -98,3 +98,5 @@ pub mod cw; pub mod quake2; /// Quake 1 pub mod quake1; +/// Quake 3: Arena +pub mod quake3a; diff --git a/src/games/quake3a.rs b/src/games/quake3a.rs new file mode 100644 index 0000000..737a4e1 --- /dev/null +++ b/src/games/quake3a.rs @@ -0,0 +1,9 @@ +use std::net::IpAddr; +use crate::GDResult; +use crate::protocols::quake; +use crate::protocols::quake::Response; +use crate::protocols::quake::two::Player; + +pub fn query(address: &IpAddr, port: Option) -> GDResult> { + quake::three::query(address, port.unwrap_or(27960), None) +} diff --git a/src/protocols/quake/two.rs b/src/protocols/quake/two.rs index f0ef1da..5f00b98 100644 --- a/src/protocols/quake/two.rs +++ b/src/protocols/quake/two.rs @@ -12,7 +12,7 @@ use serde::{Deserialize, Serialize}; #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct Player { - pub frags: u16, + pub frags: i16, pub ping: u16, pub name: String }