diff --git a/CHANGELOG.md b/CHANGELOG.md index a8fe7a1..9ead50f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * Restore Minecraft's favicon (#575) * Grand Theft Auto V: Rage MP - Added support (By @xCausxn #576) * Fix duplicate game entry for The Forest (2014), add old id for backwards compatibility (By @xCausxn #579) +* Fix Xonotic player's names being numbers and their names being in the "raw" field (#580) ## 5.0.0 * Added a new stabilized field `version` in the query response (By @podrivo #532) diff --git a/lib/games.js b/lib/games.js index 2ffaa21..7699471 100644 --- a/lib/games.js +++ b/lib/games.js @@ -3261,7 +3261,7 @@ export const games = { release_year: 2011, options: { port: 26000, - protocol: 'quake3' + protocol: 'xonotic' } }, xpandrally: { diff --git a/protocols/index.js b/protocols/index.js index ac02a5f..885d447 100644 --- a/protocols/index.js +++ b/protocols/index.js @@ -58,11 +58,12 @@ import beammp from './beammp.js' import dayz from './dayz.js' import theisleevrima from './theisleevrima.js' import ragemp from './ragemp.js' +import xonotic from './xonotic.js' export { armagetron, ase, asa, assettocorsa, battlefield, buildandshoot, cs2d, discord, doom3, eco, epic, factorio, farmingsimulator, ffow, fivem, gamespy1, gamespy2, gamespy3, geneshift, goldsrc, gtasao, hexen2, jc2mp, kspdmp, mafia2mp, mafia2online, minecraft, minecraftbedrock, minecraftvanilla, minetest, mumble, mumbleping, nadeo, openttd, palworld, quake1, quake2, quake3, rfactor, ragemp, samp, savage2, starmade, starsiege, teamspeak2, teamspeak3, terraria, tribes1, tribes1master, unreal2, ut3, valve, - vcmp, ventrilo, warsow, eldewrito, beammpmaster, beammp, dayz, theisleevrima + vcmp, ventrilo, warsow, eldewrito, beammpmaster, beammp, dayz, theisleevrima, xonotic } diff --git a/protocols/xonotic.js b/protocols/xonotic.js new file mode 100644 index 0000000..9500e66 --- /dev/null +++ b/protocols/xonotic.js @@ -0,0 +1,16 @@ +import quake3 from './quake3.js' + +export default class xonotic extends quake3 { + async run (state) { + await super.run(state) + + // Sometimes, the server returns a player's name as a number (which seems to be the team?) and the name in + // an extra field called "address", we are not sure of this behaviour nor if this is a good enough solution + for (const player of state.players) { + if (!isNaN(player.name) && player.raw.address) { + player.raw.team = player.name + player.name = player.raw.address + } + } + } +}