diff --git a/CHANGELOG.md b/CHANGELOG.md index 566434f..dd05cce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,12 @@ see next point) and `tshock` (which is `terraria`). a placeholder in the `players` fields. * Stabilized field `numplayers`. +### 4.3.0 +* Fix `Post Scriptum` not being on the valve protocol. +* Fix `Epic` protocol's `numplayers` not being in the `raw` field. +* Added support for the Minecraft [Better Compatibility Checker](https://www.curseforge.com/minecraft/mc-mods/better-compatibility-checker) Mod. +* Halo Online (ElDewrito) - Added support (by @Sphyrna-029) + ### 4.2.0 * Renamed `Counter Strike: 2D` to `CS2D` in [games.txt](games.txt) (why? see [this](https://cs2d.com/faq.php?show=misc_name#misc_name)). * Updated `CS2D` protocol (by @ernestpasnik) diff --git a/GAMES_LIST.md b/GAMES_LIST.md index 8d58d6d..52161f6 100644 --- a/GAMES_LIST.md +++ b/GAMES_LIST.md @@ -108,6 +108,7 @@ | `drakan` | Drakan: Order of the Flame (1999) | | | `dystopia` | Dystopia (2005) | [Valve Protocol](#valve) | | `eco` | Eco (2018) | | +| `eldewrito` | Halo Online - ElDewrito (2007) | | | `empyrion` | Empyrion - Galactic Survival (2015) | [Valve Protocol](#valve) | | `empiresmod` | Empires Mod (2008) | [Valve Protocol](#valve) | | `etqw` | Enemy Territory: Quake Wars (2007) | | diff --git a/lib/games.js b/lib/games.js index 0d73717..535c035 100644 --- a/lib/games.js +++ b/lib/games.js @@ -802,6 +802,13 @@ export const games = { protocol: 'eco' } }, + eldewrito: { + name: 'Halo Online (ElDewrito)', + options: { + port: 11775, + protocol: 'eldewrito' + } + }, em: { name: 'Empires Mod (2008)', options: { @@ -1531,7 +1538,7 @@ export const games = { name: 'Post Scriptum', options: { port: 10037, - protocol: 'squad' + protocol: 'valve' } }, postal2: { diff --git a/protocols/eldewrito.js b/protocols/eldewrito.js new file mode 100644 index 0000000..2b03f14 --- /dev/null +++ b/protocols/eldewrito.js @@ -0,0 +1,21 @@ +import Core from './core.js' + +export default class eldewrito extends Core { + async run (state) { + const json = await this.request({ + url: 'http://' + this.options.address + ':' + this.options.port, + responseType: 'json' + }) + + for (const one of json.players) { + state.players.push({ name: one.name, team: one.team }) + } + + state.name = json.name + state.map = json.map + state.maxplayers = json.maxPlayers + state.connect = this.options.address + ':' + json.port + + state.raw = json + } +} diff --git a/protocols/index.js b/protocols/index.js index 9465f02..36c1e6e 100644 --- a/protocols/index.js +++ b/protocols/index.js @@ -8,6 +8,7 @@ import cs2d from './cs2d.js' import discord from './discord.js' import doom3 from './doom3.js' import eco from './eco.js' +import eldewrito from './eldewrito.js' import epic from './epic.js' import ffow from './ffow.js' import fivem from './fivem.js' @@ -53,5 +54,5 @@ export { gamespy2, gamespy3, geneshift, goldsrc, hexen2, jc2mp, kspdmp, mafia2mp, mafia2online, minecraft, minecraftbedrock, minecraftvanilla, mumble, mumbleping, nadeo, openttd, quake1, quake2, quake3, rfactor, samp, savage2, starmade, starsiege, teamspeak2, teamspeak3, terraria, tribes1, tribes1master, unreal2, ut3, valve, - vcmp, ventrilo, warsow + vcmp, ventrilo, warsow, eldewrito } diff --git a/protocols/minecraftvanilla.js b/protocols/minecraftvanilla.js index 7bc3b8d..2343fe3 100644 --- a/protocols/minecraftvanilla.js +++ b/protocols/minecraftvanilla.js @@ -42,7 +42,7 @@ export default class minecraftvanilla extends Core { const str = reader.rest().toString('utf8') this.logger.debug(str) - const json = JSON.parse(str) + const json = JSON.parse(str.substring(0, strLen)) delete json.favicon state.raw = json @@ -57,6 +57,16 @@ export default class minecraftvanilla extends Core { }) } } + + // Better Compatibility Checker mod support + let bccJson = {} + + if (str.length > strLen) { + const bccStr = str.substring(strLen + 1) + bccJson = JSON.parse(bccStr) + } + + state.raw.bcc = bccJson } varIntBuffer (num) {