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 0497b62..743efba 100644 Binary files a/Release/Bot.lib and b/Release/Bot.lib differ diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index a371f72..86278a9 100644 Binary files a/Release/Plugins/RenX.Core.lib and b/Release/Plugins/RenX.Core.lib differ diff --git a/RenX.Announcements/RenX_Announcements.cpp b/RenX.Announcements/RenX_Announcements.cpp index 6b5da04..9577cd6 100644 --- a/RenX.Announcements/RenX_Announcements.cpp +++ b/RenX.Announcements/RenX_Announcements.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 @@ -20,6 +20,7 @@ #include "RenX_Announcements.h" #include "RenX_Core.h" #include "RenX_Server.h" +#include "RenX_Tags.h" RenX_AnnouncementsPlugin pluginInstance; @@ -43,8 +44,7 @@ void RenX_AnnouncementsPlugin::announce(unsigned int) RenX_AnnouncementsPlugin::lastLine = trand; } Jupiter::StringS announcement = RenX_AnnouncementsPlugin::announcementsFile.getLine(RenX_AnnouncementsPlugin::lastLine); - announcement.replace(RenX_AnnouncementsPlugin::dateTag, Jupiter::ReferenceString(getTimeFormat(RenX_AnnouncementsPlugin::dateFmt.c_str()))); - announcement.replace(RenX_AnnouncementsPlugin::timeTag, Jupiter::ReferenceString(getTimeFormat(RenX_AnnouncementsPlugin::timeFmt.c_str()))); + RenX::sanitizeTags(announcement); Jupiter::String msg; RenX::Core *core = RenX::getCore(); @@ -55,7 +55,7 @@ void RenX_AnnouncementsPlugin::announce(unsigned int) if (server->players.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;