Browse Source

Update Jupiter submodule; adjust code accordingly

master
Jessica James 3 years ago
parent
commit
df1052d5aa
  1. 10
      src/Bot/src/IRC_Bot.cpp
  2. 4
      src/Bot/src/Main.cpp
  3. 2
      src/Jupiter
  4. 3
      src/Plugins/CoreCommands/CoreCommands.cpp
  5. 9
      src/Plugins/ExtraCommands/ExtraCommands.cpp
  6. 4
      src/Plugins/FunCommands/FunCommands.cpp
  7. 2
      src/Plugins/RenX/RenX.ChatLogging/RenX_ChatLogging.cpp
  8. 2
      src/Plugins/RenX/RenX.CommandLogging/RenX_CommandLogging.cpp
  9. 76
      src/Plugins/RenX/RenX.Commands/RenX_Commands.cpp
  10. 40
      src/Plugins/RenX/RenX.Core/RenX_Functions.cpp
  11. 141
      src/Plugins/RenX/RenX.Core/RenX_Server.cpp
  12. 4
      src/Plugins/RenX/RenX.Core/RenX_Server.h
  13. 3
      src/Plugins/RenX/RenX.ExcessiveHeadshots/RenX_ExcessiveHeadshots.cpp
  14. 20
      src/Plugins/RenX/RenX.ExtraLogging/RenX_ExtraLogging.cpp
  15. 416
      src/Plugins/RenX/RenX.Logging/RenX_Logging.cpp
  16. 3
      src/Plugins/RenX/RenX.ModSystem/RenX_ModSystem.cpp
  17. 20
      src/Plugins/RenX/RenX.ServerList/RenX_ServerList.cpp
  18. 3
      src/Plugins/RenX/RenX.SetJoin/RenX_SetJoin.cpp
  19. 6
      src/Plugins/RenX/RenX.Warn/RenX_Warn.cpp
  20. 6
      src/Plugins/SetJoin/SetJoin.cpp

10
src/Bot/src/IRC_Bot.cpp

