From 3beb213299eb1671d74fc33c93ac745e69ee80ff Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Sat, 31 Jan 2015 16:58:42 -0500 Subject: [PATCH] Added tags system; updated Jupiter --- Jupiter | 2 +- Release/Bot.lib | Bin 19858 -> 19858 bytes Release/Plugins/RenX.Core.lib | Bin 67706 -> 77548 bytes RenX.Announcements/RenX_Announcements.cpp | 13 +- RenX.Announcements/RenX_Announcements.h | 7 +- RenX.Core/RenX.Core.vcxproj | 2 + RenX.Core/RenX.Core.vcxproj.filters | 6 + RenX.Core/RenX_PlayerInfo.h | 9 +- RenX.Core/RenX_Plugin.cpp | 62 +- RenX.Core/RenX_Plugin.h | 18 +- RenX.Core/RenX_Server.cpp | 299 ++++++++-- RenX.Core/RenX_Server.h | 10 +- RenX.Core/RenX_Tags.cpp | 273 +++++++++ RenX.Core/RenX_Tags.h | 164 ++++++ RenX.Greetings/RenX_Greetings.cpp | 19 +- RenX.Greetings/RenX_Greetings.h | 6 +- RenX.Logging/RenX_Logging.cpp | 687 ++++++++++++---------- RenX.Logging/RenX_Logging.h | 70 +-- RenX.Medals/RenX_Medals.cpp | 37 +- RenX.Medals/RenX_Medals.h | 5 +- 20 files changed, 1250 insertions(+), 439 deletions(-) create mode 100644 RenX.Core/RenX_Tags.cpp create mode 100644 RenX.Core/RenX_Tags.h diff --git a/Jupiter b/Jupiter index 6f02205..2cd14a3 160000 --- a/Jupiter +++ b/Jupiter @@ -1 +1 @@ -Subproject commit 6f022059334b893a77cefcafa7713033e1580f7a +Subproject commit 2cd14a3b5bd0b0cf1efe6bec6cbff60af512af02 diff --git a/Release/Bot.lib b/Release/Bot.lib index 0497b62cdb38deb33e885541889109b3040ff42b..743efbafe512a234c080a8909b9b1692e12707d7 100644 GIT binary patch delta 1708 zcmZ`(OH5Ny5Tyaq@(Z7qJ_`X_%SUX0_xgYRQfMhHB}&wtq@WT*h(Qt;x)OG>Ai>T? zLu_MQ=*9#>NL;x!x+x|m#sz_mF|LG!4KaS^-rM%RYhrhuIp@sGnYk~wrOR#UHaiSX z+2wSr9yK>&-tp(#wf}cd+usNQ_~2-%&fa~sd*Jx4(;y}II@DZ?iK~0y80mp?!$+EI zKcx(gShN%~%*mz(LK&zczZ&=`S)m|zYKUfNahnJke#l`Vo>o|VUWp3vw+hqjM#XBP zsW-ui(j{QFeGFqIRSBlvf^`kB>T9duU@j)XGpCU@7(`$#1)8Af3|2ts7+i3%Mxw5m z5YM|zjbu0*a`jjSvNkh(a&-%!@^k}kaXOrWPW{xa3i#ua8+wmVh+{F@C@I!ZRg<%H zz-JdX60AN6iXJ0v$bpzf($G=09e#Tau%Q?QF95JN9BtYJnc&e zVDy;A-}ywltbP{v`S}F2z3h~c5?=UI6(J#EQ+a|I|43y@1(jET)rbUVDpP6>+!U1_ z2Uy}|Kpe~vWJ*23*$RPFC~s#c$hSjVY6>wchtWz4v2vxp9Rj_raLdV`6GfuwbgJi} zWJMZ|L(H?T@H7vSds`1PbRm36Of*GU!XCNC6RQy>^E$Gi4N9Oy89Eu&7(kqPUrHQC z=S4<#lpXpM4rIea&v)8D?z6+?gm@lwrk|rszBQ(qX)eZ^*@#`?())1<{=}H{B1-q7 z^hxIpcsQoHP0|?Fr#2PGZgVy{+H$R>aZN28ypBArG)fM@%D5d`;vtb&_I)j`;qAv+ zkH6w~IGU7SPq6ZZgvQD335HfDmN~i{JkSQo>XwpBVl6qt(PaLUQbIrZfG0@N!X#tt zO)gdv&BMv4KLhZsH*=9UAf*P delta 1708 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 delta 9273 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.size() != 0) { msg = announcement; - msg.replace(RenX_AnnouncementsPlugin::rulesTag, server->getRules()); + RenX::processTags(msg, server); server->sendMessage(msg); } } @@ -69,11 +69,6 @@ int RenX_AnnouncementsPlugin::OnRehash() int RenX_AnnouncementsPlugin::init() { - RenX_AnnouncementsPlugin::dateTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("DateTag"), STRING_LITERAL_AS_REFERENCE("{DATE}")); - RenX_AnnouncementsPlugin::timeTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("TimeTag"), STRING_LITERAL_AS_REFERENCE("{TIME}")); - RenX_AnnouncementsPlugin::rulesTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("RulesTag"), STRING_LITERAL_AS_REFERENCE("{RULES}"));; - RenX_AnnouncementsPlugin::dateFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("DateFormat"), STRING_LITERAL_AS_REFERENCE("%A, %B %d, %Y")); - RenX_AnnouncementsPlugin::timeFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("TimeFormat"), STRING_LITERAL_AS_REFERENCE("%H:%M:%S")); RenX_AnnouncementsPlugin::random = Jupiter::IRC::Client::Config->getBool(STRING_LITERAL_AS_REFERENCE("RenX.Announcements"), STRING_LITERAL_AS_REFERENCE("Random")); RenX_AnnouncementsPlugin::announcementsFile.load(Jupiter::IRC::Client::Config->get(STRING_LITERAL_AS_REFERENCE("RenX.Announcements"), STRING_LITERAL_AS_REFERENCE("File"), STRING_LITERAL_AS_REFERENCE("Announcements.txt"))); diff --git a/RenX.Announcements/RenX_Announcements.h b/RenX.Announcements/RenX_Announcements.h index bccee5a..65553b4 100644 --- a/RenX.Announcements/RenX_Announcements.h +++ b/RenX.Announcements/RenX_Announcements.h @@ -1,5 +1,5 @@ /** - * Copyright (C) 2014 Justin James. + * Copyright (C) 2014-2015 Justin James. * * This license must be preserved. * Any applications, libraries, or code which make any use of any @@ -43,12 +43,7 @@ private: bool random; unsigned int lastLine; Jupiter::Timer *timer; - Jupiter::StringS dateTag; - Jupiter::StringS timeTag; - Jupiter::StringS rulesTag; //Jupiter::StringS modsTag; - Jupiter::CStringS dateFmt; - Jupiter::CStringS timeFmt; Jupiter::File announcementsFile; }; diff --git a/RenX.Core/RenX.Core.vcxproj b/RenX.Core/RenX.Core.vcxproj index 21d663f..fbbfaa7 100644 --- a/RenX.Core/RenX.Core.vcxproj +++ b/RenX.Core/RenX.Core.vcxproj @@ -79,6 +79,7 @@ + @@ -88,6 +89,7 @@ + diff --git a/RenX.Core/RenX.Core.vcxproj.filters b/RenX.Core/RenX.Core.vcxproj.filters index 24b4e41..9834d81 100644 --- a/RenX.Core/RenX.Core.vcxproj.filters +++ b/RenX.Core/RenX.Core.vcxproj.filters @@ -50,6 +50,9 @@ Header Files + + Header Files + @@ -73,5 +76,8 @@ Source Files + + Source Files + \ No newline at end of file diff --git a/RenX.Core/RenX_PlayerInfo.h b/RenX.Core/RenX_PlayerInfo.h index 49423be..cf28d49 100644 --- a/RenX.Core/RenX_PlayerInfo.h +++ b/RenX.Core/RenX_PlayerInfo.h @@ -1,5 +1,5 @@ /** - * Copyright (C) 2014 Justin James. + * Copyright (C) 2014-2015 Justin James. * * This license must be preserved. * Any applications, libraries, or code which make any use of any @@ -41,16 +41,23 @@ namespace RenX */ struct RENX_API PlayerInfo { + // TODO: Add backpack Jupiter::StringS name; Jupiter::StringS ip; Jupiter::StringS adminType; Jupiter::StringS uuid; + Jupiter::StringS character; + Jupiter::StringS vehicle; uint64_t steamid = 0; uint32_t ip32 = 0; TeamType team = Other; int id = 0; bool isBot = false; time_t joinTime = 0; + + float ping = -1.0f; + float score = 0.0f; + float credits = 0.0f; unsigned int kills = 0; unsigned int deaths = 0; unsigned int suicides = 0; diff --git a/RenX.Core/RenX_Plugin.cpp b/RenX.Core/RenX_Plugin.cpp index 797a89e..af42782 100644 --- a/RenX.Core/RenX_Plugin.cpp +++ b/RenX.Core/RenX_Plugin.cpp @@ -1,5 +1,5 @@ /** - * Copyright (C) 2014 Justin James. + * Copyright (C) 2014-2015 Justin James. * * This license must be preserved. * Any applications, libraries, or code which make any use of any @@ -35,6 +35,16 @@ RenX::Plugin::~Plugin() } } +void RenX::Plugin::RenX_SanitizeTags(Jupiter::StringType &) +{ + return; +} + +void RenX::Plugin::RenX_ProcessTags(Jupiter::StringType &, const RenX::Server *, const RenX::PlayerInfo *, const RenX::PlayerInfo *) +{ + return; +} + void RenX::Plugin::RenX_OnPlayerCreate(Server *, const RenX::PlayerInfo *) { return; @@ -95,16 +105,31 @@ void RenX::Plugin::RenX_OnKill(Server *, const RenX::PlayerInfo *, const RenX::P return; } +void RenX::Plugin::RenX_OnKill(Server *, const Jupiter::ReadableString &, TeamType, const RenX::PlayerInfo *, const Jupiter::ReadableString &) +{ + return; +} + void RenX::Plugin::RenX_OnDie(Server *, const RenX::PlayerInfo *, const Jupiter::ReadableString &) { return; } +void RenX::Plugin::RenX_OnDie(Server *, const Jupiter::ReadableString &, TeamType, const Jupiter::ReadableString &) +{ + return; +} + void RenX::Plugin::RenX_OnDestroy(Server *, const RenX::PlayerInfo *, const Jupiter::ReadableString &, const Jupiter::ReadableString &, ObjectType) { return; } +void RenX::Plugin::RenX_OnDestroy(Server *, const Jupiter::ReadableString &, TeamType, const Jupiter::ReadableString &, TeamType, const Jupiter::ReadableString &, ObjectType) +{ + return; +} + void RenX::Plugin::RenX_OnGameOver(Server *, RenX::WinType, TeamType, int, int) { return; @@ -155,6 +180,41 @@ void RenX::Plugin::RenX_OnLog(Server *, const Jupiter::ReadableString &) return; } +void RenX::Plugin::RenX_XOnVersion(Server *, unsigned int) +{ + return; +} + +void RenX::Plugin::RenX_OnGrantCharacter(Server *, const PlayerInfo *, const Jupiter::ReadableString &) +{ + return; +} + +void RenX::Plugin::RenX_OnGrantWeapon(Server *, const PlayerInfo *, const Jupiter::ReadableString &) +{ + return; +} + +void RenX::Plugin::RenX_OnSpawnVehicle(Server *, const PlayerInfo *, const Jupiter::ReadableString &) +{ + return; +} + +void RenX::Plugin::RenX_OnSpawnVehicleNoOwner(Server *, const TeamType, const Jupiter::ReadableString &) +{ + return; +} + +void RenX::Plugin::RenX_OnMinePlace(Server *, const PlayerInfo *, const Jupiter::ReadableString &) +{ + return; +} + +void RenX::Plugin::RenX_XOnOther(Server *, const Jupiter::ReadableString &) +{ + return; +} + void RenX::Plugin::RenX_OnCommand(Server *, const Jupiter::ReadableString &) { return; diff --git a/RenX.Core/RenX_Plugin.h b/RenX.Core/RenX_Plugin.h index ded8d74..7c3fdc8 100644 --- a/RenX.Core/RenX_Plugin.h +++ b/RenX.Core/RenX_Plugin.h @@ -1,5 +1,5 @@ /** - * Copyright (C) 2014 Justin James. + * Copyright (C) 2014-2015 Justin James. * * This license must be preserved. * Any applications, libraries, or code which make any use of any @@ -38,6 +38,10 @@ namespace RenX class RENX_API Plugin : public Jupiter::Plugin { public: + /** Tag-related events */ + virtual void RenX_SanitizeTags(Jupiter::StringType &fmt); + virtual void RenX_ProcessTags(Jupiter::StringType &msg, const Server *server, const PlayerInfo *player, const PlayerInfo *victim); + /** Non-RCON RenX logs */ virtual void RenX_OnPlayerCreate(Server *server, const PlayerInfo *player); virtual void RenX_OnPlayerDelete(Server *server, const PlayerInfo *player); @@ -57,8 +61,11 @@ namespace RenX virtual void RenX_OnDeploy(Server *server, const PlayerInfo *player, const Jupiter::ReadableString &object); virtual void RenX_OnSuicide(Server *server, const PlayerInfo *player, const Jupiter::ReadableString &damageType); virtual void RenX_OnKill(Server *server, const PlayerInfo *player, const PlayerInfo *victim, const Jupiter::ReadableString &damageType); + virtual void RenX_OnKill(Server *server, const Jupiter::ReadableString &killer, TeamType killerTeam, const PlayerInfo *victim, const Jupiter::ReadableString &damageType); virtual void RenX_OnDie(Server *server, const PlayerInfo *player, const Jupiter::ReadableString &damageType); + virtual void RenX_OnDie(Server *server, const Jupiter::ReadableString &object, TeamType objectTeam, const Jupiter::ReadableString &damageType); virtual void RenX_OnDestroy(Server *server, const PlayerInfo *player, const Jupiter::ReadableString &objectName, const Jupiter::ReadableString &damageType, ObjectType type); + virtual void RenX_OnDestroy(Server *server, const Jupiter::ReadableString &killer, TeamType killerTeam, const Jupiter::ReadableString &objectName, TeamType objectTeam, const Jupiter::ReadableString &damageType, ObjectType type); virtual void RenX_OnGameOver(Server *server, WinType winType, TeamType team, int gScore, int nScore); virtual void RenX_OnGame(Server *server, const Jupiter::ReadableString &raw); @@ -76,6 +83,15 @@ namespace RenX /** Other Logs */ virtual void RenX_OnLog(Server *server, const Jupiter::ReadableString &raw); + /** eXtended RCON */ + virtual void RenX_XOnVersion(Server *server, unsigned int version); + virtual void RenX_OnGrantCharacter(Server *server, const PlayerInfo *player, const Jupiter::ReadableString &character); + virtual void RenX_OnGrantWeapon(Server *server, const PlayerInfo *player, const Jupiter::ReadableString &weapon); + virtual void RenX_OnSpawnVehicle(Server *server, const PlayerInfo *owner, const Jupiter::ReadableString &vehicle); + virtual void RenX_OnSpawnVehicleNoOwner(Server *server, const TeamType team, const Jupiter::ReadableString &vehicle); + virtual void RenX_OnMinePlace(Server *server, const PlayerInfo *player, const Jupiter::ReadableString &mine); + virtual void RenX_XOnOther(Server *server, const Jupiter::ReadableString &raw); + /** Command type */ virtual void RenX_OnCommand(Server *server, const Jupiter::ReadableString &raw); diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp index 0967791..24964e7 100644 --- a/RenX.Core/RenX_Server.cpp +++ b/RenX.Core/RenX_Server.cpp @@ -1,5 +1,5 @@ /** - * Copyright (C) 2014 Justin James. + * Copyright (C) 2014-2015 Justin James. * * This license must be preserved. * Any applications, libraries, or code which make any use of any @@ -572,12 +572,12 @@ void RenX::Server::sendLogChan(const Jupiter::ReadableString &msg) const } } -#define PARSE_PLAYER_DATA_P(playerData) \ +#define PARSE_PLAYER_DATA_P(DATA) \ Jupiter::ReferenceString name; \ TeamType team; \ int id; \ bool isBot; \ - parsePlayerData(playerData, name, team, id, isBot); + parsePlayerData(DATA, name, team, id, isBot); #define PARSE_PLAYER_DATA() PARSE_PLAYER_DATA_P(playerData) @@ -665,12 +665,12 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) }; auto parsePlayerData = [&](const Jupiter::ReadableString &data, Jupiter::ReferenceString &name, TeamType &team, int &id, bool &isBot) { - Jupiter::ReferenceString idToken = playerData.getToken(1, ','); + Jupiter::ReferenceString idToken = Jupiter::ReferenceString::getToken(data, 1, ','); name = Jupiter::ReferenceString::gotoToken(data, 2, ','); - if (playerData[0] == ',') + if (data[0] == ',') team = Other; else - team = RenX::getTeam(playerData[0]); + team = RenX::getTeam(data[0]); if (idToken.get(0) == 'b') { idToken.shiftRight(1); @@ -682,34 +682,51 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) }; auto getPlayerOrAdd = [&](RenX::Server *server, const Jupiter::ReadableString &name, int id, RenX::TeamType team, bool isBot, uint64_t steamid, const Jupiter::ReadableString &ip) { + bool checkBans = false; RenX::PlayerInfo *r = server->getPlayer(id); + auto checkMissing = [&]() + { + if (r->ip32 == 0 && ip.isEmpty() == false) + { + r->ip = ip; + r->ip32 = Jupiter::Socket::pton4(Jupiter::CStringS(r->ip).c_str()); + checkBans = true; + } + if (r->steamid == 0U && steamid != 0U) + { + r->steamid = steamid; + if (this->uuidMode == 0) + r->uuid = this->formatSteamID(r); + checkBans = true; + } + }; if (r == nullptr) { + checkBans = true; r = new RenX::PlayerInfo(); r->id = id; r->name = name; + checkMissing(); if (r->isBot = isBot) r->formatNamePrefix = IRCCOLOR "05[B]"; r->joinTime = time(nullptr); - r->steamid = steamid; - r->ip = ip; - r->ip32 = Jupiter::Socket::pton4(Jupiter::CStringS(r->ip).c_str()); if (id != 0) server->players.add(r); - switch (this->uuidMode) - { - default: - case 0: - if (r->steamid != 0) - r->uuid = this->formatSteamID(r); - break; - case 1: + if (this->uuidMode == 1) r->uuid = r->name; - break; - } + for (size_t i = 0; i < xPlugins.size(); i++) xPlugins.get(i)->RenX_OnPlayerCreate(server, r); - + } + else + { + checkMissing(); + if (r->name.size() == 0) + r->name = name; + } + r->team = team; + if (checkBans) + { const Jupiter::ArrayList &entries = RenX::banDatabase->getEntries(); RenX::BanDatabase::Entry *entry; for (size_t i = 0; i != entries.size(); i++) @@ -728,8 +745,6 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } } } - else if (r->name.size() == 0) r->name = name; - r->team = team; return r; }; @@ -767,22 +782,29 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) PARSE_PLAYER_DATA(); RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0, Jupiter::ReferenceString::empty); Jupiter::ReferenceString victimData = buff.getToken(3, RenX::DelimC); - Jupiter::ReferenceString vname = victimData.getToken(2, ','); + Jupiter::ReferenceString vTeamToken = victimData.getToken(0, ','); Jupiter::ReferenceString vidToken = victimData.getToken(1, ','); - int vid; - bool visBot = false; - if (vidToken[0] == 'b') + if (vTeamToken.size() != 0 && vidToken.size() != 0) { - vidToken.shiftRight(1); - visBot = true; + Jupiter::ReferenceString vname = victimData.getToken(2, ','); + int vid; + bool visBot = false; + if (vidToken[0] == 'b') + { + vidToken.shiftRight(1); + visBot = true; + } + vid = vidToken.asInt(10); + TeamType vteam = RenX::getTeam(vTeamToken.get(0)); + Jupiter::ReferenceString damageType = buff.getToken(5, RenX::DelimC); + RenX::PlayerInfo *victim = getPlayerOrAdd(this, vname, vid, vteam, visBot, 0, Jupiter::ReferenceString::empty); + player->kills++; + if (damageType.equals("Rx_DmgType_Headshot")) player->headshots++; + victim->deaths++; + + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnKill(this, player, victim, damageType); } - vid = vidToken.asInt(10); - TeamType vteam = RenX::getTeam(victimData.getToken(0, ',')[0]); - Jupiter::ReferenceString damageType = buff.getToken(5, RenX::DelimC); - RenX::PlayerInfo *victim = getPlayerOrAdd(this, vname, vid, vteam, visBot, 0, Jupiter::ReferenceString::empty); - player->kills++; - if (damageType.equals("Rx_DmgType_Headshot")) player->headshots++; - victim->deaths++; if (this->needsCList) { @@ -790,9 +812,6 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) this->needsCList = false; } - for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnKill(this, player, victim, damageType); - this->firstKill = true; this->firstDeath = true; onAction(); @@ -962,11 +981,12 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) for (size_t i = 0; i < xPlugins.size(); i++) xPlugins.get(i)->RenX_OnExecute(this, playerData, command); } - else if (action.equals("subscribed")) for (size_t i = 0; i < xPlugins.size(); i++) + else if (action.equals("subscribed")) { if (this->rconUser.isEmpty()) this->rconUser = playerData; - xPlugins.get(i)->RenX_OnSubscribe(this, playerData); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnSubscribe(this, playerData); } else for (size_t i = 0; i < xPlugins.size(); i++) xPlugins.get(i)->RenX_OnRCON(this, buff.gotoToken(1, RenX::DelimC)); @@ -1058,6 +1078,200 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } break; + case 'x': + header.shiftRight(1); + if (header.size() == 0) + { + header.shiftLeft(1); + break; + } + if (header[0] == 'r') // Command response + { + if (header.size() == 1) + { + header.shiftLeft(1); + break; + } + header.shiftRight(1); + switch (header[0]) + { + case 1: // Client list: Normal Player Data | IP | Steam ID | Start Time | Ping | Kills | Deaths | Score | Credits | Class + header.shiftRight(1); + { + PARSE_PLAYER_DATA_P(header); + PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, playerData.asUnsignedLongLong(0), action); + player->ping = static_cast(buff.getToken(4, RenX::DelimC).asDouble()); + player->kills = buff.getToken(5, RenX::DelimC).asUnsignedInt(); + player->deaths = buff.getToken(6, RenX::DelimC).asUnsignedInt(); + player->score = static_cast(buff.getToken(7, RenX::DelimC).asDouble()); + player->credits = static_cast(buff.getToken(8, RenX::DelimC).asDouble()); + player->character = RenX::getCharacter(buff.getToken(9, RenX::DelimC)); + } + header.shiftLeft(1); + break; + case 2: // Ping, Score, Credits list: Normal Player Data | Ping | Score | Credits + header.shiftRight(1); + { + PARSE_PLAYER_DATA_P(header); + PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0U, Jupiter::ReferenceString::empty); + player->ping = static_cast(playerData.asDouble()); + player->score = static_cast(action.asDouble()); + player->credits = static_cast(buff.getToken(3, RenX::DelimC).asDouble()); + } + header.shiftLeft(1); + break; + case 3: // Echo: Data + break; + case 4: // Add Credits: Normal Player Data | Credits + header.shiftRight(1); + { + PARSE_PLAYER_DATA_P(header); + PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0U, Jupiter::ReferenceString::empty); + player->credits = static_cast(playerData.asDouble()); + } + header.shiftLeft(1); + break; + case 5: // Ping: {Average Ping}/{Normal Player Data | Ping} + break; + case 6: // Command 2 on Timer: Time interval + break; + default: + break; + } + header.shiftLeft(1); + } + else if (header.equals("version")) + { + RenX::Server::xRconVersion = playerData.asUnsignedInt(10); + if (this->rconUser.equals(action) == false) + this->rconUser = action; + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_XOnVersion(this, RenX::Server::xRconVersion); + RenX::Server::sock.send(STRING_LITERAL_AS_REFERENCE("_x\x01\n")); + } + else if (header.equals("grant_character")) + { + PARSE_PLAYER_DATA(); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0, Jupiter::ReferenceString::empty); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnGrantCharacter(this, player, action); + player->character = RenX::getCharacter(action); + } + else if (header.equals("grant_weapon")) + { + PARSE_PLAYER_DATA(); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0, Jupiter::ReferenceString::empty); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnGrantWeapon(this, player, action); + } + else if (header.equals("spawn_vehicle")) + { + if (playerData.equalsi("buy")) + { + PARSE_PLAYER_DATA_P(buff.getToken(3, RenX::DelimC)); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0, Jupiter::ReferenceString::empty); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnSpawnVehicle(this, player, action); + } + else + { + RenX::TeamType team; + if (playerData.isEmpty()) + team = Other; + else + team = RenX::getTeam(playerData.get(0)); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnSpawnVehicleNoOwner(this, team, action); + } + } + else if (header.equals("mine_place")) + { + PARSE_PLAYER_DATA(); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0, Jupiter::ReferenceString::empty); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnMinePlace(this, player, action); + } + /*else if (header.equals("mlimit_inc")) + { + }*/ + else if (header.equals("kill")) + { + Jupiter::ReferenceString vData = buff.getToken(3, RenX::DelimC); + if (action.isEmpty() == false && vData.isEmpty() == false) // Safety check + { + struct + { + uint8_t type; // 1 = Player, 2 = Non-Player, 3 = None + Jupiter::ReferenceString data; + } killerData, victimData; + Jupiter::ReadableString &damageType = playerData; + killerData.type = action[0]; + killerData.data = action.substring(1); + victimData.type = vData[0]; + victimData.data = vData.substring(1); + if (killerData.type == 1) // These are already handled in standard RCON logs; update models and move on. + { + { + PARSE_PLAYER_DATA_P(killerData.data.gotoToken(1, ',')); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0, Jupiter::ReferenceString::empty); + player->character = RenX::getCharacter(killerData.data.getToken(0, ',')); + } + if (victimData.type == 1) + { + PARSE_PLAYER_DATA_P(victimData.data.gotoToken(1, ',')); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0, Jupiter::ReferenceString::empty); + player->character = RenX::getCharacter(victimData.data.getToken(0, ',')); + } + } + else if (killerData.type == 3) // No killer! + { + if (victimData.type == 2 && victimData.data.size() != 0) + { + TeamType victimTeam = RenX::getTeam(victimData.data.getToken(0, ',').get(0)); + victimData.data = victimData.data.gotoToken(1, ','); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnDie(this, victimData.data, victimTeam, damageType); + } + } + else if (killerData.data.size() != 0) // Non-player killer (log!) + { + TeamType killerTeam = RenX::getTeam(killerData.data.getToken(0, ',').get(0)); + killerData.data = killerData.data.gotoToken(1, ','); + if (victimData.type == 1) // Non-player killed player + { + PARSE_PLAYER_DATA_P(victimData.data.gotoToken(1, ',')); + RenX::PlayerInfo *player = getPlayerOrAdd(this, name, id, team, isBot, 0, Jupiter::ReferenceString::empty); + player->character = RenX::getCharacter(victimData.data.getToken(0, ',')); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnKill(this, killerData.data, killerTeam, player, damageType); + } + else if (victimData.data.size() != 0) // Non-player destroyed non-player + { + TeamType victimTeam = RenX::getTeam(victimData.data.getToken(0, ',').get(0)); + victimData.data = victimData.data.gotoToken(1, ','); + ObjectType type; + if (victimData.data.match("Rx_Building_*")) + type = Building; + else if (victimData.data.match("Rx_Defence_*")) + type = Defence; + else + type = Vehicle; + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnDestroy(this, killerData.data, killerTeam, victimData.data, victimTeam, damageType, type); + } + } + } + } + else + { + buff.shiftRight(1); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_XOnOther(this, buff); + buff.shiftLeft(1); + } + header.shiftLeft(1); + break; + case 'c': buff.shiftRight(1); for (size_t i = 0; i < xPlugins.size(); i++) @@ -1158,6 +1372,11 @@ unsigned int RenX::Server::getVersion() const return RenX::Server::rconVersion; } +unsigned int RenX::Server::getXVersion() const +{ + return RenX::Server::xRconVersion; +} + 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 9d76fcb..376ea25 100644 --- a/RenX.Core/RenX_Server.h +++ b/RenX.Core/RenX_Server.h @@ -1,5 +1,5 @@ /** - * Copyright (C) 2014 Justin James. + * Copyright (C) 2014-2015 Justin James. * * This license must be preserved. * Any applications, libraries, or code which make any use of any @@ -473,6 +473,13 @@ namespace RenX */ unsigned int getVersion() const; + /** + * @brief Fetches the eXtended-RCON version number, or 0 or none has been set. + * + * @return XRCON version number + */ + unsigned int getXVersion() const; + /** * @brief Fetches the game version string, or an empty string if none has been set. * @@ -513,6 +520,7 @@ namespace RenX bool firstDeath = false; bool firstAction = false; unsigned int rconVersion = 0; + unsigned int xRconVersion = 0; time_t lastAttempt = 0; Jupiter::String lastLine; Jupiter::StringS gameVersion; diff --git a/RenX.Core/RenX_Tags.cpp b/RenX.Core/RenX_Tags.cpp new file mode 100644 index 0000000..04cdff4 --- /dev/null +++ b/RenX.Core/RenX_Tags.cpp @@ -0,0 +1,273 @@ +/** + * Copyright (C) 2015 Justin James. + * + * This license must be preserved. + * Any applications, libraries, or code which make any use of any + * component of this program must not be commercial, unless explicit + * permission is granted from the original author. The use of this + * program for non-profit purposes is permitted. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * In the event that this license restricts you from making desired use of this program, contact the original author. + * Written by Justin James + */ + +#include "Jupiter/Reference_String.h" +#include "Jupiter/INIFile.h" +#include "Jupiter/IRC_Client.h" +#include "RenX_Core.h" +#include "RenX_Functions.h" +#include "RenX_Server.h" +#include "RenX_PlayerInfo.h" +#include "RenX_Plugin.h" +#include "RenX_Tags.h" + +struct TagsImp : RenX::Tags +{ + TagsImp(); + void processTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim); + void sanitizeTags(Jupiter::StringType &fmt); +} _tags; +RenX::Tags *RenX::tags = &_tags; + +TagsImp::TagsImp() +{ + const Jupiter::ReadableString &configSection = Jupiter::IRC::Client::Config->get(RenX::getCore()->getName(), STRING_LITERAL_AS_REFERENCE("TagDefinitions"), RenX::getCore()->getName()); + + /** Global formats */ + this->dateFmt = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("DateFormat"), STRING_LITERAL_AS_REFERENCE("%A, %B %d, %Y")); + this->timeFmt = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("TimeFormat"), STRING_LITERAL_AS_REFERENCE("%H:%M:%S"));; + + /** Internal message tags */ + + /** Global tags */ + this->INTERNAL_DATE_TAG = STRING_LITERAL_AS_REFERENCE("\0DAT\0"); + this->INTERNAL_TIME_TAG = STRING_LITERAL_AS_REFERENCE("\0TIM\0"); + + /** Server tags */ + this->INTERNAL_RCON_VERSION_TAG = STRING_LITERAL_AS_REFERENCE("\0RVER\0"); + this->INTERNAL_GAME_VERSION_TAG = STRING_LITERAL_AS_REFERENCE("\0GVER\0"); + this->INTERNAL_XRCON_VERSION_TAG = STRING_LITERAL_AS_REFERENCE("\0XVER\0"); + this->INTERNAL_RULES_TAG = STRING_LITERAL_AS_REFERENCE("\0RUL\0"); + + /** Player tags*/ + this->INTERNAL_NAME_TAG = STRING_LITERAL_AS_REFERENCE("\0NAME\0"); + this->INTERNAL_RAW_NAME_TAG = STRING_LITERAL_AS_REFERENCE("\0RNAME\0"); + this->INTERNAL_IP_TAG = STRING_LITERAL_AS_REFERENCE("\0IP\0"); + this->INTERNAL_STEAM_TAG = STRING_LITERAL_AS_REFERENCE("\0STEAM\0"); + this->INTERNAL_UUID_TAG = STRING_LITERAL_AS_REFERENCE("\0UUID\0"); + this->INTERNAL_ID_TAG = STRING_LITERAL_AS_REFERENCE("\0ID\0"); + this->INTERNAL_CHARACTER_TAG = STRING_LITERAL_AS_REFERENCE("\0CHR\0"); + this->INTERNAL_VEHICLE_TAG = STRING_LITERAL_AS_REFERENCE("\0VEH\0"); + this->INTERNAL_ADMIN_TAG = STRING_LITERAL_AS_REFERENCE("\0ADM\0"); + this->INTERNAL_PREFIX_TAG = STRING_LITERAL_AS_REFERENCE("\0PFX\0"); + this->INTERNAL_GAME_PREFIX_TAG = STRING_LITERAL_AS_REFERENCE("\0GPF\0"); + this->INTERNAL_TEAM_COLOR_TAG = STRING_LITERAL_AS_REFERENCE("\0TC\0"); + this->INTERNAL_TEAM_SHORT_TAG = STRING_LITERAL_AS_REFERENCE("\0TS\0"); + this->INTERNAL_TEAM_LONG_TAG = STRING_LITERAL_AS_REFERENCE("\0TL\0"); + + /** Victim tags */ + this->INTERNAL_VICTIM_NAME_TAG = STRING_LITERAL_AS_REFERENCE("\0VNAME\0"); + this->INTERNAL_VICTIM_RAW_NAME_TAG = STRING_LITERAL_AS_REFERENCE("\0VRNAME\0"); + this->INTERNAL_VICTIM_IP_TAG = STRING_LITERAL_AS_REFERENCE("\0VIP\0"); + this->INTERNAL_VICTIM_STEAM_TAG = STRING_LITERAL_AS_REFERENCE("\0VSTEAM\0"); + this->INTERNAL_VICTIM_UUID_TAG = STRING_LITERAL_AS_REFERENCE("\0VUUID\0"); + this->INTERNAL_VICTIM_ID_TAG = STRING_LITERAL_AS_REFERENCE("\0VID\0"); + this->INTERNAL_VICTIM_CHARACTER_TAG = STRING_LITERAL_AS_REFERENCE("\0VCHR\0"); + this->INTERNAL_VICTIM_VEHICLE_TAG = STRING_LITERAL_AS_REFERENCE("\0VVEH\0"); + this->INTERNAL_VICTIM_ADMIN_TAG = STRING_LITERAL_AS_REFERENCE("\0VADM\0"); + this->INTERNAL_VICTIM_PREFIX_TAG = STRING_LITERAL_AS_REFERENCE("\0VPFX\0"); + this->INTERNAL_VICTIM_GAME_PREFIX_TAG = STRING_LITERAL_AS_REFERENCE("\0VGPF\0"); + this->INTERNAL_VICTIM_TEAM_COLOR_TAG = STRING_LITERAL_AS_REFERENCE("\0VTC\0"); + this->INTERNAL_VICTIM_TEAM_SHORT_TAG = STRING_LITERAL_AS_REFERENCE("\0VTS\0"); + this->INTERNAL_VICTIM_TEAM_LONG_TAG = STRING_LITERAL_AS_REFERENCE("\0VTL\0"); + + /** Other tags */ + this->INTERNAL_WEAPON_TAG = STRING_LITERAL_AS_REFERENCE("\0WEP\0"); + this->INTERNAL_OBJECT_TAG = STRING_LITERAL_AS_REFERENCE("\0OBJ\0"); + this->INTERNAL_MESSAGE_TAG = STRING_LITERAL_AS_REFERENCE("\0MSG\0"); + this->INTERNAL_NEW_NAME_TAG = STRING_LITERAL_AS_REFERENCE("\0NNAME\0"); + this->INTERNAL_WIN_SCORE_TAG = STRING_LITERAL_AS_REFERENCE("\0WSC\0"); + this->INTERNAL_LOSE_SCORE_TAG = STRING_LITERAL_AS_REFERENCE("\0LSC\0"); + + /** External (config) tags */ + + /** Global tags */ + this->dateTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("DateTag"), STRING_LITERAL_AS_REFERENCE("{DATE}")); + this->timeTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("TimeTag"), STRING_LITERAL_AS_REFERENCE("{TIME}")); + + /** Server tags */ + this->rconVersionTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("RCONVersionTag"), STRING_LITERAL_AS_REFERENCE("{RVER}")); + this->gameVersionTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("GameVersionTag"), STRING_LITERAL_AS_REFERENCE("{GVER}")); + this->xRconVersionTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("XRCONVersionTag"), STRING_LITERAL_AS_REFERENCE("{XVER}")); + this->rulesTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("RulesTag"), STRING_LITERAL_AS_REFERENCE("{RULES}")); + + /** Player tags */ + this->nameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("NameTag"), STRING_LITERAL_AS_REFERENCE("{NAME}")); + this->rawNameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("RawNameTag"), STRING_LITERAL_AS_REFERENCE("{RNAME}")); + this->ipTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("IPTag"), STRING_LITERAL_AS_REFERENCE("{IP}")); + this->steamTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("SteamTag"), STRING_LITERAL_AS_REFERENCE("{STEAM}")); + this->uuidTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("UUIDTag"), STRING_LITERAL_AS_REFERENCE("{UUID}")); + this->idTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("IDTag"), STRING_LITERAL_AS_REFERENCE("{ID}")); + this->characterTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("CharacterTag"), STRING_LITERAL_AS_REFERENCE("{CHAR}")); + this->vehicleTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VehicleTag"), STRING_LITERAL_AS_REFERENCE("{VEH}")); + this->adminTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("AdminTag"), STRING_LITERAL_AS_REFERENCE("{ADMIN}")); + this->prefixTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("PrefixTag"), STRING_LITERAL_AS_REFERENCE("{PREFIX}")); + this->gamePrefixTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("GamePrefixTag"), STRING_LITERAL_AS_REFERENCE("{GPREFIX}")); + this->teamColorTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("TeamColorTag"), STRING_LITERAL_AS_REFERENCE("{TCOLOR}")); + this->teamShortTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("ShortTeamTag"), STRING_LITERAL_AS_REFERENCE("{TEAMS}")); + this->teamLongTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("LongTeamTag"), STRING_LITERAL_AS_REFERENCE("{TEAML}")); + + /** Victim player tags */ + this->victimNameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimNameTag"), STRING_LITERAL_AS_REFERENCE("{VNAME}")); + this->victimRawNameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimRawNameTag"), STRING_LITERAL_AS_REFERENCE("{VRNAME}")); + this->victimIPTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimIPTag"), STRING_LITERAL_AS_REFERENCE("{VIP}")); + this->victimSteamTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimSteamTag"), STRING_LITERAL_AS_REFERENCE("{VSTEAM}")); + this->victimUUIDTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimUUIDTag"), STRING_LITERAL_AS_REFERENCE("{VUUID}")); + this->victimIDTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimIDTag"), STRING_LITERAL_AS_REFERENCE("{VID}")); + this->victimCharacterTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimCharacterTag"), STRING_LITERAL_AS_REFERENCE("{VCHAR}")); + this->victimVehicleTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimVehicleTag"), STRING_LITERAL_AS_REFERENCE("{VVEH}")); + this->victimAdminTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimAdminTag"), STRING_LITERAL_AS_REFERENCE("{VADMIN}")); + this->victimPrefixTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimPrefixTag"), STRING_LITERAL_AS_REFERENCE("{VPREFIX}")); + this->victimGamePrefixTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimGamePrefixTag"), STRING_LITERAL_AS_REFERENCE("{VGPREFIX}")); + this->victimTeamColorTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimTeamColorTag"), STRING_LITERAL_AS_REFERENCE("{VTCOLOR}")); + this->victimTeamShortTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimShortTeamTag"), STRING_LITERAL_AS_REFERENCE("{VTEAMS}")); + this->victimTeamLongTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("VictimLongTeamTag"), STRING_LITERAL_AS_REFERENCE("{VTEAML}")); + + /** Other tags */ + this->weaponTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("WeaponTag"), STRING_LITERAL_AS_REFERENCE("{WEAPON}")); + this->objectTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("ObjectTag"), STRING_LITERAL_AS_REFERENCE("{OBJECT}")); + this->messageTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("MessageTag"), STRING_LITERAL_AS_REFERENCE("{MESSAGE}")); + this->newNameTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("NewNameTag"), STRING_LITERAL_AS_REFERENCE("{NNAME}")); + this->winScoreTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("WinScoreTag"), STRING_LITERAL_AS_REFERENCE("{WINSCORE}")); + this->loseScoreTag = Jupiter::IRC::Client::Config->get(configSection, STRING_LITERAL_AS_REFERENCE("LoseScoreTag"), STRING_LITERAL_AS_REFERENCE("{LOSESCORE}")); +} + +void TagsImp::processTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim) +{ + msg.replace(this->INTERNAL_DATE_TAG, Jupiter::ReferenceString(getTimeFormat(this->dateFmt.c_str()))); + msg.replace(this->INTERNAL_TIME_TAG, Jupiter::ReferenceString(getTimeFormat(this->timeFmt.c_str()))); + if (server != nullptr) + { + msg.replace(this->INTERNAL_RCON_VERSION_TAG, Jupiter::StringS::Format("%u", server->getVersion())); + msg.replace(this->INTERNAL_GAME_VERSION_TAG, server->getGameVersion()); + msg.replace(this->INTERNAL_XRCON_VERSION_TAG, Jupiter::StringS::Format("%u", server->getXVersion())); + msg.replace(this->INTERNAL_RULES_TAG, server->getRules()); + if (player != nullptr) + { + msg.replace(this->INTERNAL_STEAM_TAG, server->formatSteamID(player)); + } + if (victim != nullptr) + { + msg.replace(this->INTERNAL_VICTIM_STEAM_TAG, server->formatSteamID(victim)); + } + } + if (player != nullptr) + { + msg.replace(this->INTERNAL_NAME_TAG, RenX::getFormattedPlayerName(player)); + msg.replace(this->INTERNAL_RAW_NAME_TAG, player->name); + msg.replace(this->INTERNAL_IP_TAG, player->ip); + msg.replace(this->INTERNAL_UUID_TAG, player->uuid); + msg.replace(this->INTERNAL_ID_TAG, Jupiter::StringS::Format("%d", player->id)); + msg.replace(this->INTERNAL_CHARACTER_TAG, RenX::translateName(player->character)); + msg.replace(this->INTERNAL_VEHICLE_TAG, RenX::translateName(player->vehicle)); + msg.replace(this->INTERNAL_ADMIN_TAG, player->adminType); + msg.replace(this->INTERNAL_PREFIX_TAG, player->formatNamePrefix); + msg.replace(this->INTERNAL_GAME_PREFIX_TAG, player->gamePrefix); + msg.replace(this->INTERNAL_TEAM_COLOR_TAG, RenX::getTeamColor(player->team)); + msg.replace(this->INTERNAL_TEAM_SHORT_TAG, RenX::getTeamName(player->team)); + msg.replace(this->INTERNAL_TEAM_LONG_TAG, RenX::getFullTeamName(player->team)); + } + if (victim != nullptr) + { + msg.replace(this->INTERNAL_VICTIM_NAME_TAG, RenX::getFormattedPlayerName(victim)); + msg.replace(this->INTERNAL_VICTIM_RAW_NAME_TAG, victim->name); + msg.replace(this->INTERNAL_VICTIM_IP_TAG, victim->ip); + msg.replace(this->INTERNAL_VICTIM_UUID_TAG, victim->uuid); + msg.replace(this->INTERNAL_VICTIM_ID_TAG, Jupiter::StringS::Format("%d", victim->id)); + msg.replace(this->INTERNAL_VICTIM_CHARACTER_TAG, RenX::translateName(victim->character)); + msg.replace(this->INTERNAL_VICTIM_VEHICLE_TAG, RenX::translateName(victim->vehicle)); + msg.replace(this->INTERNAL_VICTIM_ADMIN_TAG, victim->adminType); + msg.replace(this->INTERNAL_VICTIM_PREFIX_TAG, victim->formatNamePrefix); + msg.replace(this->INTERNAL_VICTIM_GAME_PREFIX_TAG, victim->gamePrefix); + msg.replace(this->INTERNAL_VICTIM_TEAM_COLOR_TAG, RenX::getTeamColor(victim->team)); + msg.replace(this->INTERNAL_VICTIM_TEAM_SHORT_TAG, RenX::getTeamName(victim->team)); + msg.replace(this->INTERNAL_VICTIM_TEAM_LONG_TAG, RenX::getFullTeamName(victim->team)); + } + + Jupiter::ArrayList &xPlugins = *RenX::getCore()->getPlugins(); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_ProcessTags(msg, server, player, victim); +} + +void TagsImp::sanitizeTags(Jupiter::StringType &fmt) +{ + /** Global tags */ + fmt.replace(this->dateTag, this->INTERNAL_DATE_TAG); + fmt.replace(this->timeTag, this->INTERNAL_TIME_TAG); + + /** Server tags */ + fmt.replace(this->rconVersionTag, this->INTERNAL_RCON_VERSION_TAG); + fmt.replace(this->gameVersionTag, this->INTERNAL_GAME_VERSION_TAG); + fmt.replace(this->xRconVersionTag, this->INTERNAL_XRCON_VERSION_TAG); + fmt.replace(this->rulesTag, this->INTERNAL_RULES_TAG); + + /** Player tags */ + fmt.replace(this->nameTag, this->INTERNAL_NAME_TAG); + fmt.replace(this->rawNameTag, this->INTERNAL_RAW_NAME_TAG); + fmt.replace(this->ipTag, this->INTERNAL_IP_TAG); + fmt.replace(this->steamTag, this->INTERNAL_STEAM_TAG); + fmt.replace(this->uuidTag, this->INTERNAL_UUID_TAG); + fmt.replace(this->idTag, this->INTERNAL_ID_TAG); + fmt.replace(this->characterTag, this->INTERNAL_CHARACTER_TAG); + fmt.replace(this->vehicleTag, this->INTERNAL_VEHICLE_TAG); + fmt.replace(this->adminTag, this->INTERNAL_ADMIN_TAG); + fmt.replace(this->prefixTag, this->INTERNAL_PREFIX_TAG); + fmt.replace(this->gamePrefixTag, this->INTERNAL_GAME_PREFIX_TAG); + fmt.replace(this->teamColorTag, this->INTERNAL_TEAM_COLOR_TAG); + fmt.replace(this->teamShortTag, this->INTERNAL_TEAM_SHORT_TAG); + fmt.replace(this->teamLongTag, this->INTERNAL_TEAM_LONG_TAG); + + /** Victim tags */ + fmt.replace(this->victimNameTag, this->INTERNAL_VICTIM_NAME_TAG); + fmt.replace(this->victimRawNameTag, this->INTERNAL_VICTIM_RAW_NAME_TAG); + fmt.replace(this->victimIPTag, this->INTERNAL_VICTIM_IP_TAG); + fmt.replace(this->victimSteamTag, this->INTERNAL_VICTIM_STEAM_TAG); + fmt.replace(this->victimUUIDTag, this->INTERNAL_VICTIM_UUID_TAG); + fmt.replace(this->victimIDTag, this->INTERNAL_VICTIM_ID_TAG); + fmt.replace(this->victimCharacterTag, this->INTERNAL_VICTIM_CHARACTER_TAG); + fmt.replace(this->victimVehicleTag, this->INTERNAL_VICTIM_VEHICLE_TAG); + fmt.replace(this->victimAdminTag, this->INTERNAL_VICTIM_ADMIN_TAG); + fmt.replace(this->victimPrefixTag, this->INTERNAL_VICTIM_PREFIX_TAG); + fmt.replace(this->victimGamePrefixTag, this->INTERNAL_VICTIM_GAME_PREFIX_TAG); + fmt.replace(this->victimTeamColorTag, this->INTERNAL_VICTIM_TEAM_COLOR_TAG); + fmt.replace(this->victimTeamShortTag, this->INTERNAL_VICTIM_TEAM_SHORT_TAG); + fmt.replace(this->victimTeamLongTag, this->INTERNAL_VICTIM_TEAM_LONG_TAG); + + /** Other tags */ + fmt.replace(this->weaponTag, this->INTERNAL_WEAPON_TAG); + fmt.replace(this->objectTag, this->INTERNAL_OBJECT_TAG); + fmt.replace(this->messageTag, this->INTERNAL_MESSAGE_TAG); + fmt.replace(this->newNameTag, this->INTERNAL_NEW_NAME_TAG); + fmt.replace(this->winScoreTag, this->INTERNAL_WIN_SCORE_TAG); + fmt.replace(this->loseScoreTag, this->INTERNAL_LOSE_SCORE_TAG); + + Jupiter::ArrayList &xPlugins = *RenX::getCore()->getPlugins(); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_SanitizeTags(fmt); +} + +/** Foward functions */ + +void RenX::processTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim) +{ + _tags.processTags(msg, server, player, victim); +} + +void RenX::sanitizeTags(Jupiter::StringType &fmt) +{ + _tags.sanitizeTags(fmt); +} \ No newline at end of file diff --git a/RenX.Core/RenX_Tags.h b/RenX.Core/RenX_Tags.h new file mode 100644 index 0000000..e9e1730 --- /dev/null +++ b/RenX.Core/RenX_Tags.h @@ -0,0 +1,164 @@ +/** + * Copyright (C) 2015 Justin James. + * + * This license must be preserved. + * Any applications, libraries, or code which make any use of any + * component of this program must not be commercial, unless explicit + * permission is granted from the original author. The use of this + * program for non-profit purposes is permitted. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * In the event that this license restricts you from making desired use of this program, contact the original author. + * Written by Justin James + */ + +#if !defined _RENX_TAGS_H_HEADER +#define _RENX_TAGS_H_HEADER + +/** + * @file RenX_Tags.h + * @brief Provides tag processing functions + */ + +#include "Jupiter/String.h" +#include "Jupiter/CString.h" +#include "RenX.h" + +/** DLL Linkage Nagging */ +#if defined _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4251) +#endif + +namespace RenX +{ + /** Forward declarations */ + struct PlayerInfo; + class Server; + + RENX_API void processTags(Jupiter::StringType &msg, const RenX::Server *server = nullptr, const RenX::PlayerInfo *player = nullptr, const RenX::PlayerInfo *victim = nullptr); + RENX_API void sanitizeTags(Jupiter::StringType &fmt); + + struct RENX_API Tags + { + /** Global formats */ + Jupiter::CStringS dateFmt; + Jupiter::CStringS timeFmt; + + /** Internal message tags */ + + /** Global tags */ + Jupiter::ReferenceString INTERNAL_DATE_TAG; + Jupiter::ReferenceString INTERNAL_TIME_TAG; + + /** Server tags */ + Jupiter::ReferenceString INTERNAL_RCON_VERSION_TAG; + Jupiter::ReferenceString INTERNAL_GAME_VERSION_TAG; + Jupiter::ReferenceString INTERNAL_XRCON_VERSION_TAG; + Jupiter::ReferenceString INTERNAL_RULES_TAG; + + /** Player tags */ + Jupiter::ReferenceString INTERNAL_NAME_TAG; + Jupiter::ReferenceString INTERNAL_RAW_NAME_TAG; + Jupiter::ReferenceString INTERNAL_IP_TAG; + Jupiter::ReferenceString INTERNAL_STEAM_TAG; + Jupiter::ReferenceString INTERNAL_UUID_TAG; + Jupiter::ReferenceString INTERNAL_ID_TAG; + Jupiter::ReferenceString INTERNAL_CHARACTER_TAG; + Jupiter::ReferenceString INTERNAL_VEHICLE_TAG; + Jupiter::ReferenceString INTERNAL_ADMIN_TAG; + Jupiter::ReferenceString INTERNAL_PREFIX_TAG; + Jupiter::ReferenceString INTERNAL_GAME_PREFIX_TAG; + Jupiter::ReferenceString INTERNAL_TEAM_COLOR_TAG; + Jupiter::ReferenceString INTERNAL_TEAM_SHORT_TAG; + Jupiter::ReferenceString INTERNAL_TEAM_LONG_TAG; + + /** Victim tags */ + Jupiter::ReferenceString INTERNAL_VICTIM_NAME_TAG; + Jupiter::ReferenceString INTERNAL_VICTIM_RAW_NAME_TAG; + Jupiter::ReferenceString INTERNAL_VICTIM_IP_TAG; + Jupiter::ReferenceString INTERNAL_VICTIM_STEAM_TAG; + Jupiter::ReferenceString INTERNAL_VICTIM_UUID_TAG; + Jupiter::ReferenceString INTERNAL_VICTIM_ID_TAG; + Jupiter::ReferenceString INTERNAL_VICTIM_CHARACTER_TAG; + Jupiter::ReferenceString INTERNAL_VICTIM_VEHICLE_TAG; + Jupiter::ReferenceString INTERNAL_VICTIM_ADMIN_TAG; + Jupiter::ReferenceString INTERNAL_VICTIM_PREFIX_TAG; + Jupiter::ReferenceString INTERNAL_VICTIM_GAME_PREFIX_TAG; + Jupiter::ReferenceString INTERNAL_VICTIM_TEAM_COLOR_TAG; + Jupiter::ReferenceString INTERNAL_VICTIM_TEAM_SHORT_TAG; + Jupiter::ReferenceString INTERNAL_VICTIM_TEAM_LONG_TAG; + + /** Other tags */ + Jupiter::ReferenceString INTERNAL_WEAPON_TAG; + Jupiter::ReferenceString INTERNAL_OBJECT_TAG; + Jupiter::ReferenceString INTERNAL_MESSAGE_TAG; + Jupiter::ReferenceString INTERNAL_NEW_NAME_TAG; + Jupiter::ReferenceString INTERNAL_WIN_SCORE_TAG; + Jupiter::ReferenceString INTERNAL_LOSE_SCORE_TAG; + + /** External message tags */ + + /** Global tags */ + Jupiter::StringS dateTag; + Jupiter::StringS timeTag; + + /** Server tags */ + Jupiter::StringS rconVersionTag; + Jupiter::StringS gameVersionTag; + Jupiter::StringS xRconVersionTag; + Jupiter::StringS rulesTag; + + /** Player tags */ + Jupiter::StringS nameTag; + Jupiter::StringS rawNameTag; + Jupiter::StringS ipTag; + Jupiter::StringS steamTag; + Jupiter::StringS uuidTag; + Jupiter::StringS idTag; + Jupiter::StringS characterTag; + Jupiter::StringS vehicleTag; + Jupiter::StringS adminTag; + Jupiter::StringS prefixTag; + Jupiter::StringS gamePrefixTag; + Jupiter::StringS teamColorTag; + Jupiter::StringS teamShortTag; + Jupiter::StringS teamLongTag; + + /** Victim tags */ + Jupiter::StringS victimNameTag; + Jupiter::StringS victimRawNameTag; + Jupiter::StringS victimIPTag; + Jupiter::StringS victimSteamTag; + Jupiter::StringS victimUUIDTag; + Jupiter::StringS victimIDTag; + Jupiter::StringS victimCharacterTag; + Jupiter::StringS victimVehicleTag; + Jupiter::StringS victimAdminTag; + Jupiter::StringS victimPrefixTag; + Jupiter::StringS victimGamePrefixTag; + Jupiter::StringS victimTeamColorTag; + Jupiter::StringS victimTeamShortTag; + Jupiter::StringS victimTeamLongTag; + + /** Other tags */ + Jupiter::StringS weaponTag; + Jupiter::StringS objectTag; + Jupiter::StringS messageTag; + Jupiter::StringS newNameTag; + Jupiter::StringS winScoreTag; + Jupiter::StringS loseScoreTag; + }; + + RENX_API extern Tags *tags; +} + +/** Re-enable warnings */ +#if defined _MSC_VER +#pragma warning(pop) +#endif + +#endif // _RENX_TAGS_H_HEADER \ No newline at end of file diff --git a/RenX.Greetings/RenX_Greetings.cpp b/RenX.Greetings/RenX_Greetings.cpp index baf9697..d9652ab 100644 --- a/RenX.Greetings/RenX_Greetings.cpp +++ b/RenX.Greetings/RenX_Greetings.cpp @@ -1,5 +1,5 @@ /** - * Copyright (C) 2014 Justin James. + * Copyright (C) 2014-2015 Justin James. * * This license must be preserved. * Any applications, libraries, or code which make any use of any @@ -15,21 +15,21 @@ * Written by Justin James */ +#include "Jupiter/IRC_Client.h" +#include "Jupiter/INIFile.h" #include "RenX_Greetings.h" #include "RenX_PlayerInfo.h" #include "RenX_Server.h" -#include "Jupiter/IRC_Client.h" -#include "Jupiter/INIFile.h" +#include "RenX_Tags.h" void RenX_GreetingsPlugin::RenX_OnJoin(RenX::Server *server, const RenX::PlayerInfo *player) { auto sendMessage = [&](const Jupiter::ReadableString &m) { Jupiter::String msg = m; - msg.replace(this->steamTag, server->formatSteamID(player)); - msg.replace(this->ipTag, player->ip); - msg.replace(this->uuidTag, player->uuid); - msg.replace(this->nameTag, player->name); + + RenX::sanitizeTags(msg); + RenX::processTags(msg, server, player); if (this->sendPrivate) server->sendMessage(player, msg); @@ -79,11 +79,6 @@ void RenX_GreetingsPlugin::init() if (RenX_GreetingsPlugin::greetingsFile.getLineCount() == 0) RenX_GreetingsPlugin::greetingsFile.addData(STRING_LITERAL_AS_REFERENCE("Please notify the server administrator to properly configure or disable server greetings.\r\n")); RenX_GreetingsPlugin::lastLine = RenX_GreetingsPlugin::greetingsFile.getLineCount() - 1; - - RenX_GreetingsPlugin::nameTag = Jupiter::IRC::Client::Config->get(RenX_GreetingsPlugin::name, STRING_LITERAL_AS_REFERENCE("NameTag"), STRING_LITERAL_AS_REFERENCE("{NAME}")); - RenX_GreetingsPlugin::ipTag = Jupiter::IRC::Client::Config->get(RenX_GreetingsPlugin::name, STRING_LITERAL_AS_REFERENCE("IPTag"), STRING_LITERAL_AS_REFERENCE("{IP}")); - RenX_GreetingsPlugin::steamTag = Jupiter::IRC::Client::Config->get(RenX_GreetingsPlugin::name, STRING_LITERAL_AS_REFERENCE("SteamTag"), STRING_LITERAL_AS_REFERENCE("{STEAM}")); - RenX_GreetingsPlugin::uuidTag = Jupiter::IRC::Client::Config->get(RenX_GreetingsPlugin::name, STRING_LITERAL_AS_REFERENCE("UUIDTag"), STRING_LITERAL_AS_REFERENCE("{UUID}")); } // Plugin instantiation and entry point. diff --git a/RenX.Greetings/RenX_Greetings.h b/RenX.Greetings/RenX_Greetings.h index 3012b96..92a1ca7 100644 --- a/RenX.Greetings/RenX_Greetings.h +++ b/RenX.Greetings/RenX_Greetings.h @@ -1,5 +1,5 @@ /** - * Copyright (C) 2014 Justin James. + * Copyright (C) 2014-2015 Justin James. * * This license must be preserved. * Any applications, libraries, or code which make any use of any @@ -40,10 +40,6 @@ private: unsigned int lastLine; unsigned int sendMode = 0; /** 0 = Send greetings randomly, 1 = Send greetings sequentially, 2 = Send all greetings */ Jupiter::File greetingsFile; - Jupiter::StringS nameTag; - Jupiter::StringS ipTag; - Jupiter::StringS steamTag; - Jupiter::StringS uuidTag; STRING_LITERAL_AS_NAMED_REFERENCE(name, "RenX.Greetings"); }; diff --git a/RenX.Logging/RenX_Logging.cpp b/RenX.Logging/RenX_Logging.cpp index 28a6168..c9e7ce5 100644 --- a/RenX.Logging/RenX_Logging.cpp +++ b/RenX.Logging/RenX_Logging.cpp @@ -22,40 +22,7 @@ #include "RenX_PlayerInfo.h" #include "RenX_Functions.h" #include "RenX_Server.h" - - -Jupiter::ReferenceString INTERNAL_RCON_VERSION_TAG = STRING_LITERAL_AS_REFERENCE("\0RVER\0"); -Jupiter::ReferenceString INTERNAL_GAME_VERSION_TAG = STRING_LITERAL_AS_REFERENCE("\0GVER\0"); -Jupiter::ReferenceString INTERNAL_NAME_TAG = STRING_LITERAL_AS_REFERENCE("\0NVER\0"); -Jupiter::ReferenceString INTERNAL_RAW_NAME_TAG = STRING_LITERAL_AS_REFERENCE("\0RNAME\0"); -Jupiter::ReferenceString INTERNAL_IP_TAG = STRING_LITERAL_AS_REFERENCE("\0IP\0"); -Jupiter::ReferenceString INTERNAL_STEAM_TAG = STRING_LITERAL_AS_REFERENCE("\0STEAM\0"); -Jupiter::ReferenceString INTERNAL_UUID_TAG = STRING_LITERAL_AS_REFERENCE("\0UUID\0"); -Jupiter::ReferenceString INTERNAL_ID_TAG = STRING_LITERAL_AS_REFERENCE("\0ID\0"); -Jupiter::ReferenceString INTERNAL_ADMIN_TAG = STRING_LITERAL_AS_REFERENCE("\0ADM\0"); -Jupiter::ReferenceString INTERNAL_PREFIX_TAG = STRING_LITERAL_AS_REFERENCE("\0PFX\0"); -Jupiter::ReferenceString INTERNAL_GAME_PREFIX_TAG = STRING_LITERAL_AS_REFERENCE("\0GPF\0"); -Jupiter::ReferenceString INTERNAL_TEAM_COLOR_TAG = STRING_LITERAL_AS_REFERENCE("\0TC\0"); -Jupiter::ReferenceString INTERNAL_TEAM_SHORT_TAG = STRING_LITERAL_AS_REFERENCE("\0TS\0"); -Jupiter::ReferenceString INTERNAL_TEAM_LONG_TAG = STRING_LITERAL_AS_REFERENCE("\0TL\0"); -Jupiter::ReferenceString INTERNAL_VICTIM_NAME_TAG = STRING_LITERAL_AS_REFERENCE("\0VNAME\0"); -Jupiter::ReferenceString INTERNAL_VICTIM_RAW_NAME_TAG = STRING_LITERAL_AS_REFERENCE("\0VRNAME\0"); -Jupiter::ReferenceString INTERNAL_VICTIM_IP_TAG = STRING_LITERAL_AS_REFERENCE("\0VIP\0"); -Jupiter::ReferenceString INTERNAL_VICTIM_STEAM_TAG = STRING_LITERAL_AS_REFERENCE("\0VSTEAM\0"); -Jupiter::ReferenceString INTERNAL_VICTIM_UUID_TAG = STRING_LITERAL_AS_REFERENCE("\0VUUID\0"); -Jupiter::ReferenceString INTERNAL_VICTIM_ID_TAG = STRING_LITERAL_AS_REFERENCE("\0VID\0"); -Jupiter::ReferenceString INTERNAL_VICTIM_ADMIN_TAG = STRING_LITERAL_AS_REFERENCE("\0VADM\0"); -Jupiter::ReferenceString INTERNAL_VICTIM_PREFIX_TAG = STRING_LITERAL_AS_REFERENCE("\0VPFX\0"); -Jupiter::ReferenceString INTERNAL_VICTIM_GAME_PREFIX_TAG = STRING_LITERAL_AS_REFERENCE("\0VGPF\0"); -Jupiter::ReferenceString INTERNAL_VICTIM_TEAM_COLOR_TAG = STRING_LITERAL_AS_REFERENCE("\0VTC\0"); -Jupiter::ReferenceString INTERNAL_VICTIM_TEAM_SHORT_TAG = STRING_LITERAL_AS_REFERENCE("\0VTS\0"); -Jupiter::ReferenceString INTERNAL_VICTIM_TEAM_LONG_TAG = STRING_LITERAL_AS_REFERENCE("\0VTL\0"); -Jupiter::ReferenceString INTERNAL_WEAPON_TAG = STRING_LITERAL_AS_REFERENCE("\0WEP\0"); -Jupiter::ReferenceString INTERNAL_OBJECT_TAG = STRING_LITERAL_AS_REFERENCE("\0OBJ\0"); -Jupiter::ReferenceString INTERNAL_MESSAGE_TAG = STRING_LITERAL_AS_REFERENCE("\0MSG\0"); -Jupiter::ReferenceString INTERNAL_NEW_NAME_TAG = STRING_LITERAL_AS_REFERENCE("\0NNAME\0"); -Jupiter::ReferenceString INTERNAL_WIN_SCORE_TAG = STRING_LITERAL_AS_REFERENCE("\0WSC\0"); -Jupiter::ReferenceString INTERNAL_LOSE_SCORE_TAG = STRING_LITERAL_AS_REFERENCE("\0LSC\0"); +#include "RenX_Tags.h" void RenX_LoggingPlugin::init() { @@ -80,273 +47,204 @@ void RenX_LoggingPlugin::init() RenX_LoggingPlugin::adminLogoutPublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("AdminLogoutPublic"), true); RenX_LoggingPlugin::adminPublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("AdminPublic"), false); RenX_LoggingPlugin::logPublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("LogPublic"), false); + RenX_LoggingPlugin::xVersionPublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("XVersionPublic"), true); + RenX_LoggingPlugin::grantCharacterPublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("GrantCharacterPublic"), false); + RenX_LoggingPlugin::spawnVehiclePublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("SpawnVehiclePublic"), false); + RenX_LoggingPlugin::spawnVehicleNoOwnerPublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("SpawnVehicleNoOwnerPublic"), true); + RenX_LoggingPlugin::minePlacePublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("MinePlacePublic"), false); + RenX_LoggingPlugin::xOtherPublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("XOtherPublic"), false); RenX_LoggingPlugin::commandPublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("CommandPublic"), false); RenX_LoggingPlugin::errorPublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("ErrorPublic"), false); RenX_LoggingPlugin::versionPublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("VersionPublic"), true); RenX_LoggingPlugin::authorizedPublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("AuthorizedPublic"), true); RenX_LoggingPlugin::otherPublic = Jupiter::IRC::Client::Config->getBool(RenX_LoggingPlugin::getName(), STRING_LITERAL_AS_REFERENCE("OtherPublic"), false); - /** Server tags */ - RenX_LoggingPlugin::rconVersionTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("RCONVersionTag"), STRING_LITERAL_AS_REFERENCE("{RVER}")); - RenX_LoggingPlugin::gameVersionTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("GameVersionTag"), STRING_LITERAL_AS_REFERENCE("{GVER}")); - - /** Player tags */ - RenX_LoggingPlugin::nameTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("NameTag"), STRING_LITERAL_AS_REFERENCE("{NAME}")); - RenX_LoggingPlugin::rawNameTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("RawNameTag"), STRING_LITERAL_AS_REFERENCE("{RNAME}")); - RenX_LoggingPlugin::ipTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("IPTag"), STRING_LITERAL_AS_REFERENCE("{IP}")); - RenX_LoggingPlugin::steamTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("SteamTag"), STRING_LITERAL_AS_REFERENCE("{STEAM}")); - RenX_LoggingPlugin::uuidTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("UUIDTag"), STRING_LITERAL_AS_REFERENCE("{UUID}")); - RenX_LoggingPlugin::idTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("IDTag"), STRING_LITERAL_AS_REFERENCE("{ID}")); - RenX_LoggingPlugin::adminTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("AdminTag"), STRING_LITERAL_AS_REFERENCE("{ADMIN}")); - RenX_LoggingPlugin::prefixTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("PrefixTag"), STRING_LITERAL_AS_REFERENCE("{PREFIX}")); - RenX_LoggingPlugin::gamePrefixTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("GamePrefixTag"), STRING_LITERAL_AS_REFERENCE("{GPREFIX}")); - RenX_LoggingPlugin::teamColorTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("TeamColorTag"), STRING_LITERAL_AS_REFERENCE("{TCOLOR}")); - RenX_LoggingPlugin::teamShortTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("ShortTeamTag"), STRING_LITERAL_AS_REFERENCE("{TEAMS}")); - RenX_LoggingPlugin::teamLongTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("LongTeamTag"), STRING_LITERAL_AS_REFERENCE("{TEAML}")); - - /** Victim player tags */ - RenX_LoggingPlugin::victimNameTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("VictimNameTag"), STRING_LITERAL_AS_REFERENCE("{VNAME}")); - RenX_LoggingPlugin::victimRawNameTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("VictimRawNameTag"), STRING_LITERAL_AS_REFERENCE("{VRNAME}")); - RenX_LoggingPlugin::victimIPTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("VictimIPTag"), STRING_LITERAL_AS_REFERENCE("{VIP}")); - RenX_LoggingPlugin::victimSteamTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("VictimSteamTag"), STRING_LITERAL_AS_REFERENCE("{VSTEAM}")); - RenX_LoggingPlugin::victimUUIDTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("VictimUUIDTag"), STRING_LITERAL_AS_REFERENCE("{VUUID}")); - RenX_LoggingPlugin::victimIDTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("VictimIDTag"), STRING_LITERAL_AS_REFERENCE("{VID}")); - RenX_LoggingPlugin::victimAdminTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("VictimAdminTag"), STRING_LITERAL_AS_REFERENCE("{VADMIN}")); - RenX_LoggingPlugin::victimPrefixTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("VictimPrefixTag"), STRING_LITERAL_AS_REFERENCE("{VPREFIX}")); - RenX_LoggingPlugin::victimGamePrefixTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("VictimGamePrefixTag"), STRING_LITERAL_AS_REFERENCE("{VGPREFIX}")); - RenX_LoggingPlugin::victimTeamColorTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("VictimTeamColorTag"), STRING_LITERAL_AS_REFERENCE("{VTCOLOR}")); - RenX_LoggingPlugin::victimTeamShortTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("VictimShortTeamTag"), STRING_LITERAL_AS_REFERENCE("{VTEAMS}")); - RenX_LoggingPlugin::victimTeamLongTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("VictimLongTeamTag"), STRING_LITERAL_AS_REFERENCE("{VTEAML}")); - - /** Other tags */ - RenX_LoggingPlugin::weaponTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("WeaponTag"), STRING_LITERAL_AS_REFERENCE("{WEAPON}")); - RenX_LoggingPlugin::objectTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("ObjectTag"), STRING_LITERAL_AS_REFERENCE("{OBJECT}")); - RenX_LoggingPlugin::messageTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("MessageTag"), STRING_LITERAL_AS_REFERENCE("{MESSAGE}")); - RenX_LoggingPlugin::newNameTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("NewNameTag"), STRING_LITERAL_AS_REFERENCE("{NNAME}")); - RenX_LoggingPlugin::winScoreTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("WinScoreTag"), STRING_LITERAL_AS_REFERENCE("{WINSCORE}")); - RenX_LoggingPlugin::loseScoreTag = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("LoseScoreTag"), STRING_LITERAL_AS_REFERENCE("{LOSESCORE}")); - /** Event formats */ RenX_LoggingPlugin::joinPublicFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("JoinPublicFormat"), - Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " joined the game fighting for the %.*s!", this->nameTag.size(), this->nameTag.ptr(), this->teamLongTag.size(), this->teamLongTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " joined the game fighting for the %.*s!", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr())); RenX_LoggingPlugin::joinAdminFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("JoinAdminFormat"), - Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " joined the game fighting for the %.*s from " IRCBOLD "%.*s" IRCBOLD " using Steam ID " IRCBOLD "%.*s" IRCBOLD ".", this->nameTag.size(), this->nameTag.ptr(), this->teamLongTag.size(), this->teamLongTag.ptr(), this->ipTag.size(), this->ipTag.ptr(), this->steamTag.size(), this->steamTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " joined the game fighting for the %.*s from " IRCBOLD "%.*s" IRCBOLD " using Steam ID " IRCBOLD "%.*s" IRCBOLD ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr(), RenX::tags->ipTag.size(), RenX::tags->ipTag.ptr(), RenX::tags->steamTag.size(), RenX::tags->steamTag.ptr())); RenX_LoggingPlugin::joinNoSteamAdminFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("JoinNoSteamAdminFormat"), - Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " joined the game fighting for the %.*s from " IRCBOLD "%.*s" IRCBOLD ", but is not using Steam.", this->nameTag.size(), this->nameTag.ptr(), this->teamLongTag.size(), this->teamLongTag.ptr(), this->ipTag.size(), this->ipTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " joined the game fighting for the %.*s from " IRCBOLD "%.*s" IRCBOLD ", but is not using Steam.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr(), RenX::tags->ipTag.size(), RenX::tags->ipTag.ptr())); RenX_LoggingPlugin::partFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("PartFormat"), - Jupiter::StringS::Format(IRCCOLOR "12[Part] " IRCBOLD "%.*s" IRCBOLD " has left the %.*s.", this->nameTag.size(), this->nameTag.ptr(), this->teamLongTag.size(), this->teamLongTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "12[Part] " IRCBOLD "%.*s" IRCBOLD " left the %.*s.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr())); RenX_LoggingPlugin::nameChangeFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("NameChangeFormat"), - Jupiter::StringS::Format(IRCBOLD "%.*s" IRCBOLD " has changed their name to " IRCBOLD "%.*s" IRCBOLD ".", this->nameTag.size(), this->nameTag.ptr(), this->newNameTag.size(), this->newNameTag.ptr())); + Jupiter::StringS::Format(IRCBOLD "%.*s" IRCBOLD " changed their name to " IRCBOLD "%.*s" IRCBOLD ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->newNameTag.size(), RenX::tags->newNameTag.ptr())); RenX_LoggingPlugin::teamChangeFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("TeamChangeFormat"), - Jupiter::StringS::Format("%.*s" IRCCOLOR " switched teams!", this->nameTag.size(), this->nameTag.ptr())); + Jupiter::StringS::Format("%.*s" IRCCOLOR " switched teams!", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); RenX_LoggingPlugin::chatFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("ChatFormat"), - Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD ": %.*s", this->nameTag.size(), this->nameTag.ptr(), this->messageTag.size(), this->messageTag.ptr())); + Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD ": %.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); RenX_LoggingPlugin::teamChatFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("TeamChatFormat"), - Jupiter::StringS::Format(IRCBOLD "%.*s" IRCBOLD ": %.*s", this->nameTag.size(), this->nameTag.ptr(), this->messageTag.size(), this->messageTag.ptr())); + Jupiter::StringS::Format(IRCBOLD "%.*s" IRCBOLD ": %.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); RenX_LoggingPlugin::deployFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("DeployFormat"), - Jupiter::StringS::Format(IRCBOLD "%.*s" IRCBOLD " deployed a " IRCBOLD "%.*s" IRCBOLD, this->nameTag.size(), this->nameTag.ptr(), this->objectTag.size(), this->objectTag.ptr())); + Jupiter::StringS::Format(IRCBOLD "%.*s" IRCBOLD " deployed a " IRCBOLD "%.*s" IRCBOLD, RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); RenX_LoggingPlugin::suicideFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("SuicideFormat"), - Jupiter::StringS::Format("%.*s" IRCCOLOR " suicided (death by " IRCCOLOR "12%.*s" IRCCOLOR ").", this->nameTag.size(), this->nameTag.ptr(), this->weaponTag.size(), this->weaponTag.ptr())); + Jupiter::StringS::Format("%.*s" IRCCOLOR " suicided (death by " IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); RenX_LoggingPlugin::killFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("KillFormat"), - Jupiter::StringS::Format("%.*s" IRCCOLOR " killed %.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", this->nameTag.size(), this->nameTag.ptr(), this->victimNameTag.size(), this->victimNameTag.ptr(), this->weaponTag.size(), this->weaponTag.ptr())); + Jupiter::StringS::Format("%.*s" IRCCOLOR " killed %.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimNameTag.size(), RenX::tags->victimNameTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); + + RenX_LoggingPlugin::killFmt2 = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("KillFormat2"), + Jupiter::StringS::Format(IRCCOLOR "%.*s%.*s" IRCCOLOR " killed %.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimNameTag.size(), RenX::tags->victimNameTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); RenX_LoggingPlugin::dieFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("DieFormat"), - Jupiter::StringS::Format("%.*s" IRCCOLOR " died (" IRCCOLOR "12%.*s" IRCCOLOR ").", this->nameTag.size(), this->nameTag.ptr(), this->weaponTag.size(), this->weaponTag.ptr())); + Jupiter::StringS::Format("%.*s" IRCCOLOR " died (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); + + RenX_LoggingPlugin::dieFmt2 = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("DieFormat2"), + Jupiter::StringS::Format(IRCCOLOR "%.*s%.*s" IRCCOLOR " died (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); RenX_LoggingPlugin::destroyBuildingFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("DestroyBuildingFormat"), - Jupiter::StringS::Format("%.*s" IRCCOLOR " destroyed the " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", this->nameTag.size(), this->nameTag.ptr(), this->victimTeamColorTag.size(), this->victimTeamColorTag.ptr(), this->objectTag.size(), this->objectTag.ptr(), this->weaponTag.size(), this->weaponTag.ptr())); + Jupiter::StringS::Format("%.*s" IRCCOLOR " destroyed the " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); + RenX_LoggingPlugin::destroyBuildingFmt2 = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("DestroyBuildingFormat2"), + Jupiter::StringS::Format(IRCCOLOR "%.*s%.*s" IRCCOLOR " destroyed the " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); + RenX_LoggingPlugin::destroyDefenceFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("DestroyDefenceFormat"), - Jupiter::StringS::Format("%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", this->nameTag.size(), this->nameTag.ptr(), this->victimTeamColorTag.size(), this->victimTeamColorTag.ptr(), this->objectTag.size(), this->objectTag.ptr(), this->weaponTag.size(), this->weaponTag.ptr())); + Jupiter::StringS::Format("%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); + RenX_LoggingPlugin::destroyDefenceFmt2 = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("DestroyDefenceFormat2"), + Jupiter::StringS::Format(IRCCOLOR "%.*s%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); + RenX_LoggingPlugin::destroyVehicleFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("DestroyVehicleFormat"), - Jupiter::StringS::Format("%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", this->nameTag.size(), this->nameTag.ptr(), this->victimTeamColorTag.size(), this->victimTeamColorTag.ptr(), this->objectTag.size(), this->objectTag.ptr(), this->weaponTag.size(), this->weaponTag.ptr())); + Jupiter::StringS::Format("%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); + + RenX_LoggingPlugin::destroyVehicleFmt2 = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("DestroyVehicleFormat2"), + Jupiter::StringS::Format(IRCCOLOR "%.*s%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); RenX_LoggingPlugin::gameOverFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("GameOverFormat"), - Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR "%.*s The " IRCBOLD "%.*s" IRCBOLD " won by " IRCBOLD "%.*s" IRCBOLD, this->teamColorTag.size(), this->teamColorTag.ptr(), this->teamLongTag.size(), this->teamLongTag.ptr(), this->messageTag.size(), this->messageTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR "%.*s The " IRCBOLD "%.*s" IRCBOLD " won by " IRCBOLD "%.*s" IRCBOLD, RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); RenX_LoggingPlugin::gameOverTieFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("GameOverTieNoWinFormat"), - Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR "10 The battle ended in a " IRCBOLD "%.*s" IRCBOLD " - Victory handed to " IRCBOLD IRCCOLOR "%.*s%.*s" IRCBOLD, this->messageTag.size(), this->messageTag.ptr(), this->teamColorTag.size(), this->teamColorTag.ptr(), this->teamLongTag.size(), this->teamLongTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR "10 The battle ended in a " IRCBOLD "%.*s" IRCBOLD " - Victory handed to " IRCBOLD IRCCOLOR "%.*s%.*s" IRCBOLD, RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr(), RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr())); RenX_LoggingPlugin::gameOverTieNoWinFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("GameOverTieFormat"), - Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR "10 The battle ended in a " IRCBOLD "%.*s" IRCBOLD, this->messageTag.size(), this->messageTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR "10 The battle ended in a " IRCBOLD "%.*s" IRCBOLD, RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); RenX_LoggingPlugin::gameOverScoreFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("GameOverScoreFormat"), - Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR "%.*s %.*s" IRCCOLOR ": %.*s | " IRCCOLOR "%.*s%.*s" IRCCOLOR ": %.*s", this->teamColorTag.size(), this->teamColorTag.ptr(), this->teamLongTag.size(), this->teamLongTag.ptr(), this->winScoreTag.size(), this->winScoreTag.ptr(), this->victimTeamColorTag.size(), this->victimTeamColorTag.ptr(), this->victimTeamLongTag.size(), this->victimTeamLongTag.ptr(), this->loseScoreTag.size(), this->loseScoreTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR "%.*s %.*s" IRCCOLOR ": %.*s | " IRCCOLOR "%.*s%.*s" IRCCOLOR ": %.*s", RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr(), RenX::tags->winScoreTag.size(), RenX::tags->winScoreTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->victimTeamLongTag.size(), RenX::tags->victimTeamLongTag.ptr(), RenX::tags->loseScoreTag.size(), RenX::tags->loseScoreTag.ptr())); RenX_LoggingPlugin::gameFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("GameFormat"), - Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR " %.*s", this->messageTag.size(), this->messageTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); RenX_LoggingPlugin::executeFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("ExecuteFormat"), - Jupiter::StringS::Format(IRCCOLOR "07%.*s executed: %.*s", this->nameTag.size(), this->nameTag.ptr(), this->messageTag.size(), this->messageTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "07%.*s executed: %.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); RenX_LoggingPlugin::evaFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("EVAFormat"), - Jupiter::StringS::Format(IRCCOLOR "09EVA: %.*s", this->messageTag.size(), this->messageTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "09EVA: %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); RenX_LoggingPlugin::evaPrivateFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("EVAPrivateFormat"), - Jupiter::StringS::Format(IRCCOLOR "12(EVA -> %.*s): %.*s", this->rawNameTag.size(), this->rawNameTag.ptr(), this->messageTag.size(), this->messageTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "12(EVA -> %.*s): %.*s", RenX::tags->rawNameTag.size(), RenX::tags->rawNameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); RenX_LoggingPlugin::subscribeFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("SubscribeFormat"), - Jupiter::StringS::Format(IRCCOLOR "03%.*s has subscribed to the RCON data stream.", this->nameTag.size(), this->nameTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "03%.*s subscribed to the RCON data stream.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); RenX_LoggingPlugin::rconFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("RCONFormat"), - Jupiter::StringS::Format(IRCCOLOR "05[RCON]" IRCCOLOR " %.*s", this->messageTag.size(), this->messageTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "05[RCON]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); RenX_LoggingPlugin::adminLoginFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("AdminLoginFormat"), - Jupiter::StringS::Format(IRCCOLOR "07[Admin] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " has logged in with " IRCCOLOR "07" IRCBOLD "%.*s" IRCBOLD IRCNORMAL " privledges.", this->nameTag.size(), this->nameTag.ptr(), this->adminTag.size(), this->adminTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "07[Admin] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " logged in with " IRCCOLOR "07" IRCBOLD "%.*s" IRCBOLD IRCNORMAL " privledges.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->adminTag.size(), RenX::tags->adminTag.ptr())); RenX_LoggingPlugin::adminGrantFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("AdminGrantFormat"), - Jupiter::StringS::Format(IRCCOLOR "07[Admin] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " has been granted " IRCCOLOR "07" IRCBOLD "%.*s" IRCBOLD IRCNORMAL " privledges.", this->nameTag.size(), this->nameTag.ptr(), this->adminTag.size(), this->adminTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "07[Admin] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " was granted " IRCCOLOR "07" IRCBOLD "%.*s" IRCBOLD IRCNORMAL " privledges.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->adminTag.size(), RenX::tags->adminTag.ptr())); RenX_LoggingPlugin::adminLogoutFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("AdminLogoutFormat"), - Jupiter::StringS::Format(IRCCOLOR "07[Admin] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " has logged out of their " IRCCOLOR "07" IRCBOLD "%.*s" IRCBOLD IRCNORMAL " privledges.", this->nameTag.size(), this->nameTag.ptr(), this->adminTag.size(), this->adminTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "07[Admin] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " logged out of their " IRCCOLOR "07" IRCBOLD "%.*s" IRCBOLD IRCNORMAL " privledges.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->adminTag.size(), RenX::tags->adminTag.ptr())); RenX_LoggingPlugin::adminFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("AdminFormat"), - Jupiter::StringS::Format(IRCCOLOR "07[Admin]" IRCCOLOR " %.*s", this->messageTag.size(), this->messageTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "07[Admin]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); RenX_LoggingPlugin::logFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("LogFormat"), - Jupiter::StringS::Format(IRCCOLOR "07[Log]" IRCCOLOR " %.*s", this->messageTag.size(), this->messageTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "07[Log]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); + + RenX_LoggingPlugin::xVersionFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("XVersionFormat"), + Jupiter::StringS::Format(IRCCOLOR "03This server is using eXtended RCON version %.*s", RenX::tags->xRconVersionTag.size(), RenX::tags->xRconVersionTag.ptr())); + + RenX_LoggingPlugin::grantCharacterFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("GrantCharacterFormat"), + Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " is now a " IRCBOLD IRCCOLOR "%.*s%.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->victimCharacterTag.size(), RenX::tags->victimCharacterTag.ptr())); + + RenX_LoggingPlugin::spawnVehicleFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("SpawnVehicleFormat"), + Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*s%.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->victimVehicleTag.size(), RenX::tags->victimVehicleTag.ptr())); + + RenX_LoggingPlugin::spawnVehicleNoOwnerFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("SpawnVehicleNoOwnerFormat"), + Jupiter::StringS::Format("A " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD " has spawned.", RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->vehicleTag.size(), RenX::tags->vehicleTag.ptr())); + + RenX_LoggingPlugin::minePlaceFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("MinePlaceFormat"), + Jupiter::StringS::Format(IRCCOLOR "07[C4] " IRCCOLOR IRCBOLD "%.*s" IRCCOLOR IRCBOLD " placed a " IRCBOLD IRCCOLOR "12%.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); + + RenX_LoggingPlugin::xOtherFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("XOtherFormat"), + Jupiter::StringS::Format(IRCCOLOR "06[XOther]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); RenX_LoggingPlugin::commandFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("CommandFormat"), Jupiter::StringS::Format("")); // Disabled by default. RenX_LoggingPlugin::errorFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("ErrorFormat"), - Jupiter::StringS::Format(IRCCOLOR "04[Error]" IRCCOLOR " %.*s", this->messageTag.size(), this->messageTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "04[Error]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); RenX_LoggingPlugin::versionFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("VersionFormat"), - Jupiter::StringS::Format(IRCCOLOR "03Renegade X RCON connection established; using RCON verison " IRCBOLD "%.*s" IRCBOLD " for game version " IRCBOLD "%.*s" IRCBOLD, this->rconVersionTag.size(), this->rconVersionTag.ptr(), this->gameVersionTag.size(), this->gameVersionTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "03Renegade X RCON connection established; using RCON verison " IRCBOLD "%.*s" IRCBOLD " for game version " IRCBOLD "%.*s" IRCBOLD, RenX::tags->rconVersionTag.size(), RenX::tags->rconVersionTag.ptr(), RenX::tags->gameVersionTag.size(), RenX::tags->gameVersionTag.ptr())); RenX_LoggingPlugin::authorizedFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("AuthorizedFormat"), Jupiter::StringS::Format(IRCCOLOR "03RCON authorization completed.")); RenX_LoggingPlugin::otherFmt = Jupiter::IRC::Client::Config->get(this->getName(), STRING_LITERAL_AS_REFERENCE("OtherFormat"), - Jupiter::StringS::Format(IRCCOLOR "06[Other]" IRCCOLOR " %.*s", this->messageTag.size(), this->messageTag.ptr())); + Jupiter::StringS::Format(IRCCOLOR "06[Other]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); /** Sanitize tags in formats to prevent explotation */ - this->sanitizeTags(joinPublicFmt); - this->sanitizeTags(joinAdminFmt); - this->sanitizeTags(joinNoSteamAdminFmt); - this->sanitizeTags(partFmt); - this->sanitizeTags(nameChangeFmt); - this->sanitizeTags(teamChangeFmt); - this->sanitizeTags(chatFmt); - this->sanitizeTags(teamChatFmt); - this->sanitizeTags(deployFmt); - this->sanitizeTags(suicideFmt); - this->sanitizeTags(dieFmt); - this->sanitizeTags(killFmt); - this->sanitizeTags(destroyBuildingFmt); - this->sanitizeTags(destroyDefenceFmt); - this->sanitizeTags(destroyVehicleFmt); - this->sanitizeTags(gameOverFmt); - this->sanitizeTags(gameOverTieFmt); - this->sanitizeTags(gameOverTieNoWinFmt); - this->sanitizeTags(gameOverScoreFmt); - this->sanitizeTags(gameFmt); - this->sanitizeTags(executeFmt); - this->sanitizeTags(evaFmt); - this->sanitizeTags(evaPrivateFmt); - this->sanitizeTags(subscribeFmt); - this->sanitizeTags(rconFmt); - this->sanitizeTags(adminLoginFmt); - this->sanitizeTags(adminGrantFmt); - this->sanitizeTags(adminLogoutFmt); - this->sanitizeTags(adminFmt); - this->sanitizeTags(logFmt); - this->sanitizeTags(commandFmt); - this->sanitizeTags(errorFmt); - this->sanitizeTags(versionFmt); - this->sanitizeTags(authorizedFmt); - this->sanitizeTags(otherFmt); -} - -void RenX_LoggingPlugin::sanitizeTags(Jupiter::StringType &fmt) const -{ - /** Server tags */ - fmt.replace(this->rconVersionTag, INTERNAL_RCON_VERSION_TAG); - fmt.replace(this->gameVersionTag, INTERNAL_GAME_VERSION_TAG); - - /** Player tags */ - fmt.replace(this->nameTag, INTERNAL_NAME_TAG); - fmt.replace(this->rawNameTag, INTERNAL_RAW_NAME_TAG); - fmt.replace(this->ipTag, INTERNAL_IP_TAG); - fmt.replace(this->steamTag, INTERNAL_STEAM_TAG); - fmt.replace(this->uuidTag, INTERNAL_UUID_TAG); - fmt.replace(this->idTag, INTERNAL_ID_TAG); - fmt.replace(this->adminTag, INTERNAL_ADMIN_TAG); - fmt.replace(this->prefixTag, INTERNAL_PREFIX_TAG); - fmt.replace(this->gamePrefixTag, INTERNAL_GAME_PREFIX_TAG); - fmt.replace(this->teamColorTag, INTERNAL_TEAM_COLOR_TAG); - fmt.replace(this->teamShortTag, INTERNAL_TEAM_SHORT_TAG); - fmt.replace(this->teamLongTag, INTERNAL_TEAM_LONG_TAG); - - /** Victim tags */ - fmt.replace(this->victimNameTag, INTERNAL_VICTIM_NAME_TAG); - fmt.replace(this->victimRawNameTag, INTERNAL_VICTIM_RAW_NAME_TAG); - fmt.replace(this->victimIPTag, INTERNAL_VICTIM_IP_TAG); - fmt.replace(this->victimSteamTag, INTERNAL_VICTIM_STEAM_TAG); - fmt.replace(this->victimUUIDTag, INTERNAL_VICTIM_UUID_TAG); - fmt.replace(this->victimIDTag, INTERNAL_VICTIM_ID_TAG); - fmt.replace(this->victimAdminTag, INTERNAL_VICTIM_ADMIN_TAG); - fmt.replace(this->victimPrefixTag, INTERNAL_VICTIM_PREFIX_TAG); - fmt.replace(this->victimGamePrefixTag, INTERNAL_VICTIM_GAME_PREFIX_TAG); - fmt.replace(this->victimTeamColorTag, INTERNAL_VICTIM_TEAM_COLOR_TAG); - fmt.replace(this->victimTeamShortTag, INTERNAL_VICTIM_TEAM_SHORT_TAG); - fmt.replace(this->victimTeamLongTag, INTERNAL_VICTIM_TEAM_LONG_TAG); - - /** Other tags */ - fmt.replace(this->weaponTag, INTERNAL_WEAPON_TAG); - fmt.replace(this->objectTag, INTERNAL_OBJECT_TAG); - fmt.replace(this->messageTag, INTERNAL_MESSAGE_TAG); - fmt.replace(this->newNameTag, INTERNAL_NEW_NAME_TAG); - fmt.replace(this->winScoreTag, INTERNAL_WIN_SCORE_TAG); - fmt.replace(this->loseScoreTag, INTERNAL_LOSE_SCORE_TAG); -} - -void RenX_LoggingPlugin::processTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim) const -{ - msg.replace(INTERNAL_RCON_VERSION_TAG, Jupiter::StringS::Format("%u", server->getVersion())); - msg.replace(INTERNAL_GAME_VERSION_TAG, server->getGameVersion()); - if (player != nullptr) - { - msg.replace(INTERNAL_NAME_TAG, RenX::getFormattedPlayerName(player)); - msg.replace(INTERNAL_RAW_NAME_TAG, player->name); - msg.replace(INTERNAL_IP_TAG, player->ip); - msg.replace(INTERNAL_STEAM_TAG, server->formatSteamID(player)); - msg.replace(INTERNAL_UUID_TAG, player->uuid); - msg.replace(INTERNAL_ID_TAG, Jupiter::StringS::Format("%d", player->id)); - msg.replace(INTERNAL_ADMIN_TAG, player->adminType); - msg.replace(INTERNAL_PREFIX_TAG, player->formatNamePrefix); - msg.replace(INTERNAL_GAME_PREFIX_TAG, player->gamePrefix); - msg.replace(INTERNAL_TEAM_COLOR_TAG, RenX::getTeamColor(player->team)); - msg.replace(INTERNAL_TEAM_SHORT_TAG, RenX::getTeamName(player->team)); - msg.replace(INTERNAL_TEAM_LONG_TAG, RenX::getFullTeamName(player->team)); - } - if (victim != nullptr) - { - msg.replace(INTERNAL_VICTIM_NAME_TAG, RenX::getFormattedPlayerName(victim)); - msg.replace(INTERNAL_VICTIM_RAW_NAME_TAG, victim->name); - msg.replace(INTERNAL_VICTIM_IP_TAG, victim->ip); - msg.replace(INTERNAL_VICTIM_STEAM_TAG, server->formatSteamID(victim)); - msg.replace(INTERNAL_VICTIM_UUID_TAG, victim->uuid); - msg.replace(INTERNAL_VICTIM_ID_TAG, Jupiter::StringS::Format("%d", victim->id)); - msg.replace(INTERNAL_VICTIM_ADMIN_TAG, victim->adminType); - msg.replace(INTERNAL_VICTIM_PREFIX_TAG, victim->formatNamePrefix); - msg.replace(INTERNAL_VICTIM_GAME_PREFIX_TAG, victim->gamePrefix); - msg.replace(INTERNAL_VICTIM_TEAM_COLOR_TAG, RenX::getTeamColor(victim->team)); - msg.replace(INTERNAL_VICTIM_TEAM_SHORT_TAG, RenX::getTeamName(victim->team)); - msg.replace(INTERNAL_VICTIM_TEAM_LONG_TAG, RenX::getFullTeamName(victim->team)); - } + RenX::sanitizeTags(joinPublicFmt); + RenX::sanitizeTags(joinAdminFmt); + RenX::sanitizeTags(joinNoSteamAdminFmt); + RenX::sanitizeTags(partFmt); + RenX::sanitizeTags(nameChangeFmt); + RenX::sanitizeTags(teamChangeFmt); + RenX::sanitizeTags(chatFmt); + RenX::sanitizeTags(teamChatFmt); + RenX::sanitizeTags(deployFmt); + RenX::sanitizeTags(suicideFmt); + RenX::sanitizeTags(dieFmt); + RenX::sanitizeTags(dieFmt2); + RenX::sanitizeTags(killFmt); + RenX::sanitizeTags(killFmt2); + RenX::sanitizeTags(destroyBuildingFmt); + RenX::sanitizeTags(destroyBuildingFmt2); + RenX::sanitizeTags(destroyDefenceFmt); + RenX::sanitizeTags(destroyDefenceFmt2); + RenX::sanitizeTags(destroyVehicleFmt); + RenX::sanitizeTags(destroyVehicleFmt2); + RenX::sanitizeTags(gameOverFmt); + RenX::sanitizeTags(gameOverTieFmt); + RenX::sanitizeTags(gameOverTieNoWinFmt); + RenX::sanitizeTags(gameOverScoreFmt); + RenX::sanitizeTags(gameFmt); + RenX::sanitizeTags(executeFmt); + RenX::sanitizeTags(evaFmt); + RenX::sanitizeTags(evaPrivateFmt); + RenX::sanitizeTags(subscribeFmt); + RenX::sanitizeTags(rconFmt); + RenX::sanitizeTags(adminLoginFmt); + RenX::sanitizeTags(adminGrantFmt); + RenX::sanitizeTags(adminLogoutFmt); + RenX::sanitizeTags(adminFmt); + RenX::sanitizeTags(logFmt); + RenX::sanitizeTags(xVersionFmt); + RenX::sanitizeTags(grantCharacterFmt); + RenX::sanitizeTags(spawnVehicleFmt); + RenX::sanitizeTags(spawnVehicleNoOwnerFmt); + RenX::sanitizeTags(minePlaceFmt); + RenX::sanitizeTags(xOtherFmt); + RenX::sanitizeTags(commandFmt); + RenX::sanitizeTags(errorFmt); + RenX::sanitizeTags(versionFmt); + RenX::sanitizeTags(authorizedFmt); + RenX::sanitizeTags(otherFmt); } typedef void(RenX::Server::*logFuncType)(const Jupiter::ReadableString &msg) const; @@ -359,7 +257,7 @@ void RenX_LoggingPlugin::RenX_OnJoin(RenX::Server *server, const RenX::PlayerInf msg = this->joinPublicFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player); + RenX::processTags(msg, server, player); server->sendPubChan(msg); } } @@ -369,7 +267,7 @@ void RenX_LoggingPlugin::RenX_OnJoin(RenX::Server *server, const RenX::PlayerInf msg = this->joinAdminFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player); + RenX::processTags(msg, server, player); server->sendAdmChan(msg); } } @@ -385,7 +283,7 @@ void RenX_LoggingPlugin::RenX_OnPart(RenX::Server *server, const RenX::PlayerInf Jupiter::String msg = this->partFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player); + RenX::processTags(msg, server, player); (server->*func)(msg); } } @@ -401,8 +299,8 @@ void RenX_LoggingPlugin::RenX_OnNameChange(RenX::Server *server, const RenX::Pla Jupiter::String msg = this->nameChangeFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player); - msg.replace(INTERNAL_NEW_NAME_TAG, newPlayerName); + RenX::processTags(msg, server, player); + msg.replace(RenX::tags->INTERNAL_NEW_NAME_TAG, newPlayerName); (server->*func)(msg); } } @@ -418,7 +316,7 @@ void RenX_LoggingPlugin::RenX_OnTeamChange(RenX::Server *server, const RenX::Pla Jupiter::String msg = this->teamChangeFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player); + RenX::processTags(msg, server, player); (server->*func)(msg); } } @@ -434,8 +332,8 @@ void RenX_LoggingPlugin::RenX_OnChat(RenX::Server *server, const RenX::PlayerInf Jupiter::String msg = this->chatFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player); - msg.replace(INTERNAL_MESSAGE_TAG, message); + RenX::processTags(msg, server, player); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, message); (server->*func)(msg); } } @@ -451,16 +349,14 @@ void RenX_LoggingPlugin::RenX_OnTeamChat(RenX::Server *server, const RenX::Playe Jupiter::String msg = this->teamChatFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player); - msg.replace(INTERNAL_MESSAGE_TAG, message); + RenX::processTags(msg, server, player); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, message); (server->*func)(msg); } } void RenX_LoggingPlugin::RenX_OnDeploy(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &object) { - const Jupiter::ReadableString &translated = RenX::translateName(object); - logFuncType func; if (RenX_LoggingPlugin::deployPublic) func = &RenX::Server::sendLogChan; @@ -470,16 +366,14 @@ void RenX_LoggingPlugin::RenX_OnDeploy(RenX::Server *server, const RenX::PlayerI Jupiter::String msg = this->deployFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player); - msg.replace(INTERNAL_OBJECT_TAG, translated); + RenX::processTags(msg, server, player); + msg.replace(RenX::tags->INTERNAL_OBJECT_TAG, RenX::translateName(object)); (server->*func)(msg); } } void RenX_LoggingPlugin::RenX_OnSuicide(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &damageType) { - const Jupiter::ReadableString &translated = RenX::translateName(damageType); - logFuncType func; if (RenX_LoggingPlugin::suicidePublic) func = &RenX::Server::sendLogChan; @@ -489,16 +383,14 @@ void RenX_LoggingPlugin::RenX_OnSuicide(RenX::Server *server, const RenX::Player Jupiter::String msg = this->suicideFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player); - msg.replace(INTERNAL_WEAPON_TAG, translated); + RenX::processTags(msg, server, player); + msg.replace(RenX::tags->INTERNAL_WEAPON_TAG, RenX::translateName(damageType)); (server->*func)(msg); } } void RenX_LoggingPlugin::RenX_OnKill(RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim, const Jupiter::ReadableString &damageType) { - const Jupiter::ReadableString &translated = RenX::translateName(damageType); - logFuncType func; if (RenX_LoggingPlugin::killPublic) func = &RenX::Server::sendLogChan; @@ -508,16 +400,35 @@ void RenX_LoggingPlugin::RenX_OnKill(RenX::Server *server, const RenX::PlayerInf Jupiter::String msg = this->killFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player, victim); - msg.replace(INTERNAL_WEAPON_TAG, translated); + RenX::processTags(msg, server, player, victim); + msg.replace(RenX::tags->INTERNAL_WEAPON_TAG, RenX::translateName(damageType)); (server->*func)(msg); } } -void RenX_LoggingPlugin::RenX_OnDie(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &damageType) +void RenX_LoggingPlugin::RenX_OnKill(RenX::Server *server, const Jupiter::ReadableString &killer, RenX::TeamType killerTeam, const RenX::PlayerInfo *victim, const Jupiter::ReadableString &damageType) { - const Jupiter::ReadableString &translated = RenX::translateName(damageType); + logFuncType func; + if (RenX_LoggingPlugin::killPublic) + func = &RenX::Server::sendLogChan; + else + func = &RenX::Server::sendAdmChan; + + Jupiter::String msg = this->killFmt2; + if (msg.isEmpty() == false) + { + RenX::processTags(msg, server, nullptr, victim); + msg.replace(RenX::tags->INTERNAL_NAME_TAG, RenX::translateName(killer)); + msg.replace(RenX::tags->INTERNAL_TEAM_COLOR_TAG, RenX::getTeamColor(killerTeam)); + msg.replace(RenX::tags->INTERNAL_TEAM_SHORT_TAG, RenX::getTeamName(killerTeam)); + msg.replace(RenX::tags->INTERNAL_TEAM_LONG_TAG, RenX::getFullTeamName(killerTeam)); + msg.replace(RenX::tags->INTERNAL_WEAPON_TAG, RenX::translateName(damageType)); + (server->*func)(msg); + } +} +void RenX_LoggingPlugin::RenX_OnDie(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &damageType) +{ logFuncType func; if (RenX_LoggingPlugin::diePublic) func = &RenX::Server::sendLogChan; @@ -527,8 +438,29 @@ void RenX_LoggingPlugin::RenX_OnDie(RenX::Server *server, const RenX::PlayerInfo Jupiter::String msg = this->dieFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player); - msg.replace(INTERNAL_WEAPON_TAG, translated); + RenX::processTags(msg, server, player); + msg.replace(RenX::tags->INTERNAL_WEAPON_TAG, RenX::translateName(damageType)); + (server->*func)(msg); + } +} + +void RenX_LoggingPlugin::RenX_OnDie(RenX::Server *server, const Jupiter::ReadableString &object, RenX::TeamType objectTeam, const Jupiter::ReadableString &damageType) +{ + logFuncType func; + if (RenX_LoggingPlugin::diePublic) + func = &RenX::Server::sendLogChan; + else + func = &RenX::Server::sendAdmChan; + + Jupiter::String msg = this->dieFmt2; + if (msg.isEmpty() == false) + { + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_NAME_TAG, RenX::translateName(object)); + msg.replace(RenX::tags->INTERNAL_TEAM_COLOR_TAG, RenX::getTeamColor(objectTeam)); + msg.replace(RenX::tags->INTERNAL_TEAM_SHORT_TAG, RenX::getTeamName(objectTeam)); + msg.replace(RenX::tags->INTERNAL_TEAM_LONG_TAG, RenX::getFullTeamName(objectTeam)); + msg.replace(RenX::tags->INTERNAL_WEAPON_TAG, RenX::translateName(damageType)); (server->*func)(msg); } } @@ -557,24 +489,55 @@ void RenX_LoggingPlugin::RenX_OnDestroy(RenX::Server *server, const RenX::Player if (msg.isEmpty() == false) { RenX::TeamType victimTeam = RenX::getEnemy(player->team); - this->processTags(msg, server, player); - msg.replace(INTERNAL_VICTIM_TEAM_COLOR_TAG, RenX::getTeamColor(victimTeam)); - msg.replace(INTERNAL_VICTIM_TEAM_SHORT_TAG, RenX::getTeamName(victimTeam)); - msg.replace(INTERNAL_VICTIM_TEAM_LONG_TAG, RenX::getFullTeamName(victimTeam)); - msg.replace(INTERNAL_OBJECT_TAG, RenX::translateName(objectName)); - msg.replace(INTERNAL_WEAPON_TAG, RenX::translateName(damageType)); + RenX::processTags(msg, server, player); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_COLOR_TAG, RenX::getTeamColor(victimTeam)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_SHORT_TAG, RenX::getTeamName(victimTeam)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_LONG_TAG, RenX::getFullTeamName(victimTeam)); + msg.replace(RenX::tags->INTERNAL_OBJECT_TAG, RenX::translateName(objectName)); + msg.replace(RenX::tags->INTERNAL_WEAPON_TAG, RenX::translateName(damageType)); (server->*func)(msg); } } -void RenX_LoggingPlugin::RenX_OnGameOver(RenX::Server *server, RenX::WinType winType, RenX::TeamType team, int gScore, int nScore) +void RenX_LoggingPlugin::RenX_OnDestroy(RenX::Server *server, const Jupiter::ReadableString &killer, RenX::TeamType killerTeam, const Jupiter::ReadableString &objectName, RenX::TeamType objectTeam, const Jupiter::ReadableString &damageType, RenX::ObjectType type) { - const Jupiter::ReadableString &gTeamColor = RenX::getTeamColor(RenX::TeamType::GDI); - const Jupiter::ReadableString &gTeamName = RenX::getFullTeamName(RenX::TeamType::GDI); + logFuncType func; + if (RenX_LoggingPlugin::destroyPublic) + func = &RenX::Server::sendLogChan; + else + func = &RenX::Server::sendAdmChan; - const Jupiter::ReadableString &nTeamColor = RenX::getTeamColor(RenX::TeamType::Nod); - const Jupiter::ReadableString &nTeamName = RenX::getFullTeamName(RenX::TeamType::Nod); + Jupiter::String msg; + switch (type) + { + case RenX::ObjectType::Building: + msg = this->destroyBuildingFmt2; + break; + case RenX::ObjectType::Defence: + msg = this->destroyDefenceFmt2; + break; + default: + msg = this->destroyVehicleFmt2; + break; + } + if (msg.isEmpty() == false) + { + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_NAME_TAG, RenX::translateName(killer)); + msg.replace(RenX::tags->INTERNAL_TEAM_COLOR_TAG, RenX::getTeamColor(killerTeam)); + msg.replace(RenX::tags->INTERNAL_TEAM_SHORT_TAG, RenX::getTeamName(killerTeam)); + msg.replace(RenX::tags->INTERNAL_TEAM_LONG_TAG, RenX::getFullTeamName(killerTeam)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_COLOR_TAG, RenX::getTeamColor(objectTeam)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_SHORT_TAG, RenX::getTeamName(objectTeam)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_LONG_TAG, RenX::getFullTeamName(objectTeam)); + msg.replace(RenX::tags->INTERNAL_OBJECT_TAG, RenX::translateName(objectName)); + msg.replace(RenX::tags->INTERNAL_WEAPON_TAG, RenX::translateName(damageType)); + (server->*func)(msg); + } +} +void RenX_LoggingPlugin::RenX_OnGameOver(RenX::Server *server, RenX::WinType winType, RenX::TeamType team, int gScore, int nScore) +{ RenX::TeamType loserTeam = RenX::getEnemy(team); int winScore; int loseScore; @@ -610,15 +573,15 @@ void RenX_LoggingPlugin::RenX_OnGameOver(RenX::Server *server, RenX::WinType win if (msg.isEmpty() == false) { - msg.replace(INTERNAL_TEAM_COLOR_TAG, RenX::getTeamColor(team)); - msg.replace(INTERNAL_TEAM_SHORT_TAG, RenX::getTeamName(team)); - msg.replace(INTERNAL_TEAM_LONG_TAG, RenX::getFullTeamName(team)); - msg.replace(INTERNAL_WIN_SCORE_TAG, Jupiter::StringS::Format("%d", winScore)); - msg.replace(INTERNAL_LOSE_SCORE_TAG, Jupiter::StringS::Format("%d", loseScore)); - msg.replace(INTERNAL_VICTIM_TEAM_COLOR_TAG, RenX::getTeamColor(loserTeam)); - msg.replace(INTERNAL_VICTIM_TEAM_SHORT_TAG, RenX::getTeamName(loserTeam)); - msg.replace(INTERNAL_VICTIM_TEAM_LONG_TAG, RenX::getFullTeamName(loserTeam)); - msg.replace(INTERNAL_MESSAGE_TAG, RenX::translateWinType(winType)); + msg.replace(RenX::tags->INTERNAL_TEAM_COLOR_TAG, RenX::getTeamColor(team)); + msg.replace(RenX::tags->INTERNAL_TEAM_SHORT_TAG, RenX::getTeamName(team)); + msg.replace(RenX::tags->INTERNAL_TEAM_LONG_TAG, RenX::getFullTeamName(team)); + msg.replace(RenX::tags->INTERNAL_WIN_SCORE_TAG, Jupiter::StringS::Format("%d", winScore)); + msg.replace(RenX::tags->INTERNAL_LOSE_SCORE_TAG, Jupiter::StringS::Format("%d", loseScore)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_COLOR_TAG, RenX::getTeamColor(loserTeam)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_SHORT_TAG, RenX::getTeamName(loserTeam)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_LONG_TAG, RenX::getFullTeamName(loserTeam)); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, RenX::translateWinType(winType)); (server->*func)(msg); } @@ -631,15 +594,15 @@ void RenX_LoggingPlugin::RenX_OnGameOver(RenX::Server *server, RenX::WinType win if (msg.isEmpty() == false) { - msg.replace(INTERNAL_TEAM_COLOR_TAG, RenX::getTeamColor(team)); - msg.replace(INTERNAL_TEAM_SHORT_TAG, RenX::getTeamName(team)); - msg.replace(INTERNAL_TEAM_LONG_TAG, RenX::getFullTeamName(team)); - msg.replace(INTERNAL_WIN_SCORE_TAG, Jupiter::StringS::Format("%d", winScore)); - msg.replace(INTERNAL_LOSE_SCORE_TAG, Jupiter::StringS::Format("%d", loseScore)); - msg.replace(INTERNAL_VICTIM_TEAM_COLOR_TAG, RenX::getTeamColor(loserTeam)); - msg.replace(INTERNAL_VICTIM_TEAM_SHORT_TAG, RenX::getTeamName(loserTeam)); - msg.replace(INTERNAL_VICTIM_TEAM_LONG_TAG, RenX::getFullTeamName(loserTeam)); - msg.replace(INTERNAL_MESSAGE_TAG, RenX::translateWinType(winType)); + msg.replace(RenX::tags->INTERNAL_TEAM_COLOR_TAG, RenX::getTeamColor(team)); + msg.replace(RenX::tags->INTERNAL_TEAM_SHORT_TAG, RenX::getTeamName(team)); + msg.replace(RenX::tags->INTERNAL_TEAM_LONG_TAG, RenX::getFullTeamName(team)); + msg.replace(RenX::tags->INTERNAL_WIN_SCORE_TAG, Jupiter::StringS::Format("%d", winScore)); + msg.replace(RenX::tags->INTERNAL_LOSE_SCORE_TAG, Jupiter::StringS::Format("%d", loseScore)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_COLOR_TAG, RenX::getTeamColor(loserTeam)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_SHORT_TAG, RenX::getTeamName(loserTeam)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_LONG_TAG, RenX::getFullTeamName(loserTeam)); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, RenX::translateWinType(winType)); (server->*func)(msg); } @@ -658,8 +621,8 @@ void RenX_LoggingPlugin::RenX_OnGame(RenX::Server *server, const Jupiter::Readab Jupiter::String msg = this->gameFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server); - msg.replace(INTERNAL_MESSAGE_TAG, raw); + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, raw); (server->*func)(msg); } } @@ -679,7 +642,7 @@ void RenX_LoggingPlugin::RenX_OnExecute(RenX::Server *server, const Jupiter::Rea if (msg.isEmpty() == false) { processTags(msg, server); - msg.replace(INTERNAL_MESSAGE_TAG, Jupiter::ReferenceString::gotoToken(command, 1, ' ')); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, Jupiter::ReferenceString::gotoToken(command, 1, ' ')); server->sendLogChan(msg); return; } @@ -694,7 +657,7 @@ void RenX_LoggingPlugin::RenX_OnExecute(RenX::Server *server, const Jupiter::Rea { Jupiter::ReferenceString message = Jupiter::ReferenceString::gotoToken(command, 2, ' '); processTags(msg, server, player); - msg.replace(INTERNAL_MESSAGE_TAG, message); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, message); (server->*func)(msg); return; } @@ -704,8 +667,8 @@ void RenX_LoggingPlugin::RenX_OnExecute(RenX::Server *server, const Jupiter::Rea if (msg.isEmpty() == false) { processTags(msg, server); - msg.replace(INTERNAL_NAME_TAG, user); - msg.replace(INTERNAL_MESSAGE_TAG, command); + msg.replace(RenX::tags->INTERNAL_NAME_TAG, user); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, command); (server->*func)(msg); } // Add a format check later for if user == us. @@ -722,8 +685,8 @@ void RenX_LoggingPlugin::RenX_OnSubscribe(RenX::Server *server, const Jupiter::R Jupiter::String msg = this->subscribeFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server); - msg.replace(INTERNAL_NAME_TAG, user); + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_NAME_TAG, user); (server->*func)(msg); } } @@ -739,16 +702,14 @@ void RenX_LoggingPlugin::RenX_OnRCON(RenX::Server *server, const Jupiter::Readab Jupiter::String msg = this->rconFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server); - msg.replace(INTERNAL_MESSAGE_TAG, raw); + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, raw); (server->*func)(msg); } } void RenX_LoggingPlugin::RenX_OnAdminLogin(RenX::Server *server, const RenX::PlayerInfo *player) { - const Jupiter::ReadableString &playerName = RenX::getFormattedPlayerName(player); - logFuncType func; if (RenX_LoggingPlugin::adminLoginPublic) func = &RenX::Server::sendLogChan; @@ -758,15 +719,13 @@ void RenX_LoggingPlugin::RenX_OnAdminLogin(RenX::Server *server, const RenX::Pla Jupiter::String msg = this->adminLoginFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player); + RenX::processTags(msg, server, player); (server->*func)(msg); } } void RenX_LoggingPlugin::RenX_OnAdminGrant(RenX::Server *server, const RenX::PlayerInfo *player) { - const Jupiter::ReadableString &playerName = RenX::getFormattedPlayerName(player); - logFuncType func; if (RenX_LoggingPlugin::adminGrantPublic) func = &RenX::Server::sendLogChan; @@ -776,15 +735,13 @@ void RenX_LoggingPlugin::RenX_OnAdminGrant(RenX::Server *server, const RenX::Pla Jupiter::String msg = this->adminGrantFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player); + RenX::processTags(msg, server, player); (server->*func)(msg); } } void RenX_LoggingPlugin::RenX_OnAdminLogout(RenX::Server *server, const RenX::PlayerInfo *player) { - const Jupiter::ReadableString &playerName = RenX::getFormattedPlayerName(player); - logFuncType func; if (RenX_LoggingPlugin::adminLogoutPublic) func = &RenX::Server::sendLogChan; @@ -794,7 +751,7 @@ void RenX_LoggingPlugin::RenX_OnAdminLogout(RenX::Server *server, const RenX::Pl Jupiter::String msg = this->adminLogoutFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server, player); + RenX::processTags(msg, server, player); (server->*func)(msg); } } @@ -810,8 +767,8 @@ void RenX_LoggingPlugin::RenX_OnAdmin(RenX::Server *server, const Jupiter::Reada Jupiter::String msg = this->adminFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server); - msg.replace(INTERNAL_MESSAGE_TAG, raw); + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, raw); (server->*func)(msg); } } @@ -827,8 +784,120 @@ void RenX_LoggingPlugin::RenX_OnLog(RenX::Server *server, const Jupiter::Readabl Jupiter::String msg = this->logFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server); - msg.replace(INTERNAL_MESSAGE_TAG, raw); + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, raw); + (server->*func)(msg); + } +} + +void RenX_LoggingPlugin::RenX_XOnVersion(RenX::Server *server, unsigned int version) +{ + logFuncType func; + if (RenX_LoggingPlugin::xVersionPublic) + func = &RenX::Server::sendLogChan; + else + func = &RenX::Server::sendAdmChan; + + Jupiter::String msg = this->xVersionFmt; + if (msg.isEmpty() == false) + { + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_XRCON_VERSION_TAG, Jupiter::StringS::Format("%u", version)); + (server->*func)(msg); + } +} + +void RenX_LoggingPlugin::RenX_OnGrantCharacter(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &character) +{ + if (player->character.equals(RenX::getCharacter(character)) == false) + { + logFuncType func; + if (RenX_LoggingPlugin::grantCharacterPublic) + func = &RenX::Server::sendLogChan; + else + func = &RenX::Server::sendAdmChan; + + Jupiter::String msg = this->grantCharacterFmt; + if (msg.isEmpty() == false) + { + RenX::processTags(msg, server, player); + msg.replace(RenX::tags->INTERNAL_VICTIM_CHARACTER_TAG, RenX::translateName(character)); + (server->*func)(msg); + } + } +} + +void RenX_LoggingPlugin::RenX_OnSpawnVehicle(RenX::Server *server, const RenX::PlayerInfo *owner, const Jupiter::ReadableString &vehicle) +{ + logFuncType func; + if (RenX_LoggingPlugin::spawnVehiclePublic) + func = &RenX::Server::sendLogChan; + else + func = &RenX::Server::sendAdmChan; + + Jupiter::String msg = this->spawnVehicleFmt; + if (msg.isEmpty() == false) + { + RenX::processTags(msg, server, owner); + msg.replace(RenX::tags->INTERNAL_VICTIM_VEHICLE_TAG, RenX::translateName(vehicle)); + (server->*func)(msg); + } +} + +void RenX_LoggingPlugin::RenX_OnSpawnVehicleNoOwner(RenX::Server *server, const RenX::TeamType team, const Jupiter::ReadableString &vehicle) +{ + logFuncType func; + if (RenX_LoggingPlugin::spawnVehicleNoOwnerPublic) + func = &RenX::Server::sendLogChan; + else + func = &RenX::Server::sendAdmChan; + + Jupiter::String msg = this->spawnVehicleNoOwnerFmt; + if (msg.isEmpty() == false) + { + RenX::TeamType otherTeam = RenX::getEnemy(team); + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_TEAM_COLOR_TAG, RenX::getTeamColor(team)); + msg.replace(RenX::tags->INTERNAL_TEAM_SHORT_TAG, RenX::getTeamName(team)); + msg.replace(RenX::tags->INTERNAL_TEAM_LONG_TAG, RenX::getFullTeamName(team)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_COLOR_TAG, RenX::getTeamColor(otherTeam)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_SHORT_TAG, RenX::getTeamName(otherTeam)); + msg.replace(RenX::tags->INTERNAL_VICTIM_TEAM_LONG_TAG, RenX::getFullTeamName(otherTeam)); + msg.replace(RenX::tags->INTERNAL_VEHICLE_TAG, RenX::translateName(vehicle)); + (server->*func)(msg); + } +} + +void RenX_LoggingPlugin::RenX_OnMinePlace(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &mine) +{ + logFuncType func; + if (RenX_LoggingPlugin::minePlacePublic) + func = &RenX::Server::sendLogChan; + else + func = &RenX::Server::sendAdmChan; + + Jupiter::String msg = this->minePlaceFmt; + if (msg.isEmpty() == false) + { + RenX::processTags(msg, server, player); + msg.replace(RenX::tags->INTERNAL_OBJECT_TAG, RenX::translateName(mine)); + (server->*func)(msg); + } +} + +void RenX_LoggingPlugin::RenX_XOnOther(RenX::Server *server, const Jupiter::ReadableString &raw) +{ + logFuncType func; + if (RenX_LoggingPlugin::xOtherPublic) + func = &RenX::Server::sendLogChan; + else + func = &RenX::Server::sendAdmChan; + + Jupiter::String msg = this->xOtherFmt; + if (msg.isEmpty() == false) + { + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, raw); (server->*func)(msg); } } @@ -844,8 +913,8 @@ void RenX_LoggingPlugin::RenX_OnCommand(RenX::Server *server, const Jupiter::Rea Jupiter::String msg = this->commandFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server); - msg.replace(INTERNAL_MESSAGE_TAG, raw); + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, raw); (server->*func)(msg); } } @@ -861,8 +930,8 @@ void RenX_LoggingPlugin::RenX_OnError(RenX::Server *server, const Jupiter::Reada Jupiter::String msg = this->errorFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server); - msg.replace(INTERNAL_MESSAGE_TAG, raw); + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, raw); (server->*func)(msg); } } @@ -878,8 +947,8 @@ void RenX_LoggingPlugin::RenX_OnVersion(RenX::Server *server, const Jupiter::Rea Jupiter::String msg = this->versionFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server); - msg.replace(INTERNAL_MESSAGE_TAG, raw); + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, raw); (server->*func)(msg); } } @@ -895,8 +964,8 @@ void RenX_LoggingPlugin::RenX_OnAuthorized(RenX::Server *server, const Jupiter:: Jupiter::String msg = this->authorizedFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server); - msg.replace(INTERNAL_MESSAGE_TAG, raw); + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, raw); (server->*func)(msg); } } @@ -912,8 +981,8 @@ void RenX_LoggingPlugin::RenX_OnOther(RenX::Server *server, char token, const Ju Jupiter::String msg = this->otherFmt; if (msg.isEmpty() == false) { - this->processTags(msg, server); - msg.replace(INTERNAL_MESSAGE_TAG, raw); + RenX::processTags(msg, server); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, raw); (server->*func)(msg); } } diff --git a/RenX.Logging/RenX_Logging.h b/RenX.Logging/RenX_Logging.h index 37c49c6..b964aa6 100644 --- a/RenX.Logging/RenX_Logging.h +++ b/RenX.Logging/RenX_Logging.h @@ -35,8 +35,11 @@ public: // RenX::Plugin void RenX_OnDeploy(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &object) override; void RenX_OnSuicide(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &damageType) override; void RenX_OnKill(RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim, const Jupiter::ReadableString &damageType) override; + void RenX_OnKill(RenX::Server *server, const Jupiter::ReadableString &killer, RenX::TeamType killerTeam, const RenX::PlayerInfo *victim, const Jupiter::ReadableString &damageType) override; void RenX_OnDie(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &damageType) override; + void RenX_OnDie(RenX::Server *server, const Jupiter::ReadableString &object, RenX::TeamType objectTeam, const Jupiter::ReadableString &damageType) override; void RenX_OnDestroy(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &objectName, const Jupiter::ReadableString &damageType, RenX::ObjectType type) override; + void RenX_OnDestroy(RenX::Server *server, const Jupiter::ReadableString &killer, RenX::TeamType killerTeam, const Jupiter::ReadableString &objectName, RenX::TeamType objectTeam, const Jupiter::ReadableString &damageType, RenX::ObjectType type) override; void RenX_OnGameOver(RenX::Server *server, RenX::WinType winType, RenX::TeamType team, int gScore, int nScore) override; void RenX_OnGame(RenX::Server *server, const Jupiter::ReadableString &raw) override; @@ -50,6 +53,14 @@ public: // RenX::Plugin void RenX_OnAdmin(RenX::Server *server, const Jupiter::ReadableString &raw) override; void RenX_OnLog(RenX::Server *server, const Jupiter::ReadableString &raw) override; + + void RenX_XOnVersion(RenX::Server *server, unsigned int version) override; + void RenX_OnGrantCharacter(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &character) override; + void RenX_OnSpawnVehicle(RenX::Server *server, const RenX::PlayerInfo *owner, const Jupiter::ReadableString &vehicle) override; + void RenX_OnSpawnVehicleNoOwner(RenX::Server *server, const RenX::TeamType team, const Jupiter::ReadableString &vehicle) override; + void RenX_OnMinePlace(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &mine) override; + void RenX_XOnOther(RenX::Server *server, const Jupiter::ReadableString &raw) override; + void RenX_OnCommand(RenX::Server *server, const Jupiter::ReadableString &raw) override; void RenX_OnError(RenX::Server *server, const Jupiter::ReadableString &raw) override; void RenX_OnVersion(RenX::Server *server, const Jupiter::ReadableString &raw) override; @@ -64,8 +75,6 @@ public: // Jupiter::Plugin private: void init(); - void sanitizeTags(Jupiter::StringType &fmt) const; - void processTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player = nullptr, const RenX::PlayerInfo *victim = nullptr) const; STRING_LITERAL_AS_NAMED_REFERENCE(name, "RenX.Logging"); unsigned int joinPublic : 1; @@ -89,52 +98,18 @@ private: unsigned int adminLogoutPublic : 1; unsigned int adminPublic : 1; unsigned int logPublic : 1; + unsigned int xVersionPublic : 1; + unsigned int grantCharacterPublic : 1; + unsigned int spawnVehiclePublic : 1; + unsigned int spawnVehicleNoOwnerPublic : 1; + unsigned int minePlacePublic : 1; + unsigned int xOtherPublic : 1; unsigned int commandPublic : 1; unsigned int errorPublic : 1; unsigned int versionPublic : 1; unsigned int authorizedPublic : 1; unsigned int otherPublic : 1; - /** Server tags */ - Jupiter::StringS rconVersionTag; - Jupiter::StringS gameVersionTag; - - /** Player tags */ - Jupiter::StringS nameTag; - Jupiter::StringS rawNameTag; - Jupiter::StringS ipTag; - Jupiter::StringS steamTag; - Jupiter::StringS uuidTag; - Jupiter::StringS idTag; - Jupiter::StringS adminTag; - Jupiter::StringS prefixTag; - Jupiter::StringS gamePrefixTag; - Jupiter::StringS teamColorTag; - Jupiter::StringS teamShortTag; - Jupiter::StringS teamLongTag; - - /** Victim tags */ - Jupiter::StringS victimNameTag; - Jupiter::StringS victimRawNameTag; - Jupiter::StringS victimIPTag; - Jupiter::StringS victimSteamTag; - Jupiter::StringS victimUUIDTag; - Jupiter::StringS victimIDTag; - Jupiter::StringS victimAdminTag; - Jupiter::StringS victimPrefixTag; - Jupiter::StringS victimGamePrefixTag; - Jupiter::StringS victimTeamColorTag; - Jupiter::StringS victimTeamShortTag; - Jupiter::StringS victimTeamLongTag; - - /** Other tags */ - Jupiter::StringS weaponTag; - Jupiter::StringS objectTag; - Jupiter::StringS messageTag; - Jupiter::StringS newNameTag; - Jupiter::StringS winScoreTag; - Jupiter::StringS loseScoreTag; - /** Event formats */ Jupiter::StringS joinPublicFmt, joinAdminFmt, joinNoSteamAdminFmt; Jupiter::StringS partFmt; @@ -145,10 +120,15 @@ private: Jupiter::StringS deployFmt; Jupiter::StringS suicideFmt; Jupiter::StringS dieFmt; + Jupiter::StringS dieFmt2; Jupiter::StringS killFmt; + Jupiter::StringS killFmt2; Jupiter::StringS destroyBuildingFmt; + Jupiter::StringS destroyBuildingFmt2; Jupiter::StringS destroyDefenceFmt; + Jupiter::StringS destroyDefenceFmt2; Jupiter::StringS destroyVehicleFmt; + Jupiter::StringS destroyVehicleFmt2; Jupiter::StringS gameOverFmt; Jupiter::StringS gameOverTieFmt; Jupiter::StringS gameOverTieNoWinFmt; @@ -162,6 +142,12 @@ private: Jupiter::StringS adminLogoutFmt; Jupiter::StringS adminFmt; Jupiter::StringS logFmt; + Jupiter::StringS xVersionFmt; + Jupiter::StringS grantCharacterFmt; + Jupiter::StringS spawnVehicleFmt; + Jupiter::StringS spawnVehicleNoOwnerFmt; + Jupiter::StringS minePlaceFmt; + Jupiter::StringS xOtherFmt; Jupiter::StringS commandFmt; Jupiter::StringS errorFmt; Jupiter::StringS versionFmt; diff --git a/RenX.Medals/RenX_Medals.cpp b/RenX.Medals/RenX_Medals.cpp index 6eedd45..c26b4dc 100644 --- a/RenX.Medals/RenX_Medals.cpp +++ b/RenX.Medals/RenX_Medals.cpp @@ -1,5 +1,5 @@ /** - * Copyright (C) 2014 Justin James. + * Copyright (C) 2014-2015 Justin James. * * This license must be preserved. * Any applications, libraries, or code which make any use of any @@ -24,6 +24,11 @@ #include "RenX_PlayerInfo.h" #include "RenX_Functions.h" #include "RenX_Core.h" +#include "RenX_Tags.h" + +Jupiter::ReferenceString INTERNAL_RECS_TAG = STRING_LITERAL_AS_REFERENCE("\0RX.MEDALS.RECS\0"); +Jupiter::ReferenceString INTERNAL_NOOB_TAG = STRING_LITERAL_AS_REFERENCE("\0RX.MEDALS.NOOB\0"); +Jupiter::ReferenceString INTERNAL_WORTH_TAG = STRING_LITERAL_AS_REFERENCE("\0RX.MEDALS.WORTH\0"); RenX_MedalsPlugin::RenX_MedalsPlugin() { @@ -83,6 +88,26 @@ void congratPlayer(unsigned int, void *params) delete congratPlayerData; } +void RenX_MedalsPlugin::RenX_SanitizeTags(Jupiter::StringType &fmt) +{ + fmt.replace(RenX_MedalsPlugin::recsTag, INTERNAL_RECS_TAG); + fmt.replace(RenX_MedalsPlugin::noobTag, INTERNAL_NOOB_TAG); + fmt.replace(RenX_MedalsPlugin::worthTag, INTERNAL_WORTH_TAG); +} + +void RenX_MedalsPlugin::RenX_ProcessTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim) +{ + if (player != nullptr) + { + const Jupiter::ReadableString &recs = RenX_MedalsPlugin::medalsFile.get(player->uuid, STRING_LITERAL_AS_REFERENCE("Recs")); + const Jupiter::ReadableString &noobs = RenX_MedalsPlugin::medalsFile.get(player->uuid, STRING_LITERAL_AS_REFERENCE("Noobs")); + + msg.replace(INTERNAL_RECS_TAG, recs); + msg.replace(INTERNAL_NOOB_TAG, noobs); + msg.replace(INTERNAL_WORTH_TAG, Jupiter::StringS::Format("%d", recs.asInt() - noobs.asInt())); + } +} + void RenX_MedalsPlugin::RenX_OnPlayerCreate(RenX::Server *server, const RenX::PlayerInfo *player) { if (player->uuid.isEmpty() == false && player->isBot == false) @@ -123,14 +148,9 @@ void RenX_MedalsPlugin::RenX_OnJoin(RenX::Server *server, const RenX::PlayerInfo pair = section->getPair(r); } while (pair->getKey().asInt() == 0); - const Jupiter::ReadableString &recs = RenX_MedalsPlugin::medalsFile.get(player->uuid, STRING_LITERAL_AS_REFERENCE("Recs")); - const Jupiter::ReadableString &noobs = RenX_MedalsPlugin::medalsFile.get(player->uuid, STRING_LITERAL_AS_REFERENCE("Noobs")); - Jupiter::StringS msg = pair->getValue(); - msg.replace(RenX_MedalsPlugin::nameTag, player->name); - msg.replace(RenX_MedalsPlugin::recsTag, recs); - msg.replace(RenX_MedalsPlugin::noobTag, noobs); - msg.replace(RenX_MedalsPlugin::worthTag, Jupiter::StringS::Format("%d", recs.asInt() - noobs.asInt())); + RenX::sanitizeTags(msg); + RenX::processTags(msg, server, player); server->sendMessage(msg); } @@ -237,7 +257,6 @@ void RenX_MedalsPlugin::init() RenX_MedalsPlugin::medalsFile.readFile(RenX_MedalsPlugin::medalsFileName); RenX_MedalsPlugin::joinMessageFile.readFile(RenX_MedalsPlugin::joinMessageFileName); RenX_MedalsPlugin::firstSection = RenX_MedalsPlugin::joinMessageFile.get(Jupiter::StringS::empty, STRING_LITERAL_AS_REFERENCE("FirstSection")); - RenX_MedalsPlugin::nameTag = RenX_MedalsPlugin::joinMessageFile.get(Jupiter::String::empty, STRING_LITERAL_AS_REFERENCE("NameTag"), STRING_LITERAL_AS_REFERENCE("{NAME}")); RenX_MedalsPlugin::recsTag = RenX_MedalsPlugin::joinMessageFile.get(Jupiter::String::empty, STRING_LITERAL_AS_REFERENCE("RecsTag"), STRING_LITERAL_AS_REFERENCE("{RECS}")); RenX_MedalsPlugin::noobTag = RenX_MedalsPlugin::joinMessageFile.get(Jupiter::String::empty, STRING_LITERAL_AS_REFERENCE("NoobsTag"), STRING_LITERAL_AS_REFERENCE("{NOOBS}")); RenX_MedalsPlugin::worthTag = RenX_MedalsPlugin::joinMessageFile.get(Jupiter::String::empty, STRING_LITERAL_AS_REFERENCE("WorthTag"), STRING_LITERAL_AS_REFERENCE("{WORTH}")); diff --git a/RenX.Medals/RenX_Medals.h b/RenX.Medals/RenX_Medals.h index 4a7dc9f..0690eee 100644 --- a/RenX.Medals/RenX_Medals.h +++ b/RenX.Medals/RenX_Medals.h @@ -1,5 +1,5 @@ /** - * Copyright (C) 2014 Justin James. + * Copyright (C) 2014-2015 Justin James. * * This license must be preserved. * Any applications, libraries, or code which make any use of any @@ -42,6 +42,8 @@ int getWorth(const RenX::PlayerInfo *player); class RenX_MedalsPlugin : public RenX::Plugin { public: // RenX::Plugin + void RenX_SanitizeTags(Jupiter::StringType &fmt) override; + void RenX_ProcessTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim) override; void RenX_OnPlayerCreate(RenX::Server *server, const RenX::PlayerInfo *player) override; void RenX_OnPlayerDelete(RenX::Server *server, const RenX::PlayerInfo *player) override; void RenX_OnJoin(RenX::Server *server, const RenX::PlayerInfo *player) override; @@ -58,7 +60,6 @@ public: time_t killCongratDelay; time_t vehicleKillCongratDelay; time_t kdrCongratDelay; - Jupiter::StringS nameTag; Jupiter::StringS recsTag; Jupiter::StringS noobTag; Jupiter::StringS worthTag;