diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index 45bf07a..ff890a2 100644 Binary files a/Release/Plugins/RenX.Core.lib and b/Release/Plugins/RenX.Core.lib differ diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp index e84db1f..5424611 100644 --- a/RenX.Core/RenX_Server.cpp +++ b/RenX.Core/RenX_Server.cpp @@ -3173,10 +3173,24 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { Jupiter::ReferenceString raw = Jupiter::ReferenceString::substring(line, 1); this->rconVersion = raw.asInt(10); - this->gameVersion = raw.substring(3); if (this->rconVersion >= 3) { + if (this->rconVersion == 3) // Old format: 003Open Beta 5.12 + this->gameVersion = raw.substring(3); + else // New format: 004 | Game Version Number | Game Version + { + this->gameVersionNumber = tokens.getToken(1).asInt(10); + this->gameVersion = tokens.getToken(2); + + if (this->gameVersion.isEmpty()) + { + RenX::Server::sendLogChan(STRING_LITERAL_AS_REFERENCE(IRCCOLOR "04[Error]" IRCCOLOR " Disconnected from Renegade-X server (Protocol Error).")); + this->disconnect(RenX::DisconnectReason::ProtocolError); + break; + } + } + RenX::Server::sock.send("s\n"_jrs); RenX::Server::send("serverinfo"_jrs); RenX::Server::send("gameinfo"_jrs); @@ -3186,11 +3200,11 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) RenX::Server::fetchClientList(); RenX::Server::updateBuildingList(); RenX::Server::send("ping srv_init_done"_jrs); - + RenX::Server::gameStart = std::chrono::steady_clock::now(); this->seenStart = false; this->seamless = true; - + for (size_t i = 0; i < xPlugins.size(); i++) xPlugins.get(i)->RenX_OnVersion(this, raw); } @@ -3296,6 +3310,11 @@ unsigned int RenX::Server::getVersion() const return RenX::Server::rconVersion; } +unsigned int RenX::Server::getGameVersionNumber() const +{ + return RenX::Server::gameVersionNumber; +} + const Jupiter::ReadableString &RenX::Server::getGameVersion() const { return RenX::Server::gameVersion; diff --git a/RenX.Core/RenX_Server.h b/RenX.Core/RenX_Server.h index 72696c3..2c0d841 100644 --- a/RenX.Core/RenX_Server.h +++ b/RenX.Core/RenX_Server.h @@ -944,12 +944,19 @@ namespace RenX void wipeData(); /** - * @brief Fetches the RCON version number, or 0 or none has been set. + * @brief Fetches the RCON version number, or 0 if none has been set. * * @return RCON version number */ unsigned int getVersion() const; + /** + * @brief Fetches the game version number, or 0 if none has been set. + * + * @return Game version number + */ + unsigned int getGameVersionNumber() const; + /** * @brief Fetches the game version string, or an empty string if none has been set. * @@ -1020,6 +1027,7 @@ namespace RenX size_t bot_count = 0; size_t player_rdns_resolutions_pending = 0; unsigned int rconVersion = 0; + unsigned int gameVersionNumber = 0; double crateRespawnAfterPickup = 0.0; uuid_func calc_uuid; std::chrono::steady_clock::time_point lastAttempt = std::chrono::steady_clock::now();