From d65a24dc1850229dc1d1eb99b7d5683bd0634862 Mon Sep 17 00:00:00 2001 From: Michael Morrison Date: Thu, 25 Feb 2021 02:15:53 -0600 Subject: [PATCH] Release 3.0.0 --- CHANGELOG.md | 10 +++ README.md | 181 ++++++++++++++++++++++---------------------- lib/GameResolver.js | 14 +++- package.json | 2 +- 4 files changed, 114 insertions(+), 93 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd9d4b9..1f49af4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +### 3.0.0 +Major Changes: +* The `name` field is now guaranteed to exist on all player objects. If a player's name is unknown, the `name` will be an empty string. +* All non-`name` player fields have been moved into a `raw` sub-field. This means that, like the `raw` subobject of the parent + response, all non-`name` fields are now considered to be unstable and may be changed during minor releases of GameDig. +* "Rules" are no longer queried for `valve` protocol games by default. Many games do not respond to this query anyways (meaning we have to wait + for timeout), and its contents is often not even used since it only exists in the raw subfield. If you depend on rules, + you may pass the `requestRules: true` option to re-enable them. +* The `raw.steamappid` and `raw.gameid` fields for valve games have been consolidated into `raw.appId`. + ### 2.0.28 * Added Valheim (2021) diff --git a/README.md b/README.md index 6699159..d693cf4 100644 --- a/README.md +++ b/README.md @@ -55,10 +55,9 @@ The returned state object will contain the following keys: * **password**: boolean - If a password is required * **maxplayers**: number * **players**: array of objects - * Each object **may or may not** contain name, ping, score, team, address. - * The number of players online can be determined by `players.length`. - * For servers which do not provide player names, this may be an array -of empty objects (ex. `[{},{},{}]`), one for each player without a name. + * **name**: string - If the player's name is unknown, the string will be empty. + * **raw**: object - Additional information about the player if available (unstable) + * The content of this field MAY change on a per-protocol basis between GameDig patch releases (although not typical). * **bots**: array of objects - Same schema as `players` * **connect**: string * This will typically include the game's `ip:port` @@ -79,32 +78,32 @@ Games List ### Supported -| GameDig Type ID | Name | Notes +| GameDig Type ID | Name | See Also |---|---|--- -| `7d2d` | 7 Days to Die (2013) -| `ageofchivalry` | Age of Chivalry (2007) +| `7d2d` | 7 Days to Die (2013) | [Valve Protocol](#valve) +| `ageofchivalry` | Age of Chivalry (2007) | [Valve Protocol](#valve) | `aoe2` | Age of Empires 2 (1999) | `alienarena` | Alien Arena (2004) -| `alienswarm` | Alien Swarm (2010) +| `alienswarm` | Alien Swarm (2010) | [Valve Protocol](#valve) | `avp2` | Aliens versus Predator 2 (2001) -| `avp2010` | Aliens vs. Predator (2010) +| `avp2010` | Aliens vs. Predator (2010) | [Valve Protocol](#valve) | `americasarmy` | America's Army (2002) | `americasarmy2` | America's Army 2 (2003) -| `americasarmy3` | America's Army 3 (2009) -| `americasarmypg` | America's Army: Proving Grounds (2015) +| `americasarmy3` | America's Army 3 (2009) | [Valve Protocol](#valve) +| `americasarmypg` | America's Army: Proving Grounds (2015) | [Valve Protocol](#valve) | `arcasimracing` | Arca Sim Racing (2008) -| `arkse` | Ark: Survival Evolved (2017) -| `arma2` | ARMA 2 (2009) -| `arma2oa` | ARMA 2: Operation Arrowhead (2010) -| `arma3` | ARMA 3 (2013) +| `arkse` | Ark: Survival Evolved (2017) | [Valve Protocol](#valve) +| `arma2` | ARMA 2 (2009) | [Valve Protocol](#valve) +| `arma2oa` | ARMA 2: Operation Arrowhead (2010) | [Valve Protocol](#valve) +| `arma3` | ARMA 3 (2013) | [Valve Protocol](#valve) | `arma` | ARMA: Armed Assault (2007) | `armacwa` | ARMA: Cold War Assault (2011) | `armar` | ARMA: Resistance (2011) | `armagetron` | Armagetron Advanced (2001) | `assettocorsa` | Assetto Corsa (2014) -| `atlas` | Atlas (2018) +| `atlas` | Atlas (2018) | [Valve Protocol](#valve) | `baldursgate` | Baldur's Gate (1998) -| `bat1944` | Battalion 1944 (2018) +| `bat1944` | Battalion 1944 (2018) | [Valve Protocol](#valve) | `bf1942` | Battlefield 1942 (2002) | `bf2` | Battlefield 2 (2005) | `bf2142` | Battlefield 2142 (2006) @@ -113,16 +112,16 @@ Games List | `bfh` | Battlefield Hardline (2015) | `bfv` | Battlefield Vietnam (2004) | `bfbc2` | Battlefield: Bad Company 2 (2010) -| `breach` | Breach (2011) +| `breach` | Breach (2011) | [Valve Protocol](#valve) | `breed` | Breed (2004) -| `brink` | Brink (2011) +| `brink` | Brink (2011) | [Valve Protocol](#valve) | `buildandshoot` | Build and Shoot / Ace of Spades Classic (2012) | `cod` | Call of Duty (2003) | `cod2` | Call of Duty 2 (2005) | `cod3` | Call of Duty 3 (2006) | `cod4` | Call of Duty 4: Modern Warfare (2007) | `codmw2` | Call of Duty: Modern Warfare 2 (2009) -| `codmw3` | Call of Duty: Modern Warfare 3 (2011) +| `codmw3` | Call of Duty: Modern Warfare 3 (2011) | [Valve Protocol](#valve) | `coduo` | Call of Duty: United Offensive (2004) | `codwaw` | Call of Duty: World at War (2008) | `callofjuarez` | Call of Juarez (2006) @@ -131,86 +130,86 @@ Games List | `codenameeagle` | Codename Eagle (2000) | `cacrenegade` | Command and Conquer: Renegade (2002) | `commandos3` | Commandos 3: Destination Berlin (2003) -| `conanexiles` | Conan Exiles (2018) -| `contagion` | Contagion (2011) +| `conanexiles` | Conan Exiles (2018) | [Valve Protocol](#valve) +| `contagion` | Contagion (2011) | [Valve Protocol](#valve) | `contactjack` | Contract J.A.C.K. (2003) -| `cs15` | Counter-Strike 1.5 (2002) -| `cs16` | Counter-Strike 1.6 (2003) +| `cs15` | Counter-Strike 1.5 (2002) | [Valve Protocol](#valve) +| `cs16` | Counter-Strike 1.6 (2003) | [Valve Protocol](#valve) | `cs2d` | Counter-Strike: 2D (2004) -| `cscz` | Counter-Strike: Condition Zero (2004) -| `csgo` | Counter-Strike: Global Offensive (2012) | [Notes](#csgo) -| `css` | Counter-Strike: Source (2004) +| `cscz` | Counter-Strike: Condition Zero (2004) | [Valve Protocol](#valve) +| `csgo` | Counter-Strike: Global Offensive (2012) | [Notes](#csgo), [Valve Protocol](#valve) +| `css` | Counter-Strike: Source (2004) | [Valve Protocol](#valve) | `crossracing` | Cross Racing Championship Extreme 2005 (2005) | `crysis` | Crysis (2007) | `crysis2` | Crysis 2 (2011) | `crysiswars` | Crysis Wars (2008) | `daikatana` | Daikatana (2000) -| `dnl` | Dark and Light (2017) -| `dmomam` | Dark Messiah of Might and Magic (2006) +| `dnl` | Dark and Light (2017) | [Valve Protocol](#valve) +| `dmomam` | Dark Messiah of Might and Magic (2006) | [Valve Protocol](#valve) | `darkesthour` | Darkest Hour: Europe '44-'45 (2008) -| `dod` | Day of Defeat (2003) -| `dods` | Day of Defeat: Source (2005) -| `doi` | Day of Infamy (2017) -| `daysofwar` | Days of War (2017) -| `dayz` | DayZ (2018) -| `dayzmod` | DayZ Mod (2013) +| `dod` | Day of Defeat (2003) | [Valve Protocol](#valve) +| `dods` | Day of Defeat: Source (2005) | [Valve Protocol](#valve) +| `doi` | Day of Infamy (2017) | [Valve Protocol](#valve) +| `daysofwar` | Days of War (2017) | [Valve Protocol](#valve) +| `dayz` | DayZ (2018) | [Valve Protocol](#valve) +| `dayzmod` | DayZ Mod (2013) | [Valve Protocol](#valve) | `deadlydozenpt` | Deadly Dozen: Pacific Theater (2002) | `dh2005` | Deer Hunter 2005 (2004) | `descent3` | Descent 3 (1999) | `deusex` | Deus Ex (2000) | `devastation` | Devastation (2003) -| `dinodday` | Dino D-Day (2011) +| `dinodday` | Dino D-Day (2011) | [Valve Protocol](#valve) | `dirttrackracing2` | Dirt Track Racing 2 (2002) | `doom3` | Doom 3 (2004) -| `dota2` | Dota 2 (2013) +| `dota2` | Dota 2 (2013) | [Valve Protocol](#valve) | `drakan` | Drakan: Order of the Flame (1999) -| `empyrion` | Empyrion - Galactic Survival (2015) +| `empyrion` | Empyrion - Galactic Survival (2015) | [Valve Protocol](#valve) | `etqw` | Enemy Territory: Quake Wars (2007) | `fear` | F.E.A.R. (2005) | `f1c9902` | F1 Challenge '99-'02 (2002) | `farcry` | Far Cry (2004) | `farcry2` | Far Cry 2 (2008) | `f12002` | Formula One 2002 (2002) -| `fortressforever` | Fortress Forever (2007) +| `fortressforever` | Fortress Forever (2007) | [Valve Protocol](#valve) | `ffow` | Frontlines: Fuel of War (2008) -| `garrysmod` | Garry's Mod (2004) +| `garrysmod` | Garry's Mod (2004) | [Valve Protocol](#valve) | `geneshift`
`mutantfactions` | Geneshift (2017) | `giantscitizenkabuto` | Giants: Citizen Kabuto (2000) | `globaloperations` | Global Operations (2002) -| `ges` | GoldenEye: Source (2010) +| `ges` | GoldenEye: Source (2010) | [Valve Protocol](#valve) | `gore` | Gore: Ultimate Soldier (2002) | `fivem` | Grand Theft Auto V - FiveM (2013) | `mtasa` | Grand Theft Auto: San Andreas - Multi Theft Auto (2004) | `mtavc` | Grand Theft Auto: Vice City - Multi Theft Auto (2002) -| `gunmanchronicles` | Gunman Chronicles (2000) -| `hl2dm` | Half-Life 2: Deathmatch (2004) -| `hldm` | Half-Life Deathmatch (1998) -| `hldms` | Half-Life Deathmatch: Source (2005) +| `gunmanchronicles` | Gunman Chronicles (2000) | [Valve Protocol](#valve) +| `hl2dm` | Half-Life 2: Deathmatch (2004) | [Valve Protocol](#valve) +| `hldm` | Half-Life Deathmatch (1998) | [Valve Protocol](#valve) +| `hldms` | Half-Life Deathmatch: Source (2005) | [Valve Protocol](#valve) | `halo` | Halo (2003) | `halo2` | Halo 2 (2007) -| `hll` | Hell Let Loose +| `hll` | Hell Let Loose | [Valve Protocol](#valve) | `heretic2` | Heretic II (1998) | `hexen2` | Hexen II (1997) | `had2` | Hidden & Dangerous 2 (2003) -| `homefront` | Homefront (2011) +| `homefront` | Homefront (2011) | [Valve Protocol](#valve) | `homeworld2` | Homeworld 2 (2003) -| `hurtworld` | Hurtworld (2015) +| `hurtworld` | Hurtworld (2015) | [Valve Protocol](#valve) | `igi2` | I.G.I.-2: Covert Strike (2003) | `il2` | IL-2 Sturmovik (2001) -| `insurgency` | Insurgency (2014) -| `insurgencysandstorm` | Insurgency: Sandstorm (2018) +| `insurgency` | Insurgency (2014) | [Valve Protocol](#valve) +| `insurgencysandstorm` | Insurgency: Sandstorm (2018) | [Valve Protocol](#valve) | `ironstorm` | Iron Storm (2002) | `jamesbondnightfire` | James Bond 007: Nightfire (2002) | `jc2mp` | Just Cause 2 - Multiplayer (2010) -| `jc3mp` | Just Cause 3 - Multiplayer (2017) +| `jc3mp` | Just Cause 3 - Multiplayer (2017) | [Valve Protocol](#valve) | `kspdmp` | Kerbal Space Program - DMP Multiplayer (2015) | `killingfloor` | Killing Floor (2009) -| `killingfloor2` | Killing Floor 2 (2016) +| `killingfloor2` | Killing Floor 2 (2016) | [Valve Protocol](#valve) | `kingpin` | Kingpin: Life of Crime (1999) | `kisspc` | Kiss: Psycho Circus: The Nightmare Child (2000) -| `kzmod` | Kreedz Climbing (2017) -| `left4dead` | Left 4 Dead (2008) -| `left4dead2` | Left 4 Dead 2 (2009) +| `kzmod` | Kreedz Climbing (2017) | [Valve Protocol](#valve) +| `left4dead` | Left 4 Dead (2008) | [Valve Protocol](#valve) +| `left4dead2` | Left 4 Dead 2 (2009) | [Valve Protocol](#valve) | `m2mp` | Mafia II - Multiplayer (2010) | `m2o` | Mafia II - Online (2010) | `moh2010` | Medal of Honor (2010) @@ -220,16 +219,16 @@ Games List | `mohsh` | Medal of Honor: Allied Assault Spearhead (2002) | `mohpa` | Medal of Honor: Pacific Assault (2004) | `mohwf` | Medal of Honor: Warfighter (2012) -| `medievalengineers` | Medieval Engineers (2015) +| `medievalengineers` | Medieval Engineers (2015) | [Valve Protocol](#valve) | `minecraft`
`minecraftping` | Minecraft (2009) | `minecraftpe`
`minecraftbe` | Minecraft: Bedrock Edition (2011) -| `mnc` | Monday Night Combat (2011) -| `mordhau` | Mordhau (2019) +| `mnc` | Monday Night Combat (2011) | [Valve Protocol](#valve) +| `mordhau` | Mordhau (2019) | [Valve Protocol](#valve) | `mumble` | Mumble - GTmurmur Plugin (2005) | [Notes](#mumble) | `mumbleping` | Mumble - Lightweight (2005) | [Notes](#mumble) | `nascarthunder2004` | NASCAR Thunder 2004 (2003) -| `ns` | Natural Selection (2002) -| `ns2` | Natural Selection 2 (2012) +| `ns` | Natural Selection (2002) | [Valve Protocol](#valve) +| `ns2` | Natural Selection 2 (2012) | [Valve Protocol](#valve) | `nfshp2` | Need for Speed: Hot Pursuit 2 (2002) | `nab` | Nerf Arena Blast (1999) | `netpanzer` | netPanzer (2002) @@ -237,56 +236,56 @@ Games List | `nwn2` | Neverwinter Nights 2 (2006) | `nexuiz` | Nexuiz (2005) | `nitrofamily` | Nitro Family (2004) -| `nmrih` | No More Room in Hell (2011) +| `nmrih` | No More Room in Hell (2011) | [Valve Protocol](#valve) | `nolf2` | No One Lives Forever 2: A Spy in H.A.R.M.'s Way (2002) -| `nucleardawn` | Nuclear Dawn (2011) +| `nucleardawn` | Nuclear Dawn (2011) | [Valve Protocol](#valve) | `openarena` | OpenArena (2005) | `openttd` | OpenTTD (2004) | `operationflashpoint`
`flashpoint` | Operation Flashpoint: Cold War Crisis (2001) | `flashpointresistance` | Operation Flashpoint: Resistance (2002) | `painkiller` | Painkiller -| `pixark` | PixARK (2018) +| `pixark` | PixARK (2018) | [Valve Protocol](#valve) | `postal2` | Postal 2 | `prey` | Prey -| `primalcarnage` | Primal Carnage: Extinction +| `primalcarnage` | Primal Carnage: Extinction | [Valve Protocol](#valve) | `prbf2` | Project Reality: Battlefield 2 (2005) | `quake1` | Quake 1: QuakeWorld (1996) | `quake2` | Quake 2 (1997) | `quake3` | Quake 3: Arena (1999) | `quake4` | Quake 4 (2005) -| `quakelive` | Quake Live (2010) -| `ragdollkungfu` | Rag Doll Kung Fu +| `quakelive` | Quake Live (2010) | [Valve Protocol](#valve) +| `ragdollkungfu` | Rag Doll Kung Fu | [Valve Protocol](#valve) | `r6` | Rainbow Six | `r6roguespear` | Rainbow Six 2: Rogue Spear | `r6ravenshield` | Rainbow Six 3: Raven Shield | `rallisportchallenge` | RalliSport Challenge | `rallymasters` | Rally Masters | `redorchestra` | Red Orchestra -| `redorchestra2` | Red Orchestra 2 +| `redorchestra2` | Red Orchestra 2 | [Valve Protocol](#valve) | `redorchestraost` | Red Orchestra: Ostfront 41-45 | `redline` | Redline | `rtcw` | Return to Castle Wolfenstein | `rfactor` | rFactor -| `ricochet` | Ricochet +| `ricochet` | Ricochet | [Valve Protocol](#valve) | `riseofnations` | Rise of Nations -| `rs2` | Rising Storm 2: Vietnam +| `rs2` | Rising Storm 2: Vietnam | [Valve Protocol](#valve) | `rune` | Rune -| `rust` | Rust +| `rust` | Rust | [Valve Protocol](#valve) | `stalker` | S.T.A.L.K.E.R. | `samp` | San Andreas Multiplayer | `savage2` | Savage 2: A Tortured Soul (2008) | `ss` | Serious Sam | `ss2` | Serious Sam 2 -| `shatteredhorizon` | Shattered Horizon +| `shatteredhorizon` | Shattered Horizon | [Valve Protocol](#valve) | `shogo` | Shogo | `shootmania` | Shootmania | [Notes](#nadeo-shootmania--trackmania--etc) | `sin` | SiN -| `sinep` | SiN Episodes +| `sinep` | SiN Episodes | [Valve Protocol](#valve) | `soldat` | Soldat | `sof` | Soldier of Fortune | `sof2` | Soldier of Fortune 2 -| `spaceengineers` | Space Engineers -| `squad` | Squad +| `spaceengineers` | Space Engineers | [Valve Protocol](#valve) +| `squad` | Squad | [Valve Protocol](#valve) | `stbc` | Star Trek: Bridge Commander | `stvef` | Star Trek: Voyager - Elite Force | `stvef2` | Star Trek: Voyager - Elite Force 2 @@ -295,32 +294,32 @@ Games List | `swbf` | Star Wars: Battlefront | `swbf2` | Star Wars: Battlefront 2 | `swrc` | Star Wars: Republic Commando -| `starbound` | Starbound +| `starbound` | Starbound | [Valve Protocol](#valve) | `starmade` | StarMade | `starsiege` | Starsiege (2009) -| `suicidesurvival` | Suicide Survival -| `svencoop` | Sven Coop +| `suicidesurvival` | Suicide Survival | [Valve Protocol](#valve) +| `svencoop` | Sven Coop | [Valve Protocol](#valve) | `swat4` | SWAT 4 -| `synergy` | Synergy +| `synergy` | Synergy | [Valve Protocol](#valve) | `tacticalops` | Tactical Ops | `takeonhelicopters` | Take On Helicopters (2011) | `teamfactor` | Team Factor -| `tf2` | Team Fortress 2 -| `tfc` | Team Fortress Classic +| `tf2` | Team Fortress 2 | [Valve Protocol](#valve) +| `tfc` | Team Fortress Classic | [Valve Protocol](#valve) | `teamspeak2` | Teamspeak 2 | `teamspeak3` | Teamspeak 3 | [Notes](#teamspeak3) | `terminus` | Terminus | `terraria`
`tshock` | Terraria - TShock (2011) | [Notes](#terraria) -| `forrest` | The Forrest (2014) -| `hidden` | The Hidden (2005) +| `forrest` | The Forrest (2014) | [Valve Protocol](#valve) +| `hidden` | The Hidden (2005) | [Valve Protocol](#valve) | `nolf` | The Operative: No One Lives Forever (2000) -| `ship` | The Ship +| `ship` | The Ship | [Valve Protocol](#valve) | `graw` | Tom Clancy's Ghost Recon Advanced Warfighter (2006) | `graw2` | Tom Clancy's Ghost Recon Advanced Warfighter 2 (2007) | `thps3` | Tony Hawk's Pro Skater 3 | `thps4` | Tony Hawk's Pro Skater 4 | `thu2` | Tony Hawk's Underground 2 -| `towerunite` | Tower Unite +| `towerunite` | Tower Unite | [Valve Protocol](#valve) | `trackmania2` | Trackmania 2 | [Notes](#nadeo-shootmania--trackmania--etc) | `trackmaniaforever` | Trackmania Forever | [Notes](#nadeo-shootmania--trackmania--etc) | `tremulous` | Tremulous @@ -334,10 +333,10 @@ Games List | `ut2003` | Unreal Tournament 2003 | `ut2004` | Unreal Tournament 2004 | `ut3` | Unreal Tournament 3 -| `unturned` | unturned +| `unturned` | unturned | [Valve Protocol](#valve) | `urbanterror` | Urban Terror | `v8supercar` | V8 Supercar Challenge -| `valheim` | Valheim (2021) +| `valheim` | Valheim (2021) | [Valve Protocol](#valve) | `ventrilo` | Ventrilo | `vcmp` | Vice City Multiplayer | `vietcong` | Vietcong @@ -347,8 +346,8 @@ Games List | `wolfenstein2009` | Wolfenstein 2009 | `wolfensteinet` | Wolfenstein: Enemy Territory | `xpandrally` | Xpand Rally -| `zombiemaster` | Zombie Master -| `zps` | Zombie Panic: Source +| `zombiemaster` | Zombie Master | [Valve Protocol](#valve) +| `zps` | Zombie Panic: Source | [Valve Protocol](#valve) @@ -453,7 +452,11 @@ For teamspeak 3 queries to work correctly, the following permissions must be ava ### Terraria Requires tshock server mod, and a REST user token, which can be passed to GameDig with the -additional option: token +additional option: `token` + +### Valve Protocol +For many valve games, additional 'rules' may be fetched into the unstable `raw` field by passing the additional +option: `requestRules: true`. Beware that this may increase query time. Usage from Command Line --- diff --git a/lib/GameResolver.js b/lib/GameResolver.js index b75ad33..4856b9f 100644 --- a/lib/GameResolver.js +++ b/lib/GameResolver.js @@ -24,7 +24,7 @@ class GameResolver { printReadme() { let out = ''; - out += '| GameDig Type ID | Name | Notes\n'; + out += '| GameDig Type ID | Name | See Also\n'; out += '|---|---|---\n'; const sorted = this.games @@ -36,8 +36,16 @@ class GameResolver { let keysOut = game.keys.map(key => '`'+key+'`').join('
'); out += "| " + keysOut.padEnd(10, " ") + " " + "| " + game.pretty; - if(game.extra.doc_notes) - out += " | [Notes](#"+game.extra.doc_notes+")"; + let notes = []; + if(game.extra.doc_notes) { + notes.push("[Notes](#" + game.extra.doc_notes + ")"); + } + if(game.options.protocol === 'valve') { + notes.push('[Valve Protocol](#valve)'); + } + if(notes.length) { + out += " | " + notes.join(', '); + } out += "\n"; } return out; diff --git a/package.json b/package.json index 5d4040e..63e5dd7 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ ], "main": "lib/index.js", "author": "GameDig Contributors", - "version": "2.0.28", + "version": "3.0.0", "repository": { "type": "git", "url": "https://github.com/gamedig/node-gamedig.git"