From 8e5d3f0a5e085bd1fbb0cc03782709d30ab73a57 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Thu, 14 Jan 2016 17:47:23 -0500 Subject: [PATCH] Added support for map GUIDs (will appear in next RenX patch) --- Release/Plugins/RenX.Core.lib | Bin 155250 -> 158156 bytes RenX.Commands/RenX_Commands.cpp | 11 +++--- RenX.Core/RenX.Core.vcxproj | 2 + RenX.Core/RenX.Core.vcxproj.filters | 6 +++ RenX.Core/RenX_Functions.cpp | 5 +++ RenX.Core/RenX_Functions.h | 9 +++++ RenX.Core/RenX_Map.cpp | 41 ++++++++++++++++++++ RenX.Core/RenX_Map.h | 57 ++++++++++++++++++++++++++++ RenX.Core/RenX_Server.cpp | 47 ++++++++++++++++++----- RenX.Core/RenX_Server.h | 7 ++-- RenX.Core/RenX_Tags.cpp | 6 ++- RenX.Core/RenX_Tags.h | 2 + 12 files changed, 175 insertions(+), 18 deletions(-) create mode 100644 RenX.Core/RenX_Map.cpp create mode 100644 RenX.Core/RenX_Map.h diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index 1d8d80ee0ebdaa8f9931def8d17fe84a4adc8657..c94365fa7c787c4c0b0b747b615ed7d0183a5913 100644 GIT binary patch delta 20728 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 if (chan != nullptr) { - const Jupiter::ReadableString *map; + const RenX::Map *map; int type = chan->getType(); Jupiter::String list; size_t index = 0; @@ -794,10 +794,10 @@ void RotationIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString for (index = 0; index != server->maps.size(); ++index) { map = server->maps.get(index); - if (server->getMap().equalsi(*map)) - list += STRING_LITERAL_AS_REFERENCE(" " IRCBOLD "[") + *server->maps.get(index) + STRING_LITERAL_AS_REFERENCE("]" IRCBOLD); + if (server->getMap().name.equalsi(map->name)) + list += STRING_LITERAL_AS_REFERENCE(" " IRCBOLD "[") + server->maps.get(index)->name + STRING_LITERAL_AS_REFERENCE("]" IRCBOLD); else - list += " "_jrs + *server->maps.get(index); + list += " "_jrs + server->maps.get(index)->name; } if (index == 0) source->sendMessage(channel, "No maps in rotation"_jrs); @@ -838,7 +838,8 @@ void MapIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &chan if (server->isLogChanType(type)) { match = true; - source->sendMessage(channel, "Current Map: "_jrs + server->getMap()); + const RenX::Map &map = server->getMap(); + source->sendMessage(channel, "Current Map: "_jrs + map.name + "; GUID: "_jrs + RenX::formatGUID(map)); } } if (match == false) diff --git a/RenX.Core/RenX.Core.vcxproj b/RenX.Core/RenX.Core.vcxproj index d0ebcb1..db0db01 100644 --- a/RenX.Core/RenX.Core.vcxproj +++ b/RenX.Core/RenX.Core.vcxproj @@ -76,6 +76,7 @@ + @@ -86,6 +87,7 @@ + diff --git a/RenX.Core/RenX.Core.vcxproj.filters b/RenX.Core/RenX.Core.vcxproj.filters index 09f1e2b..1c2ec70 100644 --- a/RenX.Core/RenX.Core.vcxproj.filters +++ b/RenX.Core/RenX.Core.vcxproj.filters @@ -53,6 +53,9 @@ Header Files + + Header Files + @@ -76,5 +79,8 @@ Source Files + + Source Files + \ No newline at end of file diff --git a/RenX.Core/RenX_Functions.cpp b/RenX.Core/RenX_Functions.cpp index af09fde..2ae9db5 100644 --- a/RenX.Core/RenX_Functions.cpp +++ b/RenX.Core/RenX_Functions.cpp @@ -862,6 +862,11 @@ Jupiter::String RenX::getFormattedPlayerName(const RenX::PlayerInfo *player) return r; } +Jupiter::StringS RenX::formatGUID(const RenX::Map &map) +{ + return Jupiter::StringS::Format("%.8llX%.8llX", map.guid[0], map.guid[1]); +} + void RenX::sanitizeString(Jupiter::StringType &str) { if (str.isNotEmpty()) diff --git a/RenX.Core/RenX_Functions.h b/RenX.Core/RenX_Functions.h index 9a4954d..24b807c 100644 --- a/RenX.Core/RenX_Functions.h +++ b/RenX.Core/RenX_Functions.h @@ -28,6 +28,7 @@ #include "Jupiter/INIFile.h" #include "Jupiter/String.h" #include "RenX.h" +#include "RenX_Map.h" namespace RenX { @@ -136,6 +137,14 @@ namespace RenX */ RENX_API Jupiter::String getFormattedPlayerName(const RenX::PlayerInfo *player); + /** + * @brief Creates a string containing a human-readable version of a map's GUID + * + * @param map Map containing the GUID to interpret + * @return Human-readable map GUID + */ + RENX_API Jupiter::StringS formatGUID(const RenX::Map &map); + /** * @brief Sanitizes a string into a RCON-ready state by replacing special * characters with HTML-style character codes. diff --git a/RenX.Core/RenX_Map.cpp b/RenX.Core/RenX_Map.cpp new file mode 100644 index 0000000..67bc89a --- /dev/null +++ b/RenX.Core/RenX_Map.cpp @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2016 Jessica James. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Written by Jessica James + */ + +#include "RenX_Map.h" + +RenX::Map::Map() +{ + RenX::Map::Map::guid[0] = 0ULL; + RenX::Map::Map::guid[1] = 0ULL; +} + +RenX::Map::Map(const Jupiter::ReadableString &in_name) : Map() +{ + name = in_name; +} + +RenX::Map::Map(const Jupiter::ReadableString &in_name, uint64_t in_guid[2]) : Map(in_name) +{ + RenX::Map::Map::guid[0] = in_guid[0]; + RenX::Map::Map::guid[1] = in_guid[1]; +} + +bool RenX::Map::equals(const RenX::Map &map) const +{ + return RenX::Map::Map::guid[0] == map.guid[0] && RenX::Map::Map::guid[1] == map.guid[1]; +} \ No newline at end of file diff --git a/RenX.Core/RenX_Map.h b/RenX.Core/RenX_Map.h new file mode 100644 index 0000000..1d80f12 --- /dev/null +++ b/RenX.Core/RenX_Map.h @@ -0,0 +1,57 @@ +/** + * Copyright (C) 2016 Jessica James. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Written by Jessica James + */ + +#if !defined _RENX_MAP_H_HEADER +#define _RENX_MAP_H_HEADER + +/** + * @file RenX_Map.h + * @brief Defines the RenX Map class + */ + +#include "Jupiter/String.h" +#include "RenX.h" + +/** DLL Linkage Nagging */ +#if defined _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4251) +#endif + +namespace RenX +{ + struct RENX_API Map + { + uint64_t guid[2]; + Jupiter::StringS name; + + bool equals(const RenX::Map &map) const; + + Map(); + Map(const Jupiter::ReadableString &in_name); + Map(const Jupiter::ReadableString &in_name, uint64_t in_guid[2]); + }; +} + + +/** Re-enable warnings */ +#if defined _MSC_VER +#pragma warning(pop) +#endif + +#endif // _RENX_MAP_H_HEADER \ No newline at end of file diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp index ae074e7..5da41b2 100644 --- a/RenX.Core/RenX_Server.cpp +++ b/RenX.Core/RenX_Server.cpp @@ -238,7 +238,7 @@ bool RenX::Server::hasMapInRotation(const Jupiter::ReadableString &name) const { size_t index = RenX::Server::maps.size(); while (index != 0) - if (RenX::Server::maps.get(--index)->equalsi(name)) + if (RenX::Server::maps.get(--index)->name.equalsi(name)) return true; return false; } @@ -249,7 +249,7 @@ const Jupiter::ReadableString *RenX::Server::getMapName(const Jupiter::ReadableS const Jupiter::ReadableString *map_name; while (index != 0) { - map_name = RenX::Server::maps.get(--index); + map_name = &RenX::Server::maps.get(--index)->name; if (map_name->findi(name) != Jupiter::INVALID_INDEX) return map_name; } @@ -837,7 +837,7 @@ const Jupiter::ReadableString &RenX::Server::getName() const return RenX::Server::serverName; } -const Jupiter::ReadableString &RenX::Server::getMap() const +const RenX::Map &RenX::Server::getMap() const { return RenX::Server::map; } @@ -1599,15 +1599,32 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) else if (this->lastCommand.equalsi("ping")) RenX::Server::awaitingPong = false; else if (this->lastCommand.equalsi("map")) - this->map = std::move(Jupiter::StringS::substring(line, 1)); + { + // Map | Guid + this->map.name = tokens.getToken(0); + const Jupiter::ReferenceString guid_token = tokens.getToken(1); + + if (guid_token.size() == 32U) + { + this->map.guid[0] = guid_token.substring(0U, 16U).asUnsignedLongLong(16); + this->map.guid[1] = guid_token.substring(16U).asUnsignedLongLong(16); + } + } else if (this->lastCommand.equalsi("serverinfo")) { if (this->lastCommandParams.isEmpty()) { - // "Port" | Port | "Name" | Name | "Level" | Level | "Players" | Players | "Bots" | Bots + // "Port" | Port | "Name" | Name | "Level" | Level | "Players" | Players | "Bots" | Bots | "LevelGUID" | Level GUID this->port = static_cast(tokens.getToken(1).asUnsignedInt(10)); this->serverName = tokens.getToken(3); - this->map = tokens.getToken(5); + this->map.name = tokens.getToken(5); + + const Jupiter::ReferenceString guid_token = tokens.getToken(11); + if (guid_token.size() == 32U) + { + this->map.guid[0] = guid_token.substring(0U, 16U).asUnsignedLongLong(16); + this->map.guid[1] = guid_token.substring(16U).asUnsignedLongLong(16); + } } } else if (this->lastCommand.equalsi("gameinfo"_jrs)) @@ -1647,10 +1664,22 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } else if (this->lastCommand.equalsi("rotation"_jrs)) { - // Map - Jupiter::ReferenceString in_map = Jupiter::ReferenceString::substring(line, 1); + // Map | Guid + const Jupiter::ReadableString &in_map = tokens.getToken(0); if (this->hasMapInRotation(in_map) == false) - this->maps.add(new Jupiter::StringS(in_map)); + { + const Jupiter::ReferenceString guid_token = tokens.getToken(1); + + if (guid_token.size() == 32U) + { + RenX::Map *map = new RenX::Map(in_map); + map->guid[0] = guid_token.substring(0U, 16U).asUnsignedLongLong(16); + map->guid[1] = guid_token.substring(16U).asUnsignedLongLong(16); + this->maps.add(map); + } + else + this->maps.add(new RenX::Map(in_map)); + } } else if (this->lastCommand.equalsi("changename")) { diff --git a/RenX.Core/RenX_Server.h b/RenX.Core/RenX_Server.h index 4fa2ebc..10519fd 100644 --- a/RenX.Core/RenX_Server.h +++ b/RenX.Core/RenX_Server.h @@ -35,6 +35,7 @@ #include "Jupiter/Thinker.h" #include "Jupiter/Rehash.h" #include "RenX.h" +#include "RenX_Map.h" /** DLL Linkage Nagging */ #if defined _MSC_VER @@ -86,7 +87,7 @@ namespace RenX Jupiter::DLList players; /** A list of players in the server */ Jupiter::ArrayList buildings; /** A list of buildings in the server */ Jupiter::ArrayList mutators; /** A list of buildings the server is running */ - Jupiter::ArrayList maps; /** A list of maps in the server's rotation */ + Jupiter::ArrayList maps; /** A list of maps in the server's rotation */ Jupiter::INIFile varData; /** This may be replaced later with a more dedicated type. */ /** @@ -705,7 +706,7 @@ namespace RenX * * @return String containing the current map. */ - const Jupiter::ReadableString &getMap() const; + const RenX::Map &getMap() const; /** * @brief Fetches a command from the list. @@ -949,9 +950,9 @@ namespace RenX Jupiter::StringS rconUser; Jupiter::StringS gameVersion; Jupiter::StringS serverName; - Jupiter::StringS map; Jupiter::StringS lastCommand; Jupiter::StringS lastCommandParams; + RenX::Map map; Jupiter::TCPSocket sock; Jupiter::ReadableString::TokenizeResult commandListFormat; Jupiter::ArrayList commands; diff --git a/RenX.Core/RenX_Tags.cpp b/RenX.Core/RenX_Tags.cpp index e6c4c7e..d0a3e88 100644 --- a/RenX.Core/RenX_Tags.cpp +++ b/RenX.Core/RenX_Tags.cpp @@ -76,6 +76,7 @@ TagsImp::TagsImp() this->INTERNAL_USER_TAG = this->getUniqueInternalTag(); this->INTERNAL_SERVER_NAME_TAG = this->getUniqueInternalTag(); this->INTERNAL_MAP_TAG = this->getUniqueInternalTag(); + this->INTERNAL_MAP_GUID_TAG = this->getUniqueInternalTag(); this->INTERNAL_SERVER_HOSTNAME_TAG = this->getUniqueInternalTag(); this->INTERNAL_SERVER_PORT_TAG = this->getUniqueInternalTag(); this->INTERNAL_SOCKET_HOSTNAME_TAG = this->getUniqueInternalTag(); @@ -186,6 +187,7 @@ TagsImp::TagsImp() this->userTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("UserTag"), STRING_LITERAL_AS_REFERENCE("{USER}")); this->serverNameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("ServerNameTag"), STRING_LITERAL_AS_REFERENCE("{SERVERNAME}")); this->mapTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("MapTag"), STRING_LITERAL_AS_REFERENCE("{MAP}")); + this->mapGUIDTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("MapGUIDTag"), STRING_LITERAL_AS_REFERENCE("{MGUID}")); this->serverHostnameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("ServerHostnameTag"), STRING_LITERAL_AS_REFERENCE("{SERVERHOST}")); this->serverPortTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("ServerPortTag"), STRING_LITERAL_AS_REFERENCE("{SERVERPORT}")); this->socketHostnameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("SocketHostnameTag"), STRING_LITERAL_AS_REFERENCE("{SOCKHOST}")); @@ -336,7 +338,8 @@ void TagsImp::processTags(Jupiter::StringType &msg, const RenX::Server *server, PROCESS_TAG(this->INTERNAL_RULES_TAG, server->getRules()); PROCESS_TAG(this->INTERNAL_USER_TAG, server->getUser()); PROCESS_TAG(this->INTERNAL_SERVER_NAME_TAG, server->getName()); - PROCESS_TAG(this->INTERNAL_MAP_TAG, server->getMap()); + PROCESS_TAG(this->INTERNAL_MAP_TAG, server->getMap().name); + PROCESS_TAG(this->INTERNAL_MAP_GUID_TAG, RenX::formatGUID(server->getMap())); PROCESS_TAG(this->INTERNAL_SERVER_HOSTNAME_TAG, server->getHostname()); PROCESS_TAG(this->INTERNAL_SERVER_PORT_TAG, Jupiter::StringS::Format("%u", server->getPort())); PROCESS_TAG(this->INTERNAL_SOCKET_HOSTNAME_TAG, server->getSocketHostname()); @@ -454,6 +457,7 @@ void TagsImp::sanitizeTags(Jupiter::StringType &fmt) fmt.replace(this->userTag, this->INTERNAL_USER_TAG); fmt.replace(this->serverNameTag, this->INTERNAL_SERVER_NAME_TAG); fmt.replace(this->mapTag, this->INTERNAL_MAP_TAG); + fmt.replace(this->mapGUIDTag, this->INTERNAL_MAP_GUID_TAG); fmt.replace(this->serverHostnameTag, this->INTERNAL_SERVER_HOSTNAME_TAG); fmt.replace(this->serverPortTag, this->INTERNAL_SERVER_PORT_TAG); fmt.replace(this->socketHostnameTag, this->INTERNAL_SOCKET_HOSTNAME_TAG); diff --git a/RenX.Core/RenX_Tags.h b/RenX.Core/RenX_Tags.h index 9c56377..37bcded 100644 --- a/RenX.Core/RenX_Tags.h +++ b/RenX.Core/RenX_Tags.h @@ -61,6 +61,7 @@ namespace RenX Jupiter::StringS INTERNAL_USER_TAG; Jupiter::StringS INTERNAL_SERVER_NAME_TAG; Jupiter::StringS INTERNAL_MAP_TAG; + Jupiter::StringS INTERNAL_MAP_GUID_TAG; Jupiter::StringS INTERNAL_SERVER_HOSTNAME_TAG; Jupiter::StringS INTERNAL_SERVER_PORT_TAG; Jupiter::StringS INTERNAL_SOCKET_HOSTNAME_TAG; @@ -171,6 +172,7 @@ namespace RenX Jupiter::StringS userTag; Jupiter::StringS serverNameTag; Jupiter::StringS mapTag; + Jupiter::StringS mapGUIDTag; Jupiter::StringS serverHostnameTag; Jupiter::StringS serverPortTag; Jupiter::StringS socketHostnameTag;