@ -116,16 +116,16 @@ void IRC_Bot::setCommandAccessLevels(IRCCommand *in_command) {
IRCCommand *command; IRCCommand *command;
tmp_index = entry.first.find('.'); tmp_index = entry.first.find('.');
if (tmp_index != Jupiter::INVALID_INDEX) { if (tmp_index != std::string_view::npos) {
// non-default access assignment // non-default access assignment
tmp_key.set(entry.first.data(), tmp_index); tmp_key = std::string_view(entry.first.data(), tmp_index);
tmp_sub_key = entry.first; tmp_sub_key = entry.first;
tmp_sub_key.shiftRight(tmp_index + 1); tmp_sub_key.remove_prefix(tmp_index + 1);
if (jessilib::starts_withi(tmp_sub_key, "Type."sv)) { if (jessilib::starts_withi(tmp_sub_key, "Type."sv)) {
tmp_sub_key.shiftRight(5); // shift beyond "Type." tmp_sub_key.remove_prefix(5); // strip "Type."
command = this->getCommand(tmp_key); command = this->getCommand(tmp_key);
if (command != nullptr && (in_command == nullptr || in_command == command)) { if (command != nullptr && (in_command == nullptr || in_command == command)) {
@ -133,7 +133,7 @@ void IRC_Bot::setCommandAccessLevels(IRCCommand *in_command) {
} }
} }
else if (jessilib::starts_withi(tmp_sub_key, "Channel."sv)) { else if (jessilib::starts_withi(tmp_sub_key, "Channel."sv)) {
tmp_sub_key.shiftRight(8); // shift beyond "Channel." tmp_sub_key.remove_prefix(8); // strip "Channel."
// Assign access level to command (if command exists) // Assign access level to command (if command exists)
command = this->getCommand(tmp_key); command = this->getCommand(tmp_key);

4
src/Bot/src/Main.cpp

@ -219,12 +219,12 @@ int main(int argc, const char **args) {
if (plugins_directory.isNotEmpty()) { if (plugins_directory.isNotEmpty()) {
Jupiter::Plugin::setDirectory(plugins_directory); Jupiter::Plugin::setDirectory(plugins_directory);
printf("Plugins will be loaded from \"%.*s\"." ENDL, static_cast<int>(plugins_directory.size()), plugins_directory.ptr()); printf("Plugins will be loaded from \"%.*s\"." ENDL, static_cast<int>(plugins_directory.size()), plugins_directory.data());
} }
if (configs_directory.isNotEmpty()) { if (configs_directory.isNotEmpty()) {
Jupiter::Plugin::setConfigDirectory(configs_directory); Jupiter::Plugin::setConfigDirectory(configs_directory);
printf("Plugin configs will be loaded from \"%.*s\"." ENDL, static_cast<int>(configs_directory.size()), configs_directory.ptr()); printf("Plugin configs will be loaded from \"%.*s\"." ENDL, static_cast<int>(configs_directory.size()), configs_directory.data());
} }
initialize_plugins(); initialize_plugins();

2
src/Jupiter

@ -1 +1 @@
Subproject commit 9db2fd92b8d7316d6b15a11b60c35036a010eaef Subproject commit cee0c7ef7d5522c44100848c4f64c92fbeebdfaf

3
src/Plugins/CoreCommands/CoreCommands.cpp

@ -76,7 +76,8 @@ void HelpIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &in_
if (cmds.size() != 0) { if (cmds.size() != 0) {
Jupiter::StringL triggers = source->getTriggers(cmds); Jupiter::StringL triggers = source->getTriggers(cmds);
if (triggers.size() >= 0) { if (triggers.size() >= 0) {
source->sendNotice(nick, Jupiter::StringS::Format("Access level %d commands: %.*s", i, triggers.size(), triggers.ptr())); source->sendNotice(nick, Jupiter::StringS::Format("Access level %d commands: %.*s", i, triggers.size(),
triggers.data()));
} }
} }
} }

9
src/Plugins/ExtraCommands/ExtraCommands.cpp

@ -269,12 +269,17 @@ Jupiter::GenericCommand::ResponseLine *DebugInfoGenericCommand::trigger(const Ju
for (auto& channel_pair : server->getChannels()) { for (auto& channel_pair : server->getChannels()) {
auto& channel = channel_pair.second; auto& channel = channel_pair.second;
line->next = new Jupiter::GenericCommand::ResponseLine(Jupiter::StringS::Format("Channel %.*s - Type: %d", channel.getName().size(), channel.getName().ptr(), channel.getType()), GenericCommand::DisplayType::PublicSuccess); line->next = new Jupiter::GenericCommand::ResponseLine(Jupiter::StringS::Format("Channel %.*s - Type: %d", channel.getName().size(),
channel.getName().data(), channel.getType()), GenericCommand::DisplayType::PublicSuccess);
line = line->next; line = line->next;
for (auto& user_pair : channel.getUsers()) { for (auto& user_pair : channel.getUsers()) {
Jupiter::IRC::Client::User *user = user_pair.second->getUser(); Jupiter::IRC::Client::User *user = user_pair.second->getUser();
line->next = new Jupiter::GenericCommand::ResponseLine(Jupiter::StringS::Format("User %.*s!%.*s@%.*s (prefix: %c) of channel %.*s (of %u shared)", user->getNickname().size(), user->getNickname().ptr(), user->getUsername().size(), user->getUsername().ptr(), user->getHostname().size(), user->getHostname().ptr(), channel.getUserPrefix(*user_pair.second) ? channel.getUserPrefix(*user_pair.second) : ' ', channel.getName().size(), channel.getName().ptr(), user->getChannelCount()), GenericCommand::DisplayType::PublicSuccess); line->next = new Jupiter::GenericCommand::ResponseLine(Jupiter::StringS::Format("User %.*s!%.*s@%.*s (prefix: %c) of channel %.*s (of %u shared)", user->getNickname().size(),
user->getNickname().data(), user->getUsername().size(),
user->getUsername().data(), user->getHostname().size(),
user->getHostname().data(), channel.getUserPrefix(*user_pair.second) ? channel.getUserPrefix(*user_pair.second) : ' ', channel.getName().size(),
channel.getName().data(), user->getChannelCount()), GenericCommand::DisplayType::PublicSuccess);
line = line->next; line = line->next;
}; };
}; };

4
src/Plugins/FunCommands/FunCommands.cpp

@ -72,10 +72,10 @@ void EightBallIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString
msg.set("Good thing I bend that way!"_jrs); msg.set("Good thing I bend that way!"_jrs);
break; break;
case 10: case 10:
msg.format("Hai %.*s ;)", nick.size(), nick.ptr()); msg.format("Hai %.*s ;)", nick.size(), nick.data());
break; break;
case 11: case 11:
msg.format("Let's ban %.*s!", nick.size(), nick.ptr()); msg.format("Let's ban %.*s!", nick.size(), nick.data());
break; break;
case 12: case 12:
msg.set("Fuck your lineage."_jrs); msg.set("Fuck your lineage."_jrs);

2
src/Plugins/RenX/RenX.ChatLogging/RenX_ChatLogging.cpp

@ -56,7 +56,7 @@ RenX_ChatLogPlugin::~RenX_ChatLogPlugin()
} }
std::ostream& operator<<(std::ostream& in_stream, const Jupiter::ReadableString& in_string) { std::ostream& operator<<(std::ostream& in_stream, const Jupiter::ReadableString& in_string) {
in_stream.write(in_string.ptr(), in_string.size()); in_stream.write(in_string.data(), in_string.size());
return in_stream; return in_stream;
} }

2
src/Plugins/RenX/RenX.CommandLogging/RenX_CommandLogging.cpp

@ -71,7 +71,7 @@ void RenX_CommandLoggingPlugin::RenX_OnCommandTriggered(RenX::Server& server, co
} }
std::ostream& operator<<(std::ostream& in_stream, const Jupiter::ReadableString& in_string) { std::ostream& operator<<(std::ostream& in_stream, const Jupiter::ReadableString& in_string) {
in_stream.write(in_string.ptr(), in_string.size()); in_stream.write(in_string.data(), in_string.size());
return in_stream; return in_stream;
} }

76
src/Plugins/RenX/RenX.Commands/RenX_Commands.cpp

@ -77,10 +77,11 @@ void RenX_CommandsPlugin::RenX_OnDie(RenX::Server &server, const RenX::PlayerInf
bool RenX_CommandsPlugin::initialize() { bool RenX_CommandsPlugin::initialize() {
auto default_tban_time = this->config.get("DefaultTBanTime"_jrs, "1d"_jrs); auto default_tban_time = this->config.get("DefaultTBanTime"_jrs, "1d"_jrs);
auto max_tban_time = this->config.get("MaxTBanTime"_jrs, "1w"_jrs); auto max_tban_time = this->config.get("MaxTBanTime"_jrs, "1w"_jrs);
m_defaultTempBanTime = jessilib::duration_from_string(default_tban_time.ptr(), default_tban_time.ptr() + default_tban_time.size()).duration; m_defaultTempBanTime = jessilib::duration_from_string(default_tban_time.data(), default_tban_time.data() + default_tban_time.size()).duration;
m_maxTempBanTime = std::max(jessilib::duration_from_string(max_tban_time.ptr(), max_tban_time.ptr() + max_tban_time.size()).duration, m_defaultTempBanTime); m_maxTempBanTime = std::max(jessilib::duration_from_string(max_tban_time.data(), max_tban_time.data() + max_tban_time.size()).duration, m_defaultTempBanTime);
m_playerInfoFormat = this->config.get("PlayerInfoFormat"_jrs, IRCCOLOR "03[Player Info]" IRCCOLOR "{TCOLOR} Name: " IRCBOLD "{RNAME}" IRCBOLD " - ID: {ID} - Team: " IRCBOLD "{TEAML}" IRCBOLD " - Vehicle Kills: {VEHICLEKILLS} - Building Kills {BUILDINGKILLS} - Kills {KILLS} - Deaths: {DEATHS} - KDR: {KDR} - Access: {ACCESS}"_jrs); m_playerInfoFormat = this->config.get("PlayerInfoFormat"_jrs, IRCCOLOR "03[Player Info]" IRCCOLOR "{TCOLOR} Name: " IRCBOLD "{RNAME}" IRCBOLD " - ID: {ID} - Team: " IRCBOLD "{TEAML}" IRCBOLD " - Vehicle Kills: {VEHICLEKILLS} - Building Kills {BUILDINGKILLS} - Kills {KILLS} - Deaths: {DEATHS} - KDR: {KDR} - Access: {ACCESS}"_jrs);
m_adminPlayerInfoFormat = this->config.get("AdminPlayerInfoFormat"_jrs, Jupiter::StringS::Format("%.*s - IP: " IRCBOLD "{IP}" IRCBOLD " - HWID: " IRCBOLD "{HWID}" IRCBOLD " - RDNS: " IRCBOLD "{RDNS}" IRCBOLD " - Steam ID: " IRCBOLD "{STEAM}", m_playerInfoFormat.size(), m_playerInfoFormat.ptr())); m_adminPlayerInfoFormat = this->config.get("AdminPlayerInfoFormat"_jrs, Jupiter::StringS::Format("%.*s - IP: " IRCBOLD "{IP}" IRCBOLD " - HWID: " IRCBOLD "{HWID}" IRCBOLD " - RDNS: " IRCBOLD "{RDNS}" IRCBOLD " - Steam ID: " IRCBOLD "{STEAM}", m_playerInfoFormat.size(),
m_playerInfoFormat.data()));
m_buildingInfoFormat = this->config.get("BuildingInfoFormat"_jrs, ""_jrs IRCCOLOR + RenX::tags->buildingTeamColorTag + RenX::tags->buildingNameTag + IRCCOLOR " - " IRCCOLOR "07"_jrs + RenX::tags->buildingHealthPercentageTag + "%"_jrs); m_buildingInfoFormat = this->config.get("BuildingInfoFormat"_jrs, ""_jrs IRCCOLOR + RenX::tags->buildingTeamColorTag + RenX::tags->buildingNameTag + IRCCOLOR " - " IRCCOLOR "07"_jrs + RenX::tags->buildingHealthPercentageTag + "%"_jrs);
m_staffTitle = this->config.get("StaffTitle"_jrs, "Moderator"_jrs); m_staffTitle = this->config.get("StaffTitle"_jrs, "Moderator"_jrs);
@ -482,10 +483,12 @@ void PlayersIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &
if (nCurrent == nullptr || nCurrent->size() + name.size() > STRING_LENGTH) if (nCurrent == nullptr || nCurrent->size() + name.size() > STRING_LENGTH)
{ {
nCurrent = new Jupiter::StringL(STRING_LENGTH); nCurrent = new Jupiter::StringL(STRING_LENGTH);
nCurrent->format(IRCCOLOR "%.*s[%.*s]: " IRCBOLD "%.*s" IRCBOLD, nTeamColor.size(), nTeamColor.ptr(), nTeam.size(), nTeam.ptr(), name.size(), name.ptr()); nCurrent->format(IRCCOLOR "%.*s[%.*s]: " IRCBOLD "%.*s" IRCBOLD, nTeamColor.size(),
nTeamColor.data(), nTeam.size(),
nTeam.data(), name.size(), name.data());
nStrings.push_back(nCurrent); nStrings.push_back(nCurrent);
} }
else nCurrent->aformat(IRCCOLOR ", " IRCBOLD "%.*s" IRCBOLD, name.size(), name.ptr()); else nCurrent->aformat(IRCCOLOR ", " IRCBOLD "%.*s" IRCBOLD, name.size(), name.data());
nTotal++; nTotal++;
if (node->isBot) if (node->isBot)
nBots++; nBots++;
@ -494,10 +497,12 @@ void PlayersIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &
if (gCurrent == nullptr || gCurrent->size() + name.size() > STRING_LENGTH) if (gCurrent == nullptr || gCurrent->size() + name.size() > STRING_LENGTH)
{ {
gCurrent = new Jupiter::StringL(STRING_LENGTH); gCurrent = new Jupiter::StringL(STRING_LENGTH);
gCurrent->format(IRCCOLOR "%.*s[%.*s]: " IRCBOLD "%.*s" IRCBOLD, gTeamColor.size(), gTeamColor.ptr(), gTeam.size(), gTeam.ptr(), name.size(), name.ptr()); gCurrent->format(IRCCOLOR "%.*s[%.*s]: " IRCBOLD "%.*s" IRCBOLD, gTeamColor.size(),
gTeamColor.data(), gTeam.size(),
gTeam.data(), name.size(), name.data());
gStrings.push_back(gCurrent); gStrings.push_back(gCurrent);
} }
else gCurrent->aformat(IRCCOLOR ", " IRCBOLD "%.*s" IRCBOLD, name.size(), name.ptr()); else gCurrent->aformat(IRCCOLOR ", " IRCBOLD "%.*s" IRCBOLD, name.size(), name.data());
gTotal++; gTotal++;
if (node->isBot) if (node->isBot)
gBots++; gBots++;
@ -506,10 +511,12 @@ void PlayersIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &
if (oCurrent == nullptr || oCurrent->size() + name.size() > STRING_LENGTH) if (oCurrent == nullptr || oCurrent->size() + name.size() > STRING_LENGTH)
{ {
oCurrent = new Jupiter::StringL(STRING_LENGTH); oCurrent = new Jupiter::StringL(STRING_LENGTH);
oCurrent->format(IRCCOLOR "%.*s[%.*s]: " IRCBOLD "%.*s" IRCBOLD, oTeamColor.size(), oTeamColor.ptr(), oTeam.size(), oTeam.ptr(), name.size(), name.ptr()); oCurrent->format(IRCCOLOR "%.*s[%.*s]: " IRCBOLD "%.*s" IRCBOLD, oTeamColor.size(),
oTeamColor.data(), oTeam.size(),
oTeam.data(), name.size(), name.data());
oStrings.push_back(oCurrent); oStrings.push_back(oCurrent);
} }
else oCurrent->aformat(IRCCOLOR ", " IRCBOLD "%.*s" IRCBOLD, name.size(), name.ptr()); else oCurrent->aformat(IRCCOLOR ", " IRCBOLD "%.*s" IRCBOLD, name.size(), name.data());
oTotal++; oTotal++;
if (node->isBot) if (node->isBot)
oBots++; oBots++;
@ -548,19 +555,25 @@ void PlayersIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &
out.aformat(" (%u bots)", gBots + nBots + oBots); out.aformat(" (%u bots)", gBots + nBots + oBots);
if (gTotal > 0) if (gTotal > 0)
{ {
out.aformat(IRCCOLOR "02 | " IRCCOLOR "%.*s%.*s" IRCCOLOR ": %u", gTeamColor.size(), gTeamColor.ptr(), gTeam.size(), gTeam.ptr(), gTotal); out.aformat(IRCCOLOR "02 | " IRCCOLOR "%.*s%.*s" IRCCOLOR ": %u", gTeamColor.size(),
gTeamColor.data(), gTeam.size(),
gTeam.data(), gTotal);
if (gBots > 0) if (gBots > 0)
out.aformat(" (%u bots)", gBots); out.aformat(" (%u bots)", gBots);
} }
if (nTotal > 0) if (nTotal > 0)
{ {
out.aformat(IRCCOLOR "02 | " IRCCOLOR "%.*s%.*s" IRCCOLOR ": %u", nTeamColor.size(), nTeamColor.ptr(), nTeam.size(), nTeam.ptr(), nTotal); out.aformat(IRCCOLOR "02 | " IRCCOLOR "%.*s%.*s" IRCCOLOR ": %u", nTeamColor.size(),
nTeamColor.data(), nTeam.size(),
nTeam.data(), nTotal);
if (nBots > 0) if (nBots > 0)
out.aformat(" (%u bots)", nBots); out.aformat(" (%u bots)", nBots);
} }
if (oTotal > 0) if (oTotal > 0)
{ {
out.aformat(IRCCOLOR "02 | " IRCCOLOR "%.*s%.*s" IRCCOLOR ": %u", oTeamColor.size(), oTeamColor.ptr(), oTeam.size(), oTeam.ptr(), oTotal); out.aformat(IRCCOLOR "02 | " IRCCOLOR "%.*s%.*s" IRCCOLOR ": %u", oTeamColor.size(),
oTeamColor.data(), oTeam.size(),
oTeam.data(), oTotal);
if (oBots > 0) if (oBots > 0)
out.aformat(" (%u bots)", oBots); out.aformat(" (%u bots)", oBots);
} }
@ -667,16 +680,18 @@ void PlayerTableIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableStri
++creditColLen; ++creditColLen;
if (server->isAdminLogChanType(type)) if (server->isAdminLogChanType(type))
source->sendMessage(channel, Jupiter::StringS::Format(IRCUNDERLINE IRCCOLOR "03%*.*s | %*s | %*s | %*s | IP Address", maxNickLen, NICK_COL_HEADER.size(), NICK_COL_HEADER.ptr(), idColLen, "ID", scoreColLen, "Score", creditColLen, "Credits")); source->sendMessage(channel, Jupiter::StringS::Format(IRCUNDERLINE IRCCOLOR "03%*.*s | %*s | %*s | %*s | IP Address", maxNickLen, NICK_COL_HEADER.size(), NICK_COL_HEADER.data(), idColLen, "ID", scoreColLen, "Score", creditColLen, "Credits"));
else else
source->sendMessage(channel, Jupiter::StringS::Format(IRCUNDERLINE IRCCOLOR "03%*.*s | %*s | %*s | %*s", maxNickLen, NICK_COL_HEADER.size(), NICK_COL_HEADER.ptr(), idColLen, "ID", scoreColLen, "Score", creditColLen, "Credits")); source->sendMessage(channel, Jupiter::StringS::Format(IRCUNDERLINE IRCCOLOR "03%*.*s | %*s | %*s | %*s", maxNickLen, NICK_COL_HEADER.size(), NICK_COL_HEADER.data(), idColLen, "ID", scoreColLen, "Score", creditColLen, "Credits"));
auto output_player = [server, type, source, &channel, maxNickLen, idColLen, scoreColLen, creditColLen](RenX::PlayerInfo *player, const Jupiter::ReadableString &color) auto output_player = [server, type, source, &channel, maxNickLen, idColLen, scoreColLen, creditColLen](RenX::PlayerInfo *player, const Jupiter::ReadableString &color)
{ {
if (server->isAdminLogChanType(type)) if (server->isAdminLogChanType(type))
source->sendMessage(channel, Jupiter::StringS::Format(IRCCOLOR "%.*s%*.*s" IRCCOLOR " " IRCCOLOR "03|" IRCCOLOR " %*d " IRCCOLOR "03|" IRCCOLOR " %*.0f " IRCCOLOR "03|" IRCCOLOR " %*.0f " IRCCOLOR "03|" IRCNORMAL " %.*s", color.size(), color.ptr(), maxNickLen, player->name.size(), player->name.data(), idColLen, player->id, scoreColLen, player->score, creditColLen, player->credits, player->ip.size(), player->ip.data())); source->sendMessage(channel, Jupiter::StringS::Format(IRCCOLOR "%.*s%*.*s" IRCCOLOR " " IRCCOLOR "03|" IRCCOLOR " %*d " IRCCOLOR "03|" IRCCOLOR " %*.0f " IRCCOLOR "03|" IRCCOLOR " %*.0f " IRCCOLOR "03|" IRCNORMAL " %.*s", color.size(),
color.data(), maxNickLen, player->name.size(), player->name.data(), idColLen, player->id, scoreColLen, player->score, creditColLen, player->credits, player->ip.size(), player->ip.data()));
else else
source->sendMessage(channel, Jupiter::StringS::Format(IRCCOLOR "%.*s%*.*s" IRCCOLOR " " IRCCOLOR "03|" IRCCOLOR " %*d " IRCCOLOR "03|" IRCCOLOR " %*.0f " IRCCOLOR "03|" IRCCOLOR " %*.0f", color.size(), color.ptr(), maxNickLen, player->name.size(), player->name.data(), idColLen, player->id, scoreColLen, player->score, creditColLen, player->credits)); source->sendMessage(channel, Jupiter::StringS::Format(IRCCOLOR "%.*s%*.*s" IRCCOLOR " " IRCCOLOR "03|" IRCCOLOR " %*d " IRCCOLOR "03|" IRCCOLOR " %*.0f " IRCCOLOR "03|" IRCCOLOR " %*.0f", color.size(),
color.data(), maxNickLen, player->name.size(), player->name.data(), idColLen, player->id, scoreColLen, player->score, creditColLen, player->credits));
}; };
for (auto node = gPlayers.begin(); node != gPlayers.end(); ++node) for (auto node = gPlayers.begin(); node != gPlayers.end(); ++node)
@ -1041,7 +1056,8 @@ void SteamIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &ch
if (jessilib::findi(node->name, Jupiter::ReferenceString{parameters}) != std::string::npos) if (jessilib::findi(node->name, Jupiter::ReferenceString{parameters}) != std::string::npos)
{ {
Jupiter::String playerName = RenX::getFormattedPlayerName(*node); Jupiter::String playerName = RenX::getFormattedPlayerName(*node);
msg.format(IRCCOLOR "03[Steam] " IRCCOLOR "%.*s (ID: %d) ", playerName.size(), playerName.ptr(), node->id); msg.format(IRCCOLOR "03[Steam] " IRCCOLOR "%.*s (ID: %d) ", playerName.size(),
playerName.data(), node->id);
if (node->steamid != 0) if (node->steamid != 0)
{ {
msg += "is using steam ID " IRCBOLD; msg += "is using steam ID " IRCBOLD;
@ -1127,7 +1143,8 @@ void KillDeathRatioIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableS
if (jessilib::findi(node->name, Jupiter::ReferenceString{parameters}) != std::string::npos) if (jessilib::findi(node->name, Jupiter::ReferenceString{parameters}) != std::string::npos)
{ {
Jupiter::String playerName = RenX::getFormattedPlayerName(*node); Jupiter::String playerName = RenX::getFormattedPlayerName(*node);
msg.format(IRCBOLD "%.*s" IRCBOLD IRCCOLOR ": Kills: %u - Deaths: %u - KDR: %.2f", playerName.size(), playerName.ptr(), node->kills, node->deaths, static_cast<double>(node->kills) / (node->deaths == 0 ? 1.0f : static_cast<double>(node->deaths))); msg.format(IRCBOLD "%.*s" IRCBOLD IRCCOLOR ": Kills: %u - Deaths: %u - KDR: %.2f", playerName.size(),
playerName.data(), node->kills, node->deaths, static_cast<double>(node->kills) / (node->deaths == 0 ? 1.0f : static_cast<double>(node->deaths)));
source->sendMessage(channel, msg); source->sendMessage(channel, msg);
} }
} }
@ -1997,8 +2014,8 @@ void BanSearchIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString
} }
out.format("ID: %lu (" IRCCOLOR "%sactive" IRCCOLOR "); Added: %s; Expires: %s; IP: %.*s/%u; HWID: %.*s; Steam: %llu; Types:%.*s Name: %.*s; Banner: %.*s", out.format("ID: %lu (" IRCCOLOR "%sactive" IRCCOLOR "); Added: %s; Expires: %s; IP: %.*s/%u; HWID: %.*s; Steam: %llu; Types:%.*s Name: %.*s; Banner: %.*s",
i, entry->is_active() ? "12" : "04in", dateStr, expireStr, ip_str.size(), ip_str.ptr(), entry->prefix_length, entry->hwid.size(), entry->hwid.data(), entry->steamid, i, entry->is_active() ? "12" : "04in", dateStr, expireStr, ip_str.size(), ip_str.data(), entry->prefix_length, entry->hwid.size(), entry->hwid.data(), entry->steamid,
types.size(), types.ptr(), entry->name.size(), entry->name.data(), entry->banner.size(), entry->banner.data()); types.size(), types.data(), entry->name.size(), entry->name.data(), entry->banner.size(), entry->banner.data());
if (!entry->rdns.empty()) if (!entry->rdns.empty())
{ {
@ -2563,8 +2580,8 @@ void ExemptionSearchIRCCommand::trigger(IRC_Bot *source, const Jupiter::Readable
} }
out.format("ID: %lu (%sactive); Date: %s; IP: %.*s/%u; Steam: %llu; Types:%.*s Setter: %.*s", out.format("ID: %lu (%sactive); Date: %s; IP: %.*s/%u; Steam: %llu; Types:%.*s Setter: %.*s",
i, entry->is_active() ? "" : "in", timeStr, ip_str.size(), ip_str.ptr(), entry->prefix_length, entry->steamid, i, entry->is_active() ? "" : "in", timeStr, ip_str.size(), ip_str.data(), entry->prefix_length, entry->steamid,
types.size(), types.ptr(), entry->setter.size(), entry->setter.data()); types.size(), types.data(), entry->setter.size(), entry->setter.data());
source->sendNotice(nick, out); source->sendNotice(nick, out);
} }
@ -3084,7 +3101,7 @@ void RefundIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &c
player = server->getPlayerByPartName(playerName); player = server->getPlayerByPartName(playerName);
if (player != nullptr) { if (player != nullptr) {
if (server->giveCredits(*player, credits)) { if (server->giveCredits(*player, credits)) {
msg.format("You have been refunded %.0f credits by %.*s.", credits, nick.size(), nick.ptr()); msg.format("You have been refunded %.0f credits by %.*s.", credits, nick.size(), nick.data());
server->sendMessage(*player, msg); server->sendMessage(*player, msg);
msg.format("%.*s has been refunded %.0f credits.", player->name.size(), player->name.data(), credits); msg.format("%.*s has been refunded %.0f credits.", player->name.size(), player->name.data(), credits);
} }
@ -3487,7 +3504,7 @@ void RulesGameCommand::create() {
} }
void RulesGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, const Jupiter::ReadableString &parameters) { void RulesGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, const Jupiter::ReadableString &parameters) {
source->sendMessage(Jupiter::StringS::Format("Rules: %.*s", source->getRules().size(), source->getRules().ptr())); source->sendMessage(Jupiter::StringS::Format("Rules: %.*s", source->getRules().size(), source->getRules().data()));
} }
const Jupiter::ReadableString &RulesGameCommand::getHelp(const Jupiter::ReadableString &) { const Jupiter::ReadableString &RulesGameCommand::getHelp(const Jupiter::ReadableString &) {
@ -3513,8 +3530,12 @@ void ModRequestGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *play
const Jupiter::ReadableString &staff_word = pluginInstance.getStaffTitle(); const Jupiter::ReadableString &staff_word = pluginInstance.getStaffTitle();
Jupiter::String fmtName = RenX::getFormattedPlayerName(*player); Jupiter::String fmtName = RenX::getFormattedPlayerName(*player);
Jupiter::StringL user_message = Jupiter::StringL::Format(IRCCOLOR "12[%.*s Request] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR "07 has requested assistance in-game for \"%.*s\"; please look in ", staff_word.size(), staff_word.ptr(), fmtName.size(), fmtName.ptr(), parameters.size(), parameters.ptr()); Jupiter::StringL user_message = Jupiter::StringL::Format(IRCCOLOR "12[%.*s Request] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR "07 has requested assistance in-game for \"%.*s\"; please look in ", staff_word.size(),
Jupiter::StringS channel_message = Jupiter::StringS::Format(IRCCOLOR "12[%.*s Request] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR "07 has requested assistance in-game! Reason: %.*s" IRCCOLOR, staff_word.size(), staff_word.ptr(), fmtName.size(), fmtName.ptr(), parameters.size(), parameters.ptr()); staff_word.data(), fmtName.size(), fmtName.data(), parameters.size(),
parameters.data());
Jupiter::StringS channel_message = Jupiter::StringS::Format(IRCCOLOR "12[%.*s Request] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR "07 has requested assistance in-game! Reason: %.*s" IRCCOLOR, staff_word.size(),
staff_word.data(), fmtName.size(), fmtName.data(), parameters.size(),
parameters.data());
// Alerts a channel and all relevant users in the channel // Alerts a channel and all relevant users in the channel
auto alert_channel = [&user_message, &channel_message](Jupiter::IRC::Client& server, const Jupiter::IRC::Client::Channel& channel) { auto alert_channel = [&user_message, &channel_message](Jupiter::IRC::Client& server, const Jupiter::IRC::Client::Channel& channel) {
@ -3554,7 +3575,8 @@ void ModRequestGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *play
} }
// Inform the user of the result // Inform the user of the result
source->sendMessage(*player, Jupiter::StringS::Format("A total of %u %.*ss have been notified of your assistance request.", total_user_alerts, staff_word.size(), staff_word.ptr())); source->sendMessage(*player, Jupiter::StringS::Format("A total of %u %.*ss have been notified of your assistance request.", total_user_alerts, staff_word.size(),
staff_word.data()));
} }
const Jupiter::ReadableString &ModRequestGameCommand::getHelp(const Jupiter::ReadableString &) { const Jupiter::ReadableString &ModRequestGameCommand::getHelp(const Jupiter::ReadableString &) {

40
src/Plugins/RenX/RenX.Core/RenX_Functions.cpp

@ -439,11 +439,11 @@ const Jupiter::ReadableString &RenX::getCharacter(const Jupiter::ReadableString
object = chr; object = chr;
if (object.find(STRING_LITERAL_AS_REFERENCE("Rx_")) == 0) if (object.find(STRING_LITERAL_AS_REFERENCE("Rx_")) == 0)
object.shiftRight(3); object.remove_prefix(3);
if (object.find(STRING_LITERAL_AS_REFERENCE("InventoryManager_")) == 0) if (object.find(STRING_LITERAL_AS_REFERENCE("InventoryManager_")) == 0)
object.shiftRight(17); object.remove_prefix(17);
else if (object.find(STRING_LITERAL_AS_REFERENCE("FamilyInfo_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("FamilyInfo_")) == 0)
object.shiftRight(11); object.remove_prefix(11);
return object; return object;
} }
@ -452,7 +452,7 @@ const Jupiter::ReferenceString &translateCharacter(Jupiter::ReferenceString &obj
{ {
if (object.find(STRING_LITERAL_AS_REFERENCE("GDI_")) == 0) if (object.find(STRING_LITERAL_AS_REFERENCE("GDI_")) == 0)
{ {
object.shiftRight(4); object.remove_prefix(4);
if (object == "Deadeye"sv) return translated_GDI_Deadeye; if (object == "Deadeye"sv) return translated_GDI_Deadeye;
if (object == "Engineer"sv) return translated_GDI_Engineer; if (object == "Engineer"sv) return translated_GDI_Engineer;
if (object == "Grenadier"sv) return translated_GDI_Grenadier; if (object == "Grenadier"sv) return translated_GDI_Grenadier;
@ -471,7 +471,7 @@ const Jupiter::ReferenceString &translateCharacter(Jupiter::ReferenceString &obj
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("Nod_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("Nod_")) == 0)
{ {
object.shiftRight(4); object.remove_prefix(4);
if (object == "BlackHandSniper"sv) return translated_Nod_BlackHandSniper; if (object == "BlackHandSniper"sv) return translated_Nod_BlackHandSniper;
if (object == "ChemicalTrooper"sv) return translated_Nod_ChemicalTrooper; if (object == "ChemicalTrooper"sv) return translated_Nod_ChemicalTrooper;
if (object == "Engineer"sv) return translated_Nod_Engineer; if (object == "Engineer"sv) return translated_Nod_Engineer;
@ -504,16 +504,16 @@ std::string_view RenX::translateName(std::string_view obj)
Jupiter::ReferenceString object = obj; Jupiter::ReferenceString object = obj;
if (object.find(STRING_LITERAL_AS_REFERENCE("nBab_")) == 0) if (object.find(STRING_LITERAL_AS_REFERENCE("nBab_")) == 0)
object.shiftRight(5); object.remove_prefix(5);
if (object.find(STRING_LITERAL_AS_REFERENCE("Rx_")) == 0) if (object.find(STRING_LITERAL_AS_REFERENCE("Rx_")) == 0)
object.shiftRight(3); object.remove_prefix(3);
else if (object.find(STRING_LITERAL_AS_REFERENCE("TS_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("TS_")) == 0)
object.shiftRight(3); object.remove_prefix(3);
if (object.find(STRING_LITERAL_AS_REFERENCE("Vehicle_")) == 0) if (object.find(STRING_LITERAL_AS_REFERENCE("Vehicle_")) == 0)
{ {
object.shiftRight(8); object.remove_prefix(8);
/** Nod Vehicles */ /** Nod Vehicles */
if (object == "Harvester_Nod"sv) return translated_Vehicle_Harvester_Nod; if (object == "Harvester_Nod"sv) return translated_Vehicle_Harvester_Nod;
@ -551,7 +551,7 @@ std::string_view RenX::translateName(std::string_view obj)
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("Weapon_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("Weapon_")) == 0)
{ {
object.shiftRight(7); object.remove_prefix(7);
if (object == "HeavyPistol"sv) return translated_Weapon_HeavyPistol; if (object == "HeavyPistol"sv) return translated_Weapon_HeavyPistol;
if (object == "Carbine"sv) return translated_Weapon_Carbine; if (object == "Carbine"sv) return translated_Weapon_Carbine;
if (object == "Airstrike_GDI"sv) return translated_Weapon_Airstrike_GDI; if (object == "Airstrike_GDI"sv) return translated_Weapon_Airstrike_GDI;
@ -578,23 +578,23 @@ std::string_view RenX::translateName(std::string_view obj)
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("Projectile_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("Projectile_")) == 0)
{ {
object.shiftRight(11); object.remove_prefix(11);
if (object == "EMPGrenade"sv) return translated_Projectile_EMPGrenade; if (object == "EMPGrenade"sv) return translated_Projectile_EMPGrenade;
if (object == "SmokeGrenade"sv) return translated_Projectile_SmokeGrenade; if (object == "SmokeGrenade"sv) return translated_Projectile_SmokeGrenade;
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("InventoryManager_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("InventoryManager_")) == 0)
{ {
object.shiftRight(17); object.remove_prefix(17);
return translateCharacter(object); return translateCharacter(object);
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("FamilyInfo_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("FamilyInfo_")) == 0)
{ {
object.shiftRight(11); object.remove_prefix(11);
return translateCharacter(object); return translateCharacter(object);
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("DmgType_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("DmgType_")) == 0)
{ {
object.shiftRight(8); object.remove_prefix(8);
/** Non-weapon damage types */ /** Non-weapon damage types */
if (object == "Suicided"sv) return translated_DmgType_Suicided; if (object == "Suicided"sv) return translated_DmgType_Suicided;
@ -706,7 +706,7 @@ std::string_view RenX::translateName(std::string_view obj)
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("Building_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("Building_")) == 0)
{ {
object.shiftRight(9); object.remove_prefix(9);
/** Nod structures */ /** Nod structures */
if (object == "HandOfNod"sv) return translated_Building_HandOfNod; if (object == "HandOfNod"sv) return translated_Building_HandOfNod;
if (object == "AirTower"sv) return translated_Building_AirTower; if (object == "AirTower"sv) return translated_Building_AirTower;
@ -743,7 +743,7 @@ std::string_view RenX::translateName(std::string_view obj)
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("CapturableMCT_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("CapturableMCT_")) == 0)
{ {
object.shiftRight(14); object.remove_prefix(14);
if (object == "Fort"sv) return translated_CapturableMCT_Fort; if (object == "Fort"sv) return translated_CapturableMCT_Fort;
if (object == "MC"sv) return translated_CapturableMCT_MC; if (object == "MC"sv) return translated_CapturableMCT_MC;
if (object == "Fort_Internals"sv) return translated_CapturableMCT_Fort_Internals; if (object == "Fort_Internals"sv) return translated_CapturableMCT_Fort_Internals;
@ -751,7 +751,7 @@ std::string_view RenX::translateName(std::string_view obj)
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("Defence_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("Defence_")) == 0)
{ {
object.shiftRight(8); object.remove_prefix(8);
if (object == "GuardTower"sv) return translated_Defence_GuardTower; if (object == "GuardTower"sv) return translated_Defence_GuardTower;
if (object == "Turret"sv) return translated_Defence_Turret; if (object == "Turret"sv) return translated_Defence_Turret;
if (object == "SAMSite"sv) return translated_Defence_SAMSite; if (object == "SAMSite"sv) return translated_Defence_SAMSite;
@ -761,20 +761,20 @@ std::string_view RenX::translateName(std::string_view obj)
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("Sentinel_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("Sentinel_")) == 0)
{ {
object.shiftRight(9); object.remove_prefix(9);
if (object == "AGT_MG_Base"sv) return translated_Sentinel_AGT_MG_Base; if (object == "AGT_MG_Base"sv) return translated_Sentinel_AGT_MG_Base;
if (object == "AGT_Rockets_Base"sv) return translated_Sentinel_AGT_Rockets_Base; if (object == "AGT_Rockets_Base"sv) return translated_Sentinel_AGT_Rockets_Base;
if (object == "Obelisk_Laser_Base"sv) return translated_Sentinel_Obelisk_Laser_Base; if (object == "Obelisk_Laser_Base"sv) return translated_Sentinel_Obelisk_Laser_Base;
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("UTDmgType_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("UTDmgType_")) == 0)
{ {
object.shiftRight(10); object.remove_prefix(10);
if (object == "VehicleExplosion"sv) return translated_UTDmgType_VehicleExplosion; if (object == "VehicleExplosion"sv) return translated_UTDmgType_VehicleExplosion;
if (object == "Drowned"sv) return translated_UTDmgType_Drowned; if (object == "Drowned"sv) return translated_UTDmgType_Drowned;
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("VoteMenuChoice_")) == 0) else if (object.find(STRING_LITERAL_AS_REFERENCE("VoteMenuChoice_")) == 0)
{ {
object.shiftRight(15); object.remove_prefix(15);
if (object == "AddBots"sv) return translated_VoteMenuChoice_AddBots; if (object == "AddBots"sv) return translated_VoteMenuChoice_AddBots;
if (object == "ChangeMap"sv) return translated_VoteMenuChoice_ChangeMap; if (object == "ChangeMap"sv) return translated_VoteMenuChoice_ChangeMap;
if (object == "Donate"sv) return translated_VoteMenuChoice_Donate; if (object == "Donate"sv) return translated_VoteMenuChoice_Donate;

141
src/Plugins/RenX/RenX.Core/RenX_Server.cpp

@ -275,7 +275,8 @@ int RenX::Server::sendMessage(std::string_view message) {
if (this->players.size() != 0) { if (this->players.size() != 0) {
for (auto node = this->players.begin(); node != this->players.end(); ++node) { for (auto node = this->players.begin(); node != this->players.end(); ++node) {
if (node->isBot == false) { if (node->isBot == false) {
result += sendSocket(Jupiter::StringS::Format("chostprivatesay pid%d %.*s\n", node->id, msg.size(), msg.ptr())); result += sendSocket(Jupiter::StringS::Format("chostprivatesay pid%d %.*s\n", node->id, msg.size(),
msg.data()));
} }
} }
} }
@ -581,10 +582,12 @@ void RenX::Server::banCheck(RenX::PlayerInfo &player) {
time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[0]->timestamp + last_to_expire[0]->length); time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[0]->timestamp + last_to_expire[0]->length);
strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(&current_time)); strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(&current_time));
if (last_to_expire[0]->length == std::chrono::seconds::zero()) { if (last_to_expire[0]->length == std::chrono::seconds::zero()) {
forceKickPlayer(player, Jupiter::StringS::Format("You were permanently banned from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[0]->reason.size(), last_to_expire[0]->reason.data())); forceKickPlayer(player, Jupiter::StringS::Format("You were permanently banned from %.*s on %s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), timeStr, last_to_expire[0]->reason.size(), last_to_expire[0]->reason.data()));
} }
else { else {
forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[0]->reason.size(), last_to_expire[0]->reason.data())); forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s until %s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), timeStr, last_to_expire[0]->reason.size(), last_to_expire[0]->reason.data()));
} }
player.ban_flags |= RenX::BanDatabase::Entry::FLAG_TYPE_BOT; // implies FLAG_TYPE_BOT player.ban_flags |= RenX::BanDatabase::Entry::FLAG_TYPE_BOT; // implies FLAG_TYPE_BOT
@ -595,9 +598,11 @@ void RenX::Server::banCheck(RenX::PlayerInfo &player) {
strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(&current_time)); strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(&current_time));
mute(player); mute(player);
if (last_to_expire[1]->length == std::chrono::seconds::zero()) if (last_to_expire[1]->length == std::chrono::seconds::zero())
sendMessage(player, Jupiter::StringS::Format("You were permanently muted from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[1]->reason.size(), last_to_expire[1]->reason.data())); sendMessage(player, Jupiter::StringS::Format("You were permanently muted from %.*s on %s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), timeStr, last_to_expire[1]->reason.size(), last_to_expire[1]->reason.data()));
else else
sendMessage(player, Jupiter::StringS::Format("You are muted from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[1]->reason.size(), last_to_expire[1]->reason.data())); sendMessage(player, Jupiter::StringS::Format("You are muted from %.*s until %s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), timeStr, last_to_expire[1]->reason.size(), last_to_expire[1]->reason.data()));
player.ban_flags |= RenX::BanDatabase::Entry::FLAG_TYPE_BOT; // implies FLAG_TYPE_BOT player.ban_flags |= RenX::BanDatabase::Entry::FLAG_TYPE_BOT; // implies FLAG_TYPE_BOT
} }
@ -605,40 +610,50 @@ void RenX::Server::banCheck(RenX::PlayerInfo &player) {
time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[2]->timestamp + last_to_expire[2]->length); time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[2]->timestamp + last_to_expire[2]->length);
strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(&current_time)); strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(&current_time));
if (last_to_expire[2]->length == std::chrono::seconds::zero()) if (last_to_expire[2]->length == std::chrono::seconds::zero())
sendMessage(player, Jupiter::StringS::Format("You were permanently bot-muted from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[2]->reason.size(), last_to_expire[2]->reason.data())); sendMessage(player, Jupiter::StringS::Format("You were permanently bot-muted from %.*s on %s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), timeStr, last_to_expire[2]->reason.size(), last_to_expire[2]->reason.data()));
else else
sendMessage(player, Jupiter::StringS::Format("You are bot-muted from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[2]->reason.size(), last_to_expire[2]->reason.data())); sendMessage(player, Jupiter::StringS::Format("You are bot-muted from %.*s until %s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), timeStr, last_to_expire[2]->reason.size(), last_to_expire[2]->reason.data()));
} }
if (last_to_expire[3] != nullptr) { // Vote ban if (last_to_expire[3] != nullptr) { // Vote ban
time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[3]->timestamp + last_to_expire[3]->length); time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[3]->timestamp + last_to_expire[3]->length);
strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(&current_time)); strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(&current_time));
if (last_to_expire[3]->length == std::chrono::seconds::zero()) if (last_to_expire[3]->length == std::chrono::seconds::zero())
sendMessage(player, Jupiter::StringS::Format("You were permanently vote-muted from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[3]->reason.size(), last_to_expire[3]->reason.data())); sendMessage(player, Jupiter::StringS::Format("You were permanently vote-muted from %.*s on %s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), timeStr, last_to_expire[3]->reason.size(), last_to_expire[3]->reason.data()));
else else
sendMessage(player, Jupiter::StringS::Format("You are vote-muted from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[3]->reason.size(), last_to_expire[3]->reason.data())); sendMessage(player, Jupiter::StringS::Format("You are vote-muted from %.*s until %s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), timeStr, last_to_expire[3]->reason.size(), last_to_expire[3]->reason.data()));
} }
if (last_to_expire[4] != nullptr) { // Mine ban if (last_to_expire[4] != nullptr) { // Mine ban
time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[4]->timestamp + last_to_expire[4]->length); time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[4]->timestamp + last_to_expire[4]->length);
mineBan(player); mineBan(player);
strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(&current_time)); strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(&current_time));
if (last_to_expire[4]->length == std::chrono::seconds::zero()) if (last_to_expire[4]->length == std::chrono::seconds::zero())
sendMessage(player, Jupiter::StringS::Format("You were permanently mine-banned from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[4]->reason.size(), last_to_expire[4]->reason.data())); sendMessage(player, Jupiter::StringS::Format("You were permanently mine-banned from %.*s on %s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), timeStr, last_to_expire[4]->reason.size(), last_to_expire[4]->reason.data()));
else else
sendMessage(player, Jupiter::StringS::Format("You are mine-banned from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[4]->reason.size(), last_to_expire[4]->reason.data())); sendMessage(player, Jupiter::StringS::Format("You are mine-banned from %.*s until %s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), timeStr, last_to_expire[4]->reason.size(), last_to_expire[4]->reason.data()));
} }
if (last_to_expire[5] != nullptr) { // Ladder ban if (last_to_expire[5] != nullptr) { // Ladder ban
time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[5]->timestamp + last_to_expire[5]->length); time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[5]->timestamp + last_to_expire[5]->length);
strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(&current_time)); strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(&current_time));
if (last_to_expire[5]->length == std::chrono::seconds::zero()) if (last_to_expire[5]->length == std::chrono::seconds::zero())
sendMessage(player, Jupiter::StringS::Format("You were permanently ladder-banned from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[5]->reason.size(), last_to_expire[5]->reason.data())); sendMessage(player, Jupiter::StringS::Format("You were permanently ladder-banned from %.*s on %s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), timeStr, last_to_expire[5]->reason.size(), last_to_expire[5]->reason.data()));
else else
sendMessage(player, Jupiter::StringS::Format("You are ladder-banned from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[5]->reason.size(), last_to_expire[5]->reason.data())); sendMessage(player, Jupiter::StringS::Format("You are ladder-banned from %.*s until %s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), timeStr, last_to_expire[5]->reason.size(), last_to_expire[5]->reason.data()));
} }
if (last_to_expire[6] != nullptr) { // Alert if (last_to_expire[6] != nullptr) { // Alert
IRC_Bot *server; IRC_Bot *server;
Jupiter::String fmtName = RenX::getFormattedPlayerName(player); Jupiter::String fmtName = RenX::getFormattedPlayerName(player);
Jupiter::StringL user_message = Jupiter::StringL::Format(IRCCOLOR "04[Alert] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR " is marked for monitoring by %.*s for: \"%.*s\". Please keep an eye on them in ", fmtName.size(), fmtName.ptr(), last_to_expire[6]->banner.size(), last_to_expire[6]->banner.data(), last_to_expire[6]->reason.size(), last_to_expire[6]->reason.data()); Jupiter::StringL user_message = Jupiter::StringL::Format(IRCCOLOR "04[Alert] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR " is marked for monitoring by %.*s for: \"%.*s\". Please keep an eye on them in ", fmtName.size(),
Jupiter::StringS channel_message = Jupiter::StringS::Format(IRCCOLOR "04[Alert] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR " is marked for monitoring by %.*s for: \"%.*s\"." IRCCOLOR, fmtName.size(), fmtName.ptr(), last_to_expire[6]->banner.size(), last_to_expire[6]->banner.data(), last_to_expire[6]->reason.size(), last_to_expire[6]->reason.data()); fmtName.data(), last_to_expire[6]->banner.size(), last_to_expire[6]->banner.data(), last_to_expire[6]->reason.size(), last_to_expire[6]->reason.data());
Jupiter::StringS channel_message = Jupiter::StringS::Format(IRCCOLOR "04[Alert] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR " is marked for monitoring by %.*s for: \"%.*s\"." IRCCOLOR, fmtName.size(),
fmtName.data(), last_to_expire[6]->banner.size(), last_to_expire[6]->banner.data(), last_to_expire[6]->reason.size(), last_to_expire[6]->reason.data());
for (size_t server_index = 0; server_index < serverManager->size(); ++server_index) { for (size_t server_index = 0; server_index < serverManager->size(); ++server_index) {
server = serverManager->getServer(server_index); server = serverManager->getServer(server_index);
@ -662,7 +677,7 @@ void RenX::Server::banCheck(RenX::PlayerInfo &player) {
void RenX::Server::banPlayer(int id, std::string_view banner, std::string_view reason) { void RenX::Server::banPlayer(int id, std::string_view banner, std::string_view reason) {
if (m_rconBan) { if (m_rconBan) {
Jupiter::String out_reason = RenX::escapifyRCON(reason); Jupiter::String out_reason = RenX::escapifyRCON(reason);
sendSocket(Jupiter::StringS::Format("ckickban pid%d %.*s\n", id, out_reason.size(), out_reason.ptr())); sendSocket(Jupiter::StringS::Format("ckickban pid%d %.*s\n", id, out_reason.size(), out_reason.data()));
} }
else { else {
RenX::PlayerInfo *player = getPlayer(id); RenX::PlayerInfo *player = getPlayer(id);
@ -681,21 +696,26 @@ void RenX::Server::banPlayer(const RenX::PlayerInfo &player, std::string_view ba
if (length == std::chrono::seconds::zero()) { if (length == std::chrono::seconds::zero()) {
if (m_rconBan) { if (m_rconBan) {
Jupiter::String out_reason = RenX::escapifyRCON(reason); Jupiter::String out_reason = RenX::escapifyRCON(reason);
sendSocket(Jupiter::StringS::Format("ckickban pid%d %.*s\n", player.id, out_reason.size(), out_reason.ptr())); sendSocket(Jupiter::StringS::Format("ckickban pid%d %.*s\n", player.id, out_reason.size(),
out_reason.data()));
} }
else if (!banner.empty()) { else if (!banner.empty()) {
forceKickPlayer(player, Jupiter::StringS::Format("You are permanently banned from %.*s by %.*s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), banner.size(), banner.data(), reason.size(), reason.data())); forceKickPlayer(player, Jupiter::StringS::Format("You are permanently banned from %.*s by %.*s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), banner.size(), banner.data(), reason.size(), reason.data()));
} }
else { else {
forceKickPlayer(player, Jupiter::StringS::Format("You are permanently banned from %.*s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), reason.size(), reason.data())); forceKickPlayer(player, Jupiter::StringS::Format("You are permanently banned from %.*s for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), reason.size(), reason.data()));
} }
} }
else if (!banner.empty()) { else if (!banner.empty()) {
// TODO: make the time formatting not complete nonsense // TODO: make the time formatting not complete nonsense
forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s by %.*s for the next %lld days, %.2d:%.2d:%.2d for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), banner.size(), banner.data(), static_cast<long long>(length.count() / 86400), static_cast<int>(length.count() % 3600), static_cast<int>((length.count() % 3600) / 60), static_cast<int>(length.count() % 60), reason.size(), reason.data())); forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s by %.*s for the next %lld days, %.2d:%.2d:%.2d for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), banner.size(), banner.data(), static_cast<long long>(length.count() / 86400), static_cast<int>(length.count() % 3600), static_cast<int>((length.count() % 3600) / 60), static_cast<int>(length.count() % 60), reason.size(), reason.data()));
} }
else { else {
forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s for the next %lld days, %.2d:%.2d:%.2d for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), static_cast<long long>(length.count() / 86400), static_cast<int>(length.count() % 3600), static_cast<int>((length.count() % 3600) / 60), static_cast<int>(length.count() % 60), reason.size(), reason.data())); forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s for the next %lld days, %.2d:%.2d:%.2d for: %.*s", m_ban_from_str.size(),
m_ban_from_str.data(), static_cast<long long>(length.count() / 86400), static_cast<int>(length.count() % 3600), static_cast<int>((length.count() % 3600) / 60), static_cast<int>(length.count() % 60), reason.size(), reason.data()));
} }
} }
} }
@ -808,11 +828,11 @@ bool RenX::Server::setMap(std::string_view map) {
} }
bool RenX::Server::loadMutator(const Jupiter::ReadableString &mutator) { bool RenX::Server::loadMutator(const Jupiter::ReadableString &mutator) {
return send(Jupiter::StringS::Format("loadmutator %.*s", mutator.size(), mutator.ptr())) > 0; return send(Jupiter::StringS::Format("loadmutator %.*s", mutator.size(), mutator.data())) > 0;
} }
bool RenX::Server::unloadMutator(const Jupiter::ReadableString &mutator) { bool RenX::Server::unloadMutator(const Jupiter::ReadableString &mutator) {
return send(Jupiter::StringS::Format("unloadmutator %.*s", mutator.size(), mutator.ptr())) > 0; return send(Jupiter::StringS::Format("unloadmutator %.*s", mutator.size(), mutator.data())) > 0;
} }
bool RenX::Server::cancelVote(const RenX::TeamType team) { bool RenX::Server::cancelVote(const RenX::TeamType team) {
@ -1018,7 +1038,7 @@ const Jupiter::ReadableString &RenX::Server::getPassword() const {
return m_pass; return m_pass;
} }
const Jupiter::ReadableString &RenX::Server::getUser() const { std::string_view RenX::Server::getUser() const {
return m_rconUser; return m_rconUser;
} }
@ -1307,11 +1327,12 @@ void process_escape_sequences(std::string& out_string) {
} }
void RenX::Server::processLine(const Jupiter::ReadableString &line) { void RenX::Server::processLine(const Jupiter::ReadableString &line) {
std::string_view in_line = line;
if (line.empty()) if (line.empty())
return; return;
auto& xPlugins = RenX::getCore()->getPlugins(); auto& xPlugins = RenX::getCore()->getPlugins();
auto tokens_view = jessilib::split_view(std::string_view{line}, m_rconVersion == 3 ? RenX::DelimC3 : RenX::DelimC); auto tokens_view = jessilib::split_view(in_line, m_rconVersion == 3 ? RenX::DelimC3 : RenX::DelimC);
std::vector<Jupiter::StringS> tokens; std::vector<Jupiter::StringS> tokens;
for (auto& token : tokens_view) { for (auto& token : tokens_view) {
@ -1435,7 +1456,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
result.name = player_tokens[2]; result.name = player_tokens[2];
result.team = RenX::getTeam(player_tokens[0]); result.team = RenX::getTeam(player_tokens[0]);
if (idToken.isNotEmpty() && idToken[0] == 'b') { if (idToken.isNotEmpty() && idToken[0] == 'b') {
idToken.shiftRight(1); idToken.remove_prefix(1);
result.isBot = true; result.isBot = true;
result.isPlayer = true; result.isPlayer = true;
} }
@ -1570,17 +1591,17 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
{ {
auto parsed_token = parsePlayerData(token); auto parsed_token = parsePlayerData(token);
if (parsed_token.id == 0 && parsed_token.name.empty()) { if (parsed_token.id == 0 && parsed_token.name.empty()) {
sendAdmChan(IRCCOLOR "04[Error]" IRCCOLOR" Failed to parse player token: %.*s", token.size(), token.ptr()); sendAdmChan(IRCCOLOR "04[Error]" IRCCOLOR" Failed to parse player token: %.*s", token.size(), token.data());
} }
return getPlayerOrAdd(parsed_token.name, parsed_token.id, parsed_token.team, parsed_token.isBot, 0U, ""_jrs, ""_jrs); return getPlayerOrAdd(parsed_token.name, parsed_token.id, parsed_token.team, parsed_token.isBot, 0U, ""_jrs, ""_jrs);
}; };
auto gotoToken = [&line, &tokens, this](size_t index) auto gotoToken = [&in_line, &tokens, this](size_t index)
{ {
if (index >= tokens.size()) if (index >= tokens.size())
return ""_jrs; return ""sv;
const char delim = getVersion() >= 4 ? RenX::DelimC : RenX::DelimC3; const char delim = getVersion() >= 4 ? RenX::DelimC : RenX::DelimC3;
const char *itr = line.ptr(); const char *itr = in_line.data();
while (index != 0) while (index != 0)
{ {
@ -1589,7 +1610,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
++itr; ++itr;
} }
return Jupiter::ReferenceString::substring(line, itr - line.ptr()); return in_line.substr(itr - in_line.data());
}; };
auto finished_connecting = [this, &xPlugins]() auto finished_connecting = [this, &xPlugins]()
{ {
@ -1602,7 +1623,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
if (tokens[0].isNotEmpty()) if (tokens[0].isNotEmpty())
{ {
char header = tokens[0].get(0); char header = tokens[0][0];
tokens[0].shiftRight(1); tokens[0].shiftRight(1);
switch (header) switch (header)
{ {
@ -1619,7 +1640,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
Jupiter::ReferenceString steamToken = getToken(2); Jupiter::ReferenceString steamToken = getToken(2);
Jupiter::ReferenceString adminToken = getToken(3); Jupiter::ReferenceString adminToken = getToken(3);
Jupiter::ReferenceString teamToken = getToken(4); Jupiter::ReferenceString teamToken = getToken(4);
if (tokens[0].get(0) == 'b') if (tokens[0][0] == 'b')
{ {
isBot = true; isBot = true;
tokens[0].shiftRight(1); tokens[0].shiftRight(1);
@ -2007,8 +2028,8 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
const Jupiter::ReferenceString guid_token = getToken(1); const Jupiter::ReferenceString guid_token = getToken(1);
if (guid_token.size() == 32U) { if (guid_token.size() == 32U) {
m_map.guid[0] = Jupiter::asUnsignedLongLong(guid_token.substring(size_t{ 0 }, 16U), 16); m_map.guid[0] = Jupiter::asUnsignedLongLong(guid_token.substr(size_t{ 0 }, 16U), 16);
m_map.guid[1] = Jupiter::asUnsignedLongLong(guid_token.substring(16U), 16); m_map.guid[1] = Jupiter::asUnsignedLongLong(guid_token.substr(16U), 16);
} }
} }
else if (jessilib::equalsi(m_lastCommand, "serverinfo"sv)) else if (jessilib::equalsi(m_lastCommand, "serverinfo"sv))
@ -2023,8 +2044,8 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
const Jupiter::ReferenceString guid_token = getToken(11); const Jupiter::ReferenceString guid_token = getToken(11);
if (guid_token.size() == 32U) if (guid_token.size() == 32U)
{ {
m_map.guid[0] = Jupiter::asUnsignedLongLong(guid_token.substring(size_t{ 0 }, 16U), 16); m_map.guid[0] = Jupiter::asUnsignedLongLong(guid_token.substr(size_t{ 0 }, 16U), 16);
m_map.guid[1] = Jupiter::asUnsignedLongLong(guid_token.substring(16U), 16); m_map.guid[1] = Jupiter::asUnsignedLongLong(guid_token.substr(16U), 16);
} }
} }
} }
@ -2089,8 +2110,8 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
const Jupiter::ReferenceString guid_token = getToken(1); const Jupiter::ReferenceString guid_token = getToken(1);
if (guid_token.size() == 32U) { if (guid_token.size() == 32U) {
this->maps.back().guid[0] = Jupiter::asUnsignedLongLong(guid_token.substring(size_t{ 0 }, 16U), 16); this->maps.back().guid[0] = Jupiter::asUnsignedLongLong(guid_token.substr(size_t{ 0 }, 16U), 16);
this->maps.back().guid[1] = Jupiter::asUnsignedLongLong(guid_token.substring(16U), 16); this->maps.back().guid[1] = Jupiter::asUnsignedLongLong(guid_token.substr(16U), 16);
} }
} }
} }
@ -3187,7 +3208,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(tokens.size() - 1)); RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(tokens.size() - 1));
if ((player->ban_flags & RenX::BanDatabase::Entry::FLAG_TYPE_VOTE) != 0) if ((player->ban_flags & RenX::BanDatabase::Entry::FLAG_TYPE_VOTE) != 0)
sendData(Jupiter::StringS::Format("ccancelvote %.*s\n", teamToken.size(), teamToken.ptr())); sendData(Jupiter::StringS::Format("ccancelvote %.*s\n", teamToken.size(), teamToken.data()));
for (const auto& plugin : xPlugins) { for (const auto& plugin : xPlugins) {
plugin->RenX_OnVoteOther(*this, team, voteType, *player); plugin->RenX_OnVoteOther(*this, team, voteType, *player);
@ -3198,13 +3219,13 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(5)); RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(5));
if ((player->ban_flags & RenX::BanDatabase::Entry::FLAG_TYPE_VOTE) != 0) if ((player->ban_flags & RenX::BanDatabase::Entry::FLAG_TYPE_VOTE) != 0)
sendData(Jupiter::StringS::Format("ccancelvote %.*s\n", teamToken.size(), teamToken.ptr())); sendData(Jupiter::StringS::Format("ccancelvote %.*s\n", teamToken.size(), teamToken.data()));
// PARSE PARAMETERS HERE // PARSE PARAMETERS HERE
if (voteType.find("Rx_VoteMenuChoice_"_jrs) == 0) if (voteType.find("Rx_VoteMenuChoice_"_jrs) == 0)
{ {
voteType.shiftRight(18); voteType.remove_prefix(18);
if (voteType == "AddBots"sv) if (voteType == "AddBots"sv)
{ {
@ -3286,7 +3307,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
} }
else else
{ {
voteType.shiftLeft(18); voteType = getToken(3);
for (const auto& plugin : xPlugins) { for (const auto& plugin : xPlugins) {
plugin->RenX_OnVoteOther(*this, team, voteType, *player); plugin->RenX_OnVoteOther(*this, team, voteType, *player);
} }
@ -3323,7 +3344,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
Jupiter::ReferenceString votes_token = getToken(5); Jupiter::ReferenceString votes_token = getToken(5);
if (votes_token.size() > 4) if (votes_token.size() > 4)
{ {
votes_token.shiftRight(4); votes_token.remove_prefix(4);
yesVotes = Jupiter::from_string<int>(votes_token); yesVotes = Jupiter::from_string<int>(votes_token);
} }
@ -3331,7 +3352,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
votes_token = getToken(6); votes_token = getToken(6);
if (votes_token.size() > 3) if (votes_token.size() > 3)
{ {
votes_token.shiftRight(3); votes_token.remove_prefix(3);
noVotes = Jupiter::from_string<int>(votes_token); noVotes = Jupiter::from_string<int>(votes_token);
} }
@ -3465,7 +3486,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
}*/ }*/
else else
{ {
Jupiter::ReferenceString raw = Jupiter::ReferenceString::substring(line, 1); Jupiter::ReferenceString raw = in_line.substr(1);
for (const auto& plugin : xPlugins) { for (const auto& plugin : xPlugins) {
plugin->RenX_OnLog(*this, raw); plugin->RenX_OnLog(*this, raw);
} }
@ -3481,7 +3502,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
case 'c': case 'c':
{ {
Jupiter::ReferenceString raw = Jupiter::ReferenceString::substring(line, 1); Jupiter::ReferenceString raw = in_line.substr(1);
for (const auto& plugin : xPlugins) { for (const auto& plugin : xPlugins) {
plugin->RenX_OnCommand(*this, raw); plugin->RenX_OnCommand(*this, raw);
} }
@ -3493,7 +3514,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
case 'e': case 'e':
{ {
Jupiter::ReferenceString raw = Jupiter::ReferenceString::substring(line, 1); Jupiter::ReferenceString raw = in_line.substr(1);
for (const auto& plugin : xPlugins) { for (const auto& plugin : xPlugins) {
plugin->RenX_OnError(*this, raw); plugin->RenX_OnError(*this, raw);
} }
@ -3502,15 +3523,17 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
case 'v': case 'v':
{ {
Jupiter::ReferenceString raw = Jupiter::ReferenceString::substring(line, 1); Jupiter::ReferenceString raw = in_line.substr(1);
m_rconVersion = Jupiter::asInt(raw, 10); m_rconVersion = Jupiter::asInt(raw, 10);
if (m_rconVersion >= 3) if (m_rconVersion >= 3)
{ {
if (m_rconVersion == 3) // Old format: 003Open Beta 5.12 if (m_rconVersion == 3) { // Old format: 003Open Beta 5.12
m_gameVersion = raw.substring(3); if (raw.size() > 3) {
else // New format: 004 | Game Version Number | Game Version m_gameVersion = raw.substr(3);
{ }
}
else { // New format: 004 | Game Version Number | Game Version
m_gameVersionNumber = Jupiter::asInt(getToken(1), 10); m_gameVersionNumber = Jupiter::asInt(getToken(1), 10);
m_gameVersion = getToken(2); m_gameVersion = getToken(2);
@ -3549,19 +3572,19 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) {
case 'a': case 'a':
{ {
m_rconUser = Jupiter::ReferenceString::substring(line, 1); m_rconUser = in_line.substr(1);
if (m_rconUser == RenX::DevBotName) if (m_rconUser == RenX::DevBotName)
m_devBot = true; m_devBot = true;
for (const auto& plugin : xPlugins) { for (const auto& plugin : xPlugins) {
plugin->RenX_OnAuthorized(*this, m_rconUser); plugin->RenX_OnAuthorized(*this, Jupiter::ReferenceString{m_rconUser});
} }
} }
break; break;
default: default:
{ {
Jupiter::ReferenceString raw = Jupiter::ReferenceString::substring(line, 1); Jupiter::ReferenceString raw = in_line.substr(1);
for (const auto& plugin : xPlugins) { for (const auto& plugin : xPlugins) {
plugin->RenX_OnOther(*this, header, raw); plugin->RenX_OnOther(*this, header, raw);
} }
@ -3590,7 +3613,7 @@ bool RenX::Server::connect() {
if (m_sock.connect(m_hostname.c_str(), m_port, m_clientHostname.empty() ? nullptr : m_clientHostname.c_str())) if (m_sock.connect(m_hostname.c_str(), m_port, m_clientHostname.empty() ? nullptr : m_clientHostname.c_str()))
{ {
m_sock.setBlocking(false); m_sock.setBlocking(false);
sendSocket(Jupiter::StringS::Format("a%.*s\n", m_pass.size(), m_pass.ptr())); sendSocket(Jupiter::StringS::Format("a%.*s\n", m_pass.size(), m_pass.data()));
m_connected = true; m_connected = true;
m_attempts = 0; m_attempts = 0;
return true; return true;
@ -3622,7 +3645,7 @@ void RenX::Server::wipeData() {
this->maps.clear(); this->maps.clear();
m_awaitingPong = false; m_awaitingPong = false;
m_rconVersion = 0; m_rconVersion = 0;
m_rconUser.truncate(m_rconUser.size()); m_rconUser.clear();
} }
void RenX::Server::wipePlayers() { void RenX::Server::wipePlayers() {
@ -3665,7 +3688,7 @@ std::string_view RenX::Server::getRCONUsername() const {
RenX::Server::Server(Jupiter::Socket &&socket, std::string_view configurationSection) : Server(configurationSection) { RenX::Server::Server(Jupiter::Socket &&socket, std::string_view configurationSection) : Server(configurationSection) {
m_sock = std::move(socket); m_sock = std::move(socket);
m_hostname = m_sock.getRemoteHostname(); m_hostname = m_sock.getRemoteHostname();
sendSocket(Jupiter::StringS::Format("a%.*s\n", m_pass.size(), m_pass.ptr())); sendSocket(Jupiter::StringS::Format("a%.*s\n", m_pass.size(), m_pass.data()));
m_connected = true; m_connected = true;
} }

4
src/Plugins/RenX/RenX.Core/RenX_Server.h

@ -827,7 +827,7 @@ namespace RenX
* *
* @return String containing the RCON user name. * @return String containing the RCON user name.
*/ */
const Jupiter::ReadableString &getUser() const; std::string_view getUser() const;
/** /**
* @brief Checks if this connection is a DevBot connection. * @brief Checks if this connection is a DevBot connection.
@ -1111,7 +1111,7 @@ namespace RenX
std::chrono::steady_clock::time_point m_lastSendActivity = std::chrono::steady_clock::now(); std::chrono::steady_clock::time_point m_lastSendActivity = std::chrono::steady_clock::now();
std::chrono::steady_clock::time_point m_gameover_time; std::chrono::steady_clock::time_point m_gameover_time;
std::string m_lastLine; std::string m_lastLine;
Jupiter::StringS m_rconUser; std::string m_rconUser;
std::string m_gameVersion; std::string m_gameVersion;
Jupiter::StringS m_serverName; Jupiter::StringS m_serverName;
std::string m_lastCommand; std::string m_lastCommand;

3
src/Plugins/RenX/RenX.ExcessiveHeadshots/RenX_ExcessiveHeadshots.cpp

@ -60,7 +60,8 @@ void RenX_ExcessiveHeadshotsPlugin::RenX_OnKill(RenX::Server &server, const RenX
server.banPlayer(player, "Jupiter Bot"_jrs, "Aimbot detected"_jrs); server.banPlayer(player, "Jupiter Bot"_jrs, "Aimbot detected"_jrs);
server.sendPubChan(IRCCOLOR "13[Aimbot]" IRCCOLOR " %.*s was banned from the server! Kills: %u - Deaths: %u - Headshots: %u", player.name.size(), player.name.data(), player.kills, player.deaths, player.headshots); server.sendPubChan(IRCCOLOR "13[Aimbot]" IRCCOLOR " %.*s was banned from the server! Kills: %u - Deaths: %u - Headshots: %u", player.name.size(), player.name.data(), player.kills, player.deaths, player.headshots);
const Jupiter::ReadableString &steamid = server.formatSteamID(player); const Jupiter::ReadableString &steamid = server.formatSteamID(player);
server.sendAdmChan(IRCCOLOR "13[Aimbot]" IRCCOLOR " %.*s was banned from the server! Kills: %u - Deaths: %u - Headshots: %u - IP: " IRCBOLD "%.*s" IRCBOLD " - Steam ID: " IRCBOLD "%.*s" IRCBOLD, player.name.size(), player.name.data(), player.kills, player.deaths, player.headshots, player.ip.size(), player.ip.data(), steamid.size(), steamid.ptr()); server.sendAdmChan(IRCCOLOR "13[Aimbot]" IRCCOLOR " %.*s was banned from the server! Kills: %u - Deaths: %u - Headshots: %u - IP: " IRCBOLD "%.*s" IRCBOLD " - Steam ID: " IRCBOLD "%.*s" IRCBOLD, player.name.size(), player.name.data(), player.kills, player.deaths, player.headshots, player.ip.size(), player.ip.data(), steamid.size(),
steamid.data());
} }
} }
} }

20
src/Plugins/RenX/RenX.ExtraLogging/RenX_ExtraLogging.cpp

@ -46,9 +46,13 @@ int RenX_ExtraLoggingPlugin::OnRehash()
} }
bool RenX_ExtraLoggingPlugin::initialize() { bool RenX_ExtraLoggingPlugin::initialize() {
RenX_ExtraLoggingPlugin::filePrefix = this->config.get("FilePrefix"_jrs, Jupiter::StringS::Format("[%.*s] %.*s", RenX::tags->timeTag.size(), RenX::tags->timeTag.ptr(), RenX::tags->serverPrefixTag.size(), RenX::tags->serverPrefixTag.ptr())); RenX_ExtraLoggingPlugin::filePrefix = this->config.get("FilePrefix"_jrs, Jupiter::StringS::Format("[%.*s] %.*s", RenX::tags->timeTag.size(),
RenX::tags->timeTag.data(), RenX::tags->serverPrefixTag.size(),
RenX::tags->serverPrefixTag.data()));
RenX_ExtraLoggingPlugin::consolePrefix = this->config.get("ConsolePrefix"_jrs, RenX_ExtraLoggingPlugin::filePrefix); RenX_ExtraLoggingPlugin::consolePrefix = this->config.get("ConsolePrefix"_jrs, RenX_ExtraLoggingPlugin::filePrefix);
RenX_ExtraLoggingPlugin::newDayFmt = this->config.get("NewDayFormat"_jrs, Jupiter::StringS::Format("Time: %.*s %.*s", RenX::tags->timeTag.size(), RenX::tags->timeTag.ptr(), RenX::tags->dateTag.size(), RenX::tags->dateTag.ptr())); RenX_ExtraLoggingPlugin::newDayFmt = this->config.get("NewDayFormat"_jrs, Jupiter::StringS::Format("Time: %.*s %.*s", RenX::tags->timeTag.size(),
RenX::tags->timeTag.data(), RenX::tags->dateTag.size(),
RenX::tags->dateTag.data()));
RenX_ExtraLoggingPlugin::printToConsole = this->config.get<bool>("PrintToConsole"_jrs, true); RenX_ExtraLoggingPlugin::printToConsole = this->config.get<bool>("PrintToConsole"_jrs, true);
const std::string logFile = static_cast<std::string>(this->config.get("LogFile"_jrs)); const std::string logFile = static_cast<std::string>(this->config.get("LogFile"_jrs));
@ -61,7 +65,7 @@ bool RenX_ExtraLoggingPlugin::initialize() {
if (RenX_ExtraLoggingPlugin::file != nullptr && RenX_ExtraLoggingPlugin::newDayFmt.isNotEmpty()) { if (RenX_ExtraLoggingPlugin::file != nullptr && RenX_ExtraLoggingPlugin::newDayFmt.isNotEmpty()) {
Jupiter::String line = RenX_ExtraLoggingPlugin::newDayFmt; Jupiter::String line = RenX_ExtraLoggingPlugin::newDayFmt;
RenX::processTags(line); RenX::processTags(line);
fwrite(line.ptr(), sizeof(char), line.size(), file); fwrite(line.data(), sizeof(char), line.size(), file);
fputs("\r\n", file); fputs("\r\n", file);
} }
} }
@ -80,7 +84,7 @@ int RenX_ExtraLoggingPlugin::think() {
RenX_ExtraLoggingPlugin::day = currentDay; RenX_ExtraLoggingPlugin::day = currentDay;
Jupiter::String line = RenX_ExtraLoggingPlugin::newDayFmt; Jupiter::String line = RenX_ExtraLoggingPlugin::newDayFmt;
RenX::processTags(line); RenX::processTags(line);
fwrite(line.ptr(), sizeof(char), line.size(), file); fwrite(line.data(), sizeof(char), line.size(), file);
fputs("\r\n", file); fputs("\r\n", file);
} }
} }
@ -92,10 +96,10 @@ void RenX_ExtraLoggingPlugin::RenX_OnRaw(RenX::Server &server, const Jupiter::Re
if (RenX_ExtraLoggingPlugin::consolePrefix.isNotEmpty()) { if (RenX_ExtraLoggingPlugin::consolePrefix.isNotEmpty()) {
Jupiter::StringS cPrefix = RenX_ExtraLoggingPlugin::consolePrefix; Jupiter::StringS cPrefix = RenX_ExtraLoggingPlugin::consolePrefix;
RenX::processTags(cPrefix, &server); RenX::processTags(cPrefix, &server);
fwrite(cPrefix.ptr(), sizeof(char), cPrefix.size(), stdout); fwrite(cPrefix.data(), sizeof(char), cPrefix.size(), stdout);
fputc(' ', stdout); fputc(' ', stdout);
} }
fwrite(raw.ptr(), sizeof(char), raw.size(), stdout); fwrite(raw.data(), sizeof(char), raw.size(), stdout);
fputs("\r\n", stdout); fputs("\r\n", stdout);
} }
@ -103,10 +107,10 @@ void RenX_ExtraLoggingPlugin::RenX_OnRaw(RenX::Server &server, const Jupiter::Re
if (RenX_ExtraLoggingPlugin::filePrefix.isNotEmpty()) { if (RenX_ExtraLoggingPlugin::filePrefix.isNotEmpty()) {
Jupiter::StringS fPrefix = RenX_ExtraLoggingPlugin::filePrefix; Jupiter::StringS fPrefix = RenX_ExtraLoggingPlugin::filePrefix;
RenX::processTags(fPrefix, &server); RenX::processTags(fPrefix, &server);
fwrite(fPrefix.ptr(), sizeof(char), fPrefix.size(), file); fwrite(fPrefix.data(), sizeof(char), fPrefix.size(), file);
fputc(' ', RenX_ExtraLoggingPlugin::file); fputc(' ', RenX_ExtraLoggingPlugin::file);
} }
fwrite(raw.ptr(), sizeof(char), raw.size(), file); fwrite(raw.data(), sizeof(char), raw.size(), file);
fputs("\r\n", file); fputs("\r\n", file);
fflush(RenX_ExtraLoggingPlugin::file); fflush(RenX_ExtraLoggingPlugin::file);
} }

416
src/Plugins/RenX/RenX.Logging/RenX_Logging.cpp

@ -115,10 +115,18 @@ bool RenX_LoggingPlugin::initialize()
""_jrs); ""_jrs);
RenX_LoggingPlugin::playerIdentifyFmt = this->config.get("PlayerIdentifyFormat"_jrs, RenX_LoggingPlugin::playerIdentifyFmt = this->config.get("PlayerIdentifyFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " (" IRCBOLD "%.*s" IRCBOLD ") joined the game fighting for the %.*s from " IRCBOLD "%.*s" IRCBOLD " (" IRCBOLD "%.*s" IRCBOLD ") with HWID " IRCBOLD "%.*s" IRCBOLD ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->steamTag.size(), RenX::tags->steamTag.ptr(), RenX::tags->teamLongTag.size(), RenX::tags->teamLongTag.ptr(), RenX::tags->ipTag.size(), RenX::tags->ipTag.ptr(), RenX::tags->rdnsTag.size(), RenX::tags->rdnsTag.ptr(), RenX::tags->hwidTag.size(), RenX::tags->hwidTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " (" IRCBOLD "%.*s" IRCBOLD ") joined the game fighting for the %.*s from " IRCBOLD "%.*s" IRCBOLD " (" IRCBOLD "%.*s" IRCBOLD ") with HWID " IRCBOLD "%.*s" IRCBOLD ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->steamTag.size(),
RenX::tags->steamTag.data(), RenX::tags->teamLongTag.size(),
RenX::tags->teamLongTag.data(), RenX::tags->ipTag.size(),
RenX::tags->ipTag.data(), RenX::tags->rdnsTag.size(),
RenX::tags->rdnsTag.data(), RenX::tags->hwidTag.size(),
RenX::tags->hwidTag.data()));
RenX_LoggingPlugin::joinPublicFmt = this->config.get("JoinPublicFormat"_jrs, RenX_LoggingPlugin::joinPublicFmt = this->config.get("JoinPublicFormat"_jrs,
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())); Jupiter::StringS::Format(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " joined the game fighting for the %.*s!", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->teamLongTag.size(),
RenX::tags->teamLongTag.data()));
RenX_LoggingPlugin::joinAdminFmt = this->config.get("JoinAdminFormat"_jrs, RenX_LoggingPlugin::joinAdminFmt = this->config.get("JoinAdminFormat"_jrs,
""_jrs); ""_jrs);
@ -127,153 +135,268 @@ bool RenX_LoggingPlugin::initialize()
""_jrs); ""_jrs);
RenX_LoggingPlugin::partFmt = this->config.get("PartFormat"_jrs, RenX_LoggingPlugin::partFmt = this->config.get("PartFormat"_jrs,
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())); Jupiter::StringS::Format(IRCCOLOR "12[Part] " IRCBOLD "%.*s" IRCBOLD " left the %.*s.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->teamLongTag.size(),
RenX::tags->teamLongTag.data()));
RenX_LoggingPlugin::kickFmt = this->config.get("KickFormat"_jrs, RenX_LoggingPlugin::kickFmt = this->config.get("KickFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "04[Kick] " IRCBOLD "%.*s" IRCCOLOR IRCBOLD " was " IRCBOLD IRCCOLOR "04kicked" IRCCOLOR IRCBOLD " (" IRCCOLOR "04%.*s" IRCCOLOR ")", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "04[Kick] " IRCBOLD "%.*s" IRCCOLOR IRCBOLD " was " IRCBOLD IRCCOLOR "04kicked" IRCCOLOR IRCBOLD " (" IRCCOLOR "04%.*s" IRCCOLOR ")", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::playerExecuteFmt = this->config.get("PlayerExecuteFormat"_jrs, RenX_LoggingPlugin::playerExecuteFmt = this->config.get("PlayerExecuteFormat"_jrs,
Jupiter::StringS::Format("%.*s" IRCCOLOR "07 executed: %.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format("%.*s" IRCCOLOR "07 executed: %.*s", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::playerCommandSuccessFmt = this->config.get("PlayerCommandSuccessFormat"_jrs, RenX_LoggingPlugin::playerCommandSuccessFmt = this->config.get("PlayerCommandSuccessFormat"_jrs,
Jupiter::StringS::Format("%.*s" IRCCOLOR ": " IRCCOLOR "10%.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format("%.*s" IRCCOLOR ": " IRCCOLOR "10%.*s", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::playerCommandFailFmt = this->config.get("PlayerCommandFailFormat"_jrs, ""_jss); RenX_LoggingPlugin::playerCommandFailFmt = this->config.get("PlayerCommandFailFormat"_jrs, ""_jss);
RenX_LoggingPlugin::playerFmt = this->config.get("PlayerFormat"_jrs, RenX_LoggingPlugin::playerFmt = this->config.get("PlayerFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "12[Player]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "12[Player]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::nameChangeFmt = this->config.get("NameChangeFormat"_jrs, RenX_LoggingPlugin::nameChangeFmt = this->config.get("NameChangeFormat"_jrs,
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())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCBOLD " changed their name to " IRCBOLD "%.*s" IRCBOLD ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->newNameTag.size(),
RenX::tags->newNameTag.data()));
RenX_LoggingPlugin::teamChangeFmt = this->config.get("TeamChangeFormat"_jrs, RenX_LoggingPlugin::teamChangeFmt = this->config.get("TeamChangeFormat"_jrs,
Jupiter::StringS::Format("%.*s" IRCCOLOR " switched teams!", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format("%.*s" IRCCOLOR " switched teams!", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::speedHackFmt = this->config.get("SpeedHackFormat"_jrs, RenX_LoggingPlugin::speedHackFmt = this->config.get("SpeedHackFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "04[SpeedHack] " IRCBOLD "%.*s" IRCBOLD " has thrown a Speed Hack warning!", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "04[SpeedHack] " IRCBOLD "%.*s" IRCBOLD " has thrown a Speed Hack warning!", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::chatFmt = this->config.get("ChatFormat"_jrs, RenX_LoggingPlugin::chatFmt = this->config.get("ChatFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD ": %.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD ": %.*s", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::teamChatFmt = this->config.get("TeamChatFormat"_jrs, RenX_LoggingPlugin::teamChatFmt = this->config.get("TeamChatFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCBOLD ": %.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCBOLD ": %.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::radioChatFmt = this->config.get("RadioChatFormat"_jrs, RenX_LoggingPlugin::radioChatFmt = this->config.get("RadioChatFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCBOLD ": \x1D%.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCBOLD ": \x1D%.*s", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::hostChatFmt = this->config.get("HostChatFormat"_jrs, RenX_LoggingPlugin::hostChatFmt = this->config.get("HostChatFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "12Host" IRCCOLOR "0: %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "12Host" IRCCOLOR "0: %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::hostPageFmt = this->config.get("HostPageFormat"_jrs, RenX_LoggingPlugin::hostPageFmt = this->config.get("HostPageFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "12(Host -> %.*s): %.*s", RenX::tags->rawNameTag.size(), RenX::tags->rawNameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "12(Host -> %.*s): %.*s", RenX::tags->rawNameTag.size(),
RenX::tags->rawNameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::adminMsgFmt = this->config.get("AdminMsgFormat"_jrs, RenX_LoggingPlugin::adminMsgFmt = this->config.get("AdminMsgFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "10%.*s: %.*s", RenX::tags->rawNameTag.size(), RenX::tags->rawNameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "10%.*s: %.*s", RenX::tags->rawNameTag.size(), RenX::tags->rawNameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::warnMsgFmt = this->config.get("WarnMsgFormat"_jrs, RenX_LoggingPlugin::warnMsgFmt = this->config.get("WarnMsgFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "07%.*s: %.*s", RenX::tags->rawNameTag.size(), RenX::tags->rawNameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "07%.*s: %.*s", RenX::tags->rawNameTag.size(), RenX::tags->rawNameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::pAdminMsgFmt = this->config.get("PAdminMsgFormat"_jrs, RenX_LoggingPlugin::pAdminMsgFmt = this->config.get("PAdminMsgFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "10(%.*s -> %.*s): %.*s", RenX::tags->rawNameTag.size(), RenX::tags->rawNameTag.ptr(), RenX::tags->victimRawNameTag.size(), RenX::tags->victimRawNameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "10(%.*s -> %.*s): %.*s", RenX::tags->rawNameTag.size(),
RenX::tags->rawNameTag.data(), RenX::tags->victimRawNameTag.size(),
RenX::tags->victimRawNameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::pWarnMsgFmt = this->config.get("PWarnMsgFormat"_jrs, RenX_LoggingPlugin::pWarnMsgFmt = this->config.get("PWarnMsgFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "07(%.*s -> %.*s): %.*s", RenX::tags->rawNameTag.size(), RenX::tags->rawNameTag.ptr(), RenX::tags->victimRawNameTag.size(), RenX::tags->victimRawNameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "07(%.*s -> %.*s): %.*s", RenX::tags->rawNameTag.size(),
RenX::tags->rawNameTag.data(), RenX::tags->victimRawNameTag.size(),
RenX::tags->victimRawNameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::otherChatFmt = this->config.get("OtherChatFormat"_jrs, RenX_LoggingPlugin::otherChatFmt = this->config.get("OtherChatFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "06[Other Chat]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "06[Other Chat]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::deployFmt = this->config.get("DeployFormat"_jrs, RenX_LoggingPlugin::deployFmt = this->config.get("DeployFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " deployed a " IRCBOLD IRCCOLOR "12%.*s" IRCBOLD, RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " deployed a " IRCBOLD IRCCOLOR "12%.*s" IRCBOLD, RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::mineDeployFmt = this->config.get("MineDeployFormat"_jrs, RenX_LoggingPlugin::mineDeployFmt = this->config.get("MineDeployFormat"_jrs,
RenX_LoggingPlugin::deployFmt); RenX_LoggingPlugin::deployFmt);
RenX_LoggingPlugin::overMineFmt = this->config.get("OverMineFormat"_jrs, RenX_LoggingPlugin::overMineFmt = this->config.get("OverMineFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " is " IRCCOLOR "04over-mining" IRCCOLOR ": " IRCBOLD IRCCOLOR "12%.*s" IRCBOLD, RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " is " IRCCOLOR "04over-mining" IRCCOLOR ": " IRCBOLD IRCCOLOR "12%.*s" IRCBOLD, RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::disarmFmt = this->config.get("DisarmFormat"_jrs, RenX_LoggingPlugin::disarmFmt = this->config.get("DisarmFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " disarmed %.*s" IRCBOLD IRCCOLOR "'s " IRCCOLOR "12%.*s" IRCBOLD, RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimNameTag.size(), RenX::tags->victimNameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " disarmed %.*s" IRCBOLD IRCCOLOR "'s " IRCCOLOR "12%.*s" IRCBOLD, RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimNameTag.size(),
RenX::tags->victimNameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::mineDisarmFmt = this->config.get("MineDisarmFormat"_jrs, RenX_LoggingPlugin::mineDisarmFmt = this->config.get("MineDisarmFormat"_jrs,
RenX_LoggingPlugin::disarmFmt); RenX_LoggingPlugin::disarmFmt);
RenX_LoggingPlugin::disarmNoOwnerFmt = this->config.get("DisarmNoOwnerFormat"_jrs, RenX_LoggingPlugin::disarmNoOwnerFmt = this->config.get("DisarmNoOwnerFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCBOLD " disarmed a " IRCBOLD "%.*s" IRCBOLD, RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCBOLD " disarmed a " IRCBOLD "%.*s" IRCBOLD, RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::mineDisarmNoOwnerFmt = this->config.get("MineDisarmNoOwnerFormat"_jrs, RenX_LoggingPlugin::mineDisarmNoOwnerFmt = this->config.get("MineDisarmNoOwnerFormat"_jrs,
RenX_LoggingPlugin::disarmNoOwnerFmt); RenX_LoggingPlugin::disarmNoOwnerFmt);
RenX_LoggingPlugin::explodeFmt = this->config.get("ExplodeFormat"_jrs, RenX_LoggingPlugin::explodeFmt = this->config.get("ExplodeFormat"_jrs,
Jupiter::StringS::Format("%.*s" IRCCOLOR " detonated a " IRCCOLOR "07%.*s" IRCCOLOR ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); Jupiter::StringS::Format("%.*s" IRCCOLOR " detonated a " IRCCOLOR "07%.*s" IRCCOLOR ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::explodeNoOwnerFmt = this->config.get("ExplodeNoOwnerFormat"_jrs, RenX_LoggingPlugin::explodeNoOwnerFmt = this->config.get("ExplodeNoOwnerFormat"_jrs,
Jupiter::StringS::Format("A " IRCCOLOR "07%.*s" IRCCOLOR " detonated.", RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); Jupiter::StringS::Format("A " IRCCOLOR "07%.*s" IRCCOLOR " detonated.", RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::suicideFmt = this->config.get("SuicideFormat"_jrs, RenX_LoggingPlugin::suicideFmt = this->config.get("SuicideFormat"_jrs,
Jupiter::StringS::Format("%.*s" IRCCOLOR " suicided (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); Jupiter::StringS::Format("%.*s" IRCCOLOR " suicided (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::killFmt = this->config.get("KillFormat"_jrs, RenX_LoggingPlugin::killFmt = this->config.get("KillFormat"_jrs,
Jupiter::StringS::Format("%.*s" IRCCOLOR " killed %.*s" IRCCOLOR " (" IRCCOLOR "%.*s%.*s/%.*s" IRCCOLOR " vs " IRCCOLOR "%.*s%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimNameTag.size(), RenX::tags->victimNameTag.ptr(), RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->characterTag.size(), RenX::tags->characterTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->victimCharacterTag.size(), RenX::tags->victimCharacterTag.ptr())); Jupiter::StringS::Format("%.*s" IRCCOLOR " killed %.*s" IRCCOLOR " (" IRCCOLOR "%.*s%.*s/%.*s" IRCCOLOR " vs " IRCCOLOR "%.*s%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimNameTag.size(),
RenX::tags->victimNameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->characterTag.size(),
RenX::tags->characterTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->victimCharacterTag.size(),
RenX::tags->victimCharacterTag.data()));
RenX_LoggingPlugin::killFmt2 = this->config.get("KillFormat2"_jrs, RenX_LoggingPlugin::killFmt2 = this->config.get("KillFormat2"_jrs,
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())); Jupiter::StringS::Format(IRCCOLOR "%.*s%.*s" IRCCOLOR " killed %.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimNameTag.size(),
RenX::tags->victimNameTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::dieFmt = this->config.get("DieFormat"_jrs, RenX_LoggingPlugin::dieFmt = this->config.get("DieFormat"_jrs,
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())); Jupiter::StringS::Format("%.*s" IRCCOLOR " died (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::dieFmt2 = this->config.get("DieFormat2"_jrs, RenX_LoggingPlugin::dieFmt2 = this->config.get("DieFormat2"_jrs,
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())); Jupiter::StringS::Format(IRCCOLOR "%.*s%.*s" IRCCOLOR " died (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::destroyBuildingFmt = this->config.get("DestroyBuildingFormat"_jrs, RenX_LoggingPlugin::destroyBuildingFmt = this->config.get("DestroyBuildingFormat"_jrs,
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())); Jupiter::StringS::Format("%.*s" IRCCOLOR " destroyed the " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::destroyBuildingFmt2 = this->config.get("DestroyBuildingFormat2"_jrs, RenX_LoggingPlugin::destroyBuildingFmt2 = this->config.get("DestroyBuildingFormat2"_jrs,
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())); Jupiter::StringS::Format(IRCCOLOR "%.*s%.*s" IRCCOLOR " destroyed the " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::destroyDefenceFmt = this->config.get("DestroyDefenceFormat"_jrs, RenX_LoggingPlugin::destroyDefenceFmt = this->config.get("DestroyDefenceFormat"_jrs,
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())); Jupiter::StringS::Format("%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::destroyDefenceFmt2 = this->config.get("DestroyDefenceFormat2"_jrs, RenX_LoggingPlugin::destroyDefenceFmt2 = this->config.get("DestroyDefenceFormat2"_jrs,
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())); Jupiter::StringS::Format(IRCCOLOR "%.*s%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::destroyVehicleFmt = this->config.get("DestroyVehicleFormat"_jrs, RenX_LoggingPlugin::destroyVehicleFmt = this->config.get("DestroyVehicleFormat"_jrs,
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())); Jupiter::StringS::Format("%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::destroyVehicleFmt2 = this->config.get("DestroyVehicleFormat2"_jrs, RenX_LoggingPlugin::destroyVehicleFmt2 = this->config.get("DestroyVehicleFormat2"_jrs,
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())); Jupiter::StringS::Format(IRCCOLOR "%.*s%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::captureFmt = this->config.get("CaptureFormat"_jrs, RenX_LoggingPlugin::captureFmt = this->config.get("CaptureFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " captured the " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " captured the " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::neutralizeFmt = this->config.get("NeutralizeFormat"_jrs, RenX_LoggingPlugin::neutralizeFmt = this->config.get("NeutralizeFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " neutralized the " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " neutralized the " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::characterPurchaseFmt = this->config.get("CharacterPurchaseFormat"_jrs, RenX_LoggingPlugin::characterPurchaseFmt = this->config.get("CharacterPurchaseFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->victimCharacterTag.size(), RenX::tags->victimCharacterTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->victimCharacterTag.size(),
RenX::tags->victimCharacterTag.data()));
RenX_LoggingPlugin::itemPurchaseFmt = this->config.get("ItemPurchaseFormat"_jrs, RenX_LoggingPlugin::itemPurchaseFmt = this->config.get("ItemPurchaseFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::weaponPurchaseFmt = this->config.get("WeaponPurchaseFormat"_jrs, RenX_LoggingPlugin::weaponPurchaseFmt = this->config.get("WeaponPurchaseFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::refillPurchaseFmt = this->config.get("RefillPurchaseFormat"_jrs, RenX_LoggingPlugin::refillPurchaseFmt = this->config.get("RefillPurchaseFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*srefill" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*srefill" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data()));
RenX_LoggingPlugin::vehiclePurchaseFmt = this->config.get("VehiclePurchaseFormat"_jrs, RenX_LoggingPlugin::vehiclePurchaseFmt = this->config.get("VehiclePurchaseFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->victimVehicleTag.size(), RenX::tags->victimVehicleTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->victimVehicleTag.size(),
RenX::tags->victimVehicleTag.data()));
RenX_LoggingPlugin::vehicleSpawnFmt = this->config.get("VehicleSpawnFormat"_jrs, RenX_LoggingPlugin::vehicleSpawnFmt = this->config.get("VehicleSpawnFormat"_jrs,
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())); Jupiter::StringS::Format("A " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD " has spawned.", RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->vehicleTag.size(),
RenX::tags->vehicleTag.data()));
RenX_LoggingPlugin::spawnFmt = this->config.get("SpawnFormat"_jrs, RenX_LoggingPlugin::spawnFmt = this->config.get("SpawnFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " spawned as a " 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())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " spawned as a " IRCCOLOR "%.*s%.*s.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->victimCharacterTag.size(),
RenX::tags->victimCharacterTag.data()));
RenX_LoggingPlugin::botJoinFmt = this->config.get("BotJoinFormat"_jrs, RenX_LoggingPlugin::botJoinFmt = this->config.get("BotJoinFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " online.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " online.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::vehicleCrateFmt = this->config.get("VehicleCrateFormat"_jrs, RenX_LoggingPlugin::vehicleCrateFmt = this->config.get("VehicleCrateFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "12%.*s" IRCCOLOR " vehicle crate.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "12%.*s" IRCCOLOR " vehicle crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::TSVehicleCrateFmt = this->config.get("TSVehicleCrateFormat"_jrs, RenX_LoggingPlugin::TSVehicleCrateFmt = this->config.get("TSVehicleCrateFormat"_jrs,
RenX_LoggingPlugin::vehicleCrateFmt); RenX_LoggingPlugin::vehicleCrateFmt);
@ -282,138 +405,231 @@ bool RenX_LoggingPlugin::initialize()
RenX_LoggingPlugin::vehicleCrateFmt); RenX_LoggingPlugin::vehicleCrateFmt);
RenX_LoggingPlugin::deathCrateFmt = this->config.get("DeathCrateFormat"_jrs, RenX_LoggingPlugin::deathCrateFmt = this->config.get("DeathCrateFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "12death" IRCCOLOR " crate.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "12death" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::moneyCrateFmt = this->config.get("MoneyCrateFormat"_jrs, RenX_LoggingPlugin::moneyCrateFmt = this->config.get("MoneyCrateFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up " IRCCOLOR "09%.*s credits" IRCCOLOR " from a " IRCCOLOR "12money" IRCCOLOR " crate.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up " IRCCOLOR "09%.*s credits" IRCCOLOR " from a " IRCCOLOR "12money" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::characterCrateFmt = this->config.get("CharacterCrateFormat"_jrs, RenX_LoggingPlugin::characterCrateFmt = this->config.get("CharacterCrateFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "%.*s%.*s" IRCCOLOR " " IRCCOLOR "12character" IRCCOLOR " crate.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr(), RenX::tags->victimCharacterTag.size(), RenX::tags->victimCharacterTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "%.*s%.*s" IRCCOLOR " " IRCCOLOR "12character" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->victimCharacterTag.size(),
RenX::tags->victimCharacterTag.data()));
RenX_LoggingPlugin::spyCrateFmt = this->config.get("SpyCrateFormat"_jrs, RenX_LoggingPlugin::spyCrateFmt = this->config.get("SpyCrateFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "%.*s%.*s" IRCCOLOR " " IRCCOLOR "12spy" IRCCOLOR " crate.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->victimCharacterTag.size(), RenX::tags->victimCharacterTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "%.*s%.*s" IRCCOLOR " " IRCCOLOR "12spy" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->victimCharacterTag.size(),
RenX::tags->victimCharacterTag.data()));
RenX_LoggingPlugin::refillCrateFmt = this->config.get("RefillCrateFormat"_jrs, RenX_LoggingPlugin::refillCrateFmt = this->config.get("RefillCrateFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "%.*srefill" IRCCOLOR " crate.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->teamColorTag.size(), RenX::tags->teamColorTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "%.*srefill" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data()));
RenX_LoggingPlugin::timeBombCrateFmt = this->config.get("TimeBombCrateFormat"_jrs, RenX_LoggingPlugin::timeBombCrateFmt = this->config.get("TimeBombCrateFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "11time-bomb" IRCCOLOR " crate.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "11time-bomb" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::speedCrateFmt = this->config.get("SpeedCrateFormat"_jrs, RenX_LoggingPlugin::speedCrateFmt = this->config.get("SpeedCrateFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "11speed" IRCCOLOR " crate.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "11speed" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::nukeCrateFmt = this->config.get("NukeCrateFormat"_jrs, RenX_LoggingPlugin::nukeCrateFmt = this->config.get("NukeCrateFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "04nuke" IRCCOLOR " crate.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "04nuke" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::abductionCrateFmt = this->config.get("AbductionCrateFormat"_jrs, RenX_LoggingPlugin::abductionCrateFmt = this->config.get("AbductionCrateFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " has been " IRCBOLD IRCCOLOR "06abducted" IRCCOLOR IRCBOLD " by the " IRCBOLD IRCCOLOR "06Scrin" IRCCOLOR IRCBOLD "!", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " has been " IRCBOLD IRCCOLOR "06abducted" IRCCOLOR IRCBOLD " by the " IRCBOLD IRCCOLOR "06Scrin" IRCCOLOR IRCBOLD "!", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::unspecifiedCrateFmt = this->config.get("UnspecifiedCrateFormat"_jrs, RenX_LoggingPlugin::unspecifiedCrateFmt = this->config.get("UnspecifiedCrateFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up an " IRCCOLOR "13unspecified" IRCCOLOR " crate.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up an " IRCCOLOR "13unspecified" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::otherCrateFmt = this->config.get("OtherCrateFormat"_jrs, RenX_LoggingPlugin::otherCrateFmt = this->config.get("OtherCrateFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "13%.*s" IRCCOLOR " crate.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "13%.*s" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::stealFmt = this->config.get("StealFormat"_jrs, RenX_LoggingPlugin::stealFmt = this->config.get("StealFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " stole " IRCBOLD "%.*s" IRCBOLD "'s " IRCBOLD "%.*s" IRCBOLD "!", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimNameTag.size(), RenX::tags->victimNameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " stole " IRCBOLD "%.*s" IRCBOLD "'s " IRCBOLD "%.*s" IRCBOLD "!", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimNameTag.size(),
RenX::tags->victimNameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::stealNoOwnerFmt = this->config.get("StealNoOwnerFormat"_jrs, RenX_LoggingPlugin::stealNoOwnerFmt = this->config.get("StealNoOwnerFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " stole a " IRCBOLD IRCCOLOR "12%.*s" IRCBOLD "!", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " stole a " IRCBOLD IRCCOLOR "12%.*s" IRCBOLD "!", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::donateFmt = this->config.get("DonateFormat"_jrs, RenX_LoggingPlugin::donateFmt = this->config.get("DonateFormat"_jrs,
Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " donated " IRCCOLOR "09%.*s credits" IRCCOLOR " to " IRCBOLD "%.*s" IRCBOLD ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr(), RenX::tags->victimNameTag.size(), RenX::tags->victimNameTag.ptr())); Jupiter::StringS::Format(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " donated " IRCCOLOR "09%.*s credits" IRCCOLOR " to " IRCBOLD "%.*s" IRCBOLD ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->victimNameTag.size(),
RenX::tags->victimNameTag.data()));
RenX_LoggingPlugin::gameOverFmt = this->config.get("GameOverFormat"_jrs, RenX_LoggingPlugin::gameOverFmt = this->config.get("GameOverFormat"_jrs,
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())); Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR "%.*s The " IRCBOLD "%.*s" IRCBOLD " won by " IRCBOLD "%.*s" IRCBOLD, RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->teamLongTag.size(),
RenX::tags->teamLongTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::gameOverTieFmt = this->config.get("GameOverTieNoWinFormat"_jrs, RenX_LoggingPlugin::gameOverTieFmt = this->config.get("GameOverTieNoWinFormat"_jrs,
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())); 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.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->teamLongTag.size(),
RenX::tags->teamLongTag.data()));
RenX_LoggingPlugin::gameOverTieNoWinFmt = this->config.get("GameOverTieFormat"_jrs, RenX_LoggingPlugin::gameOverTieNoWinFmt = this->config.get("GameOverTieFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR "10 The battle ended in a " IRCBOLD "%.*s" IRCBOLD, RenX::tags->messageTag.size(), RenX::tags->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.data()));
RenX_LoggingPlugin::gameOverScoreFmt = this->config.get("GameOverScoreFormat"_jrs, RenX_LoggingPlugin::gameOverScoreFmt = this->config.get("GameOverScoreFormat"_jrs,
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())); Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR "%.*s %.*s" IRCCOLOR ": %.*s | " IRCCOLOR "%.*s%.*s" IRCCOLOR ": %.*s", RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->teamLongTag.size(),
RenX::tags->teamLongTag.data(), RenX::tags->winScoreTag.size(),
RenX::tags->winScoreTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->victimTeamLongTag.size(),
RenX::tags->victimTeamLongTag.data(), RenX::tags->loseScoreTag.size(),
RenX::tags->loseScoreTag.data()));
RenX_LoggingPlugin::gameFmt = this->config.get("GameFormat"_jrs, RenX_LoggingPlugin::gameFmt = this->config.get("GameFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "03[Game]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::executeFmt = this->config.get("ExecuteFormat"_jrs, RenX_LoggingPlugin::executeFmt = this->config.get("ExecuteFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "07%.*s executed: %.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "07%.*s executed: %.*s", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::devBotExecuteFmt = this->config.get("DevBotExecuteFormat"_jrs, ""_jss); RenX_LoggingPlugin::devBotExecuteFmt = this->config.get("DevBotExecuteFormat"_jrs, ""_jss);
RenX_LoggingPlugin::subscribeFmt = this->config.get("SubscribeFormat"_jrs, RenX_LoggingPlugin::subscribeFmt = this->config.get("SubscribeFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "03%.*s subscribed to the RCON data stream.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "03%.*s subscribed to the RCON data stream.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::rconFmt = this->config.get("RCONFormat"_jrs, RenX_LoggingPlugin::rconFmt = this->config.get("RCONFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "05[RCON]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "05[RCON]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::adminLoginFmt = this->config.get("AdminLoginFormat"_jrs, RenX_LoggingPlugin::adminLoginFmt = this->config.get("AdminLoginFormat"_jrs,
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())); 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.data(), RenX::tags->adminTag.size(),
RenX::tags->adminTag.data()));
RenX_LoggingPlugin::adminGrantFmt = this->config.get("AdminGrantFormat"_jrs, RenX_LoggingPlugin::adminGrantFmt = this->config.get("AdminGrantFormat"_jrs,
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())); 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.data(), RenX::tags->adminTag.size(),
RenX::tags->adminTag.data()));
RenX_LoggingPlugin::adminLogoutFmt = this->config.get("AdminLogoutFormat"_jrs, RenX_LoggingPlugin::adminLogoutFmt = this->config.get("AdminLogoutFormat"_jrs,
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())); 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.data(), RenX::tags->adminTag.size(),
RenX::tags->adminTag.data()));
RenX_LoggingPlugin::adminFmt = this->config.get("AdminFormat"_jrs, RenX_LoggingPlugin::adminFmt = this->config.get("AdminFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "07[Admin]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "07[Admin]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::voteAddBotsFmt = this->config.get("VoteAddBotsFormat"_jrs, RenX_LoggingPlugin::voteAddBotsFmt = this->config.get("VoteAddBotsFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called for adding " IRCCOLOR "12%.*s" IRCCOLOR " bots to %.*s, with skill level " IRCCOLOR "07%.*s" IRCCOLOR ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr(), RenX::tags->victimTeamShortTag.size(), RenX::tags->victimTeamShortTag.ptr(), RenX::tags->weaponTag.size(), RenX::tags->weaponTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called for adding " IRCCOLOR "12%.*s" IRCCOLOR " bots to %.*s, with skill level " IRCCOLOR "07%.*s" IRCCOLOR ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->victimTeamShortTag.size(),
RenX::tags->victimTeamShortTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::voteChangeMapFmt = this->config.get("VoteChangeMapFormat"_jrs, RenX_LoggingPlugin::voteChangeMapFmt = this->config.get("VoteChangeMapFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called for a Map Change.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called for a Map Change.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::voteKickFmt = this->config.get("VoteKickFormat"_jrs, RenX_LoggingPlugin::voteKickFmt = this->config.get("VoteKickFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called for a kick against %.*s" IRCNORMAL ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimNameTag.size(), RenX::tags->victimNameTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called for a kick against %.*s" IRCNORMAL ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimNameTag.size(),
RenX::tags->victimNameTag.data()));
RenX_LoggingPlugin::voteMineBanFmt = this->config.get("VoteMineBanFormat"_jrs, RenX_LoggingPlugin::voteMineBanFmt = this->config.get("VoteMineBanFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] " IRCBOLD "%.*s" IRCBOLD " has called for a Mine Ban against %.*s" IRCNORMAL ".", RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] " IRCBOLD "%.*s" IRCBOLD " has called for a Mine Ban against %.*s" IRCNORMAL ".", RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::voteRemoveBotsFmt = this->config.get("VoteRemoveBotsFormat"_jrs, RenX_LoggingPlugin::voteRemoveBotsFmt = this->config.get("VoteRemoveBotsFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called a vote to remove " IRCCOLOR "12%.*s" IRCCOLOR " bots from " IRCCOLOR "%.*s%.*s" IRCNORMAL ".", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->victimTeamShortTag.size(), RenX::tags->victimTeamShortTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called a vote to remove " IRCCOLOR "12%.*s" IRCCOLOR " bots from " IRCCOLOR "%.*s%.*s" IRCNORMAL ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->victimTeamShortTag.size(),
RenX::tags->victimTeamShortTag.data()));
RenX_LoggingPlugin::voteRestartMapFmt = this->config.get("VoteRestartMapFormat"_jrs, RenX_LoggingPlugin::voteRestartMapFmt = this->config.get("VoteRestartMapFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called for a Map Restart.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called for a Map Restart.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::voteSurrenderFmt = this->config.get("VoteSurrenderFormat"_jrs, RenX_LoggingPlugin::voteSurrenderFmt = this->config.get("VoteSurrenderFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] " IRCBOLD "%.*s" IRCBOLD " has called for a Surrender.", RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] " IRCBOLD "%.*s" IRCBOLD " has called for a Surrender.", RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::voteSurveyFmt = this->config.get("VoteSurveyFormat"_jrs, RenX_LoggingPlugin::voteSurveyFmt = this->config.get("VoteSurveyFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR "%.*s has started a Survey: " IRCCOLOR "12%.*s", RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR "%.*s has started a Survey: " IRCCOLOR "12%.*s", RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::voteOtherFmt = this->config.get("VoteOtherFormat"_jrs, RenX_LoggingPlugin::voteOtherFmt = this->config.get("VoteOtherFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR "%.*s has called a \"%.*s\" vote.", RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.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())); Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR "%.*s has called a \"%.*s\" vote.", RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::voteOverSuccessFmt = this->config.get("VoteOverSuccessFormat"_jrs, RenX_LoggingPlugin::voteOverSuccessFmt = this->config.get("VoteOverSuccessFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] A vote for \"%.*s\" " IRCBOLD IRCCOLOR "09passed" IRCBOLD IRCCOLOR "%.*s (Votes Yes: %.*s | Votes No: %.*s).", RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->winScoreTag.size(), RenX::tags->winScoreTag.ptr(), RenX::tags->loseScoreTag.size(), RenX::tags->loseScoreTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] A vote for \"%.*s\" " IRCBOLD IRCCOLOR "09passed" IRCBOLD IRCCOLOR "%.*s (Votes Yes: %.*s | Votes No: %.*s).", RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->winScoreTag.size(),
RenX::tags->winScoreTag.data(), RenX::tags->loseScoreTag.size(),
RenX::tags->loseScoreTag.data()));
RenX_LoggingPlugin::voteOverFailFmt = this->config.get("VoteOverFailFormat"_jrs, RenX_LoggingPlugin::voteOverFailFmt = this->config.get("VoteOverFailFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] A vote for \"%.*s\" " IRCBOLD IRCCOLOR "04failed" IRCBOLD IRCCOLOR "%.*s (Votes Yes: %.*s | Votes No: %.*s).", RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr(), RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->winScoreTag.size(), RenX::tags->winScoreTag.ptr(), RenX::tags->loseScoreTag.size(), RenX::tags->loseScoreTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] A vote for \"%.*s\" " IRCBOLD IRCCOLOR "04failed" IRCBOLD IRCCOLOR "%.*s (Votes Yes: %.*s | Votes No: %.*s).", RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->winScoreTag.size(),
RenX::tags->winScoreTag.data(), RenX::tags->loseScoreTag.size(),
RenX::tags->loseScoreTag.data()));
RenX_LoggingPlugin::voteCancelFmt = this->config.get("VoteCancelFormat"_jrs, RenX_LoggingPlugin::voteCancelFmt = this->config.get("VoteCancelFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] A vote for \"%.*s\" was " IRCBOLD IRCCOLOR "07cancelled" IRCCOLOR IRCBOLD ".", RenX::tags->victimTeamColorTag.size(), RenX::tags->victimTeamColorTag.ptr(), RenX::tags->objectTag.size(), RenX::tags->objectTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "%.*s[Vote] A vote for \"%.*s\" was " IRCBOLD IRCCOLOR "07cancelled" IRCCOLOR IRCBOLD ".", RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data()));
RenX_LoggingPlugin::voteFmt = this->config.get("VoteFormat"_jrs, RenX_LoggingPlugin::voteFmt = this->config.get("VoteFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "06[Vote]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "06[Vote]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::mapChangeFmt = this->config.get("MapChangeFormat"_jrs, RenX_LoggingPlugin::mapChangeFmt = this->config.get("MapChangeFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "03Loading %.*s...", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "03Loading %.*s...", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::mapLoadFmt = this->config.get("MapLoadFormat"_jrs, RenX_LoggingPlugin::mapLoadFmt = this->config.get("MapLoadFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "03%.*s loaded.", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "03%.*s loaded.", RenX::tags->messageTag.size(), RenX::tags->messageTag.data()));
RenX_LoggingPlugin::mapStartFmt = this->config.get("MapStartFormat"_jrs, RenX_LoggingPlugin::mapStartFmt = this->config.get("MapStartFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "03%.*s started.", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "03%.*s started.", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::mapFmt = this->config.get("MapFormat"_jrs, RenX_LoggingPlugin::mapFmt = this->config.get("MapFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "06[Map]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "06[Map]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::demoRecordFmt = this->config.get("DemoRecordFormat"_jrs, RenX_LoggingPlugin::demoRecordFmt = this->config.get("DemoRecordFormat"_jrs,
Jupiter::StringS::Format("%.*s has started a demo recording.", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr())); Jupiter::StringS::Format("%.*s has started a demo recording.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data()));
RenX_LoggingPlugin::rconDemoRecordFmt = this->config.get("RCONDemoRecordFormat"_jrs, RenX_LoggingPlugin::rconDemoRecordFmt = this->config.get("RCONDemoRecordFormat"_jrs,
IRCCOLOR "07A demo recording has started."_jrs); IRCCOLOR "07A demo recording has started."_jrs);
@ -422,25 +638,31 @@ bool RenX_LoggingPlugin::initialize()
IRCCOLOR "07The demo recording has stopped."_jrs); IRCCOLOR "07The demo recording has stopped."_jrs);
RenX_LoggingPlugin::demoFmt = this->config.get("DemoFormat"_jrs, RenX_LoggingPlugin::demoFmt = this->config.get("DemoFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "06[Demo]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "06[Demo]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::logFmt = this->config.get("LogFormat"_jrs, RenX_LoggingPlugin::logFmt = this->config.get("LogFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "07[Log]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "07[Log]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::commandFmt = this->config.get("CommandFormat"_jrs, RenX_LoggingPlugin::commandFmt = this->config.get("CommandFormat"_jrs,
Jupiter::StringS::Format("")); // Disabled by default. Jupiter::StringS::Format("")); // Disabled by default.
RenX_LoggingPlugin::errorFmt = this->config.get("ErrorFormat"_jrs, RenX_LoggingPlugin::errorFmt = this->config.get("ErrorFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "04[Error]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "04[Error]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
RenX_LoggingPlugin::versionFmt = this->config.get("VersionFormat"_jrs, RenX_LoggingPlugin::versionFmt = this->config.get("VersionFormat"_jrs,
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())); 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.data(), RenX::tags->gameVersionTag.size(),
RenX::tags->gameVersionTag.data()));
RenX_LoggingPlugin::authorizedFmt = this->config.get("AuthorizedFormat"_jrs, RenX_LoggingPlugin::authorizedFmt = this->config.get("AuthorizedFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "03RCON authorization completed.")); Jupiter::StringS::Format(IRCCOLOR "03RCON authorization completed."));
RenX_LoggingPlugin::otherFmt = this->config.get("OtherFormat"_jrs, RenX_LoggingPlugin::otherFmt = this->config.get("OtherFormat"_jrs,
Jupiter::StringS::Format(IRCCOLOR "06[Other]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); Jupiter::StringS::Format(IRCCOLOR "06[Other]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data()));
/** Sanitize tags */ /** Sanitize tags */
RenX::sanitizeTags(playerRDNSFmt); RenX::sanitizeTags(playerRDNSFmt);

3
src/Plugins/RenX/RenX.ModSystem/RenX_ModSystem.cpp

@ -198,7 +198,8 @@ int RenX_ModSystemPlugin::auth(RenX::Server &server, const RenX::PlayerInfo &pla
} }
} }
Jupiter::String playerName = RenX::getFormattedPlayerName(player); Jupiter::String playerName = RenX::getFormattedPlayerName(player);
server.sendLogChan(IRCCOLOR "03[Authentication] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " is now authenticated with access level %d; group: %.*s.", playerName.size(), playerName.ptr(), player.access, group->name.size(), group->name.data()); server.sendLogChan(IRCCOLOR "03[Authentication] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " is now authenticated with access level %d; group: %.*s.", playerName.size(),
playerName.data(), player.access, group->name.size(), group->name.data());
return player.access; return player.access;
}; };

20
src/Plugins/RenX/RenX.ServerList/RenX_ServerList.cpp

@ -204,12 +204,12 @@ Jupiter::StringS RenX_ServerListPlugin::server_as_json(const RenX::Server &serve
// Build block // Build block
server_json_block.format(R"json({"Name":"%.*s",%.*s"Current Map":"%.*s","Bots":%u,"Players":%u,"Game Version":"%.*s",%.*s"Variables":{"Mine Limit":%d,"bSteamRequired":%s,"bPrivateMessageTeamOnly":%s,"bPassworded":%s,"bAllowPrivateMessaging":%s,"bRanked":%s,"Game Type":%d,"Player Limit":%d,"Vehicle Limit":%d,"bAutoBalanceTeams":%s,"Team Mode":%d,"bSpawnCrates":%s,"CrateRespawnAfterPickup":%f,"Time Limit":%d},"Port":%u,"IP":"%.*s")json", server_json_block.format(R"json({"Name":"%.*s",%.*s"Current Map":"%.*s","Bots":%u,"Players":%u,"Game Version":"%.*s",%.*s"Variables":{"Mine Limit":%d,"bSteamRequired":%s,"bPrivateMessageTeamOnly":%s,"bPassworded":%s,"bAllowPrivateMessaging":%s,"bRanked":%s,"Game Type":%d,"Player Limit":%d,"Vehicle Limit":%d,"bAutoBalanceTeams":%s,"Team Mode":%d,"bSpawnCrates":%s,"CrateRespawnAfterPickup":%f,"Time Limit":%d},"Port":%u,"IP":"%.*s")json",
server_name.size(), server_name.ptr(), server_name.size(), server_name.data(),
server_prefix.size(), server_prefix.ptr(), server_prefix.size(), server_prefix.data(),
server_map.size(), server_map.ptr(), server_map.size(), server_map.data(),
server.getBotCount(), server.getBotCount(),
getListedPlayerCount(server), getListedPlayerCount(server),
server_version.size(), server_version.ptr(), server_version.size(), server_version.data(),
server_attributes.size(), server_attributes.data(), server_attributes.size(), server_attributes.data(),
server.getMineLimit(), server.getMineLimit(),
json_bool_as_cstring(server.isSteamRequired()), json_bool_as_cstring(server.isSteamRequired()),
@ -226,7 +226,7 @@ Jupiter::StringS RenX_ServerListPlugin::server_as_json(const RenX::Server &serve
server.getCrateRespawnDelay(), server.getCrateRespawnDelay(),
server.getTimeLimit(), server.getTimeLimit(),
server_port, server_port,
server_hostname.size(), server_hostname.ptr()); server_hostname.size(), server_hostname.data());
server_json_block += '}'; server_json_block += '}';
@ -369,12 +369,12 @@ Jupiter::StringS RenX_ServerListPlugin::server_as_long_json(const RenX::Server &
}, },
"Port": %u, "Port": %u,
"IP": "%.*s")json", "IP": "%.*s")json",
server_name.size(), server_name.ptr(), server_name.size(), server_name.data(),
server_prefix.size(), server_prefix.ptr(), server_prefix.size(), server_prefix.data(),
server_map.size(), server_map.ptr(), server_map.size(), server_map.data(),
server.getBotCount(), server.getBotCount(),
activePlayers.size(), activePlayers.size(),
server_version.size(), server_version.ptr(), server_version.size(), server_version.data(),
server_attributes.size(), server_attributes.data(), server_attributes.size(), server_attributes.data(),
server.getMineLimit(), server.getMineLimit(),
@ -391,7 +391,7 @@ Jupiter::StringS RenX_ServerListPlugin::server_as_long_json(const RenX::Server &
server.getTimeLimit(), server.getTimeLimit(),
server_port, server_port,
server_hostname.size(), server_hostname.ptr()); server_hostname.size(), server_hostname.data());
// Level Rotation // Level Rotation
if (server.maps.size() != 0) { if (server.maps.size() != 0) {

3
src/Plugins/RenX/RenX.SetJoin/RenX_SetJoin.cpp

@ -128,7 +128,8 @@ void SetJoinGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player,
if (!parameters.empty()) { if (!parameters.empty()) {
pluginInstance.setjoin_file.set(player->uuid, static_cast<std::string>(parameters)); pluginInstance.setjoin_file.set(player->uuid, static_cast<std::string>(parameters));
pluginInstance.setjoin_file.write(); pluginInstance.setjoin_file.write();
source->sendMessage(*player, Jupiter::StringS::Format("%.*s, your join message is now: %.*s", player->name.size(), player->name.data(), parameters.size(), parameters.ptr())); source->sendMessage(*player, Jupiter::StringS::Format("%.*s, your join message is now: %.*s", player->name.size(), player->name.data(), parameters.size(),
parameters.data()));
} }
else DelJoinGameCommand_instance.trigger(source, player, parameters); else DelJoinGameCommand_instance.trigger(source, player, parameters);
} }

6
src/Plugins/RenX/RenX.Warn/RenX_Warn.cpp

@ -89,7 +89,8 @@ void WarnIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &cha
} }
else { else {
player->varData[pluginInstance.getName()].set(WARNS_KEY, std::to_string(warns)); player->varData[pluginInstance.getName()].set(WARNS_KEY, std::to_string(warns));
server->sendWarnMessage(*player, Jupiter::StringS::Format("You have been warned by %.*s@IRC for: %.*s. You have %d warnings.", nick.size(), nick.ptr(), reason.size(), reason.data(), warns)); server->sendWarnMessage(*player, Jupiter::StringS::Format("You have been warned by %.*s@IRC for: %.*s. You have %d warnings.", nick.size(),
nick.data(), reason.size(), reason.data(), warns));
source->sendNotice(nick, Jupiter::StringS::Format("%.*s has been warned; they now have %d warnings.", player->name.size(), player->name.data(), warns)); source->sendNotice(nick, Jupiter::StringS::Format("%.*s has been warned; they now have %d warnings.", player->name.size(), player->name.data(), warns));
} }
} }
@ -137,7 +138,8 @@ void PardonIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &c
player = server->getPlayerByPartName(parameters); player = server->getPlayerByPartName(parameters);
if (player != nullptr) { if (player != nullptr) {
player->varData[pluginInstance.getName()].remove(WARNS_KEY); player->varData[pluginInstance.getName()].remove(WARNS_KEY);
server->sendMessage(*player, Jupiter::StringS::Format("You have been pardoned by %.*s@IRC; your warnings have been reset.", nick.size(), nick.ptr())); server->sendMessage(*player, Jupiter::StringS::Format("You have been pardoned by %.*s@IRC; your warnings have been reset.", nick.size(),
nick.data()));
source->sendNotice(nick, Jupiter::StringS::Format("%.*s has been pardoned; their warnings have been reset.", player->name.size(), player->name.data())); source->sendNotice(nick, Jupiter::StringS::Format("%.*s has been pardoned; their warnings have been reset.", player->name.size(), player->name.data()));
} }
} }

6
src/Plugins/SetJoin/SetJoin.cpp

@ -74,9 +74,11 @@ void ViewJoinIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString
std::string_view setjoin = pluginInstance.setjoin_file[source->getConfigSection()].get(target); std::string_view setjoin = pluginInstance.setjoin_file[source->getConfigSection()].get(target);
if (setjoin.empty()) if (setjoin.empty())
source->sendMessage(channel, Jupiter::StringS::Format("No setjoin has been set for \"%.*s\".", target.size(), target.ptr())); source->sendMessage(channel, Jupiter::StringS::Format("No setjoin has been set for \"%.*s\".", target.size(),
target.data()));
else else
source->sendMessage(channel, Jupiter::StringS::Format(IRCBOLD IRCCOLOR "07[%.*s]" IRCCOLOR IRCBOLD ": %.*s", target.size(), target.ptr(), setjoin.size(), setjoin.data())); source->sendMessage(channel, Jupiter::StringS::Format(IRCBOLD IRCCOLOR "07[%.*s]" IRCCOLOR IRCBOLD ": %.*s", target.size(),
target.data(), setjoin.size(), setjoin.data()));
} }
const Jupiter::ReadableString &ViewJoinIRCCommand::getHelp(const Jupiter::ReadableString &) const Jupiter::ReadableString &ViewJoinIRCCommand::getHelp(const Jupiter::ReadableString &)

Loading…
Cancel
Save