feat: Add Grand Theft Auto V - RAGE MP support (#576)

* feat: Add Grand Theft Auto V - RAGE MP support

* Add changelog entry

* Change ID for RageMP to gta5r

* Rename to be RageMP

* Revert prettier changing * to -

* Add notes to ragemp.

* Update CHANGELOG.md
This commit is contained in:
James Causon 2024-06-24 09:18:35 +01:00 committed by GitHub
parent ce29238428
commit cfd5614353
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 68 additions and 1 deletions

View file

@ -57,11 +57,12 @@ import beammpmaster from './beammpmaster.js'
import beammp from './beammp.js'
import dayz from './dayz.js'
import theisleevrima from './theisleevrima.js'
import ragemp from './ragemp.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, samp,
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
}

49
protocols/ragemp.js Normal file
View file

@ -0,0 +1,49 @@
import Core from './core.js'
export default class ragemp extends Core {
constructor() {
super()
this.usedTcp = true
}
async run(state) {
const results = await this.request({
url: 'https://cdn.rage.mp/master/v2/',
responseType: 'json'
})
if (results == null) {
throw new Error('Unable to retrieve master server list')
}
const targetID = `${this.options.host}:${this.options.port}`
let serverResult = null
let serverInfo = null
for (const entry of results) {
if (entry.id === targetID) {
serverResult = entry
serverInfo = entry.servers.at(0)
break
}
for (const serverEntry of entry.servers) {
if (serverEntry.id === targetID) {
serverResult = entry
serverInfo = serverEntry
break
}
}
}
if (serverInfo == null) {
throw new Error('Server not found in master server list.')
}
state.name = serverInfo.name
state.numplayers = serverInfo.players.amount
state.maxplayers = serverInfo.players.max
state.raw = serverResult
}
}